微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 硬件电路设计 > 硬件电路设计讨论 > 三个IO口控制5个按键

三个IO口控制5个按键

时间:10-02 整理:3721RD 点击:
请问各位老大们,如图中所示,三个IO口 ,控制5个按键,软件上是怎样实现的,有谁知道的请告诉一下。谢谢!


这电路设计的有点烂,3个IO做五个键不应该这样设计

k6 按下 f0 L f2 L
k3 按下 f1 L f2 L
k1 按下 f2 H
k4 按下 f1 H
k5 按下 f0 H

那请问按键没有按下时,F0 F1 F2是什么状态?

这个是软件进行设置的,可以让各个IO口置电平,让后其他的进行扫描,不过此图软件有点难做

没按下,外部下拉啊,看看器件有没有内部的上下拉设置

你的软件一开始把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按下!扫描所有的按键完成!

好象有点明白了。

为什么不用一个AD口和分压电路来监测不同按键按下时获得不同电压来判断是哪个按键按下啊?

那不得弄个采样的么~~

高手,按照你这个解释有问题啊。
假设我按下K1,这时F2为1;若程序此时正在检查K3或K6,按照你的流程,此时程序会认为是K3或K6被按下了。
所以我认为,在检测K3或K6时,软件上还应该做一个判断,来排除K1导致的误判。这种程序搞起来还是很烦人的。

你这个电路只有处理单键任务,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..这样处理,就不会判断有误了!
1.
F0,F1,F2设置为输入,读F0.F1.F2的状态,对应该K5,K4,K1的事件
2.F0,F1设置为输出低电平,F2上拉输入
当F0 = 0时,F2读到的状态为0,K6 事件
当F1 = 0时,F2读到的状态为0,K3事件
这个时候按K5,K4,K1都是无效的。唯一考虑的问题是F0,F1直接接电源会不会去IO损坏。

扫描K3、K6时,F0、F1输出低电平;F2如果是输入状态,应该不能输出高低电平。如果输出高电平,那不成了输出状态?按下K3、K6究竟时被拉低,还是拉高?以上本人疑虑,请高手讲解?

具体看MCU的型号,有的MCU可以设置为带上拉的输入模式,例如STM32的MCU输入可以调置为GPIO_Mode_IPU

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top