#include <reg51.h>
#define uchar unsigned char
void count();
void scan_screen();
void scan_key();
void add();
sbit k0=P3^2;
sbit k1=P3^3;
bit F_key0,F_spark,F_key1;
uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00}; //段码:0~9、-
uchar screen[]={0,0,10,0,0,10,0,0};
uchar a,i,n,temp,j=0,h=0;
int flag;
void int_0()interrupt 0//INT0
{
EX0=0;
}
void int_2()interrupt 2//INT1
{
EX1=0;
}
void int_3()interrupt 3//T1
{
TH1=0x00;
TL1=0x00;
if(EX0==0)
{
if(k0==1)
{
F_key0=1;
j=j+1;
if(j==3||j==6)
j=j+1;
if(j>8)
{
j=0;
F_key0=0;
}
IE0=0;
EX0=1;
}
}
if(EX1==0)
{
if(k1==1)
{
if(F_key0==1)
F_key1=1;
IE1=0;
EX1=1;
}
}
}
void int_1()interrupt 1//T0
{
TH0=0xf6;
TL0=0x3c;
if(flag==400)
{
flag=0;
count();
}
if(h==100)
{
F_spark=~F_spark;
h=0;
}
scan_screen();
add();
flag++;
h++;
}
void scan_screen()//数码管动态显示
{
P1=0x00;
temp=screen[i];
if((F_key0==1)&&(i==(j-1)))
{
if(F_spark==0)
P2=table[temp];
else
P2=0x00;
}
else
P2=table[temp];
P1=a;
if(i==7)
{
i=0;
a=0x01;
}
else
{
i++;
a=a<<1;
}
}
void add()//k1键加功能
{
if(F_key1==1)
{
switch(j)
{
case 1: if(screen[1]>3)
{
screen[0]++;
if(screen[0]>1)
screen[0]=0;
}
if(screen[1]<4)
{
screen[0]++;
if(screen[0]>2)
screen[0]=0;
}
break;
case 2:
if(screen[0]<2)
{
screen[1]++;
if(screen[1]>9)
screen[1]=0;
}
if(screen[0]==2)
{
screen[1]++;
if(screen[1]>3)
screen[1]=0;
}
break;
case 4: screen[3]++;
if(screen[3]>5)
screen[3]=0;
break;
case 5: screen[4]++;
if(screen[4]>9)
screen[4]=0;
break;
case 7: screen[6]++;
if(screen[6]>5)
screen[6]=0;
break;
case 8: screen[7]++;
if(screen[7]>9)
screen[7]=0;
}
F_key1=0;
}
}
void count()//时间计数
{
i=i-1;
switch(i)
{
case 6: if(screen[i]==5&&screen[i+1]==9)
{
screen[i]=0;
screen[i+1]=0;
i=i-3;
}
else
{
if(screen[i+1]<9)
screen[i+1]++;
else
{
screen[i]++;
screen[i+1]=0;
}
break;
}
case 3: if(screen[i]==5&&screen[i+1]==9)
{
screen[i]=0;
screen[i+1]=0;
i=i-3;
}
else
{
if(screen[i+1]<9)
screen[i+1]++;
else
{
screen[i]++;
screen[i+1]=0;
}
break;
}
case 0: if(screen[i]==2&&screen[i+1]==3)
{
screen[i]=0;
screen[i+1]=0;
}
else
{
if(screen[i]==2)
screen[i+1]++;
else
{
if(screen[i+1]<9)
screen[i+1]++;
else
{
screen[i]++;
screen[i+1]=0;
}
}
}
}
i=7;
}
void main()
{
EA=1;
TMOD=0x11;
ET0=1;//T0初始化
TR0=1;
TH0=0xf6;
TL0=0x3c;
ET1=1;//T1初始化
TR1=1;
TH1=0x00;
TL1=0x00;
IT0=1;//INT0初始化
EX0=1;
IT1=1;//INT1初始化
EX1=1;
P2=0x00;
P1=0x00;
a=0x01;
i=0;
flag=1;
F_spark=0;
F_key0=0;
F_key1=0;
while(1);
}