[PIC®/AVR®/dsPIC®产品] 如何实现单击,双击,三连击,以及长按检测呢?

[复制链接]
2461|15
 楼主| jiekou001 发表于 2024-3-24 13:26 | 显示全部楼层 |阅读模式
单片机的IO按键如何实现单击,双击,三连击,以及长按检测呢?
有没有简单成熟的方法,求分享。
问天少年 发表于 2024-3-25 10:49 | 显示全部楼层
在单片机应用开发中,实现单个IO按键上的单击、双击、三连击及长按检测通常需要一套综合的软件算法,结合硬件中断或周期性查询的方式监测按键状态变化。以下是一个通用的设计思路:

思路概览:
硬件准备:

使用外部中断(下降沿或上升沿)感知按键按下事件,以减少软件查询次数,提高响应速度。
对于精确的时间间隔测量,可以启用内部定时器。
软件设计:

按键消抖:消除机械按键触点抖动的影响,通常设置一个短暂延时(如5ms)来确认按键状态稳定。

状态变量:

定义变量记录按键状态(如lastPressTime记录上次按键按下时间,pressCount记录连续按下的次数,longPressTimer用于长按计时等)。
事件检测流程:

单击:按键按下后迅速弹起,在两次按键间隔大于预设单击阈值(例如500ms)时,计数为1次单击。
双击:在单击阈值内再次检测到按键按下并释放,计为双击。
三连击:在单击阈值内第三次检测到按键按下并释放,计为三连击。
长按:若按键一直保持按下状态,且持续时间超过预设的长按阈值(例如2秒),则判定为长按。
实现逻辑:

当检测到按键按下事件时,启动定时器,并重置按键计数器。
按键未释放前,定时器不断更新,比较当前时间与初始按下时间,判断是否达到长按条件。
若按键在较短时间内释放并再次按下,累加按键计数器,根据计数器的值来判断是单击、双击还是三连击。
若按键释放后等待时间超出单击阈值,则清零计数器,准备下一轮按键检测。
lcczg 发表于 2024-3-25 15:02 | 显示全部楼层
这个要定时器功能了。
chenqianqian 发表于 2024-3-25 21:54 来自手机 | 显示全部楼层
检测按键按下的持续时间长短来决定。
田舍郎 发表于 2024-3-25 22:50 来自手机 | 显示全部楼层
还有长按开机,长按关机
CoolSilicon 发表于 2024-3-26 10:38 | 显示全部楼层
纯软件, 或者算法来解决了..
短按,长按, 双击的时间都是自定义的.
t1ngus4 发表于 2024-3-26 15:19 | 显示全部楼层
这网上不是有很多这方面的资料么
zhizia4f 发表于 2024-3-26 16:25 | 显示全部楼层
你可以去GitHub上看看,然后自己移植一下就行了
suw12q 发表于 2024-3-26 17:39 | 显示全部楼层
你自己做都可以,就是用定时器检测长按,双击等等
p0gon9y 发表于 2024-3-26 19:00 | 显示全部楼层
这个不费劲的,逻辑就是用定时器来判断IO是否被触发按下等等
q1d0mnx 发表于 2024-3-26 20:04 | 显示全部楼层
长按的话可以这么理解,就是定时器3秒,三秒之后还有IO按下就算是长按,其他亦然
q1ngt12 发表于 2024-3-26 21:10 | 显示全部楼层
单击就是普通的IO按键呗,双击就是加个标记呗
l1uyn9b 发表于 2024-3-27 09:08 | 显示全部楼层
长按比较简单吧,就是短按就麻烦了
w2nme1ai7 发表于 2024-3-27 10:17 | 显示全部楼层
你梳理一下这几个按键的按下的特色呗,就用这个区分就好了
cen9ce 发表于 2024-3-27 12:01 | 显示全部楼层
三连击的话就是双击的嵌套版本呗

您需要登录后才可以回帖 登录 | 注册

本版积分规则

148

主题

1542

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部