单片机的程序框架 作者: 时间:2016-11-28 来源:网络 加入技术交流群 扫码加入和技术大咖面对面交流海量资料库查询 收藏 我们用两种有效的方法来解决此问题:1 在按键功能比较简单的情况下,我们仍然用上面的kbscan()函数进行扫描,只是把其中去抖用的软件延时去了,把去抖以及判断按键的释放用一个函数来处理,它不用软件延时,而是用定时器的计时(用一般的计时也行)来完成;代码如下void ClearKeyFlag(void){KeyDebounceFlg= 0;KeyReleaseFlg= 0;}void ScanKey(void){++KeyDebounceCnt;//去抖计时(这个计时也可以放在后台定时器计时函数中处理)KeyCode = kbscan();if (KeyCode != KEY_NONE){if (KeyDebounceFlg)//进入去抖状态的标志位{if (KeyDebounceCnt > DEBOUNCE_TIME)//大于了去抖规定的时间{if (KeyCode == KeyOldCode)//按键依然存在,则返回键值{KeyDebounceFlg= 0;KeyReleaseFlg= 1;//释放标志return;//Here exit with keycode}ClearKeyFlag();//KeyCode != KeyOldCode,只是抖动而已}}else{if (KeyReleaseFlg == 0){KeyOldCode= KeyCode;