1. 项目概述
在嵌入式系统开发中,按键输入是最基础的人机交互方式之一。传统独立按键方案每个按键占用一个IO口,当需要较多按键时(如计算器、密码锁等场景),会迅速耗尽单片机宝贵的IO资源。以16个按键为例,独立按键方案需要16个IO口,而采用4x4矩阵键盘仅需8个IO口即可实现相同功能,IO利用率提升100%。
本教程将基于STM32 HAL库,通过Proteus仿真环境,完整实现4x4矩阵键盘的驱动与数码管显示功能。相比市面上常见的标准库教程,本方案采用更现代的HAL库,并重点讲解行列扫描的核心原理、硬件电路设计细节以及实际工程中的防抖处理技巧。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 硬件设计解析
2.1 矩阵键盘拓扑结构
4x4矩阵键盘由16个按键组成4行4列的交叉阵列。硬件连接上:
- 行线(Row1-Row4):连接到STM32的PB0-PB3,配置为推挽输出
- 列线(Col1-Col4):连接到PB4-PB7,配置为上拉输入
这种拓扑结构的核心优势在于:
- IO节省:16个按键仅需8个IO(4行+4列)
- 扩展性强:NxM矩阵可支持N*M个按键,仅需N+M个IO
- 布线简洁:PCB布局时行列走线规整,减少交叉干扰
实际电路设计时,建议在列线添加1kΩ上拉电阻(仿真可省略),确保未按键时稳定为高电平。行线驱动电流较大时可加入74HC245等总线驱动器。
2.2 数码管接口设计
采用4位共阳极数码管显示按键值:
- 段选(a-dp):PA0-PA7,低电平点亮
- 位选(DIG1-DIG4):PA8-PA11,高电平选中
共阳极设计的优势:
- 与STM32的推挽输出特性匹配更好
- 段选电流由IO口灌入,驱动能力更强
- 相同亮度下功耗低于共阴方案
3. CubeMX关键配置
3.1 GPIO工作模式设置
-
行线配置(PB0-PB3):
- Mode: GPIO Output
- Output Type: Push-Pull
- Pull-up/Pull-down: No pull
- Default Output State: High
-
列线配置(PB4-PB7):
- Mode: GPIO Input
- Pull
