EDA365电子工程师网

标题: 三个IO口控制5个按键 [打印本页]

作者: 与你同行    时间: 2014-4-8 11:42
标题: 三个IO口控制5个按键
请问各位老大们,如图中所示,三个IO口 ,控制5个按键,软件上是怎样实现的,有谁知道的请告诉一下。谢谢!

QQ图片20140408114037.jpg (194.84 KB, 下载次数: 13)

QQ图片20140408114037.jpg

作者: hukee    时间: 2014-4-8 13:48
k6 按下 f0 L f2 L
& a/ A" M0 s% Q5 U7 u7 _k3 按下 f1 L f2 L
- X8 K* c3 u  w0 ~k1 按下 f2 H
) s# [0 l, o! g8 Z, `k4 按下 f1 H6 y8 Z: w" r0 k2 D5 }3 |
k5 按下 f0 H
作者: 与你同行    时间: 2014-4-8 14:34
那请问按键没有按下时,F0 F1 F2是什么状态?
作者: nacklack    时间: 2014-4-9 22:09
这个是软件进行设置的,可以让各个IO口置电平,让后其他的进行扫描,不过此图软件有点难做
作者: 戏出东方    时间: 2014-4-9 22:24
没按下,外部下拉啊,看看器件有没有内部的上下拉设置
作者: 天才小痴    时间: 2014-4-10 11:59
这电路设计的有点烂,3个IO做五个键不应该这样设计
作者: 天才小痴    时间: 2014-4-10 12:25
你的软件一开始把F0,F1,F2都设置为输入,读这三个口的状态,当F0为1时K5按下,当F1为1时K4按下,F2为1时K1按下,扫描完这三个口后,把F0,F1设置输出口,先让F0输出高电平,F1读出低电平,读F2的状态,F2为1时,K6按下,再次F0=0,F1=1,再读F2的状态,F2为1,K3按下!扫描所有的按键完成!
作者: 与你同行    时间: 2014-4-12 12:41
好象有点明白了。
作者: lvzhenjiang    时间: 2014-6-13 16:33
为什么不用一个AD口和分压电路来监测不同按键按下时获得不同电压来判断是哪个按键按下啊?$ B6 t9 g' O( w. z" g4 F. J3 q* ]

作者: 140260    时间: 2014-7-3 10:04
lvzhenjiang 发表于 2014-6-13 16:336 g* `2 v: V$ O) w
为什么不用一个AD口和分压电路来监测不同按键按下时获得不同电压来判断是哪个按键按下啊?
1 U2 O8 h! \- c8 b8 P' Q  ?7 S
那不得弄个采样的么~~
作者: 李明宗伟    时间: 2014-7-3 11:33
天才小痴 发表于 2014-4-10 12:25
& Z0 M  d2 L! Y你的软件一开始把F0,F1,F2都设置为输入,读这三个口的状态,当F0为1时K5按下,当F1为1时K4按下,F2为1时K1 ...
. S2 q  e, d# k+ B: s. Z
高手,按照你这个解释有问题啊。
- g8 j/ o! d/ ~' J6 o" x1 J* M7 d3 t; S% A) R# T# m
假设我按下K1,这时F2为1;若程序此时正在检查K3或K6,按照你的流程,此时程序会认为是K3或K6被按下了。
7 ?6 F9 A- I5 T0 X% ^) _
" {6 F7 i; X% V# q! w所以我认为,在检测K3或K6时,软件上还应该做一个判断,来排除K1导致的误判。这种程序搞起来还是很烦人的。
作者: 天才小痴    时间: 2014-7-7 18:21
李明宗伟 发表于 2014-7-3 11:33
+ c8 e2 X& |- G% E  q; A$ J高手,按照你这个解释有问题啊。
! e8 r1 c7 l, V8 s+ r+ N  p& f
5 q0 h/ d0 ?; N" U( k% T& l假设我按下K1,这时F2为1;若程序此时正在检查K3或K6,按照你的流程 ...
7 C: V2 o& Z2 j7 W4 h) p
你这个电路只有处理单键任务,F0,F1,F2为输入状态,F0为1,K5被按下,F1为1,K4被按下,F2为1,K1被按下,处理完后再来判断K3,K6的事件,F0,F1为输出状态,输出低电平,F2为上拉输入状态,F0 = 0,K6按下,F2为0,K6按下,F1输出0,K3被按下,F2为0..这样处理,就不会判断有误了!
& @3 Y0 J  l1 K3 A5 V- }; M
) S6 Z0 m4 }$ W6 i' \! s& |1.
" d1 a+ p% w( Y: HF0,F1,F2设置为输入,读F0.F1.F2的状态,对应该K5,K4,K1的事件& v# @2 r2 _% ~7 C
2.F0,F1设置为输出低电平,F2上拉输入
! L( V; X+ B4 D7 Y. ]$ K当F0 = 0时,F2读到的状态为0,K6 事件$ O# T/ @& y6 R( L2 l" }) n
当F1 = 0时,F2读到的状态为0,K3事件
* ~5 D9 P- P8 I9 \7 l这个时候按K5,K4,K1都是无效的。唯一考虑的问题是F0,F1直接接电源会不会去IO损坏。
作者: change2011    时间: 2014-7-9 00:08
天才小痴 发表于 2014-7-7 18:21
3 A7 c0 Z* R& H" [你这个电路只有处理单键任务,F0,F1,F2为输入状态,F0为1,K5被按下,F1为1,K4被按下,F2为1,K1被按下 ...

2 g$ P$ A, K. V4 R( Z! P扫描K3、K6时,F0、F1输出低电平;F2如果是输入状态,应该不能输出高低电平。如果输出高电平,那不成了输出状态?按下K3、K6究竟时被拉低,还是拉高?以上本人疑虑,请高手讲解?
作者: 天才小痴    时间: 2014-7-9 20:03
change2011 发表于 2014-7-9 00:08
2 n4 L( u4 H6 u7 N扫描K3、K6时,F0、F1输出低电平;F2如果是输入状态,应该不能输出高低电平。如果输出高电平,那不成了输 ...
' D0 P1 l& \4 L6 V$ O
具体看MCU的型号,有的MCU可以设置为带上拉的输入模式,例如STM32的MCU输入可以调置为GPIO_Mode_IPU




欢迎光临 EDA365电子工程师网 (http://bbs.elecnest.cn/) Powered by Discuz! X3.2