简易按键消抖(使用ADC,短按 长按)

按键是非常常用的小外设,要么配上外部中断,要么直接接I/O口扫描状态,我这边因为端口不够就用了ADC功能。先讲短按每个按键对应不同的电压值,没有按键按下时ADC输入通道接的是5V,按下之后我设计了以下几种情况:1.SW1 0V2.SW2 2.5V3.SW3 3.3V4.SW4 3.8V理论上配置完ADC模块,开启ADC转换,在每次ADC转换完成触发中断的时候就可以根据采...
摘要由CSDN通过智能技术生成

按键是非常常用的小外设,要么配上外部中断,要么直接接I/O口扫描状态,我这边因为端口不够就用了ADC功能。

先讲短按

每个按键对应不同的电压值,没有按键按下时ADC输入通道接的是5V,按下之后我设计了以下几种情况:

1.SW1 0V

2.SW2 2.5V

3.SW3 3.3V

4.SW4 3.8V

理论上配置完ADC模块,开启ADC转换,在每次ADC转换完成触发中断的时候就可以根据采集值确认按键是哪个了。

但是存在一个问题,比如说我按下ESC键,电压下降是一个过程,如果它下降到3.3v的时候一次采集就完成,那采集的值不就错了吗。

所以需要消抖,我这里消抖的方式是这样:

关于短按

1.设置一个大小为2的数组KEY[2]

2.KEY[0]用于存最新的值,KEY[1]用于缓存上一次的值

3.如果有键按下,如果KEY[0]和KEY[1]之间的差值(无论哪个大)大于100(这个数可根据不同的ADC采样的精度自己调整),则代表按键并不稳定

4.将KEY[1]的值更新为KEY[0],等待下一次中断

5.直到KEY[1]和KEY[0]的差值小于100,代表按键稳定,可进行按键状态判断(此处置一个状态稳定flag)

6.等到按键松开时进行keystatus按键状态的修改

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值