各位友友们,下面这个代码怎么让它按键检测更灵敏一点,我做的是一个时钟它现在的情况是在调时间状态下,有时候按一下就可以实现加减,有时候需要按两次,非常不灵敏,有没有什么办法?
#include "regx52.h"
#include "T0.h"
#include "LCD1602.h"
#include "key.h"
#include "Delay.h"
unsigned int count;
char s, min = 59, h = 23;
unsigned char keynum;
char n=1;
unsigned char change;
void main()
{
T0_init();
LCD_Init();
LCD_ShowString(1, 1, "Clock");
LCD_ShowNum(2, 1, h, 2);
LCD_ShowChar(2, 3, ':');
LCD_ShowNum(2, 4, min, 2);
LCD_ShowChar(2, 6, ':');
LCD_ShowNum(2, 7, s, 2);
while (1)
{
keynum = key();
if (keynum == 1) { n = -n; if (n == -1)TR0 = 0; else if (n == 1)TR0 = 1; }
if (keynum == 4) {change = (change + 1) % 3;}
if (n==-1)
{
if(change==1)
{
LCD_ShowNum(2, 4, min, 2);
Delay(20);
LCD_ShowString(2, 4, " ");
Delay(20);
if (keynum == 2) { min++; if (min >= 60)min = 0; }
else if (keynum == 3) { min--; if (min < 0)min = 59; }
}
else if (change == 0)
{
LCD_ShowNum(2, 7, s, 2);
Delay(20);
LCD_ShowString(2, 7, " ");
Delay(20);
if (keynum == 2) { s++; if (s >= 60)s = 0; }
else if (keynum == 3) { s--; if (s < 0)s = 59; }
}
else if (change == 2)
{
LCD_ShowNum(2, 1, h, 2);
Delay(20);
LCD_ShowString(2, 1, " ");
Delay(20);
if (keynum == 2) { h++; if (h >= 24)h = 0; }
else if (keynum == 3) { h--; if (h < 0)h = 23; }
}
}
else
{
LCD_ShowNum(2, 1, h, 2);
LCD_ShowNum(2, 4, min, 2);
LCD_ShowNum(2, 7, s, 2);
}
}
}
void T0_stop() interrupt 1
{
TL0 = 0x18;
TH0 = 0xFC; TF0 = 0;
count++;
if (count >= 1000)
{
s++; count = 0;
if (s >= 60)
{
min++; s = 0;
if (min >= 60)
{
h++; min = 0;
if (h >= 24)
{
h = 0;
}
}
}
}
}