打印
[STM32F0]

按键长按短按判断

[复制链接]
2537|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qwerdf2|  楼主 | 2016-11-14 15:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
利用AD采集到一个值,然后判断是按下了哪个键,
比如说是按下了KEY1键,但要判断是长按还是短按,怎么给长按和短按赋不同值。
该怎么处理啊?
沙发
qwerdf2|  楼主 | 2016-11-14 16:07 | 只看该作者

使用特权

评论回复
板凳
Xflyan| | 2016-11-14 17:30 | 只看该作者
按键有两个过程,按下/释放,求时间差,加定时判断,比如100mS检测一次,如果连续10次读到按下,那归为长按,如果小于10次则为短按

使用特权

评论回复
地板
技术小小兵| | 2016-11-14 20:32 | 只看该作者
根据你当前的定义,提供两组方法:
1.设定一个阈值,读取ADC的值,根据阈值划分高低电平(最好就是做一组滑动平均或者低通滤波,这样可以有效去抖,避免过于复杂的逻辑判断),然后设计一组延时判断逻辑,分析“按键按下事件”、“按键按住事件”、“按键弹起事件”的转换条件和时间点,以“弹起事件”为结束,判断弹起时间来判断长按弹起和短按弹起;
2.说点复杂点的,利用STM32的各种功能组合,ADC设定为TIM触发,并设定ADC转换完成事件触发DMA传输,DMA设定传输完成中断,即每Ta时间自动触发一次ADC转换并传输到DMA,每A次DMA传输触发一次DMA中断,当DMA中断到来时,已经有A次每Ta时间采集的ADC数据,在DMA中断内设计一组状态判断(同1),这样就相当于后台拥有了一个按键判断逻辑,main里面每次只需要判断DMA中断中处理的按键状态全局变量进行相应的动作,有助于识别“按键按住”这个动作。

使用特权

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

本版积分规则

2

主题

6

帖子

0

粉丝