红绿灯C语言程序 (P0口接数码管,平口接发光二极管) #include #define uchar unsigned char #define uint unsigned int uchar i=0,c=0,s=1;// m_flag=1;// ////////////////////////////////////// void dxlv1_nbh1(void) // { P1=0x5a; } void dx0_nbh1(void) // { P1=0x0a; } void dxh1_nbl1(void) // { P1=0xa5; } void dxh1_nb0(void) // { P1=0xa0; } void nbs(void) // 南北灯闪 { if(m_flag==1){dxh1_nb0();} else {dxh1_nbl1();} } void dxs(void){ // 东西灯闪 if(m_flag==1){dx0_nbh1();} else {dxlv1_nbh1();} } //////主程序////////////////// void main() { TMOD=0x01;//定时器0工作在方式1 TH0=-5000/256;//50ms TL0=-5000%256;//20ms IE=0x82;///允许定时器0中断 TR0=1;///启动定时器0 while(1){ //0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f if(s==10){P0=0x3f;} // 东西绿灯亮,南北红灯亮 倒计时开始 if(s==9)P0=0x06; if(s==8)P0=0x5b; if(s==7)P0=0x4f; if(s==6)P0=0x66; if(s==5)P0=0x6d; if(s==4)P0=0x7d; if(s==3)P0=0x07; if(s==2)P0=0x7f; if(s==1){P0=0x6f;P1=0x5a;} if(s>9&&s<13){dxs();} //10秒结束 if(s==13){dxh1_nbl1(); P0=0x6f; if(s==22){P0=0x3f;} if(s==21)P0=0x06; if(s==20)P0=0x5b; if(s==19)P0=0x4f; if(s==18)P0=0x66; if(s==17)P0=0x6d; if(s==16)P0=0x7d; if(s==15)P0=0x07; if(s==14)P0=0x7f; if(s>21&&s<25){nbs();} //10秒结束 if(s==25){s=1; }// s归位 } } /////T0中断子程序//////////// void T0_INT()interrupt 1 { TH0=-50000/256;//50ms TL0=-50000%256; if(c==10)m_flag=0; c++;if(c==20)//50ms*20=1s {m_flag=1; c=0; s++;//s清零 } 南北红灯继续,东西绿灯一秒一闪 闪三次}//东西红灯亮,南北绿灯亮 倒计时开始 东西向红灯亮继续,南北绿灯一秒一闪三次 } 本文来源:https://www.wddqw.com/doc/078b4054ad02de80d4d840c0.html