基于51单片机交通灯程序完整版.docx
- 文档编号:11678617
- 上传时间:2023-06-02
- 格式:DOCX
- 页数:13
- 大小:15.92KB
基于51单片机交通灯程序完整版.docx
《基于51单片机交通灯程序完整版.docx》由会员分享,可在线阅读,更多相关《基于51单片机交通灯程序完整版.docx(13页珍藏版)》请在冰点文库上搜索。
基于51单片机交通灯程序完整版
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
bitFlag_SN_Yellow;//SN黄灯标志位
bitFlag_EW_Yellow;//EW黄灯标志位
ucharTime_EW;//东西方向倒计时单元
ucharTime_SN;//南北方向倒计时单元
ucharEW=15,SN=10,EWL=19,SNL=19;//程序初始化赋值,正常模式
ucharEW1=60,SN1=40,EWL1=19,SNL1=19;//用于存放修改值的变量
ucharFlag_Moden=1;//模式变量1正常模式2禁止南北通东西3禁止东西通南北4禁止东西南北5夜间模式
ucharFlag_key=0;
ucharcodetable[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//1~~~~9段选码sbitHC164_Data=P0^0;
sbitHC164_Clk=P0^1;
sbitEW_green=P0^2;
sbitEW_yellow=P0^3;
sbitEW_red=P0^4;
sbitSN_red=P0^5;
sbitSN_green=P0^7;
sbitSN_yellow=P0^6;
sbitSN_RXD_red=P2^7;
sbitSN_RXD_green=P2^6;
sbitEW_RXD_red=P2^5;
sbitEW_RXD_green=P2^4;
sbitFMQ=P1^0;
sbitkey1=P3^3;
sbitkey2=P3^4;
sbitkey3=P3^5;
sbitWEI1=P2^3;//东西数码管第一位
sbitWEI2=P2^2;//东西数码管第二位
sbitWEI3=P2^1;//南北数码管第一位
sbitWEI4=P2^0;//南北数码管第二位
//ucharew=40;sn=35;
//函数delay(ucharz)
//功能能延时
voidDelay(ucharz)
{
uchara,b;
for(a=z;a>0;a--)
for(b=200;b>0;b--);
}
voidHC_164_Set_byte(ucharduan)
{
uchari;
for(i=0;i<8;i++){
HC164_Data=duan&0x80;
HC164_Clk=0;
HC164_Clk=1;
duan=duan<<1;
}
}
voiddisplay_smg(ucharwei,ucharnum)
{
switch(wei){
case1:
WEI1=0;WEI2=1;WEI3=1;WEI4=1;HC_164_Set_byte(table[num]);break;case2:
WEI1=1;WEI2=0;WEI3=1;WEI4=1;HC_164_Set_byte(table[num]);break;case3:
WEI1=1;WEI2=1;WEI3=0;WEI4=1;HC_164_Set_byte(table[num]);break;case4:
WEI1=1;WEI2=1;WEI3=1;WEI4=0;HC_164_Set_byte(table[num]);break;default:
break;
}
}
voidDisplay(void)
{
ucharh,l;
h=Time_EW/10;
l=Time_EW;
display_smg(1,h);
Delay(8);
display_smg(2,l);
Delay(8);
h=Time_SN/10;
l=Time_SN;
display_smg(3,h);
Delay(8);
display_smg(4,l);
Delay(8);
}
voidKey()
{
if(key1==0){
Delay(10);
if(key1==0){
while(!
key1);
Flag_key++;
if(Flag_key==1){
Flag_Moden=2;
}
if(Flag_key==2){
Flag_Moden=3;
}
if(Flag_key==3){
Flag_Moden=4;
}
if(Flag_key==4){
Flag_Moden=5;
FMQ=1;
TR0=1;
}
if(Flag_key==5){
Flag_EW_Yellow=0;//SN关黄灯信号位Flag_SN_Yellow=0;//SN关黄灯信号位FMQ=1;
Flag_Moden=1;
TR0=1;//启动定时
Flag_key=0;
}
}
}
if(key2==0){
while(!
key2);
Flag_Moden=2;
}
if(key3==0){
while(!
key3);
Flag_Moden=3;
}
}
voidtimer0(void)interrupt1using1
{
staticucharcount;
TH0=(65536-50000)/256;
TL0=(65536-50000)%6;
count++;
if(count==10)
{
if(Flag_SN_Yellow==1)//测试南北黄灯标志位
{SN_yellow=~SN_yellow;}
if(Flag_EW_Yellow==1)//测试东西黄灯标志位
{EW_yellow=~EW_yellow;}
}
if(count==20)
{
if(Flag_Moden==1){
Time_EW--;
Time_SN--;
}
if(Flag_SN_Yellow==1)//测试南北黄灯标志位
{SN_yellow=~SN_yellow;}
if(Flag_EW_Yellow==1)//测试东西黄灯标志位
{EW_yellow=~EW_yellow;}
count=0;
}
}
//模式1
voidZc_moshi()
{
//*******S0状态**********
EW_RXD_red=0;//EW人行道禁止
EW_RXD_green=1;//EW人行道禁止
SN_RXD_red=1;//EW人行道通行
SN_RXD_green=0;//SN人行道通行
Flag_EW_Yellow=0;//EW关黄灯显示信号Flag_SN_Yellow=0;//SN关黄灯显示信号
Time_EW=EW;//EW=45;SN=40;
Time_SN=SN;
SN_green=0;//SN通行,EW红灯
SN_red=1;
EW_red=0;
EW_green=1;
while(Time_EW>5){
if(key1==0||key2==0||key3==0)
{
//Flag_Moden=1;
TR0=0;//启动定时
break;
}
Display();
}
SN_yellow=0;//SN黄灯亮开始闪烁5秒SN_green=1;//灭
//*******S1状态**********
Time_SN=5;
while(Time_EW<=5){
if(key1==0||key2==0||key3==0)
{
//Flag_Moden=1;
TR0=0;//启动定时
break;
}
Flag_SN_Yellow=1;//SN开黄灯信号位Display();
}
//*******S2状态**********
Flag_SN_Yellow=0;//SN关黄灯显示信号SN_yellow=1;
EW_RXD_red=1;//EW人行道通行
SN_RXD_green=1;//SN人行道禁止
EW_RXD_green=0;//EW人行道通行
SN_RXD_red=0;//SN人行道禁止
Time_EW=SN;//EW=45;SN=40;
Time_SN=EW;
SN_green=1;//南北绿灯禁止东西通行SN_red=0;//亮
EW_red=1;
EW_green=0;//亮
while(Time_SN>5){
if(key1==0||key2==0||key3==0)
{
//Flag_Moden=1;
TR0=0;//启动定时
break;
}
Display();
}
//*******S3状态**********
EW_green=1;
EW_yellow=0;
Time_EW=5;
while(Time_SN<=5){
if(key1==0||key2==0||key3==0)
{
TR0=0;//启动定时
break;
}
Flag_EW_Yellow=1;//SN开黄灯信号位Display();
}
Flag_EW_Yellow=0;
EW_yellow=1;
}
////模式2禁止南北通东西蜂鸣器响voidJsn()
{
EW_green=0;
EW_yellow=1;
EW_red=1;
SN_red=0;
SN_green=1;
SN_yellow=1;
SN_RXD_red=0;
SN_RXD_green=1;
EW_RXD_red=1;
EW_RXD_green=0;
FMQ=~FMQ;
Delay(10);
WEI1=1;WEI2=1;WEI3=1;WEI4=1;
}
////模式3禁止东西通南北蜂鸣器响voidJew()
{
EW_green=1;
EW_yellow=1;
EW_red=0;
SN_red=1;
SN_green=0;
SN_yellow=1;
SN_RXD_red=1;
SN_RXD_green=0;
EW_RXD_red=0;
EW_RXD_green=1;
FMQ=~FMQ;
Delay(10);
WEI1=1;WEI2=1;WEI3=1;WEI4=1;
}
//模式4禁止东西南北蜂鸣器响
voidJEwSn()
{
EW_green=1;
EW_yellow=1;
EW_red=0;
SN_red=0;
SN_green=1;
SN_yellow=1;
SN_RXD_red=0;
SN_RXD_green=1;
EW_RXD_red=0;
EW_RXD_green=1;
FMQ=~FMQ;
Delay(10);
WEI1=1;WEI2=1;WEI3=1;WEI4=1;
}
//模式5夜间模式,东西南北黄灯闪烁voidYejian()
{
EW_green=1;
//EW_yellow=1;
EW_red=1;
SN_red=1;
SN_green=1;
//SN_yellow=1;
SN_RXD_red=1;
SN_RXD_green=1;
EW_RXD_red=1;
EW_RXD_green=1;
Flag_EW_Yellow=1;//SN开黄灯信号位Flag_SN_Yellow=1;//SN开黄灯信号位}
voidmain()
{
P1=0xff;
P2=0xff;
P3=0xff;
P0=0xff;
EW_green=1;
EW_yellow=1;
EW_red=1;
SN_red=1;
SN_green=1;
SN_yellow=1;
SN_RXD_red=1;
SN_RXD_green=1;
EW_RXD_red=1;
EW_RXD_green=1;
WEI1=1;
WEI2=1;
WEI3=1;
WEI4=1;
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){
switch(Flag_Moden){
case1:
Zc_moshi();break;
case2:
Jsn();break;
case3:
Jew();break;
case4:
JEwSn();break;
case5:
Yejian();break;
default:
break;
}
Key();}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 交通灯 程序 完整版
![提示](https://static.bingdoc.com/images/bang_tan.gif)