void main() { P1=0x21; //剛開始南北的紅燈亮,東西的綠燈亮 TMOD=0x01; TH0=(65535-50000)/256; TL0=(65535-50000)%256; //初值 EA=1; //打開總中斷 ET0=1; //定時(shí)器0允許中斷 TR0=1; //定時(shí)器0開始計(jì)時(shí) EX0=1; //外部中斷0允許位 IT0=1; //外部中斷0觸發(fā)方式(下降沿) while(1) { if(flag) { if(!p) { shi1=time1/10; //南北十位 ge1=time1%10; //南北個(gè)位 shi2=time2/10; //東西十位 ge2=time2%10; //東西個(gè)位 display(ge1,shi1,ge2,shi2); //顯示函數(shù) } if(p) dis(); //不顯示函數(shù) if(key==3) //夜間模式 { P0=0xff; q=!q; if(q!=0) P1=0x12; else P1=0; delay(200); } } } void ext0() interrupt 0 { flag=1; status=P2; } void timer() interrupt1 //定時(shí)中斷程序 { TH0=(65535-50000)/256; TL0=(65535-50000)%256; //重新賦初值 temp++; if(temp==20) //說明過去了1秒 { temp=0; //清零,重新加到20 //東西方向南北方向時(shí)間自減 time1--; time2--; if(time1>time2) //南北大于東西 { time1=time2+3; P1=0x21; //南北紅燈亮起,東西綠燈亮起 if(time2==0&&time1==3) { time2=3; //重新賦南北和東西的差值,與南北方向一起倒計(jì)時(shí) P1=0x11; //東西黃燈亮起,東西綠燈關(guān)閉 tab=0; //標(biāo)志位 } } if(time1<time2) //南北小于東西 { time2=time1+3; P1=0x0c; //南北綠燈亮起,東西紅燈亮起 if(time1==0&&time2==3) { time1=3; //重新賦南北和東西的差值,與東西方向一起倒計(jì)時(shí) P1=0x0a; //南北黃燈亮起,南北綠燈關(guān)閉 tab=1; //標(biāo)志位 } } if(!tab) //黃燈閃爍三秒 { if(time1==2&&time2==2) P1=0x01; if(time1==1&&time2==1) P1=0x11; } if(tab) { if(time1==2&&time2==2) P1=0x08; if(time1==1&&time2==1) P1=0x0a; } if(time1==0&&time2==0&&tab==0) //東西倒計(jì)時(shí)結(jié)束 { time1=t1; time2=t1+3; P1=0x0c; //東西紅燈,南北綠燈 } if(time1==0&&time2==0&&tab==1) //南北倒計(jì)時(shí)結(jié)束 { time1=t2+3; time2=t2; P1=0x21; //南北紅燈,東西綠燈 } }
}
|