STM32控制矩阵按键,HAL库,cubeMX配置
前言
我使用的是STM32F103RCT6这款单片机,HAL库,使用cubeMX配置。
使用矩阵按键实现功能的方法为轮询法
cubeMX中的配置·
1.首先矩阵键盘原理图如下:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5TKPCzRp-1655352433290)(C:\Users\wangyin\AppData\Roaming\Typora\typora-user-images\image-20220615163312205.png)]](https://i-blog.csdnimg.cn/blog_migrate/25ee6fcfae768171beec42b81343a9f2.png)
2.实物图
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qdK50ugy-1655352433292)(C:\Users\wangyin\AppData\Roaming\Typora\typora-user-images\image-20220616113621657.png)]](https://i-blog.csdnimg.cn/blog_migrate/0399458b1b68fb8ee484e3a80b0a6cf3.png)
按照矩阵键盘接法,16个按键需要8个io口,我选择了PC口的0~7号引脚,前四个依次接矩阵键盘的行,后四个依次接矩阵键盘的列;矩阵键盘的每一个按键都是接了两个io口,也就是一端必须是输出高电平或者低电平,另一端去检测是否是高电平或者低电平;所以只需要配置行线或者列线为输出,则另外一端就配置为输入检测。
3.cubeMX的配置图
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-itrcFIVU-1655352433293)(C:\Users\wangyin\AppData\Roaming\Typora\typora-user-images\image-20220616113915873.png)]](https://i-blog.csdnimg.cn/blog_migrate/1b2e6dd6ae654ae7aeeb028925292177.png)
PC0-PC3配置为推挽输出低电平:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L3bGQemx-1655352433294)(C:\Users\wangyin\AppData\Roaming\Typora\typora-user-images\image-20220616114116476.png)]](https://i-blog.csdnimg.cn/blog_migrate/970b8b71be93d2a65bb2297536b5eb22.png)
PC4~PC7配置为输入模式,上拉:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YRDwBZnR-1655352433295)(C:\Users\wangyin\AppData\Roaming\Typora\typora-user-images\image-20220616114219022.png)]](https://i-blog.csdnimg.cn/blog_migrate/30e466bd499f7785d7c0d16c6820ef51.png)
推挽输出(英语:Push–pull output)是一种使用一对选择性地从相连负载灌电流或者拉电流的器件的电路。它常常使用一对参数相同的功率三极管或MOSFET管,以推挽方式存在于电路中。
**开漏输出:**开漏输出就是不输出电压,控制输出低电平时引脚接地,控制输出高电平时引脚既不输出高电平,也不输出低电平,为高阻态。
PA4-PA7配置为外部中断,下降沿触发,上拉,之所以这样配置,是因为我们PA0-PA3配置的是输出低电平,所以我们需要先上拉,让他那个引脚默认输入高电平,只有按下按键,两引脚想通才会由高电平变为低电平,所以我们需要按下按键触发的话也就是由高到低的时候,也就是下降沿触发。
keil程序中的编写
首先创建一个key.c文件和一个key.h文件
key.c中
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bU260TB5-1655352433296)(C:\Users\wangyin\AppData\Roaming\Typora\typora-user-images\image-20220616115209288.png)]](https://i-blog.csdnimg.cn/blog_migrate/fae602c26e9373548f1f41d6213414f2.png)
GPIO->IDR和0xf7相与, 若是0xe7 则二进制位1110 0111,说明PC4变为了0,所以第一列的按键s1按下
注意PC7对应二进制数中的最高位 PC0对应最低位
后面以此类推
…
注意,可能出现有些行未扫描,有些行的按键按下没有通过串口返回信息
解决方法是,在每一行的扫描之前,将行所对应的引脚清空,如下:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qmJkCfyW-1655352433297)(C:\Users\wangyin\AppData\Roaming\Typora\typora-user-images\image-20220616115245044.png)]](https://i-blog.csdnimg.cn/blog_migrate/705fbb51e00a70327dd86d0acb2858a8.png)
key.h中
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2asttusv-1655352433298)(C:\Users\wangyin\AppData\Roaming\Typora\typora-user-images\image-20220616115908932.png)]](https://i-blog.csdnimg.cn/blog_migrate/8c7d9092d9dc768efa7384a8650291ed.png)
测试结果
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zTaiqdNV-1655352433299)(C:\Users\wangyin\AppData\Roaming\Typora\typora-user-images\image-20220616115331548.png)]](https://i-blog.csdnimg.cn/blog_migrate/b44d63ce0f3eb3be5cb589f72a48adf0.png)
结果显示正确,成功运行
https://download.youkuaiyun.com/download/cubejava/85656823
追求卓越,成功才会在不经意间追上你!
本文介绍了如何使用STM32F103RCT6和HAL库通过cubeMX配置矩阵按键。配置过程中,PC0-PC3设为推挽输出低电平作为行线,PC4-PC7设为输入模式带上拉,用作列线。程序通过轮询法检测按键状态,并在Keil中编写代码进行按键扫描。当按下按键时,利用下降沿触发中断。测试结果显示程序成功运行,实现了矩阵按键的功能。
1万+

被折叠的 条评论
为什么被折叠?



