at89c51单片机-交通灯控制系统(含源码及仿真图)教案资料 联系客服

发布时间 : 星期六 文章at89c51单片机-交通灯控制系统(含源码及仿真图)教案资料更新完毕开始阅读

LED显示程序 Display 获取当前通行剩余时间送h、l E/S/W/N状态送P0口 位选码送P3口 倒计时个/十位送P1口 调用Delay延时 i++;j++ N 四位显示完? Y 返回主程序

T0中断 定时计数初值 50ms计数(count)加1 判断1S(count=20?)到否 Y count清0 Time_SN--;Time_EW-- 恢复现场 中断返回 N

INT0中断 Busy_Button==0 SN_Add==0 获取中断信息 SN_Red==0 EW_Add==0 EW1+=1 EW_Red==0 EW1-=1 所有路口全红灯 SN1+=1 SN1-=1 Busy_Button==1 SN1>99 Y SN1<20 Y EW1>99 Y EW1<20 Y N SN1=99 N SN1=20 N EW1=99 N EW1=20 恢复现场 中断返回

5.3 P0、P1口显示状态编码表

P0 编码 备注 P0^7 P0^6 P0^5 P0^4 P0^3 P0^2 P0^1 P0^0 1 1 1 1 1 1 1 0 0FEH 红灯 1 0 1 1 1 1 1 1 0BFH 黄灯 1 1 1 1 0 1 1 1 0F7H 绿灯 P1 编码 备注 0 1 2 3 4 5 P1^7 P1^6 P1^5 P1^4 P1^3 P1^2 P1^1 P1^0 1 1 1 1 0 0 0 0 0C0H 1 1 1 1 1 0 0 1 0F9H 1 0 1 0 0 1 0 0 0A4H 1 0 1 1 0 0 0 0 0B0H 1 0 0 1 1 0 0 1 99H 1 0 0 1 0 0 1 0 92H 1 1 1 1 0 1 0 0 0 1 0 0 0 1 0 1 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 82H F8H 80H 90H 6 7 8 9 5.4 程序源代码

#define uchar unsigned char #include

/**************************变量、控制位定义**************************/ uchar code

table[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//0~~9段选码

uchar code

table1[28]={0xF7,0xFE,0xF7,0xFE,0xBF,0xFE,0xBF,0xFE,0xFF,0xFE,0xFF,0xFE,

0xFE,0xF7,0xFE,0xF7,0xFE,0xBF,0xFE,0xBF,0xFE,0xFF,0xFE,0xFF, 0xFE,0xFE,0xFE,0xFE}; /*各种状态下红绿灯段选码, 状态(0-3):EW绿灯,SN红灯; 状态(4-7):EW黄灯亮,SN红灯; 状态(8-11):EW黄灯灭,SN红灯; 状态(12-15):EW红灯,SN绿灯; 状态(16-19):EW红灯,SN黄灯亮; 状态(20-23):EW红灯,SN黄灯灭; 状态(24-27):EWSN全红灯*/

uchar code tab[4]={0x1E,0x2D,0x4E,0x8D};//数码管显示位选码 uchar EW=30,SN=30,EW1=30,SN1=30;//初始化交通灯时间 uchar count;//计时中断次数 uchar i,j;//循环控制变量

sbit Busy_Button=P2^0;//交通意外控制位 sbit SN_Add=P2^1;//SN通行时间加按钮 sbit SN_Red=P2^2;//SN通行时间减按钮 sbit EW_Add=P2^3;//EW通行时间加按钮 sbit EW_Red=P2^4;//EW通行时间减按钮 char Time_EW;//EW方向计时 char Time_SN;//SN方向计时

/**************************延时子程序**************************/ void Delay(uchar a)//循环a次 { uchar x;