听起来不是USB问题而是键盘扫描问题。你用一个变量的值0、1、2、3去代表按键的状态就行了。0表示弹起,1表示按下正在消抖,2表示按下并稳定,3表示松开过程中正在消抖。
0状态下检测到有效电平即转入1状态;
1状态检测到无效电平即转回0状态;
1状态持续n次连续监测到有效电平则认为抖动已经过去,转入2状态,这个瞬间触发一次按键事件(比如发出数字3的值);
2状态下检测到无效电平即转入3状态;
3状态下检测到有效电平即退回2状态;
3状态下持续n次检测到无效电平即认为按键彻底松开并稳定,转入0状态。
要再触发一次按键事件,必须再经历一次完整状态循环。使用这种状态机可以避免误触发,同时不损失响应速率。 |