发布时间 : 星期日 文章闪烁LED小灯的设计 - 图文更新完毕开始阅读d637903d27284b73f242505a
TR0=1; //T0溢出中断请求开启 EA=1; //总中断开启 ET0=1; //T0中断开启
EX0=1; //外部中断INT0开启 IT0=1; //设置开关下降沿有效 EX1=1; //外部中断INT0开启 IT1=1; //设置开关下降沿有效 ns_time=ns_time_green; //东西南北红黄绿灯时间赋值 ew_time=ew_time_red;
ew_time_red=ns_time_green+ns_time_yellow;
if(!a) //a=0,东西显示19开始倒计时 {
ns_time=ew_time_red;
ew_time=ns_time_green+ns_time_yellow; }
while(!a) //a=0,进入循环 {
if(ew_time-5>0) {
while(!flag);
display(ew_time); //flag=1,显示东西19
P1=0xdd; //南北绿灯,东西红灯 flag=0;
23
}
if(ew_time<=5) //东西时间<=5时,南北黄灯闪烁,东西红灯 {
while(!flag); flag=0;
display(ns_time); //从5开始倒计时显示 P1=0xdf; //东西红灯,南北黄灯一亮一灭显示 /*p1_4=0;*/ delay(5000); p1_0=~p1_0;
//南北黄灯所在位,对应取反,实现亮灭变化 delay(5000); } if(ew_time==0)
//如果东西时间为0,赋值a为1,以实现方向转变 a=1; }
if(a) //a=1,东西14开始倒计时 {
ns_time=ew_time_red;
ew_time=ns_time_green+ns_time_yellow; }
while(a) //a=1,进入循环
24
{
if(ns_time-5>0) //南北红灯,东西绿灯 {
while(!flag);
display(ns_time-5); //flag=0,显示东西14 delay(5000); //延时子函数调用
P1=0xeb; //南北红扥个,东西绿灯显示 }
if(ns_time-5<=0) //南北时间<=5时南北红灯,东西黄灯闪烁 {
while(!flag); //flag=0南北显示19开始倒计时 flag=0;
display(ns_time,ns_time);//东西,南北均从5开始倒计时显示 P1=0xfb; //南北红灯,东西黄灯一亮一灭显示 p1_3=~p1_3;
//东西黄灯P1.3位取反,以实现黄灯亮灭变化显示 delay(5000); //延时函数调用 }
if(ns_time==0) //如果南北时间为0赋值a为0 a=0; } }
int t0int()interrupt 1 //t0中断(定时器0中断)子函数
25
{
TH0=0x3c; //定时50ms初值设定 TL0=0xb0;
point--; //20次T0定时次数控制
if(point==0) //如果20次到了,改变显示的东西南北方向的时间 { flag=1; point=20; if(ns_time!=0) ns_time--; if(ew_time!=0)
ew_time--; } }
void int0(void) interrupt 0 //int0中断子函数,发生事故时的情况 { int i,j;
display(00); delay(5000);
for(i=0;i<10;i++)
//利用flag实现东西南北方向红灯均显示亮,对应东西南北方向车流均停止,处理紧急情况 {
for(j=0;j<10;j++)
26