基于单片机的交通灯控制系统
一、实验目的
1、了解交通灯的控制方法 2、掌握8051单片机基本操作 3、掌握keil和proteus软件的使用
二、实验原理
通过对十字路口的观察,发现红绿灯的控制原理:首先南北方向右转加直行的绿灯亮起。此时,东西方向为红灯;当右转加直行绿灯倒计时进入最后5秒,绿灯切换为黄灯并开始闪烁,东西方向红灯不变;接着南北方向切换为左转灯,东西方向依然是红灯;同样当倒计时进入最后5秒时,黄灯开始闪烁。东西方向为红灯。然后东西方向的右转加直行绿灯亮起,以此类推。
三、实验内容及程序
主程序:
void main(void)
{
Busy_LED=0; Special_LED=0;
IT0=1; //INT0负跳变触发
TMOD=0x01;//定时器工作于方式1
TH0=(65536-50000)/256;//定时器赋初值 TL0=(65536-50000)%6; EA=1; //CPU开中断总允许 ET0=1;//开定时中断
EX0=1;//开外部INTO中断 TR0=1;//启动定时
while(1)
{ Flag_EW_Yellow=0; //EW关黄灯显示信号 Time_EW=EW; Time_SN=SN; while(Time_SN>=5)
{P1=S[0]; //SN通行,EW红灯 Display();}
P1=0x00;
while(Time_SN>=0)
{Flag_SN_Yellow=1; //SN开黄灯信号位
EW_Red=1; //SN黄灯亮,等待左拐信号,EW红灯
Display(); }
Flag_SN_Yellow=0; //SN关黄灯显示信号 Time_SN=SNL;
while(Time_SN>=5)
{P1=S[2];//SN左拐绿灯亮,EW红灯 Display();}
P1=0x00;
while(Time_SN>=0)
{Flag_SN_Yellow=1; //SN开黄灯信号位
EW_Red=1; //SN黄灯亮,等待停止信号,EW红灯
Display();}
}
程序框图:
/***********赋值**********/ EW=EW1; SN=SN1; EWL=EWL1; SNL=SNL1; Flag_SN_Yellow=0; //SN关黄灯显示信号 Time_EW=SN; Time_SN=EW;
while(Time_EW>=5)
{P1=S[4]; //EW通行,SN红灯 Display();}
P1=0X00;
while(Time_EW>=0)
{Flag_EW_Yellow=1;//EW开黄灯信号位
SN_Red=1;//EW黄灯亮,等待左拐信号,SN红灯 Display();}
Flag_EW_Yellow=0; //EW关黄灯显示信号 Time_EW=EWL;
while(Time_EW>=5)
{P1=S[6];//EW左拐绿灯亮,SN红灯 Display();}
P1=0X00;
while(Time_EW>=0)
{Flag_EW_Yellow=1; //EN开黄灯信号位
SN_Red=1;//EW黄灯亮,等待停止信号,SN红灯 Display();} /***********赋值**********/ EW=EW1; SN=SN1; EWL=EWL1; SNL=SNL1; }
主程序: 开始 开定时器中断T0和外部中断0
对东西,南北数码管赋初值 进入第一个状态:南北方向直行、右转绿灯亮。东西方向红灯亮
进入第二个状态:开启黄灯标志位,南北方向黄灯闪烁。东西方向红灯亮
进入第三个状态:南北方向左转绿灯。东西方向红灯亮
进入第四个状态:开启黄灯标志位,南北方向黄灯闪烁。东西方向红灯亮
再对东西,南北数码管赋初值
进入第五个状态:东西方向直行、右转绿灯亮。南北方向红灯亮
进入第六个状态:开启黄灯标志位,东西方向黄灯闪烁。南北方向红灯亮
进入第七个状态:东西方向左转绿灯。南北方向红灯亮
进入第八个状态:开启黄灯标志位,东西方向黄灯闪烁。南北方向红灯亮
定时器T0:
定时器中断开始 重装初值 Count==10 计时0.5s Y N 黄灯标志位为1 Y 黄灯的值进行反转 N Y Count==20 计时1s 东西,南北方向时间减1 N 黄灯标志位为1 Y 黄灯的值进行反转 N
基于单片机的交通灯控制系统



