51单片机数码管倒计时求大神帮忙看下我写的这个倒计时问题出在哪里,为何开关按了要过10秒才开始倒计时

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
sbit k1=P3^4;
sbit led=P1^0;
sbit D=P2^3;
uint temp,temp1,qian,bai,shi,ge,si,san,er,yi;
uchar t0,t2,num;
uchar code shuma[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,};
void delay(uint z) //延时子程序
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void chushihua() //设置定时器1为工作方式1?
{
temp=900;
TMOD=0x01;
dula=1;
wela=1;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}

void zhongduan() interrupt 1 //中断函数子程序不需要声明
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t0++;
}

void daojishi(temp) //显示子程序
{
uint qian,bai,shi,ge;
qian=temp/1000;
bai=temp%1000/100;
shi=temp%100/10;
ge=temp%10;

P0=shuma[qian];
dula=1;
dula=0;
P0=0xfe;
wela=1;
wela=0;
delay(2);

P0=shuma[bai];
dula=1;
dula=0;
P0=0xfd;
wela=1;
wela=0;
delay(2);

P0=shuma[shi];
dula=1;
dula=0;
P0=0xfb;
wela=1;
wela=0;
delay(2);

P0=shuma[ge];
dula=1;
dula=0;
P0=0xf7;
wela=1;
wela=0;
delay(2);
}
void daojishipaoma()
{
if(t0==1)
{
t0=0;
if(temp<=0)
{
led=1;
D=0;
delay(5000);
D=1;
temp=1;
}
temp--;
}
daojishi(temp);
}

void kaiguankongzhi()
{
switch(num)
{
case 1:daojishipaoma();break;
}
if(k1==0)
{
delay(10);
if(k1==0)
{
num++;
if(num==3)
num=0;
led=1;
}
while(!k1);
delay(10);
while(!k1);
}
}

void main()
{
led=0;
chushihua();
while(1)
{
kaiguankongzhi();
}
}

刚开始上电时, system_mode不是1 也不是2,不知你初始化时是否给它赋值?另外你的按键检测程序没加入到循环程序中,刚上电时若没有按键按下,则很快跳过两个按键检测语句,然后进入循环显示程序中,这是一个死循环,只有中断才可打断其运行,所以再按什么键也没反应了,建议把按键检测放入显示循环中,它对显示效果不会有什么影响,或在初始化后加一个循环,若两个按键都没有按下,一直检测按键
温馨提示:答案为网友推荐,仅供参考
相似回答