常用的按键/输入口检测程序

最低级的就是硬延时检测了,通过硬延时10~20ms消抖。

普遍采用的都是定时扫描,通过定时中断消抖。这个是核心思想。
例举网上几个常用的算法。
1、
unsigned char Trg;//Trg(triger) 代表的是触发
unsigned char Cont;//Cont(continue)代表的是连续按下。
void KeyRead( void )
{
    unsigned char ReadData = PINB^0xff;   
    Trg = ReadData & (ReadData ^ Cont);     
    Cont = ReadData;                          
}
评:不推荐使用,原因,消抖不严格。
2、

Keradyn=Ktemp Kinput+Kreadyn-1 (Ktemp ⊙Kinput)    (1)

Ktemp=Kinput    (2)

评:推荐使用,缺点是扩展新功能不易。

3、
马老师利用状态机写的按键检测程序:多功能按键设计
评:灵活多用,消抖次数更改方便。扩展多功能程序稍显复杂。
4、
上述都是用在按键检测场合,特殊IO检测可能需要多次长时间消抖。
比如车辆ACC检测,直接按下面的方式效果更好。
if(!ACC_INPUT) {
    if(accon < 10) {
       if(++accon == 10) {
           accoff = 0;
       }
    }
}
else{
    if(++accoff > 3) accon = 0;
}

posted on 2013-04-27 14:11  先天圣体道胎  阅读(380)  评论(0)    收藏  举报

导航