登录/注册

矩阵式键盘的工作原理是什么?如何编写扫描程序?

键盘、显示处理是很复杂的,它往往占到一个应用程序的大部份代码,可见其重要性,但说到,这种复杂并不来自于单片机的本身,而是来自于操作者的习惯等问题。

更多

矩阵式键盘的工作原理

矩阵键盘通过行列交叉扫描减少引脚使用,将按键排列成 M 行 × N 列的网格结构(如 4×4 仅需 8 个引脚控制 16 个键)。其核心原理是:

  1. 行列结构

    • 每个按键位于行线(Row)列线(Column) 的交叉点
    • 按键按下时,对应的行线与列线导通
  2. 扫描逻辑

    • 置行线为低电平:逐行驱动行线至低电平(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占用
}

关键问题解决方案

  1. 按键抖动

    • 添加 delay(20) 进行硬件消抖
    • 双重检测确保信号稳定
  2. 多键冲突

    • 软件方案:若检测到多列有效,可重新扫描或忽略本次输入
    • 硬件方案:添加二极管防止电流反灌(详见注释)

硬件优化提示
在大型矩阵或高速扫描系统中,可在每个按键上串联二极管,防止多键同时按下时行/列线短路。


工作流程图

行扫描启动
↓
[当前行置低电平] → 读取所有列线状态
↓
检测到列线低电平?
  → 是 → 消抖确认 → 等待释放 → 返回按键值
  → 否 → 恢复行高电平 → 切换下一行
↓
循环至所有行扫描完毕

通过行列交叉扫描和消抖处理,即可高效检测按键动作。

矩阵式变换器的拓扑结构和工作原理 矩阵式变换器的控制策略和仿真分析

在目前各领域对于电能转换特别是高效变频装置存在迫切需求的背景下,在详细分析模块化的矩阵式变流器的拓扑结构、开关状态和工作原理的基础上,设计了一套矩阵式

2023-12-26 14:07:21

自动化流水线矩阵式键盘的功能说明

方式的不同,可以分为非矩阵式键盘和矩阵式键盘两类。其中,非

2022-04-19 14:33:25

独立按键和矩阵式按键的处理方法

本课程是《朱有鹏老师单片机完全学习系列课程》第1季第9个课程,综合解决了独立按键和矩阵式按键的处理方法,涉及到:IO的输入输出、按键抖动和消抖、中断的引入和相关概念、矩阵式

2022-02-28 14:11:12

基于ATmega8单片机4×4矩阵式键盘识别Proteus仿真源程序

基于ATmega8单片机4×4 矩阵式键盘识别Proteus仿真源程序

资料下载 木头1233 2023-05-05 09:44:48

单片机矩阵式键盘扫描程序

单片机矩阵键盘判断某个按键按下这是我第一次发表文章,关于51单片机矩阵式键盘

资料下载 佚名 2021-11-25 18:36:03

使用单片机实现4乘4矩阵式键盘的仿真文件免费下载

本文档的主要内容详细介绍的是使用单片机实现4乘4矩阵式键盘的仿真文件免费下载。

资料下载 佚名 2021-03-22 11:23:28

使用51单片机实现矩阵式键盘的资料和程序免费下载

使用51单片机实现矩阵式键盘的资料和程序免费下载

资料下载 h1708587244.0670 2019-08-19 17:31:00

使用矩阵式键盘实现的电子密码锁C语言程序和资料合集免费下载

新人,发个小作品 是一个基于矩阵式键盘实现的电子密码锁,功能十分简单,希望不要见笑。代码有非常详细的注解。下面附上源代码以及仿真文件

资料下载 小飞666 2019-05-06 08:00:00

对4×4矩阵式键盘电路的键值进行编码

键盘与LCD实验对4×4矩阵式键盘电路的键值进行编码,编程实现在LCD液晶显示器上显示每个按键的ASCII码。(⊙﹏⊙)呃这个和去年一样单片机实

2022-01-24 08:17:17

单片机矩阵键盘判断

单片机矩阵键盘判断某个按键按下这是我第一次发表文章,关于51单片机矩阵式键盘

2021-12-08 07:12:25

如何识别矩阵式键盘输入

单片机实验:矩阵式键盘输入识别1.实验内容编写 c 语言程序,设计一个

2021-11-29 07:50:14

掌握矩阵式键盘扫描方法与定时器中断原理

AVR单片机 实验五 矩阵键盘扫描实验1 实验目的掌握矩阵式

2021-11-23 08:30:13

单片机矩阵式键盘的构造原理及编程方法

矩阵式键盘由行线和列线构成,按键坐落行、列线的穿插点上,其构造如图所示。

2020-07-12 09:40:24

微雪电子4x4矩阵式按键模块小键盘简介

4x4矩阵式按键模块 16个按键 占用8个IO接口 提供测试程序 原理图 型号 4x4 Keypad

2019-12-30 09:27:03

LT3965矩阵式LED调光器的应用

矩阵式 LED 调光器可准确控制 RGBW LED 组的色彩并使 LED 产生准确的图案

2019-08-22 10:53:35
7天热门专题 换一换
相关标签