|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
一般按键信号都是高低电平,对于每一个按键信号单片机都需要一个IO口进行采集,这种按键采集方式比较简单,但是占用的单片机IO口比较多。
p$ `- w+ a4 e( b1 D: U* b0 {9 x
* D; D1 R4 c+ K z7 P1 c/ G如果按键非常多,例如键盘,可以采用行列阵列方式进行信号采集。这种方式仅需要少量IO口即可采集大量的按键信号。例如7个IO口可以最多采集3*4=12个按键信号。
- ^( [! c: c; J/ _, A3 _9 D% H! f8 @. { b" H3 J' }) }( Z" u
但是这种采集方式的编程比较复杂,再加上按键防抖等考虑因素,程序更加复杂,初学者不容易掌握。6 P" w. X3 H6 B$ P8 A9 c. S
本文给大家分享一种按键信号的采集方法,可以用一个IO口采集多个按键信号,不仅电路简单,而且编程比较容易实现。- J( t3 S# ~0 A- {
3 b Q8 d" E' i" @9 v5 P该方法只用一个IO可以采集多个按键,用的是IO口的AD功能。当不同的按键按下时,单片机AD口采集到的电压值不一样,于是就能区分出来是哪个按键按下了。即使是两个按键同时按下,也能根据电阻并联之后的电阻值算出输入到单片机的电压值,依据这个电压值也能识别出是哪两个按键按下。是不是很简单呢?6 k% T8 H- r' m* @$ W) n/ Q) y, t
理论上这种方法用一个IO口可以采集几十几百个按键,但是考虑到电阻值的误差、上拉电源电压的误差、单片机AD采样的误差,在实际应用时,一个IO口采集的按键信号数量一般不会超过10个。2 [$ s" R2 ]% M+ A8 C' {5 E
使用这个方法必须注意:( {& M( @4 J9 [* u
(1) 必须用恒定已知的上拉电源,例如板内的稳压5V。
& D: g# }& Q6 E* }/ k! H- `(2) 如果按键比较多,电路中所用电阻建议用1%高精度电阻。
+ m, |, b! F' z8 i! j1 \- U(3) 编程识别按键值时要用AD值区间范围来判定具体哪个按键按下了,不要用固定的AD值判定,原因就是前述提到的各种误差。9 ^; G# C V) ]: F
(4) 如果单片机的IO口足够多,仍然建议用前述简单的一个IO采集一个按键的方式。
, ?7 K/ I3 H" H+ S, P! E9 e( h% I对于这个按键采集方法,大家有什么想法没?欢迎大家留言,赞美、拍砖、求教、指教都可以的。# I" E9 {4 p' M% g
2 L9 V% e, S7 q d
|
|