现有硬件为AT89C51单片机一个,四位七段数码管,精确到0.01,四个按键控制,要求用一个按键控制开始计数、

现有硬件为AT89C51单片机一个,四位七段数码管,精确到0.01,四个按键控制,要求用一个按键控制开始计数、一个按键暂停计数、一个按键清零计数,一个按键继续接上次计数四个个功能。
大家帮帮忙啊 P0.0-P0.7接数码管 p2.0-o2.3接按键 P2.4-P2.7接数码管的位选端

//我的理解
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar tt,num;
sbit key1=P2^0; //开始计数
sbit key2=P2^1; //清零
sbit key4=P2^3; //继续计数
sbit key3=P2^2; //暂停计数
char code table[]={
0x3f,0x06,0x5b,0x4f, //数码管的段码(共阴极)
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void key()
{
uchar ci;
if(key1==0)
{
delay(10);
if(key1==0)
{
EA=1;
while(!key1) ;
}
}
if(key2==0)
{
delay(10);
if(key2==0)
{
num=0;
tt=0;
while(!key2);
}
}
if(key3==0)
{
delay(10);
if(key3==0)
{
ci=1;
TR0=0;
while(!key3);
}

}
if(ci==1)
{
if(key4==0)
{
delay(10);
if(key4==0)
{
ET0=1;
ci=0;
while(!key4);
}
}
}
}

void display(uchar aa,uchar bb,uchar cc,uchar dd)
{
P2=0xff;
P0=table[aa];
P2=0xef;
delay(5);

P2=0xff;
P0=table[bb];
P2=0xdf;
delay(5);

P0=0xff;
P0=table[cc];
P2=0xbf;
delay(5);

P2=0xff;
P0=table[dd];
P2=0x7f;
delay(5);
}
void main()
{
int aa,bb,cc,dd;
TMOD=0x01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
TR0=1;
ET0=1;

while(1)
{
dd=tt%10;
cc=tt/10;
bb=num%10;
aa=num/10;
key();
display(aa,bb,cc,dd);
}

}
void TO_timer() interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
tt++;
if(tt==100)
{
tt=0;
num++;
if(num==60)
num=0;
}
}
温馨提示:答案为网友推荐,仅供参考
相似回答