发新帖我要提问
12
返回列表
打印
[技术问答]

一个按键如何实现短按和长按的识别?

[复制链接]
楼主: xinxianshi
手机看帖
扫描二维码
随时随地手机跟帖
21
biechedan| | 2024-10-16 12:47 | 只看该作者 回帖奖励 |倒序浏览
当检测到按键按下时,启动计时器。
当检测到按键释放时,停止计时器,并读取计时器的值。
根据读取的计时器值与设定的时间阈值进行比较,判断是短按还是长按。
根据判断结果执行相应的操作,例如短按时执行某个功能,长按时执行另一个功能。

使用特权

评论回复
22
uptown| | 2024-10-16 16:56 | 只看该作者
当按键引脚电平发生变化时触发中断。在中断服务程序中启动定时器。例如,在 STM32 单片机中,可以配置外部中断线与按键引脚相连,当按键按下产生电平变化时,进入中断服务程序并启动定时器。

使用特权

评论回复
23
FranklinUNK| | 2024-10-16 19:50 | 只看该作者
用定时器

使用特权

评论回复
24
backlugin| | 2024-10-17 14:53 | 只看该作者
在按键被按下后,需要检测按键的释放。
通过读取按键引脚状态,并结合去抖动处理,来确定按键已经释放。

使用特权

评论回复
25
fengm| | 2024-10-18 14:44 | 只看该作者
当检测到按键被按下时,由于机械或电气原因,可能会产生抖动,因此需要软件去抖动。
可以通过延时一段时间(例如10ms)后再次检测按键状态,如果状态保持不变,则认为按键动作有效。

使用特权

评论回复
26
sesefadou| | 2024-10-19 10:36 | 只看该作者
设置一个时间阈值,例如500毫秒,来区分短按和长按。
如果在定时器计时过程中按键被释放,且计时小于阈值,则认为是短按。
如果定时器计时超过阈值,且按键仍然按下,则认为是长按。

使用特权

评论回复
27
uiint| | 2024-10-19 15:32 | 只看该作者
单片机通过读取与按键连接的输入引脚电平状态来检测按键是否被按下。当按键未按下时,输入引脚通常为高电平(假设上拉电阻连接);当按键按下时,输入引脚变为低电平。

使用特权

评论回复
28
earlmax| | 2024-10-20 19:36 | 只看该作者
先配置一个5ms定时器并打开中断,每进入该定时中断则置位一次标志位“key_handle”。接着在主循环调用一个“scan_key()”函数,判断“key_handle”标志位是否在定时器内被置位,若被置位则将该位复位并读取连接按键的IO口值。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则