矩阵键盘是嵌入式系统、单片机应用中常用的多按键输入设备,通过 “行列交叉” 的矩阵结构大幅减少 I/O 口占用,是 “用软件复杂度换硬件资源” 的典型设计。以下从核心知识点、原理到实现步骤系统总结:
一、基本概念与结构
1. 定义
矩阵键盘是将按键按行(Row)和列(Column) 排列成网格状的输入装置,每个按键对应唯一的 “行号 + 列号” 坐标,用于实现多个按键的输入检测。
2. 结构特点
- 假设为 M 行 ×N 列 矩阵,则按键总数 = M×N(如 4×4 矩阵有 16 个按键)。
- 硬件连接:行线(M 条)和列线(N 条)分别连接到微控制器(如单片机)的 I/O 口,按键两端分别接对应行线和列线(按下时导通行线与列线)。
- 优势:相比 “独立按键”(每个按键占用 1 个 I/O 口),M×N 矩阵仅需 M+N 个 I/O 口(如 16 个按键,独立按键需 16 个 I/O,4×4 矩阵仅需 8 个),显著节省硬件资源。
二、核心工作原理:“扫描法” 检测按键
矩阵键盘通过 **“行扫描 + 列检测”** 或 “列扫描 + 行检测” 确定被按下的按键,核心逻辑是:通过控制行 / 列线的电平状态,检测交叉点的导通情况。
以 “行扫描法”(最常用)为例,步骤如下:
-
初始化 I/O 口:
- 行线配置为输出模式,列线配置为输入模式(并通过上拉电阻拉高,确保未按键时列线为高电平)。
-
全扫描初步判断是否有按键按下:
- 所有行线输出低电平,读取列线状态。
- 若所有列线均为高电平:无按键按下。
- 若某列线为低电平:说明该列有按键按下(但不确定具体行),进入下一步精确扫描。
-
逐行扫描确定具体按键:
- 依次将每行线单独置为低电平,其他行线置为高电平(每次只激活一行)。
- 每次激活一行后,读取列线状态:若某列线为低电平,说明 “当前激活行” 与 “该列” 的交叉点按键被按下(即确定坐标:行号 + 列号)。
例:4×4 矩阵中,当第 2 行置低、第 3 列读低时,对应按键坐标为(2,3),可映射为特定功能(如数字 “6”)。
三、关键技术:按键消抖
机械按键按下 / 弹起时,触点会因弹性产生5-20ms 的抖动,导致电平反复跳变(高→低→高→低...),若直接检测会误判为 “多次按键”。解决方法:
-
软件消抖(最常用):
- 检测到按键按下后,延时 10-20ms,再次检测电平:若仍为按下状态(低电平),则确认按键有效;否则视为抖动。
-
硬件消抖:
- 在按键两端并联 RC 电路(电阻 10kΩ+ 电容 104μF),利用电容充放电平滑抖动信号(适合对实时性要求不高的场景)。


3739

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



