keil uVision4界面:
#include<reg52.h>
sbit K1=P2^0;
sbit K2=P2^1;
sbit K3=P2^2;
sbit K4=P2^3;
sbit D1=P3^0;
sbit D2=P3^6;
sbit D3=P3^7;
unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char sec,t=0,key;
void delay(int z)
{
int x,y;
for(x=100;x>0;x--)
for(y=z;y>0;y--);
}
void main()
{
TMOD=0X01;
EA=1;
ET0=1;
P2=0xff;
sec=90;
P0=0xff;//P0=tab[sec/10];
P1=0xff;//P1=tab[sec%10];
key=0;
while(1)
{
if((P2&0x0f)!=0x0f)
{
delay(10);
if(K1==0)
key=1;
if(K2==0)
key=2;
if(K3==0)
key=3;
if(K4==0)
key=4;
switch(key)
{
case 1:
{
sec=90;
D1=0;
D2=1;
D3=1;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1; //启动定时器
P0=tab[sec/10];
P1=tab[sec%10];
}break;
case 2:
{
if(TR0==1)
{
D1=1;
D2=0;
D3=1;
}
else
{
D1=1;
D2=1;
D3=1;
}
sec=60;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
//TR0=1;
}break;
case 3:
{
if(TR0==1)
{
D1=1;
D2=1;
D3=0;
}
else
{
D1=1;
D2=1;
D3=1;
}
//D1=1;
//D2=1;
//D3=0;
sec=30;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
//TR0=1;
}break;
case 4:
{
D1=1;
D2=1;
D3=1;
sec=0;
P0=tab[sec/10];
P1=tab[sec%10];
TR0=0;
}
} while((P2&0x0f)!=0x0f);
}
}
}
void int0() interrupt 1
{
TR0=0;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t++;
if(t==20)
{
t=0;
sec--;
P0=tab[sec/10];
P1=tab[sec%10];
}
if(sec==0)
{
TR0=0;
// sec=90;
// key=0;
}
else
TR0=1;
}
proteus仿真界面:
![](https://img-blog.csdnimg.cn/img_convert/4e363ad06223cb09e7eb957b0581d172.png)