#include<reg51.h> #define uchar unsigned char unsigned char table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E}; sbit L1=P2^0; //定义控制显示的两个端口 sbit L2=P2^1; sbit green=P2^3; sbit yellow=P2^4; sbit red=P2^5; uchar counter,flag,time_g,time_y,time_r; void init_timer0() { TMOD=0x01; TH0=(65536-50000)/256; TL0=(65536-50000)%6; EA=1; ET0=1; TR0=1; } void init() { time_g=80; time_y=10; time_r=80; green=0; red=0; yellow=0; } void dellay(unsigned int h) { unsigned char i,j,k; while(h--) { for(i=20;i>0;i--) for(j=20;j>0;j--) for(k=248;k>0;k--); } } void display1(unsigned char i) { P0=table[i]; } void display2(unsigned char c) { P3=table[c]; } void main() { unsigned char y,u,i,o,p,w,r; init_timer0(); init(); a: y=0; switch(y) { case(0):display1(0);y++;dellay(5 ); case(1):display1(1);y++;dellay(5 ); case(2):display1(2);y++;dellay(5 ); case(3):display1(3);y++;dellay(5 ); case(4):display1(4);y++;dellay(5 ); case(5):display1(5);y++;dellay(5 ); case(6):display1(6);y++;dellay(5 ); case(7):display1(7);y++;dellay(5 ); case(8):display1(8);y++;dellay(5 ); case(9):display1(9);y++;dellay(5 ); case(10):display1(0);u++;goto b; } b: switch(u) { case(1):display2(1);goto a; case(2):display2(2);goto a; case(3):display2(3);goto a; case(4):display2(4);goto a; case(5):display2(5);goto a; case(6):display2(6);goto a; case(7):display2(7);goto a; case(8):display2(8);dellay(5 );goto c; } c: switch(i) { case(0):display1(0);display2(0); goto d; } d: o=0; switch(o) { case(0):display1(0);y++;dellay(5 ); case(1):display1(1);y++;dellay(5 ); case(2):display1(2);y++;dellay(5 ); case(3):display1(3);y++;dellay(5 ); case(4):display1(4);y++;dellay(5 ); case(5):display1(5);y++;dellay(5 ); case(6):display1(6);y++;dellay(5 ); case(7):display1(7);y++;dellay(5 ); case(8):display1(8);y++;dellay(5 ); case(9):display1(9);y++;dellay(5 ); case(10):display1(0);goto e; } e: switch(p) { case(0):display1(0);display2(0);y=0;u=0;o=0; goto j; } j: w=0; switch(w) { case(0):display1(0);w++;dellay(5 ); case(1):display1(1);w++;dellay(5 ); case(2):display1(2);w++;dellay(5 ); case(3):display1(3);w++;dellay(5 ); case(4):display1(4);w++;dellay(5 ); case(5):display1(5);w++;dellay(5 ); case(6):display1(6);w++;dellay(5 ); case(7):display1(7);w++;dellay(5 ); case(8):display1(8);w++;dellay(5 ); case(9):display1(9);w++;dellay(5 ); case(10):display1(0);w++;goto g; } g: switch(r) { case(1):display2(1);goto j; case(2):display2(2);goto j; case(3):display2(3);goto j; case(4):display2(4);goto j; case(5):display2(5);goto j; case(6):display2(6);goto j; case(7):display2(7);goto j; case(8):display2(8);dellay(5 );goto a; } } void timer0()interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%6; counter++; if(counter==20) { counter=0; switch(flag) { case 0: { red=0; green=1; time_g--; if(time_g==0) { time_g=30; flag++; } } break; case 1: { green=0; yellow=1; time_y--; if(time_y==0) { time_y=10; flag++; } } break; case 2: { yellow=0; red=1; time_r--; if(time_r==0) { time_r=30; flag=0; } } break; default : break; } } } 设计上``可能有点繁琐```没办法```在```80分钟的限定时间内```我的惯性思维就想成这样子 `了``` 呵呵````呵呵````` name:5+x