STM32 4*4矩阵键盘实现原理(附程序任意引脚可用)

本文介绍了一种适用于STM32的4*4矩阵键盘实现方法,允许使用任意引脚连接。通过初始化行和列引脚的输入输出状态,先扫描行线电平再扫描列线电平,结合两者信息确定按下按键的位置。文中提供了相关代码,并强调该方法可用于处理部分端口引脚被占用的情况,同时提到了KEYPAD4x4_Read()函数的使用方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有的人的单片机的部分端口引脚被一些固定原件占用了,无法直接读取ABCD端口对应寄存器的值,于是矩阵键盘8个引脚被迫各连各的,比如读A2,B3,C4,等等,很麻烦。那就用我的方法把,可以适用任意端口的引脚连接你的矩阵键盘,并用一个函数将对应按键按下数字作为读取按键值。

切记:4*4矩阵键盘是由行线,列线,各四条线交叉形成的16个点组成的,我采用先扫描行线上的电平值,再扫描列上的电平值,这样的方法识别按下了哪个键的。

 

我购买的器件及原理图如上, 仔细观察正面R1R2R3R4对应一二三四行,反过来背面看,从上往下数C4C3C2C1分别对应四三二一列,

如果我们先初始化R1R2R3R4对应你接在stm32上引脚的初始状态为输入上拉(GPIO_Mode_IPU),C4C3C2C1对应引脚为推挽输出(GPIO_Mode_Out_PP)。那么此时R1R2R3R4均为高电平,然后如果按下R1第一行S1S2S3S4,任意一个键,此时读取到的R1电平值为低电平,R2R3R4依然是高电平,🆗,此时,你起码可以通过读取R1R2R3R4对应引脚电平信息分辨按下的是哪一行了。当然,本例你按下第一行(假设这是初始化状态1)

同理,如果我们再初始化R1R2R3R4对应你接在stm32上引脚的初始状态为推挽输出(GPIO_Mode_Out_PP),C4C3C2C1对应引脚为推挽输出输入上拉(GPIO_Mode_IPU)。那么此时C4C3C2C1均为高电平,然后如果按下C1第一行S1S5S9S13,任意一个键,此时读取到的C1电平值为低电平,C2C3C4依然是高电平,你可以通过读取C4C3C2C1对应引脚电平判断按下的是那一列了,当然本例你按下第一列。(假设这是初始化状态2)

两者结合:在程序里,你设置先进行初始化状态1,扫描行的电平信息,发现Rn是低电平,然后再进行初始化状态2,发现Cm是低电平,单片机于是知道你按下了第n行第m列对应的按键。如果n=m=1,那就是按下s1.

基本原理已经清楚,下面上程序。

KEYPAD4×4.h

#ifndef __KEYPAD4x4_H
#define __KEYPAD4x4_H	 
#include "sys.h"
#include "delay.h"


#define KEYPAD4x4PORT	GPIOA	//定义IO接口组
#define KEY4	GPIO_Pin_11	//定义IO接口
#define KEY3	GPIO_Pin_12	//定
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值