如何用单片机高效处理矩阵按键?

原创 美男子玩编程 2025-03-15 08:01

点击上方蓝色字体,关注我们


矩阵按键是一种常见的输入设备,广泛应用于嵌入式系统中,如工业控制、消费电子和智能家居等领域。


其核心思想是利用行列扫描技术,通过较少的I/O口实现对大量按键的检测。



假设有一个4×4的矩阵按键,它由4行(Row)和4列(Column)组成,共16个按键。


通常,行连接到单片机的GPIO输出端,列连接到GPIO输入端,且列端口通常需要上拉电阻来保持默认高电平。


硬件连接示例:



1


矩阵按键的基本扫描方法

依次拉低每一行的电平,并读取列信号,判断是否有按键按下。


实现步骤:

  • 设定所有行(Row)为高电平,所有列(Column)为输入模式,并上拉。
  • 依次将每一行拉低(低电平),然后读取所有列的状态。
  • 如果某列检测到低电平,说明该行与该列的交点处按键被按下。
  • 记录按键位置,并等待去抖动处理。
  • 继续扫描下一行,直到所有行扫描完毕。


示例代码(基于C语言):


#define ROWS 4#define COLS 4constuint8_t row_pins[ROWS] = {ROW1, ROW2, ROW3, ROW4};constuint8_t col_pins[COLS] = {COL1, COL2, COL3, COL4};void scan_matrix_keypad() {    for (int i = 0; i < ROWS; i++) {        // 设定当前行为低电平        gpio_write(row_pins[i], LOW);        delay_us(5);  // 确保稳定        // 读取列状态        for (int j = 0; j < COLS; j++) {            if (gpio_read(col_pins[j]) == LOW) {                printf("按键[%d,%d]被按下\n", i, j);            }        }        // 恢复当前行为高电平        gpio_write(row_pins[i], HIGH);    }}

2


低功耗优化

如果单片机支持外部中断,可以利用外部中断检测按键按下,降低CPU负载。


方法如下:

  • 初始状态:所有行设为高电平,所有列配置为带上拉输入,并开启中断。
  • 进入低功耗模式,等待外部中断。
  • 当按键按下时,列引脚的电平变化触发中断。
  • 进入中断后,采用行列扫描法识别具体按键。
  • 处理按键逻辑后,恢复低功耗状态。


示例代码(基于C语言):


void EXTI_Handler() {    for (int j = 0; j < COLS; j++) {        if (gpio_read(col_pins[j]) == LOW) {            scan_matrix_keypad(); // 仅在有按键按下时扫描            break;        }    }}void setup() {    for (int i = 0; i < ROWS; i++) {        gpio_mode(row_pins[i], OUTPUT);        gpio_write(row_pins[i], HIGH);    }    for (int j = 0; j < COLS; j++) {        gpio_mode(col_pins[j], INPUT_PULLUP);        attach_interrupt(col_pins[j], EXTI_Handler, FALLING);    }}

3


按键去抖动策略

按键在机械接触时会出现抖动,可能会误触发多次按键事件,因此需要去抖动处理。


3.1、软去抖动

通过软件延迟来过滤抖动信号,例如检测到按键按下后,延迟20ms再次检测是否仍然按下。


bool is_key_pressed(uint8_t row, uint8_t col) {    if (gpio_read(col_pins[col]) == LOW) {        delay_ms(20); // 20ms去抖        if (gpio_read(col_pins[col]) == LOW) {            return true;        }    }    return false;}


3.2、硬件去抖动

可在矩阵按键电路中增加一个小电容(如0.1uF)或者使用施密特触发器来稳定按键信号。



在资源受限的嵌入式系统中,如果单片机 没有足够的外部中断资源,可以使用 定时器 进行周期性扫描矩阵按键,以减少CPU占用。


同时,为了避免主循环(while(1))中阻塞等待按键事件,使用FIFO(First In, First Out)队列 存储按键事件,以提高系统响应速度。


4


进一步优化

基本原理:

  • 定时器周期性触发扫描,间隔通常设为 10~20ms,以确保能及时捕获按键事件,同时避免过于频繁地占用CPU资源。
  • 在定时器中断函数内,执行一次完整的行列扫描,如果检测到按键按下,则将其加入FIFO队列。


以下是基于 STM32 的 定时器中断方式 进行按键扫描的示例代码:


#define ROWS 4#define COLS 4constuint8_t row_pins[ROWS] = {ROW1, ROW2, ROW3, ROW4};constuint8_t col_pins[COLS] = {COL1, COL2, COL3, COL4};// FIFO 队列结构体#define KEY_FIFO_SIZE 10typedefstruct {    uint8_t keys[KEY_FIFO_SIZE];  // 按键事件队列    uint8_t head;  // 队列头    uint8_t tail;  // 队列尾} KeyFIFO;KeyFIFO key_fifo = {{0}, 00};// 按键事件入队void key_fifo_enqueue(uint8_t key) {    uint8_t next = (key_fifo.tail + 1) % KEY_FIFO_SIZE;    if (next != key_fifo.head) {  // 队列未满        key_fifo.keys[key_fifo.tail] = key;        key_fifo.tail = next;    }}// 读取FIFO队列中的按键uint8_t key_fifo_dequeue() {    if (key_fifo.head == key_fifo.tail) {        return0; // 队列为空    }    uint8_t key = key_fifo.keys[key_fifo.head];    key_fifo.head = (key_fifo.head + 1) % KEY_FIFO_SIZE;    return key;}// 定时器中断回调函数,每10ms扫描按键void TIM2_IRQHandler() {    for (int i = 0; i < ROWS; i++) {        gpio_write(row_pins[i], LOW);        delay_us(5); // 确保稳定        for (int j = 0; j < COLS; j++) {            if (gpio_read(col_pins[j]) == LOW) {                uint8_t key_id = (i * COLS) + j + 1;                key_fifo_enqueue(key_id);            }        }        gpio_write(row_pins[i], HIGH);    }    TIM_ClearITPendingBit(TIM2, TIM_IT_Update);  // 清除定时器中断标志}// 定时器初始化void timer2_init() {    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;    NVIC_InitTypeDef NVIC_InitStructure;    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);    TIM_TimeBaseStructure.TIM_Period = 10000 - 1;  // 10ms定时    TIM_TimeBaseStructure.TIM_Prescaler = 72 - 1;  // 1MHz时钟    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);    TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);    TIM_Cmd(TIM2, ENABLE);    NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;    NVIC_Init(&NVIC_InitStructure);}

这样,我们就能在 低资源占用 和 高响应速度 之间取得 良好平衡,构建更高效的 单片机矩阵按键控制系统

点击阅读原文,更精彩~

美男子玩编程 多领域、有深度的开发者交流平台
评论 (0)
  • 新兴的个人健康监测技术为何在医疗场景和日常生活中越来越受到青睐?为了准确回答这个关键问题,我们首先需要理解三个全球性趋势:如今,几乎人手一部智能手机,这等于随身携带了一台高性能计算机、一个全天候运行的智能医疗传感器中心,还有一块显示屏。发达工业国家的人口正在迅速老龄化,而老年群体的疾病发病率较高。与此同时,年轻人也比过去更加关注如何延长健康寿命。这些人群以及服务他们的医务人员可以利用新技术来优化生活方式,合理调控运动、饮食、睡眠和压力等关键因素,帮助他们作出更健康的生活选择。如摩尔定律所预言,半
    艾迈斯欧司朗 2025-03-17 21:50 73浏览
  • 随着汽车行业逐步迈向电气化和电池动力,位置传感器以及其他长期在车辆中被忽视但却至关重要的小型元器件正逐渐成为关注的焦点。某些电子元器件常常吸引大量关注,例如如今用于训练AI模型的强大GPU几乎每天都出现在新闻中。而其他元器件则默默地执行着重要但鲜为人知的功能。艾迈斯欧司朗一些历史悠久的产品线便隶属于后者,其中包括磁性和电感式位置传感器、电容式传感器和电池监控芯片。工业泵和风扇等产品的制造商利用位置传感器实现电动机高效平稳运行。在车辆的方向盘中安装电容传感器可以保障安全,它可以用于在辅助驾驶模式下
    艾迈斯欧司朗 2025-03-17 22:22 68浏览
  • 一、引言:语音芯片的智能化浪潮在万物互联的智能化时代,语音交互技术已成为人机交互的重要纽带。从智能家电的提示音到儿童玩具的趣味互动,从工业设备的语音告警到公共服务设施的自动播报,语音播放芯片IC作为核心硬件支撑,正在重塑各行各业的用户体验。在众多解决方案中,WTN6、WT588、WT2003H、WTV四大系列产品,凭借差异化的技术特性构建了完整的语音芯片产品矩阵。本文将深度解析这四大主流芯片的技术特点与应用场景,为开发者提供选型参考。二、主流语音芯片技术特性全解析2.1 WTN6系列:高性价比的
    广州唯创电子 2025-03-17 09:04 146浏览
  •        在工业视觉检测线上,一台搭载传统图像传感器的机器人因高温导致图像噪点激增,误将合格零件判定为瑕疵品,每小时损失超10万元;在深夜的安防监控画面中,模糊的噪点让犯罪分子身影难以识别,导致案件侦破延迟—— 噪声,已成为图像传感器行业的“无声杀手”。据Yole统计,全球约35%的工业检测误差源于传感器噪声干扰,而安防场景下60%的有效信息因低照度噪点丢失。传统方案试图通过单一优化像素或电路来降噪,却陷入“按下葫芦浮起瓢”的困境。  &nb
    中科领创 2025-03-18 10:24 47浏览
  • 文/Leon编辑/cc孙聪颖‍蛇年春晚最有意思的节目,一定非机器人跳舞莫属。就算是遥控或预编程,机器人能够做出如此复杂的动作,在五年前都是不敢想象的事情,其制造商宇树科技也因此火爆全网。就在春节过后不到一个月,会骑自行车的人形机器人诞生了。这背后,是近年来“具身智能”概念的迅猛发展。“我们造了一个跟人一样灵动的机器人!”3月11日,智元机器人联合创始人兼首席技术官彭志辉在微博上说道。在视频中,灵犀X2会骑自行车、能跳《科目三》,还可以与人促膝长谈,甚至拿起葡萄“穿针引线”。在全球人形机器人领域,
    华尔街科技眼 2025-03-17 12:38 112浏览
  • 近日,2025年GTI国际产业大会成功举办,活动上GTI Awards 2025获奖名单正式揭晓,紫光展锐连续三年斩获国际权威机构GTI颁发的大奖。此次,T8300凭借在5G技术创新和娱乐体验方面的卓越表现,荣获GTI“移动技术创新突破奖”(Innovative Breakthrough in Mobile Technology Award)。GTI是由中国移动、软银、沃达丰等运营商于2011年发起成立的国际产业合作平台。GTI Awards作为全球通信行业最具影响力的奖项之一,旨在表彰为行业
    紫光展锐 2025-03-14 17:35 78浏览
  • 失效模式与影响分析(FMEA)失效模式与影响分析(FMEA)是一种系统方法,用于识别和分析系统或过程中的潜在失效,广泛应用于工程和制造领域,以提高产品可靠性和安全性。最新标准由 2019 年发布的 AIAG-VDA FMEA 手册(第一版) 定义,该手册结合了美国和欧洲汽车行业的最佳实践,并引入了 七步法,确保分析全面且结构化。图:优思学院六西格玛新版 FMEA 失效分析的七个步骤1. 规划与准备确定 FMEA 研究的 范围、边界和目标。组建跨职能团队(设
    优思学院 2025-03-17 14:43 114浏览
  • 晨穹电子一家专业从事研发、生产、销售各类传感器为一体的高新科技企业。1 人赞同了该文章在工业4.0、智能家居、新能源汽车等场景中,传感器作为数据采集的核心器件,其抗电磁干扰(EMC)能力直接影响系统可靠性。尤其在5G通信、高功率电机、无线充电等复杂电磁环境下,传感器的信号失真问题愈发突出。本文结合MEMS传感器、物联网(IoT)设备、边缘计算等热度技术,解析提升传感器抗干扰能力的6大策略。 一、电磁干扰对传感器的威胁; 1、电磁干扰(EMI)会导致传感器出现 。2、信号跳变(
    传感器晨穹 2025-03-18 09:28 79浏览
  • 在制药行业中,生产工艺的精准控制与产品质量安全密切相关。随着制药工业4.0的发展,传感器作为生产流程的"感知器官",在确保合规性、提升效率、降低风险方面发挥着不可替代的作用。本文将以晨穹电子科技(以下简称"晨穹")的压力、温度、流量及液位传感器为例,解析制药厂关键工艺流程中的传感器应用场景及技术要求。一、制药核心工艺流程中的传感器需求1. 原料处理与配液系统液位监测:储罐内原料液位实时监控需使用卫生型液位计。晨穹磁翻板液位计采用316L不锈钢材质,具备CIP/SIP(在线清洗/灭菌)耐受性,符合
    传感器晨穹 2025-03-18 15:51 52浏览
  • esp32s3使用platformio 点亮1.69寸TFT历程之LVGL移植 继上一篇我历经很久的时间点亮了1.69寸TFT之后。我开始进行LVGL的移植。开始LVGL的学习。用platformio 开发esp32s3真的好方便。按照上一节的环境。本次由于需要使用LVGL。打开platformio lib界面搜索LVGL。目前里面的版本是9.2.2。我使用的8.3.6。然后按照下图加载到自己的工程项目。待加载完毕后。我们会看到libdeps下面会出现LVGL库好了,这一步完成后。我们就开始移植
    zhusx123 2025-03-15 20:58 119浏览
  • 近期,据全球物联网市场调研机构IoT Analytics公布数据显示,2025年全球物联网设备连接数预计将突破200亿,同比增长约14%,物联网技术正以稳定上升态势向工业自动化、智慧城市、智慧农业与智慧家居等领域纵深推进。在多样化的应用场景和复杂环境需求的驱动下,物联网无线通信技术的运行功耗、传输距离和频段兼容性正受到前所未有的关注。为增加物联网通信模块的配置灵活度,消除物联网设备的“连接焦虑”,华普微重磅推出了一款自主研发的超低功耗、可兼容Sub-GHz与2.4GHz 双频段的高性能LoRa
    华普微HOPERF 2025-03-18 15:43 48浏览
  • 一、问题现象:语音播放异常的典型表现在使用WT588F(E)系列语音芯片的开发过程中,工程师常会遇到以下两类典型异常现象:播放不全:语音仅播放前段内容后突然中断,或特定段落无法触发播放断续:音频输出存在明显卡顿、爆音或波形畸变某智能门锁项目实测数据显示,在首批样机中有2%的设备出现语音提示突然中断的情况,经排查发现电源电压在播放瞬间跌落至2.0V(低于芯片工作阈值)。这类问题的根源往往隐藏于硬件设计与系统协同的细节之中。二、核心机理:电压稳定性对语音芯片的影响2.1 电源系统的动态响应特性WT5
    广州唯创电子 2025-03-17 09:18 127浏览
  • 在工业4.0与智能制造深度融合的今天,设备实时性、稳定性和成本效益成为企业核心竞争力的关键。触觉智能将基于RK3506平台,分享工业应用方案,本期为大家带来DSMC串行接口在数控行业的应用。DSMC技术解析底层架构突破双倍数据速率:通过上升沿与下降沿双重触发机制,实现单周期内2倍数据吞吐量,较传统SPI接口效率提升300%。多通道并行:支持8线/16线位宽可配置模式,满足多轴协同场景下的同步通信需求。性能实测标杆超低延迟:FPGA互联场景下,写延时小于75ns,读延时小于260ns,相比PCIe
    Industio_触觉智能 2025-03-18 11:46 53浏览
  • 在招聘合适的人才时,清晰度至关重要。想要找到合适的人选,并确保他们在岗位上取得成功,第一步就是明确职位的关键绩效指标(KPI)和预期成果。但光有这些还不够,如何判断候选人是否具备必要的特质?这时,KSA模型就派上用场了。它是一个简单但强大的方法,能帮助你聚焦于真正影响岗位表现的关键要素。今天,我想和你聊聊这个模型,帮你更轻松地为合适的候选人设定合适的KPI。了解KSA模型KSA代表知识(Knowledge)、技能(Skills)和态度(Attitude),是评估候选人是否适合岗位的三个关键维度。
    优思学院 2025-03-18 15:03 49浏览
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦