.. ’ . 基 于 51 单 片 机 数 码 管 显 示 十 字 路 口 红 绿 灯 #include unsigned char count,d1,d2,c1,c2; unsigned char s[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; signed int time=10,time1=13,g=3,y=13; void delay(unsigned char i); /***********子 函 数 声 明 ***************/ void sm(); /***********I/O端 口 声 明 *****************/ sbit P2_0=P2^0; //东 西 绿 sbit P2_1=P2^1; //东 西 红 sbit P2_2=P2^2; //东 西 黄 sbit P2_3=P2^3; //南 北 绿 sbit P2_4=P2^4; //南 北 红 sbit P2_5=P2^5; //南 北 黄 sbit button=P2^6; sbit button1=P2^7; sbit button2=P3^0; sbit button3=P3^1; sbit button4=P3^2; sbit button5=P3^3; .. ’ . sbit button6=P3^4; sbit button7=P3^5; sbit button8=P3^6; /************************************* 数码显示******************************************/ void sm() { d1=time/10; d2=time%10; //东 西 数 码 管 P1=0x00; P0=s[d1]; delay(20); P1=0x01; P0=s[d2]; delay(20); c1=time1/10; //南 北 数 码 管 c2=time1%10; P1=0x02; P0=s[c1]; delay(20); .. ’ . P1=0x03; P0=s[c2]; delay(20); } void main() //主 函 数 { TMOD=0x01; TH0=0x3c; TL0=0xb0; EA=1; ET0=1; TR0=1; while(1) { sm(); } } void int1()interrupt 1 { count++; if(count==20) .. ’ . { count=0; ts++; th++; time--; time1--; } /*****************************判断程序******************************/ if(ts==0&&th==0) //初 始 状 态 时 间 与 亮 灯 颜色 { time1=13; time=10; P2=0xee; } if(ts==11) //东 西 10 秒 转 3 秒 { P2=0Xeb; .. ’ . time=3; } if(ts==15) //东 西 3 秒 转 13 秒 { P2=0xf5; time=13; } if(ts==29) //东 西 13 秒 转 10 秒 { ts=0; } if(th==14) //南 北 13 秒 转 10 秒 { P2=0xf3; time1=10; } if(th==25) //南 北 10 秒 转 3 秒 { .. ’ . P2=0xdd; time1=3; } if(th==29) //南 北 3 秒 转 10 秒 { th=0; } } void delay(unsigned char i ) //延 时 函 数 { unsigned char j,k; for (k=0;k