常用的按键/输入口检测程序
最低级的就是硬延时检测了,通过硬延时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、
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;
}
浙公网安备 33010602011771号