作者zxzx8059 (zxzx8059)
看板ASM
标题[问题] 该如何处理20个按键防弹跳?
时间Fri Jan 19 12:24:33 2018
各位先进大家好
一般在按钮开关MCU都会做防弹跳(消抖),Timer+状态机之类的,只需判断是否按下,不
判断长短压、连按之类的。
若是一个两个开关还好,但是增加到20个开关对应20个I/O时,请问各位先进会如何处理
呢?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 49.214.128.51
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/ASM/M.1516335876.A.680.html
1F:→ zxzx8059: 目前还没有很好的想法,最惨就是土法炼钢,相关的code 01/19 12:26
2F:→ zxzx8059: 复制20份Orz 01/19 12:26
3F:→ dsplab: 每个按键并联上0.1uF的电容 01/19 13:03
4F:→ zxzx8059: 改硬体要重新送认证... 目前的状况是io被emi打到让mcu以 01/19 15:08
5F:→ zxzx8059: 为开关开了 01/19 15:08
6F:推 chuegou: debounce(Button_struct* pbutton) 01/19 16:12
7F:→ chuegou: 相关参数封装成结构就可以了 01/19 16:12
8F:→ zxzx8059: 谢谢,我想一想 01/19 18:04
9F:推 lion21: 改架构吧 我认为可以更好 01/21 22:57
10F:推 TWkobe: 为什麽20个要 debounce 难不成会同时? 01/24 02:00
11F:→ TWkobe: 作成key pad然後用int,timer即可 01/24 02:01
12F:→ zxzx8059: 因为是20个实体的开关机构 01/24 09:41
13F:推 TWkobe: 基本上不太可能多按扭同时按下 timer是够用的 01/24 11:34
14F:→ TWkobe: 只要某个按扭按下 触发int启动isr 01/24 11:35
15F:→ TWkobe: 然後启动timer即可 多按扭就可以用array纪录status 01/24 11:36
16F:→ TWkobe: 不过未何需要20份同样的code? 01/24 11:38
17F:→ zxzx8059: 原本负责的同事在国外出差,用的mcu我没用过架构不了解 01/24 13:14
18F:→ zxzx8059: ,原定对应的计画客户说不行 01/24 13:14
19F:→ zxzx8059: 这周就要测试,所以就先这样改,能测过才会继续优化写法 01/24 13:16
20F:→ zxzx8059: ,产品类似仪表开关,一次动到很多个是有可能的 01/24 13:16
21F:推 stupid0319: 用光轴 01/26 12:16
22F:→ shinfon: 硬件消抖像是楼上说的电容(不推荐)或是软件消抖 02/18 00:49
23F:→ wang3166: 74922 这个IC可以试看看,要判断状态 建议用结构体 02/21 15:55