数码之家

 找回密码
 立即注册
搜索
查看: 1707|回复: 32

[C51] 转帖:按键防抖_单片机用一个IO口采集多个按键信号

[复制链接]
发表于 2022-10-2 17:35:04 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

您需要 登录 才可以下载或查看,没有账号?立即注册

x

一般按键信号都是高低电平,对于每一个按键信号单片机都需要一个IO口进行采集,这种按键采集方式比较简单,但是占用的单片机IO口比较多。


                               
登录/注册后可看大图

如果按键非常多,例如键盘,可以采用行列阵列方式进行信号采集。这种方式仅需要少量IO口即可采集大量的按键信号。例如7个IO口可以最多采集3*4=12个按键信号。


                               
登录/注册后可看大图

但是这种采集方式的编程比较复杂,再加上按键防抖等考虑因素,程序更加复杂,初学者不容易掌握。

本文给大家分享一种按键信号的采集方法,可以用一个IO口采集多个按键信号,不仅电路简单,而且编程比较容易实现。


                               
登录/注册后可看大图

该方法只用一个IO可以采集多个按键,用的是IO口的AD功能。当不同的按键按下时,单片机AD口采集到的电压值不一样,于是就能区分出来是哪个按键按下了。即使是两个按键同时按下,也能根据电阻并联之后的电阻值算出输入到单片机的电压值,依据这个电压值也能识别出是哪两个按键按下。是不是很简单呢?

理论上这种方法用一个IO口可以采集几十几百个按键,但是考虑到电阻值的误差、上拉电源电压的误差、单片机AD采样的误差,在实际应用时,一个IO口采集的按键信号数量一般不会超过10个。

使用这个方法必须注意:

(1) 必须用恒定已知的上拉电源,例如板内的稳压5V。

(2) 如果按键比较多,电路中所用电阻建议用1%高精度电阻。

(3) 编程识别按键值时要用AD值区间范围来判定具体哪个按键按下了,不要用固定的AD值判定,原因就是前述提到的各种误差。

(4) 如果单片机的IO口足够多,仍然建议用前述简单的一个IO采集一个按键的方式。

对于这个按键采集方法,大家有什么想法没?欢迎大家留言,指教。


打赏

参与人数 2家元 +40 收起 理由
寂静的春天 + 20
kkdkj + 20 謝謝分享

查看全部打赏

发表于 2022-10-2 17:52:15 | 显示全部楼层
早就有这种方式了,以前的彩电;显示器;太多用这种方式。但当按钮接触不好,容易串键、
回复 支持 0 反对 0

使用道具 举报

 楼主| 发表于 2022-10-2 18:47:36 | 显示全部楼层
dongyishaonv 发表于 2022-10-2 17:52
早就有这种方式了,以前的彩电;显示器;太多用这种方式。但当按钮接触不好,容易串键、 ...

是的,我也是看液晶电视的电路图的时候看到的,刚开始不太理解,搜了下才明白是用ADC,看着挺好的介绍,就转过来了
回复 支持 反对

使用道具 举报

发表于 2022-10-2 19:25:50 | 显示全部楼层
以前的电视之类的不就是,时间久了并不好用应该是共识了,
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-2 19:31:59 | 显示全部楼层
ploestar 发表于 2022-10-2 19:25
以前的电视之类的不就是,时间久了并不好用应该是共识了,

这个和这个原理没啥关系吧?是按键本身的问题吧。所以现在很多按键都搞成触摸式的了
回复 支持 反对

使用道具 举报

发表于 2022-10-2 19:52:13 | 显示全部楼层
按键用久了 就会接触不良,电阻变化就串键
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-2 19:57:54 | 显示全部楼层
vip2128 发表于 2022-10-2 19:52
按键用久了 就会接触不良,电阻变化就串键

反正按键式的都有这个问题吧,不是串键就是不灵,反正现在这种按键是都不想碰,能改触摸的都改触摸
回复 支持 反对

使用道具 举报

发表于 2022-10-2 20:53:26 | 显示全部楼层
由于按键的接触电阻的不稳定性是无法避免的,所以这种用法早已被淘汰。
回复 支持 反对

使用道具 举报

发表于 2022-10-3 00:51:16 来自手机浏览器 | 显示全部楼层
我就说以前的老彩电几年后,按键没反应,多按几下还变其它功能键了。
回复 支持 反对

使用道具 举报

发表于 2022-10-3 08:21:40 | 显示全部楼层
这个方法在特殊情况下可以借鉴。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-3 10:15:27 | 显示全部楼层
hujj 发表于 2022-10-3 08:21
这个方法在特殊情况下可以借鉴。

一点都不特殊,看了下好几个液晶电视的电路图,按键部分都是这种设计
回复 支持 反对

使用道具 举报

发表于 2022-10-3 18:06:28 | 显示全部楼层
按键矩阵也是这样的吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-3 18:07:56 | 显示全部楼层
1588858 发表于 2022-10-3 18:06
按键矩阵也是这样的吧

不是的,两个完全不一样,这个是用ADC的
回复 支持 反对

使用道具 举报

发表于 2022-10-3 22:51:41 | 显示全部楼层
1块钱的8脚mcu无ADC
回复 支持 反对

使用道具 举报

发表于 2022-10-4 00:11:43 | 显示全部楼层
空调、电视、显示器经常遇到这种ADC按键,时间久了容易窜键。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-4 00:42:27 | 显示全部楼层
tjjtds1 发表于 2022-10-3 22:51
1块钱的8脚mcu无ADC

没有ADC的可以用个外扩ADC来搞,这个不是问题
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-4 00:43:33 | 显示全部楼层
40560335 发表于 2022-10-4 00:11
空调、电视、显示器经常遇到这种ADC按键,时间久了容易窜键。

按键部分一般不会仔细看,以前没怎么注意,一直以为只有普通按键和矩阵按键两种,这次自己的屏的按键坏了,仔细看了下按键的电路图才学习了新东西
回复 支持 反对

使用道具 举报

发表于 2022-10-4 12:30:25 | 显示全部楼层
ww5223017240 发表于 2022-10-4 00:42
没有ADC的可以用个外扩ADC来搞,这个不是问题

就为了那么点醋包的饺子,是吧
回复 支持 反对

使用道具 举报

发表于 2022-10-4 13:55:02 | 显示全部楼层
一个MP3蓝牙板子就是这种按键,其中一个识别不了,可能就是电阻阻值的问题,也可能是网上提供的线路阻值标注错了,
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-4 15:00:48 | 显示全部楼层
tjjtds1 发表于 2022-10-4 12:30
就为了那么点醋包的饺子,是吧

要看情况吧,毕竟单片机贵啊,IO越多越贵啊,你要是只是为了那么几个按键搞个多IO口的再加ADC的那成本就上去了啊
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2024-5-2 06:11 , Processed in 0.296400 second(s), 14 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

快速回复 返回顶部 返回列表