#include #define uint unsigned int#define uchar unsigned charsbit k1 = P0^0;sbit k2 = P0^1;sbit k3 = P0^2;uint sec = 59;uint min = 59;uint hour = 59;uint x = 0;uint y = 0;uint z = 0;uint xun = 1;int NUM[10] = {0xC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};int BITS[6] = {0x01,0x02,0x04,0x08,0x10,0x20};void InitTimer0(void){ TMOD = 0x01; TH0 = 0x0C2; TL0 = 0x0CD; EA = 1;//中断总开关EX0 = 1;//外部中断 0 开 EX1 =1;//外部中断 1 开 ET0 = 1;//定时器 0 开 TR0 = 1; //开启定时器计时}void delay(uchar x){uchar i;for(x;x>0;x--){for(i=200;i>0;i--){;}}}void display(uint a,uint b,uint c){uint i;for(i=0;i<6;i++){P2=BITS[i];if(i==0){P1=NUM[c/10];}else if(i==1){P1=(NUM[c%10]+0x80);}else if(i==2){P1=NUM[b/10];}else if(i==3){P1=(NUM[b%10]+0x80);}else if(i==4){P1=NUM[a/10];}else if(i==5){P1=(NUM[a%10]+0x80);}delay(5);}}void set(uint xun) //x=2 sec{uint a=1;if(xun==2){P2=BITS[4];P1=NUM[sec/10];delay(5);P2=BITS[5];P1=(NUM[sec%10]);delay(5);}else if(xun==3){P2=BITS[2];P1=NUM[min/10];delay(5);P2=BITS[3];P1=(NUM[min%10]);delay(5);}else if(xun==4){P2=BITS[0];P1=NUM[hour/10];delay(5);P2=BITS[1];P1=(NUM[hour%10]);delay(5);}}void main(void){InitTimer0();while(1){while(xun==1){display(sec,min,hour);if(k1==0){delay(500);if(k1==0){InitTimer0();}}if((ET0==0)&&(k3==0)){delay(500);if((ET0==0)&&(k3==0)){xun++;}}}while(xun==2){if(k1==0){delay(500);if(k1==0){InitTimer0();xun=1;}} if(k2==0){delay(500);if(k2==0){if(sec==59){sec=0;}else{sec++;}}}set(xun);if((ET0==0)&&(k3==0)){delay(500);if((ET0==0)&&(k3==0)){xun++;}}}while(xun==3){if(k1==0){delay(500);if(k1==0){InitTimer0();xun=1;}} if(k2==0){delay(500);if(k2==0){if(min==59){min=0;}else{min++;}}}set(xun);if((ET0==0)&&(k3==0)){delay(500);if((ET0==0)&&(k3==0)){xun++;}}}while(xun==4){if(k1==0){delay(500);if(k1==0){InitTimer0();xun=1;}} if(k2==0){delay(500);if(k2==0){if(hour==59){hour=0;}else{hour++;}}}set(xun);if((ET0==0)&&(k3==0)){delay(500);if((ET0==0)&&(k3==0)){xun=2;}}}}}void Timer0Interrupt(void) interrupt 1 using 1 //17ms{TH0 = 0x0C2; TL0 = 0x0CD; if(sec==0){sec = 59;if(min==0){min = 59;if(hour==0){sec = 0;min = 0;TR0 = 0;}else{hour = hour-1;}}else{min = min-1;}} else{sec = sec-1;}}void INT0_ROUTING() interrupt 0 using 2//外部中断 0 子程序{ ET0 = 0;TR0 = 0;}