硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1939|回复: 11
收起左侧

[有问必答] 有没有坛友用过矩阵按键,它能否任意按键组合?

  [复制链接]

97

主题

537

回帖

843

积分

金牌会员

积分
843
发表于 2022-9-5 16:39:10 | 显示全部楼层 |阅读模式
矩阵按键有办法任意组合键吗?

我思考了一下,应该是不行,不知道坛友们有没有什么好方法。

我看网络上的做法,矩阵按键扫描有两种,一种逐行扫描(逐列扫描),另外一种行列切换扫描(这个方法应该没办法识别不同行列的组合键)。
Snipaste_2022-09-05_16-11-39.png
以上图为例,逐列扫描(低电平为按键按下)的伪代码如下:
Snipaste_2022-09-05_16-15-45.png
Snipaste_2022-09-05_16-18-59.png

用这种思路去判断按键“1”和“2”同时按下的情况,貌似无法判断(我的结论)。
Snipaste_2022-09-05_16-22-01.png
如上图,当这两个按键被同时按下的时候,是不是就相当于C1和C2导通的?
所以R1和R2始终都是读到了1。所以同时按下的时候就相当于没按。。无法被识别到。


回复

使用道具 举报

1

主题

380

回帖

383

积分

高级会员

积分
383
发表于 2022-9-6 02:10:55 | 显示全部楼层
目前知道两种,一种是矩阵加二极管方式,另一种是稚辉君最近弄的键盘项目,用74HC165并转串,3个IO检测8个按键。比如同样检测64个按键,矩阵需要16个IO,用165只需要8个IO,省点IO,还可以省二极管
回复

使用道具 举报

97

主题

537

回帖

843

积分

金牌会员

积分
843
 楼主| 发表于 2022-9-6 08:13:57 | 显示全部楼层
挖东衣宇 发表于 2022-9-6 02:10
目前知道两种,一种是矩阵加二极管方式,另一种是稚辉君最近弄的键盘项目,用74HC165并转串,3个IO检测8个 ...

二极管个什么方式。能详细讲讲吗?74HC165估计板子上放不下。
回复

使用道具 举报

218

主题

1106

回帖

1770

积分

至尊会员

More we do, more we can do.

积分
1770
发表于 2022-9-6 12:52:56 | 显示全部楼层
矩阵按键支持任意组合
回复

使用道具 举报

3

主题

66

回帖

75

积分

初级会员

积分
75
发表于 2022-9-7 08:27:53 | 显示全部楼层
参考Micrium的键盘程序,写的非常规整
回复

使用道具 举报

97

主题

537

回帖

843

积分

金牌会员

积分
843
 楼主| 发表于 2022-9-7 16:34:01 | 显示全部楼层
R1,R2,R3需要配置先成浮空输入,然后C1,C2,C3配置成下拉输入。
引脚检测到高电平说明被按下。

逐行扫描的时候,把其中一路ROW配置成推挽输出高电平,其他的依旧配置成浮空输入。

这样子去逐行扫描,就可以实现任意IO组合键了。
回复

使用道具 举报

97

主题

537

回帖

843

积分

金牌会员

积分
843
 楼主| 发表于 2022-9-7 17:41:38 | 显示全部楼层
BaseApp.7z (994.55 KB, 下载次数: 42)
这是我最后的工程。模仿安富莱的按键FIFO魔改的一个矩阵按键FIFO。
支持单击,双击,长按,组合键。

回复

使用道具 举报

0

主题

23

回帖

23

积分

新手上路

积分
23
发表于 2022-9-30 15:06:56 | 显示全部楼层
78028048 发表于 2022-9-7 08:27
参考Micrium的键盘程序,写的非常规整

有链接可以分享吗      
回复

使用道具 举报

97

主题

537

回帖

843

积分

金牌会员

积分
843
 楼主| 发表于 2022-10-12 16:27:43 | 显示全部楼层
会飞的猪_2020 发表于 2022-9-7 17:41
这是我最后的工程。模仿安富莱的按键FIFO魔改的一个矩阵按键FIFO。
支持单击,双击,长按,组合键。

这个例程里的驱动代码有问题,它是5ms阻塞的。
后来改成了用状态机去实现了一个非阻塞的。
回复

使用道具 举报

97

主题

537

回帖

843

积分

金牌会员

积分
843
 楼主| 发表于 2022-10-12 16:27:43 | 显示全部楼层
会飞的猪_2020 发表于 2022-9-7 17:41
这是我最后的工程。模仿安富莱的按键FIFO魔改的一个矩阵按键FIFO。
支持单击,双击,长按,组合键。

这个例程里的驱动代码有问题,它是5ms阻塞的。
后来改成了用状态机去实现了一个非阻塞的。

drv_matrix_keyboard.zip

4.89 KB, 下载次数:

回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2024-6-29 16:23:13 | 显示全部楼层
会飞的猪_2020 发表于 2022-10-12 16:27
这个例程里的驱动代码有问题,它是5ms阻塞的。
后来改成了用状态机去实现了一个非阻塞的。

感谢大佬分享!!!!!!!!!!!!!
回复

使用道具 举报

97

主题

537

回帖

843

积分

金牌会员

积分
843
 楼主| 发表于 2024-7-1 15:43:39 | 显示全部楼层
1403292283 发表于 2024-6-29 16:23
感谢大佬分享!!!!!!!!!!!!!

当时用状态机是因为gd32的gpio貌似有一个bug:
1.把gpio置1
2.去读这个gpio。

然后如果1,2这两个操作之间不加延时的话,会依然读到之前的电平(貌似这个芯片没有立即翻转gpio)
我后来加了5ms延时就好了,不过加了延时之后,因为我是裸机,所以整个业务逻辑有卡顿了。

最后才改成了用状态机去做。

PS:如果你是stm32的话,可以不用搞的这么麻烦。。stm32我之前试过是可以直接1接2这样子操作,没问题的。
如果你有OS的话也不用这样子搞,直接vtaskDelay就行了。


然后我驱动里面fifo是独立出来的,这个fifo需要你那边自己实现。
共产主义一定胜利!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-6-11 05:59 , Processed in 1.064687 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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