#include <reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int typedef uchar BYTE;typedef uint WORD;typedef unsigned long DWORD;sbit Hour_key=P3^4;sbit Minute_key=P3^5;BYTE location;BYTE index;BYTE time[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};BYTE anode_tube[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};void Delay1ms() //@12.000MHz{ unsigned char i, j; i = 2; j = 239; do { while (--j); } while (--i);}void interrupt_reset_parameter(){ TH1=0xde; TL1=0x04;}void Timer_1() interrupt 3 using 3{ interrupt_reset_parameter(); time[7]++; for(index=7;index!=0;index--) { if(index>=5||index==3) { if(time[index]==10) { time[index]=0; time[index-1]++; } } else if(index==2||index==4) { if(time[index]==6) { time[index]=0; time[index-1]++; } } else if(time[index]==10&&time[index-1]!=2) { time[index]=0; time[index-1]++; } } if(time[0]==2&&time[1]==4) *(DWORD )&time[0]=0,(DWORD *)&time[4]=0;}void start_stop() interrupt 0 using 0{ TR1=~TR1;}void reset() interrupt 2 using 2{ TR1=0; *(DWORD *)&time[0]=0; *(DWORD *)&time[4]=0;}void Refresh_digital_tube(){ for(location=0;location<7;location++) { P1= location%2==0 ? anode_tube[time[location]] : anode_tube[time[location]] + 0x80; P2=location; Delay1ms(); P1=0; } P1=anode_tube[time[location]]; P2=location; Delay1ms(); P1=0;}void main(void){ interrupt_reset_parameter(); P3=0xff; TMOD=0x10; IE=0x8d; IT0=0; IT1=0; TR1=1;while(1){ while(TR1) { Refresh_digital_tube(); } while(!TR1) { Refresh_digital_tube(); if(Hour_key==0) { time[1]++; if(time[1]==10&&time[0]!=2) { time[1]=0; time[0]++; } if(time[1]==4&&time[0]==2) (WORD )&time[0]=0; while(Hour_key==0); } if(Minute_key==0) { time[3]++; if(time[3]==10&&time[2]!=6) { time[3]=0; time[2]++; } if(time[2]==6) (WORD )&time[2]=0; while(Minute_key==0); }}