交通灯程序2Word文件下载.docx
《交通灯程序2Word文件下载.docx》由会员分享,可在线阅读,更多相关《交通灯程序2Word文件下载.docx(9页珍藏版)》请在冰豆网上搜索。
![交通灯程序2Word文件下载.docx](https://file1.bdocx.com/fileroot1/2022-11/28/64318b72-0da1-4bd7-b5a7-0607eeccebe2/64318b72-0da1-4bd7-b5a7-0607eeccebe21.gif)
/*数码管显示0-9*/
uintcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
/*子函数声明*/
voiddelay(uintz);
voiddelay0(uintz);
//voidinit(uinta);
voiddisplay(uintge,uintshi);
voidxtimer0();
voidinit1();
voidinit2();
voidinit3();
voidinit4();
voidinit5();
voidxint1();
voidxint0();
voidLED_ON();
voidLED_OFF();
/**********************主函数************************/
voidmain()
{
P0=0XFF;
P1=0xFF;
P2=0xFF;
EA=1;
//打开外部中断
EX1=1;
//允许外部中断1中断
IT1=0;
//INT0为沿触发方式
init1();
while
(1)
{
init2();
//第2个状态
init3();
//第3个状态
init4();
//第4个状态
init5();
//第5个状态
}
}
voidinit1()//第一个状态:
主干道、支干道均亮红灯5S
{
uinttemp;
temp=6;
//变量赋初值
TMOD=0x01;
//定时器0工作于方式1
TH0=0x4c;
TL0=0x00;
//定时器赋初值
//开外部中断
ET0=1;
//开定时中断
TR0=1;
//开定时器0
RED_ZHU=0;
//第一个状态主干道、支干道均亮红灯5S
RED_ZHI=0;
GREEN_ZHU=1;
GREEN_ZHI=1;
YELLOW_ZHU=1;
YELLOW_ZHI=1;
if(aa==20)//定时20*50MS=1S
{
aa=0;
//定时完成一次后清0
temp--;
//变量自增
//delay(10);
if(temp>
250)//定时100S
{
temp=6;
//变量清0
break;
}
shi=temp%100/10;
//显示十位
ge=temp%10;
//显示个位
}
display(ge,shi);
voidinit2()//第二个状态:
主干道亮绿灯30S、支干道亮红灯
temp=31;
{
RED_ZHU=1;
RED_ZHI=0;
GREEN_ZHU=0;
//第二个状态:
YELLOW_ZHI=1;
if(temp==3)//定时100S
temp=30;
//显示个位
voidinit3()//第三个状态:
主干道绿灯闪3次转亮黄灯、支干道亮红灯3S
temp=4;
//YELLOW_ZHU=~YELLOW_ZHU;
YELLOW_ZHU=~YELLOW_ZHU;
200)//定时100S
temp=4;
;
voidinit4()//第四个状态:
主干道亮红灯、支干道亮绿灯25S
temp=26;
RED_ZHI=1;
//第一个状态主干道、支干道均亮红灯5S
GREEN_ZHI=0;
temp=25;
voidinit5()//第五个状态:
主干道亮红灯、支干道绿灯闪3次转亮黄灯3S
//YELLOW_ZHI=~YELLOW_ZHI;
//变量自增
YELLOW_ZHI=~YELLOW_ZHI;
}
/*显示子函数*/
voiddisplay(uintge,uintshi)
P0=0xfd;
P2=table[shi];
delay0(5);
P0=0xfe;
P2=table[ge];
voidxint0()interrupt2//外部中断1,这里用2是INT1的优先级为0
LED_ON();
voidLED_ON()//外部中断0显示子程序
RED_ZHU=0;
GREEN_ZHI=1;
GREEN_ZHU=1;
YELLOW_ZHU=1;
delay0(1000);
return;
/*定时中断子函数*/
voidxtimer0()interrupt1
aa++;
/*延时子函数*/
voiddelay0(uintz)
uinti,j;
for(i=0;
i<
z;
i++)
for(j=0;
j<
110;
j++);
/********500ms延时函数晶振:
11.0592MHz*******/
voiddelay(unsignedcharj)
unsignedchark;
unsignedinti;
for(;
j>
0;
j--)
for(i=1250;
i>
i--)
for(k=180;
k>
k--);