#include<reg52.h>
unsigned char x,y;
unsigned char state;
sbit start_key = P3^0; //启动按钮
sbit pause_key = P3^1; //暂停按钮
sbit reset_key = P3^2; //重置按钮
sbit H=P3^6;
unsigned char LED[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void display(x) ;
void delay(unsigned char a)
void Delay1ms(unsigned int n); //延时1ms
void itn0();
void it0();
void main(){
x=y=0;
state=0;
EA=1;
EX0=1;
IT0=1;
ET0=1;
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
while(1) {
display(x);
if(x==59) H=~H;
//检测启动、停止按钮
if(start_key == 0) //按下了启动、停止按钮
{
Delay(10); //延时消抖
if(start_key == 0)
{
if(state == 0)//之前是未启动,按了按钮要变成已启动
{
state = 1; //更新状态为已启动
x=0;
ET0 = 1; //T0中断允许打开,开始计时
}else{
state = 0; //更新状态为未启动
ET0 = 0; //关闭T0中断,停止计时
}
while(start_key == 0) display(x); //防止按键重复检测
}
}
//检测暂停按钮
if(state != 0 && pause_key= 0) //已启动计时,并且暂停按钮按下
{
Delay(10); //延时消抖
if(pause_key == 0)
{
if(state == 2) //之前是暂停,现在要启动
{
state = 1; //更新状态为已启动
ET0 = 1; //打开T0中断允许,恢复计时
}else{
state = 2;
ET0 = 0; //关闭T0定时器,暂停计时
}
while(pause_key ==0) display(x); //防止按键重复检测
}
}
//检测归零按钮
if(state == 0 && reset_key; == 0) //已停止计时,并且归零按钮按下
{
Delay(10); //延时消抖
if(reset_key == 0)
{
x = 0;
while(reset_key == 0) display(x); //防止按键重复检测
}
}
}
void itn0()interrupt 1
{
y++;
while(y==20)
{
y=0;
x++;
if(x==60)
x=0;
}
TH0=(65536-50000)/256;
TL0=(65536-50000)%256; }
void it0() interrupt 0 using 1
{
T0=~ET0;
}
void delay(unsigned char a)
{
unsigned char i;
while(a--)
for(i=115;i>0;i--);
}
void display(x)
{
P2=0x7f;
P0=LED[x%10];
delay(5);
P2=0xbf;
P0=LED[x/10];
delay(5);
}
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632
现在程序有什么问题呢?把问题情况说明一下。