/*東西向綠燈亮若干秒,黃燈閃3次后紅燈亮, 紅燈亮后,南北向由紅燈變為綠燈,若干秒后南北向黃燈閃爍3次后變紅燈,東西向變綠燈,如此重復*/ #include<reg51.h> #define uchar unsigned char #define uint unsigned int //規劃好各個腳連接的燈,方便使用 sbit RED_1=P0^0; //東西向燈 sbit YELLOW_1=P0^1; sbit GREEN_1=P0^2; sbit RED_2=P0^3; //南北向燈 sbit YELLOW_2=P0^4; sbit GREEN_2=P0^5; uchar number=0,type=1;//閃爍次數,操作類型變量 //延時子程序 void Delay(uint x) { uchar i; while(x--) for(i=0;i<120;i++); } //交通燈切換程序總共分為四種情況,如此循環 //注:1為關燈,0為開燈 traffic() { switch(type) { case 1: //東西向綠燈與南北向紅燈亮 RED_1=1;YELLOW_1=1;GREEN_1=0; RED_2=0;YELLOW_2=1;GREEN_2=1; Delay(2000); type=2; break; case 2: //東西向黃燈閃爍,綠燈關閉 Delay(300); YELLOW_1=~YELLOW_1;GREEN_1=1; if(++number!=6) return; //??3? number=0; type=3; break; case 3: //東西向紅燈,南北向綠燈亮 RED_1=0;YELLOW_1=1;GREEN_1=1; RED_2=1;YELLOW_2=1;GREEN_2=0; Delay(2000); type=4; break; case 4: //東西向紅燈,南北向綠燈亮 Delay(300); YELLOW_2=~YELLOW_2;GREEN_2=1; if(++number!=6) return; number=0; type=1; } } //主程序 void main() { while(1)traffic(); }
|