|
编程思路很有问题。滤掉键盘的抖动不需要用延时这么笨的办法。
http://blog.ednchina.com/azmao/172310/message.aspx是一个经典的按键扫描程序。
主程序这样写
void main()
{
Init();
InitLCD();
InitPara();
SysTest();
while(1)
{ if(at50ms)
{
at50ms = 0; //50ms执行扫描程序一次
KeyScan();
}
if(KeyFlag != 1) //1秒内无键盘处理
{
if(KeyHit())
{
//do something
KeyFlag=1;
timer1000ms = 0;
at1000ms = 1; //启动1S定时
}
}
}
}
定时中断程序10ms
void TIMER2() interrupt 5
{
TF2 = 0;
timer50ms++;
timer1000ms++;
if(timer50ms >= 5)
{
timer50ms = 0;
at50ms = 1;
}
if(timer1000ms >= 100)
{
timer1000ms = 0;
at1000ms = 1;
KeyFlag=0;
}
}
//判断是否有键
bit KeyHit (void)
{
bit hit;
hit = (bit)(KeyNRead > 0) ? 1 : 0;
return (hit);
} |
|