#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
#define CF P0
uint sec=0;
sbit K1=P3^2;
sbit K2=P3^1;
sbit K3=P3^0;
sbit LED1=P2^0;
sbit LED2=P2^1;
sbit LED3=P2^2;
sbit LED4=P2^3;
uchar disbuff[]={0,0,0,0};
uchar const num[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void delay(int s)
{
uint i,j;
for(i=0;i<s;i++)
for(j=114;j>0;j--);
}
void DigDisplay()
{
LED1=1;LED2=1;LED3=1;LED4=0;
CF=disbuff[0];
delay(5);
CF=0X00;
LED1=1;LED2=1;LED3=0;LED4=1;
CF=disbuff[1];
delay(5);
LED1=1;LED2=0;LED3=1;LED4=1;
CF=disbuff[2];
delay(5);
CF=0X00;
LED1=0;LED2=1;LED3=1;LED4=1;
CF=disbuff[3];
delay(5);
CF=0X00;
}
void Count()
{
disbuff[0]=num[sec%10];
disbuff[1]=num[sec/10%10];
disbuff[2]=num[sec/100%10];
disbuff[3]=num[sec/1000%10];
}
void KEY()
{
if(K1==0)
delay(10);
if(K1==0)
{
TR0=1;
}
while(!K1)
{
DigDisplay();
Count();
}
if(K2==0)
{
delay(5);
if(K2==0)
{
TR0=0;
}
while(!K2)
{DigDisplay();
Count();}
if(K3==0)
{
delay(10);
if(K3==0)
{
sec=0;
TH0=0X3C;
TL0=0Xb0;
}
}
}
}
void main()
{
TMOD=0X11;
TH0=0X3C;
TL0=0xb0;
ET0=1;
EA=1;
TR0=1;
while(1)
{
Count();
DigDisplay();
KEY();
}
}
void time1()interrupt 1
{
uchar n;
TH0=0X3C;
TL0=0XB0;
n++;
if(n==20)
{
n=0;
sec++;
if(sec==10000)
{
sec=0;
}
}
}