完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在这里向大家征集按键扫描的思路和方法,我们知道在实际运用中不能写delay() 这样的延时函数来消抖的,因为单片机会在这里白白浪费一段时间任何事情都不做,可能对于一些要求不高的场合也没什么影响,这里我们不讨论这种。当然我们也不能用while()来判断按键是否已经释放,如果这样的话一直按住这个键,单片机就死在这里了。大家都是怎么写的按键扫描程序呢,说说思路呀,或者贴出程序来大家一起讨论下。共同学习,共同进步
都没人来啊 我说说我的思路,抛砖引玉了 定时中断(例如10ms) 中断后进行按键扫描,1、第一次进来后判断是否有按键操作,如果有(KeyDelaytine++),计数器KeyDelayTine加1。2.第二次进来再次判断是否又按键按下,如果有(KeyDelayTime++),计数器再加1,如没有,则计数器清零退出,判定为抖动。3.当KeyDelayTime计数器加到一定的值后(比如:2、3、根据实际情况设定这个值)再进入扫描程序,扫描按键的键值。松手后清除KeyDelayTime计数器。4.当一直按住某个按键时,KeyDelayTime会一直加,当然前面要加个判定,来防止KeyDelayTime溢出,而当KeyDelayTime达到某个值时我们可以判定为长按。 |
|
相关推荐
3个回答
|
|
等高手说思想 学习学习
|
|
|
|
都没人来啊 我说说我的思路,抛砖引玉了 定时中断(例如10ms) 中断后进行按键扫描,1、第一次进来后判断是否有按键操作,如果有(KeyDelayTine++),计数器KeyDelayTine加1。2.第二次进来再次判断是否又按键按下,如果有(KeyDelayTime++),计数器再加1,如没有,则计数器清零退出,判定为抖动。3.当KeyDelayTime计数器加到一定的值后(比如:2、3、根据实际情况设定这个值)再进入扫描程序,扫描按键的键值。松手后清除KeyDelayTime计数器。4.当一直按住某个按键时,KeyDelayTime会一直加,当然前面要加个判定,来防止KeyDelayTime溢出,而当KeyDelayTime达到某个值时我们可以判定为长按。
|
|
|
|
反正是 看脉冲
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1187 浏览 0 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1122 浏览 2 评论
2223 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1311 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1735 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-28 00:10 , Processed in 0.571075 second(s), Total 77, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号