打印
[STM32]

求助一个关于矩阵键盘多个按键按下的问题!

[复制链接]
2720|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
feicien|  楼主 | 2018-3-31 16:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如图所示,行线RO、R1为输入,列线C0、C1为输出。
当按钮S1,S2,S3同时按下时,则列线C1与行线R0连接,RO与C0连接,C0与R1连接(四个线全连接)。此时,扫描码C0=0,C1=1,读取到R1为1,即S4也误为按下。这显示是不对的,不知道有什么其他方法识别出正确的按键状态吗?

P80331-163924.jpg (332.44 KB )

P80331-163924.jpg

相关帖子

沙发
blust5| | 2018-3-31 20:51 | 只看该作者
可以加电阻或者二极管

使用特权

评论回复
板凳
blust5| | 2018-3-31 20:53 | 只看该作者
加上二极管之后,只能由C上的电平带动R上的电平,反过来不行,这样的话,就不会出现你说的情况了

使用特权

评论回复
地板
blust5| | 2018-3-31 21:02 | 只看该作者
例如这样,这样的话,按你说的情况,即使S1、S2、S3都按下,在C0=0,C1=1时,
因为C1=1,且S2按下,所以R0=1,
虽然S1按下了,但因为有二极管,所以C0不会被拉高,所以R1=0,所以不会误判S4按下,如果S4真的按下了,会通过S4旁边的二极管将R1拉高。

IMG_20180331_205818.JPG (273.11 KB )

IMG_20180331_205818.JPG

使用特权

评论回复
5
blust5| | 2018-3-31 21:04 | 只看该作者
不过一般矩阵键盘都是以低电平作为有效电平,这时候把二极管反过来就可以了,这时候在C端输出低电平,如果按键按下,相应R上的电平被拉低,而由于二极管的截止作用,不会拉低另外的C线。

使用特权

评论回复
6
奥巴羊| | 2018-3-31 21:37 | 只看该作者
blust5 发表于 2018-3-31 21:02
例如这样,这样的话,按你说的情况,即使S1、S2、S3都按下,在C0=0,C1=1时,
因为C1=1,且S2按下,所以R0= ...

C0=0,可以通过二极管传送到R0?

使用特权

评论回复
7
blust5| | 2018-4-1 08:25 | 只看该作者
奥巴羊 发表于 2018-3-31 21:37
C0=0,可以通过二极管传送到R0?

C0=0,R0被C1拉高,是1,这时候S1旁边的二极管反偏截止,R0到C0的通路是不通的。

使用特权

评论回复
8
一路向北lm| | 2018-4-1 08:49 | 只看该作者
楼主如果是想节约IO口,还想检测多个按键按下,可以设计ADC按键电路啊,完全满足你的要求。

使用特权

评论回复
9
奥巴羊| | 2018-4-1 09:22 | 只看该作者
blust5 发表于 2018-4-1 08:25
C0=0,R0被C1拉高,是1,这时候S1旁边的二极管反偏截止,R0到C0的通路是不通的。 ...

我的意思是S1被按下,C0怎么通过二极管使R0=0?

使用特权

评论回复
10
blust5| | 2018-4-1 14:12 | 只看该作者
奥巴羊 发表于 2018-4-1 09:22
我的意思是S1被按下,C0怎么通过二极管使R0=0?

你要获取S1的状态,就要C0=1,C1=0,这时候R0会被C0拉高,变成1.

使用特权

评论回复
11
blust5| | 2018-4-1 14:13 | 只看该作者
这个是扫描式获取的,所有的C线依次为1,同时去检测R线上的电平

使用特权

评论回复
12
奥巴羊| | 2018-4-1 19:25 | 只看该作者
blust5 发表于 2018-4-1 14:12
你要获取S1的状态,就要C0=1,C1=0,这时候R0会被C0拉高,变成1.

原来是这样,知道了。

使用特权

评论回复
13
caijie001| | 2018-4-2 09:56 | 只看该作者
blust5 发表于 2018-3-31 21:04
不过一般矩阵键盘都是以低电平作为有效电平,这时候把二极管反过来就可以了,这时候在C端输出低电平,如果 ...

学习了,厉害啊

使用特权

评论回复
14
qinlu123| | 2018-4-2 11:51 | 只看该作者
我没有看明白楼主到底在疑问什么,不过我有一个好用的矩阵键盘驱动。 Key_Test-V2.0.rar (5.2 MB)

使用特权

评论回复
15
qinlu123| | 2018-4-2 11:57 | 只看该作者
列线输出IO要设置成开漏输出的。

使用特权

评论回复
16
ddllxxrr| | 2018-4-2 17:54 | 只看该作者
这个真地很好办,在测到按键是,输入和输出对调,再读一下输入,对照以前就可以读出是谁按下了

使用特权

评论回复
17
h286288986| | 2018-4-3 08:30 | 只看该作者
楼主想得太复杂了,软件就能过滤识别,自己好好在思考下怎么弄!

使用特权

评论回复
18
cooldog123pp| | 2018-4-3 08:47 | 只看该作者
按键不多直接用ADC啊,一个IO就解决了,而且,你这个问题是你软件没有处理好,行列扫描再想想。

使用特权

评论回复
19
tianqi911| | 2018-4-12 14:56 | 只看该作者
推荐用AD吧。用IO口扫描矩阵键盘,理论可行,实际应用要加很多东西,还要在板子上调试硬件。AD抗干扰强,实现也简单。

使用特权

评论回复
20
y15067805290| | 2018-4-12 15:39 | 只看该作者

怎么没有高手留言呢,不能让帖子沉下去,顶上

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

33

帖子

0

粉丝