STM32/STM8技术william hill官网
直播中

周仁何

12年用户 228经验值
擅长:光电显示 控制/MCU
私信 关注
[问答]

键盘扫描方法大征集!! ! 快快进来

在这里向大家征集按键扫描的思路和方法,我们知道在实际运用中不能写delay() 这样的延时函数来消抖的,因为单片机会在这里白白浪费一段时间任何事情都不做,可能对于一些要求不高的场合也没什么影响,这里我们不讨论这种。当然我们也不能用while()来判断按键是否已经释放,如果这样的话一直按住这个键,单片机就死在这里了。大家都是怎么写的按键扫描程序呢,说说思路呀,或者贴出程序来大家一起讨论下。共同学习,共同进步

都没人来啊   我说说我的思路,抛砖引玉了   定时中断(例如10ms)  中断后进行按键扫描,1、第一次进来后判断是否有按键操作,如果有(KeyDelaytine++),计数器KeyDelayTine加1。2.第二次进来再次判断是否又按键按下,如果有(KeyDelayTime++),计数器再加1,如没有,则计数器清零退出,判定为抖动。3.当KeyDelayTime计数器加到一定的值后(比如:2、3、根据实际情况设定这个值)再进入扫描程序,扫描按键的键值。松手后清除KeyDelayTime计数器。4.当一直按住某个按键时,KeyDelayTime会一直加,当然前面要加个判定,来防止KeyDelayTime溢出,而当KeyDelayTime达到某个值时我们可以判定为长按。

回帖(3)

购线网

2014-7-24 17:21:34
等高手说思想  学习学习
举报

周仁何

2014-7-24 22:23:30
都没人来啊   我说说我的思路,抛砖引玉了   定时中断(例如10ms)  中断后进行按键扫描,1、第一次进来后判断是否有按键操作,如果有(KeyDelayTine++),计数器KeyDelayTine加1。2.第二次进来再次判断是否又按键按下,如果有(KeyDelayTime++),计数器再加1,如没有,则计数器清零退出,判定为抖动。3.当KeyDelayTime计数器加到一定的值后(比如:2、3、根据实际情况设定这个值)再进入扫描程序,扫描按键的键值。松手后清除KeyDelayTime计数器。4.当一直按住某个按键时,KeyDelayTime会一直加,当然前面要加个判定,来防止KeyDelayTime溢出,而当KeyDelayTime达到某个值时我们可以判定为长按。
举报

梦E随风

2014-7-25 22:25:59
反正是 看脉冲                       
举报

更多回帖

发帖
×
20
完善资料,
赚取积分