一种软件去除键抖动的方法
}
voidget_key_value(void)
{
if(getkey)
{
unsignedchartemp;
unsignedcharj;
getkey=0;/*清标志*/
for(j=0;j<8;j++)
{
temp=_cror_(koutput,1);/*循环右移寻找按下的键*/
if(_testbit_(ACC_7))/*如果ACC_7=1,找到了按下的键*/
{
key_value=j;/*获得键值*/
j=8;/*找到按下的键就退出循环*/
kprocess=1;/*置标志,准备进行键处理*/
}
elseKoutput=temp;/*准备下一次寻找*/
}
}
}
voidtimer0_interrupt_handler(void)interruptusing1
{
TL0=0xe0;/*加载定时器参数,使晶振频率12MHz时中断周期为20ms*/
TH0=0xb1;
/*键扫描*/
P2_0;/*使能键扫描位*/
Kinput=~P0;/*从P0读入按键信息,反相后保存*/
endebounce;/*置标志位准备去抖动*/
/*其它与定时器有关的语句*/
} 《一种软件去除键抖动的方法(第3页)》