以单片机为核心,设计一个简单交通灯控制系统,设A车道与B车道交叉组成十字路口,A是主道,B是支道。设计要求如下:
(1) 用发光二极管模拟交通信号灯、两个方向分别设置红、绿、黄3种通行指示灯,用按键开关模拟车辆检测信号。
(2) 正常情况下,A、B两车道轮流放行, A车道放行40秒,其中5秒用于警告,B车道放行25秒,其中5秒用于警告。有计时牌显示路口通行转换剩余时间。
(3) 在交通繁忙时,交通信号灯控制系统应有手控开关,可人为地改变信号灯的状态,以缓解交通拥挤状况。在B车道放行期间,若A车道有车而B车道无车,按下开关K1使A车道放行15秒;在A车道放行期间,若B车道有车而A车道无车,按下开关K2使B车道放行15秒。
(4) 有特种车辆如119、120通过路口时,系统可转为特种车辆放行,其他车辆禁止通行的状态,15s后系统恢复正常管理。
(5) 两个方向放行的时间可以通过键盘设置。
用c语言写 由于本人c语言十分。。。单片机型号AT89C51 所以希望各位大哥帮帮忙啊 是我们的课程设计 跪求程序啊 万分感谢
硬件电路设计
此电中路设计采用AT89C51单片机,74LS47(数码管驱动)74LS373(数码管驱动输出锁存),8个数码管显示其延时值,四个红、黄、绿指示灯。硬件设计关键在于,延时显示时,要考虑到当个位数字显示时,要确保十位数字显示输出的不变。因此,可加输出锁存器。在延时最后三秒时,要让黄灯进行闪烁,并同时显示数字(这一步在软件设计上很关键)。
(1)电路连接图:
三、软件程序(C语言)
以下是整个设计的软件程序,直接可以编译成*。Hex代码。通过以上电路,下载到单片机,可直接运行。
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit RED_A = P0^0;
sbit YELLOW_A = P0^1;
sbit GREEN_A = P0^2;
sbit RED_B = P0^3;
sbit YELLOW_B = P0^4;
sbit GREEN_B = P0^5;
uchar Flash_Count = 0, Operation_Type=1;
void DelayMS(uint x)
{
uchar i;
while (x--) for (i=0;i<120;i++);
}
void Traffic_Light()
{
switch (Operation_Type)
{
case 1:
RED_A=1;YELLOW_A=1;GREEN_A=0;
RED_B=0;YELLOW_B=1;GREEN_B=1;
DelayMS(2000);
Operation_Type=2;
break;
case 2:
DelayMS(300);
YELLOW_A=!YELLOW_A;GREEN_A=1;
if(++Flash_Count!=10) return;
Flash_Count=0;
Operation_Type=3;
break;
case 3:
RED_A=0;YELLOW_A=1;GREEN_A=1;
RED_B=1;YELLOW_B=1;GREEN_B=0;
DelayMS(2000);
Operation_Type=4;
break;
case 4:
DelayMS(300);
YELLOW_B=!YELLOW_B;GREEN_B=1;
if(++Flash_Count!=10) return;
Flash_Count=0;
Operation_Type=1;
break;
}
}
void main()
{
while(1) Traffic_Light();
}