矩阵式键盘的工作原理是什么?如何编写扫描程序?
键盘、显示处理是很复杂的,它往往占到一个应用程序的大部份代码,可见其重要性,但说到,这种复杂并不来自于单片机的本身,而是来自于操作者的习惯等问题。
矩阵式键盘的工作原理
矩阵键盘通过行列交叉扫描减少引脚使用,将按键排列成 M 行 × N 列的网格结构(如 4×4 仅需 8 个引脚控制 16 个键)。其核心原理是:
-
行列结构
- 每个按键位于行线(Row) 和列线(Column) 的交叉点
- 按键按下时,对应的行线与列线导通
-
扫描逻辑
- 置行线为低电平:逐行驱动行线至低电平(
0),其余行线保持高电平(1) - 读取列线状态:检测列线电平变化
- 定位按键:当某列线检测到低电平,即锁定当前驱动的行和检测的列 → 确定按键位置
- 置行线为低电平:逐行驱动行线至低电平(
扫描程序编写步骤(以 4×4 键盘为例)
1. 初始化配置(以 Arduino 为例)
const int ROWS = 4;
const int COLS = 4;
char keys[ROWS][COLS] = { // 按键映射表
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
// 行线:输出模式 | 列线:输入模式(启用内部上拉电阻)
int rowPins[ROWS] = {9, 8, 7, 6}; // 连接行线的引脚
int colPins[COLS] = {5, 4, 3, 2}; // 连接列线的引脚
void setup() {
for (int i = 0; i < ROWS; i++) {
pinMode(rowPins[i], OUTPUT);
digitalWrite(rowPins[i], HIGH); // 初始化行线为高电平
}
for (int j = 0; j < COLS; j++) {
pinMode(colPins[j], INPUT_PULLUP); // 列线启用上拉电阻(默认高电平)
}
}
2. 核心扫描函数
char scanKey() {
for (int i = 0; i < ROWS; i++) { // 遍历每一行
digitalWrite(rowPins[i], LOW); // 当前行置低电平
for (int j = 0; j < COLS; j++) { // 遍历所有列
if (digitalRead(colPins[j]) == LOW) { // 检测列线是否被拉低
delay(20); // 去抖动延时(约20ms)
if (digitalRead(colPins[j]) == LOW) {
while (digitalRead(colPins[j]) == LOW); // 等待按键释放
return keys[i][j]; // 返回对应按键字符
}
}
}
digitalWrite(rowPins[i], HIGH); // 恢复当前行为高电平
}
return '\0'; // 无按键按下时返回空字符
}
3. 主循环调用
void loop() {
char pressedKey = scanKey();
if (pressedKey != '\0') {
Serial.println(pressedKey); // 串口输出按键值
}
delay(10); // 减少CPU占用
}
关键问题解决方案
-
按键抖动
- 添加
delay(20)进行硬件消抖 - 双重检测确保信号稳定
- 添加
-
多键冲突
- 软件方案:若检测到多列有效,可重新扫描或忽略本次输入
- 硬件方案:添加二极管防止电流反灌(详见注释)
硬件优化提示:
在大型矩阵或高速扫描系统中,可在每个按键上串联二极管,防止多键同时按下时行/列线短路。
工作流程图
行扫描启动
↓
[当前行置低电平] → 读取所有列线状态
↓
检测到列线低电平?
→ 是 → 消抖确认 → 等待释放 → 返回按键值
→ 否 → 恢复行高电平 → 切换下一行
↓
循环至所有行扫描完毕
通过行列交叉扫描和消抖处理,即可高效检测按键动作。
矩阵式变换器的拓扑结构和工作原理 矩阵式变换器的控制策略和仿真分析
在目前各领域对于电能转换特别是高效变频装置存在迫切需求的背景下,在详细分析模块化的矩阵式变流器的拓扑结构、开关状态和工作原理的基础上,设计了一套矩阵式
2023-12-26 14:07:21
独立按键和矩阵式按键的处理方法
本课程是《朱有鹏老师单片机完全学习系列课程》第1季第9个课程,综合解决了独立按键和矩阵式按键的处理方法,涉及到:IO的输入输出、按键抖动和消抖、中断的引入和相关概念、矩阵式
基于ATmega8单片机4×4矩阵式键盘识别Proteus仿真源程序
基于ATmega8单片机4×4 矩阵式键盘识别Proteus仿真源程序
资料下载
木头1233
2023-05-05 09:44:48
使用矩阵式键盘实现的电子密码锁C语言程序和资料合集免费下载
新人,发个小作品 是一个基于矩阵式键盘实现的电子密码锁,功能十分简单,希望不要见笑。代码有非常详细的注解。下面附上源代码以及仿真文件
资料下载
小飞666
2019-05-06 08:00:00
对4×4矩阵式键盘电路的键值进行编码
键盘与LCD实验对4×4矩阵式键盘电路的键值进行编码,编程实现在LCD液晶显示器上显示每个按键的ASCII码。(⊙﹏⊙)呃这个和去年一样单片机实
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 芯片的工作原理是什么?
- ssd是什么意思
- 什么是蓝牙?它的主要作用是什么?
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- EDA是什么?有什么作用?
- 中科院研发成功2nm光刻机
- 苹果手机哪几个支持无线充电的?
- dtmb信号覆盖城市查询
- 怎样挑选路由器?
- 华为芯片为什么受制于美国?
- 元宇宙概念股龙头一览
- type-c四根线接法图解
- 锂电池和铅酸电池哪个好?
- 什么是场效应管?它的作用是什么?
- 如何进行编码器的正确接线?接线方法介绍
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- 苹果nfc功能怎么复制门禁卡
- 单片机和嵌入式的区别是什么
- amoled屏幕和oled区别
- BLDC电机技术分析
- 复位电路的原理及作用
- dsp是什么意思?有什么作用?
- iphone13promax电池容量是多少毫安
- 苹果无线充电器怎么使用?
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 自举电路图
- 通讯隔离作用
- 苹果笔记本macbookpro18款与19款区别
- 新斯的指纹芯片供哪些客户
- 传感器常见类型有哪些?
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机