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