- s0不减小唉,应该是倒计时开始那里有问题
烧录之后可以输入数字,但无法开始倒计时

代码
#include
#define uchar unsigned char
#define uint unsigned int
sbit we=P2^7;
sbit du=P2^6;
sbit LED=P1;
sbit beep=P2^3;
int KeyValue=10,temp,s0=0,ge,shi,flag=-1;
int count1,count2;
char table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,
0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0x00};
char list[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
//0~9是数字0~9,10~15是字母a~f,16~25是在数字0~9的基础上加小数点
//list[]数组0~7为打开对应的数码管
void delay(int z) //延时函数
{
int m,n;
for(m=z;m>0;m--)
{
for(n=120;n>0;n--)
;
}
}
void KeyScan() //按键扫描
{
P3 = 0xf0;
if(P3!=0xf0)
{
delay(5);
if( P3 != 0xf0)
{
switch(P3)
{
case 0xe0: KeyValue = 0; break;
case 0xd0: KeyValue = 1; break;
case 0xb0: KeyValue = 2; break;
case 0x70: KeyValue = 3; break;
}
P3 = 0x0f;
switch(P3)
{
case 0x0e: KeyValue = KeyValue; break;
case 0x0d: KeyValue += 4; break;
case 0x0b: KeyValue += 8; break;
case 0x07: KeyValue += 12; break;
}
while(P3 != 0x0f);
}
}
P3 = 0xff;
if(P3 != 0xff)
{
delay(5);
if( P3 != 0xff)
{
switch(P3)
{
case 0xfe: KeyValue = 16; break;
case 0xfd: KeyValue = 17; break;
case 0xfb: KeyValue = 18; break;
case 0xf7: KeyValue = 19; break;
}
while(P3 != 0xff);
}
}
}
void timer0init()
{
TMOD=0x01;
TR0=1;
TH0=0x4c;
TL0=0xd1; //50ms;
ET0=1;
EA=1;
}
void time0()interrupt 1
{
TH0=0x4c;
TL0=0xd1;
count1++;
count2++;
}
void main()
{
while(1)
{
KeyScan();
if(KeyValue!=10&&P3==0xff)
{
if(KeyValue>=0&&KeyValue<=9) //数字输入
{
s0=KeyValue;
shi=ge;
ge=KeyValue;
s0=shi*10+ge;
}
else if(KeyValue==16)
flag=-flag;
}
KeyValue=10;
shi=s0/10;
ge=s0%10;
P0=0xff; // 数码管显示
we=1;
P0=list[0];
we=0;
du=1;
P0=table[shi];
du=0;
delay(5);
P0=0xff;
we=1;
P0=list[1];
we=0;
du=1;
P0=table[ge];
du=0;
delay(5);
while(flag==1)
{
timer0init();
if(count1==20)//当定时到1秒时执行
{
s0--;
count1=0;
}
if(s0<=5&&s0>0)
{
if(count2==10)
{
beep=0;
}
if(count2==20)
{
beep=1;
count2=0;
}
}
if (s0==0) //
{
TR0=0; //停止计时
P0=0xff; //消影 ?
while(1)
{
LED=0; //灯亮
P0=0xff; //计时结束 熄灭数码管
}
}
shi=s0/10;
ge=s0%10;
P0=0xff; // 数码管显示
we=1;
P0=list[0];
we=0;
du=1;
P0=table[shi];
du=0;
delay(5);
P0=0xff;
we=1;
P0=list[1];
we=0;
du=1;
P0=table[ge];
du=0;
delay(5);
KeyScan();
if(KeyValue==16)
flag=-flag;
}
}
}