[STM32F0] 按键长按短按判断

[复制链接]
3197|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

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