找回密码
 注册
关于网站域名变更的通知
查看: 379|回复: 2
打印 上一主题 下一主题

单片机如何用一个IO口采集多个按键信号?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-11-11 13:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
一般按键信号都是高低电平,对于每一个按键信号单片机都需要一个IO口进行采集,这种按键采集方式比较简单,但是占用的单片机IO口比较多。
8 j& n) X! N" q; F& T: p
9 \/ u  p: u9 F4 ^+ U! a2 b* k
如果按键非常多,例如键盘,可以采用行列阵列方式进行信号采集。这种方式仅需要少量IO口即可采集大量的按键信号。例如7个IO口可以最多采集3*4=12个按键信号。
# ^1 t- S) G- m, j

/ H$ w- u+ R" S8 B2 `. ?' |7 {$ c但是这种采集方式的编程比较复杂,再加上按键防抖等考虑因素,程序更加复杂,初学者不容易掌握。
( a# V( A6 X9 A, V% @# L. m" }本文给大家分享一种按键信号的采集方法,可以用一个IO口采集多个按键信号,不仅电路简单,而且编程比较容易实现。3 Q1 e4 K/ b& o# ]; L5 H, x
! Z3 \; d( I* C' |7 p4 q3 }  D
该方法只用一个IO可以采集多个按键,用的是IO口的AD功能。当不同的按键按下时,单片机AD口采集到的电压值不一样,于是就能区分出来是哪个按键按下了。即使是两个按键同时按下,也能根据电阻并联之后的电阻值算出输入到单片机的电压值,依据这个电压值也能识别出是哪两个按键按下。是不是很简单呢?7 S! X5 `( b* f: K
理论上这种方法用一个IO口可以采集几十几百个按键,但是考虑到电阻值的误差、上拉电源电压的误差、单片机AD采样的误差,在实际应用时,一个IO口采集的按键信号数量一般不会超过10个。& l1 i+ @" h, e6 M0 F% A
使用这个方法必须注意:- Z4 ]5 c) J8 f7 N" q& C# Y  f
(1) 必须用恒定已知的上拉电源,例如板内的稳压5V。0 y3 I1 f* N- O! d2 R
(2) 如果按键比较多,电路中所用电阻建议用1%高精度电阻。& o7 |* S4 h) I% Y3 V: m5 @
(3) 编程识别按键值时要用AD值区间范围来判定具体哪个按键按下了,不要用固定的AD值判定,原因就是前述提到的各种误差。
+ @! W7 o4 H$ {6 Y4 i(4) 如果单片机的IO口足够多,仍然建议用前述简单的一个IO采集一个按键的方式。! o$ Q7 B( ]0 A$ d% o
对于这个按键采集方法,大家有什么想法没?欢迎大家留言,赞美、拍砖、求教、指教都可以的。
6 h1 @2 m$ m% Q7 l1 B9 Q5 x, K& x2 j& N5 r, X- Y2 Z7 V% {

该用户从未签到

2#
发表于 2021-11-11 13:56 | 只看该作者
可以采用行列阵列方式进行信号采集

该用户从未签到

3#
发表于 2021-11-11 13:57 | 只看该作者
可以用IO口的AD功能
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-12 21:41 , Processed in 0.140625 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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