在这里向大家征集按键扫描的思路和方法,我们知道在实际运用中不能写delay() 这样的延时函数来消抖的,因为单片机会在这里白白浪费一段时间任何事情都不做,可能对于一些要求不高的场合也没什么影响,这里我们不讨论这种。当然我们也不能用while()来判断按键是否已经释放,如果这样的话一直按住这个键,单片机就死在这里了。大家都是怎么写的按键扫描程序呢,说说思路呀,或者贴出程序来大家一起讨论下。共同学习,共同进步
都没人来啊 我说说我的思路,抛砖引玉了 定时中断(例如10ms) 中断后进行按键扫描,1、第一次进来后判断是否有按键操作,如果有(KeyDelay
tine++),计数器KeyDelayTine加1。2.第二次进来再次判断是否又按键按下,如果有(KeyDelayTime++),计数器再加1,如没有,则计数器清零退出,判定为抖动。3.当KeyDelayTime计数器加到一定的值后(比如:2、3、根据实际情况设定这个值)再进入扫描程序,扫描按键的键值。松手后清除KeyDelayTime计数器。4.当一直按住某个按键时,KeyDelayTime会一直加,当然前面要加个判定,来防止KeyDelayTime溢出,而当KeyDelayTime达到某个值时我们可以判定为长按。
一周热门 更多>