“而使用定时中断的检测,第二次检测时,已经避开了抖动,其实并不一定需要消抖”
这句话最早源自农民讲习所长的博客**中关于键盘扫描技术部分。
其实这是OS中采用的技术:把键盘扫描当做一个独立任务A,每隔20ms或者50ms或者200ms扫描一次,如果A任务2次运行都检测到键盘按下有效,即认为此时键盘状态为“消除干扰”之后的有效状态。显然这里没有专门处理消抖的延时程序,例如下面开关检测程序:
FUNCTION: SWITCH_ON_OFF_Update() This is the main on-off switch function.
It should be scheduled every 50 - 500 ms.
-*------------------------------------------------------------------*/ void SWITCH_ON_OFF_Update(void) { // If the switch is blocked, decrement the count and return // without checking the switch pin status. // This is done to give the user time to remove their finger // from the switch - otherwise if they keep their finger on // the switch for more than 0.4s the light will switch off again.
if (Sw_blocked_G) { Sw_blocked_G--; return; } . . . . . 在OS中,消抖的概念已经弱化,一旦检测到开关闭合(第一次/二次确定),开关状态就被阻塞了,(是否零耗时动作由用户决定。)此后开关的任何状态,系统都不关心,——“才不管你抖不抖。”
当然33楼谈的是所长5年前写的OS中采用的键盘扫描技术,——任务、进程什么的。跟前面网友说的是2个分支的技术。一件事物的两个面,站在任何一面的人都说反面的人看错了。xi,xi. |