STM32控制矩阵按键,HAL库,cubeMX配置
前言
我使用的是STM32F103RCT6这款单片机,HAL库,使用cubeMX配置。
使用矩阵按键实现功能的方法为轮询法
cubeMX中的配置·
1.首先矩阵键盘原理图如下:
2.实物图
按照矩阵键盘接法,16个按键需要8个io口,我选择了PC口的0~7号引脚,前四个依次接矩阵键盘的行,后四个依次接矩阵键盘的列;矩阵键盘的每一个按键都是接了两个io口,也就是一端必须是输出高电平或者低电平,另一端去检测是否是高电平或者低电平;所以只需要配置行线或者列线为输出,则另外一端就配置为输入检测。
3.cubeMX的配置图
PC0-PC3配置为推挽输出低电平:
PC4~PC7配置为输入模式,上拉:
推挽输出(英语:Push–pull output)是一种使用一对选择性地从相连负载灌电流或者拉电流的器件的电路。它常常使用一对参数相同的功率三极管或MOSFET管,以推挽方式存在于电路中。
**开漏输出:**开漏输出就是不输出电压,控制输出低电平时引脚接地,控制输出高电平时引脚既不输出高电平,也不输出低电平,为高阻态。
PA4-PA7配置为外部中断,下降沿触发,上拉,之所以这样配置,是因为我们PA0-PA3配置的是输出低电平,所以我们需要先上拉,让他那个引脚默认输入高电平,只有按下按键,两引脚想通才会由高电平变为低电平,所以我们需要按下按键触发的话也就是由高到低的时候,也就是下降沿触发。
keil程序中的编写
首先创建一个key.c文件和一个key.h文件
key.c中
GPIO->IDR和0xf7相与, 若是0xe7 则二进制位1110 0111,说明PC4变为了0,所以第一列的按键s1按下
注意PC7对应二进制数中的最高位 PC0对应最低位
后面以此类推
…
注意,可能出现有些行未扫描,有些行的按键按下没有通过串口返回信息
解决方法是,在每一行的扫描之前,将行所对应的引脚清空,如下:
key.h中
测试结果
结果显示正确,成功运行
https://download.youkuaiyun.com/download/cubejava/85656823
追求卓越,成功才会在不经意间追上你!