STM32矩阵按键扫描冲突问题

本文介绍了在硬件设计中遇到的矩阵按键扫描问题,当多个按键同时按下时导致误检测。通过在每个按键前添加二极管隔离,解决了列电流影响的问题,实现了更准确的按键检测。代码示例展示了如何配置GPIO进行矩阵按键扫描,避免了多键按下时的误报。

最近做了一个项目,有个部分用到了矩阵扫描的原理,要检测按键是否按下去执行一个动作。一开始硬件工程师的原理图实现是设计成传统矩阵按键方式,大致原理如下所示:
在这里插入图片描述
这种硬件实现方式当去检测单个按下、一整行按下或一整列按下时是没有问题,但是我们同时按下s0、s1和s4的时候,问题就来了。在这里插入图片描述
当我们按下s0和s1的时候相应的第一行就会导通,结合列的上拉电阻便可检测出s0和s1按键被按下。但是!!!当我们s4按下时第二行也被导通了,并且随着s1按键的按下,第二列也是被导通。所以当我们按下s0、s1和s4按键时,s5按键就会被误检测成被按下,所以这是错误的。经过不懈的努力和查阅相关资料,对以上的电路进行了修改。
在这里插入图片描述
在每一个按键前面加上一个二极管进行阻隔,使得各按键不受列电流的影响,有了电路原理,代码按键扫描检测就简单多了。
先对按键GPIO进行定义,方便后续编写代码。

////////////////////////////KEY ROW/////////////////////////////////////
#define KEY_ROW_APB2PERIPH                (RCC_APB2Periph_GPIOA)
#define KEY_ROW_PORT                       GPIOA
#define KEY_ROW1_PIN                      GPIO_Pin_10
#define KEY_ROW2_PIN                      GPIO_Pin_11
#define KEY_ROW3_PIN                      GPIO_Pin_12
#define KEY_ROW4_PIN                      GPIO_Pin_15

////////////////////////////KEY COL////////////////////////////////////
#define KEY_COL_APB2PERIPH                (RCC_APB2Periph_GPIOB)
#define KEY_COL_PORT                       GPIOB
#define KEY_COL1_PIN                      GPIO_Pin_3
#define KEY_COL2_PIN                      GPIO_Pin_4
#define KEY_COL3_PIN                      GPIO_Pin_5
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值