【按键扫描】独立按键与矩阵按键

article/2025/1/17 5:59:52

按键介绍

我们通常提到按键,一般是指按键开关,也称为轻触开关。轻触开关是最常用的几种电子元器件之一,被各种电子产品广泛使用。

轻触开关与普通开关类似,但又略有不同。普通开关有闭合与断开两种状态,切换后状态会锁定,直到下次操作前不改变;而轻触开关内部有弹簧,弹起时为断开状态,在施加一定压力后会闭合短路,而松开后又会自动弹起,重新恢复断开状态。
所以轻触开关除了可以检测按下与抬起外,还可以检测长按与短按,从而单按键开关可实现多种复合功能。

最常见的轻触开关为四脚轻触开关,如下图

轻触开关规格书
四脚轻触开关实际内部是两两相连,设计为四脚一方面是为了稳定性(四脚固定在按动时会比两脚更稳),另一方面也是为了硬件布线可以更方便。
根据规格书的描述,内部1与2,3与4直接相连,在按下时,1/2 才会和 3/4闭合,接线时需要注意,不要弄错引脚,导致按键为常闭状态。

按键抖动

按键开关一般是由弹性金属制成,在按键按下后会经历波动过程,然后再稳定;弹起时也会产生类似情况。通常我们称此现象为按键抖动,也被称为接触弹跳(Contant Bounce)。

接触弹跳-按键弹起
由于按键检测芯片频率都比较高,而接触弹跳的存在,会导致软件在检测按键按下/抬起时,会发生多次误检测的异常现象。
所以在实际使用按键扫描时,需要进行消抖(Debounce)才能正常使用。

按键消抖分为两种:硬件消抖,软件消抖。

硬件消抖

硬件的滤波电路或者其他电路实现,此处不做讨论

软件消抖

根据抖动的特征,软件进行消除。

参考按键规格书中的描述,抖动分为"按下抖动"和"抬起抖动",一般都在 10ms以下。简单的消抖方法为延时消抖,即检测到状态变化后,延时10ms,再次确认状态,如果相同才识别为有效。

按键规格书

// 示例伪代码
// 判断按键为按下状态
if scan_status == KEY_PRESSED// 延时 10msdelay_10ms// 再次检测按键状态如果为按下if scan_status == KEY_PRESSED// 确认当前按键状态为按下key_status = scan_status
// 结束

按键扫描

按键扫描按照接线方式的不同,可分为独立按键接线与矩阵按键接线。

独立按键

独立按键,即单个按键独立的接到单片机的 IO口上,读取对应IO状态,例如高电平为按键抬起,低电平为按键按下。
此种方式结构简单,软件简单。实际开发中,单片机IO资源有限,除非按键很少,否则不会使用。

示例流程如下

  1. 按键单独连接到IO口,另一端接地
  2. 配置对应IO口为输入状态,且为内部上拉
  3. 读取IO口电平,为高时按键抬起,为低时为按键按下
  4. 消抖后判定状态是否有效,确认按键状态

独立按键状态变化

// 独立按键检测
void stand_alone_scan(void)
{// 检测 P2.0 IO口, 按键状态变化if (stand_alone_io != stand_alone_last){// 延时 10ms 消抖delay_10us(1000);// 再次检测 IO 口确认按键状态if (stand_alone_io != stand_alone_last){printf("stand alone - %s\r\n",stand_alone_io == KEY_UNPRESSED ? "unpressed" : "pressed");stand_alone_last = stand_alone_io;}}
}

矩阵按键

矩阵键盘,顾名思义采用行列式连线进行布局,按键的两端分别接到矩阵的行线与列线。按键按下时,对应按键的行和列短路,检测确定行和列,即可确认按键位置。
以 4x4 矩阵键盘为例,共16个按键,仅需要8个IO口,4个IO口连接按键矩阵行,4个IO口连接按键矩阵列。
矩阵键盘识别比独立按键略微复杂,但是相比独立按键可节省大量IO口,实际开发中应用较多。

矩阵键盘连线

常用的矩阵扫描方法有三种:逐行扫描,逐列扫描,行列反转扫描。

逐行扫描

按键以矩阵方式连接,P1.0~P1.3 为行线,P1.4~P1.7为列线
设置全部行线为输出线,行线全部设置为高电平,全部列线为输入线,检测列线全部为高时,则代表无按键按下
逐行设置行线为低电平,检测每行所有列线,如果识别到低电平,则可判定对应行列按键被按下
如下图所示,行1设置为低电平,检测到列2为低电平,则判定行1列2对应按键被按下

行1为低,按下列2后的状态变化

// 逐行检测代码示例
void matrix_scan(void)
{unsigned char row, col;for (row = 0; row < MATRIX_ROW_MAX; row++){// 逐行选中P1 &= ~(1 << row);for (col = 0; col < MATRIX_COL_MAX; col++){// 在选中行检查每一列if (((P1 >> (MATRIX_ROW_MAX + col)) & 0x01) == KEY_PRESSED){// 消抖delay_10us(1000);// 再次检测 IO 口确认按键状态if (((P1 >> (MATRIX_ROW_MAX + col)) & 0x01) == KEY_PRESSED){if (matrix_status == KEY_UNPRESSED) {printf("matrix - row %d col %d pressed\r\n", (int)row, (int)col);pressed_row = row;pressed_col = col;matrix_status = KEY_PRESSED;}break;}}if (((row == pressed_row) && (col == pressed_col))){printf("matrix - row %d col %d unpressed\r\n", (int)row, (int)col);pressed_row = MATRIX_UNKNOWN;pressed_col = MATRIX_UNKNOWN;matrix_status = KEY_UNPRESSED;}}// 清除选中行P1 |= (1 << row);}
}

逐列扫描

与逐行扫描类似,变为逐列设置列线为0,检测每列对应行线,确定按键位置。

行列反转扫描

行先全部设置为高,列全部设置为低,如有按键按下,检测到对应行线变低,确认行;
反向设置,列为高,行为低,检测对应变低的列,确认列;
根据对应行列,即可确认到对应被按下按键位置。

总结

实际按键使用中,使用独立按键与矩阵按键,可覆盖大部分应用场景,针对一些特殊场景,例如多按键按下,会在后续继续讨论优化。



http://chatgpt.dhexx.cn/article/2pI2c5Bg.shtml

相关文章

矩阵按键实验

矩阵按键简介 以 4*4 矩阵键盘为例。 16 个按键被排成 4 行 4 列&#xff0c;第一行将每个按键的一端连接在一起构成行线&#xff0c;第一列将每个按键的另一端连接在一起构成列线&#xff0c;这样便一共有 4 行 4 列共 8 根线&#xff0c;如图所示&#xff1a; 将这 8 根线连接…

51单片机学习记录(五)矩阵按键

文章目录 1、矩阵按键的控制原理2、矩阵按键实现1、行列式法实现矩阵按键2、线翻转法实现矩阵按键3、按键实战 1、矩阵按键的控制原理 独立按键与单片机连接时&#xff0c; 每一个按键都需要单片机的一个 I/O 口&#xff0c; 若某单片机系统需较多按键&#xff0c; 如果用独立…

51单片机矩阵键盘扫描及使用方法

一、矩阵键盘简介 矩阵键盘&#xff0c;也称矩阵按键&#xff0c;是为了节约单片机IO口占用所引入的一种外设。 &#xff08;图片截取至普中A2开发板原理图&#xff09; &#xff08;图片截取至普中A2开发板实物图&#xff09; 我们知道&#xff0c;一个独立按键需要1个IO口。但…

单片机编辑库四之矩阵按键

单片机编辑库一之延时与led灯 单片机编辑库二之按键 单片机编辑库三之蜂鸣器 单片机编辑库四之矩阵按键 之前为大家介绍了独立按键的原理和使用方法&#xff0c;这一章给大家带来一个升级体验——矩阵按键&#xff0c;话不多说&#xff0c;直接开始今天的内容。 一、矩阵按键…

51单片机——矩阵按键实验,小白讲解,相互学习

矩阵按键介绍&#xff1a; 独立按键与单片机连接时&#xff0c;每一个按键都需要单片机的一个I/O 口&#xff0c;若某单片机系统需较多按键&#xff0c;如果用独立按键便会占用过多的I/O 口资源.单片机系统中I/O 口资源往往比较宝贵&#xff0c;当用到多个按键时为了减少I/O 口…

STM32----矩阵按键

一、实物图 二、开发流程 分析&#xff1a;对于矩阵按键&#xff0c;我们一般采用行列扫描反转的方法进行开发&#xff0c;分别把每一个引脚连接一个GPIO口并设置一半成通用推挽输出模式&#xff0c;一半为上拉输入模式&#xff0c;行列扫描反转进行判断按击的按键来判断行列从…

(五)矩阵按键

本章我们主要是写矩阵键盘的内容&#xff0c;矩阵键盘的原理和独立按键的按键原理基本是类似的&#xff0c;只是关于整个的原理还是要有些介绍&#xff0c;本章我们通过矩阵按键的某个按键按下&#xff0c;然后在数码管上输出对应的按键值。 1.关于按键 可以看前面按键的内容…

【STM32 基础实验矩阵按键】

文章目录 一、元器件矩阵键盘说明二、基于stm32f10c8t6 基础实验矩阵按键&#xff08;1&#xff09;实验功能实现说明&#xff08;2&#xff09;矩阵键盘原理&#xff08;3&#xff09;代码部分&#xff08;4&#xff09;效果展示 三、总结与扩展附上参考文献链接与视频链接出处…

51单片机入门——矩阵按键

文章目录 1.按键1.1.独立按键1.2.矩阵按键 2.按键的扫描与抖动2.1.独立按键的扫描2.2.按键抖动与消抖2.3.矩阵按键的扫描 3.简易计算器 1.按键 1.1.独立按键 常用的按键电路有两种形式&#xff0c;独立式按键和矩阵式按键&#xff0c;独立式按键比较简单&#xff0c;它们各自…

mac怎么给移动硬盘分区

我们经常用Windows系统给移动硬盘分区&#xff0c;对于Windows系统的操作我们是非常熟悉的&#xff0c;但是现在很多人都在使用苹果电脑&#xff0c;那么如何用Mac给硬盘分区呢&#xff1f;这个可是需要技术的。如果我们不会用Mac系统给移动硬盘分区&#xff0c;当我们在Mac上插…

ntfs格式的移动硬盘如何在mac电脑写入?

随着照片视频等技术的进步&#xff0c;这类文件越发清晰的同时&#xff0c;占用内存也越来越大&#xff0c;人们逐渐将其中不常用到的存入移动硬盘中&#xff0c;以此减少电脑空间占用。目前国内大多数移动硬盘均为Windows自研的NTFS格式&#xff0c;对于这类NTFS格式的移动硬盘…

mac怎么删除硬盘里面的东西?为什么苹果电脑无法删除移动硬盘文件?

mac怎么删除硬盘里面的东西&#xff1f;由于移动硬盘的文件系统是NTFS格式的&#xff0c;而这种格式与Mac电脑是不兼容的&#xff0c;Mac电脑没有权限对移动硬盘上的数据进行操作&#xff0c;Mac上不能把移动硬盘的数据删除了&#xff0c;那么&#xff0c;有没有什么操作方法&a…

苹果电脑怎么用移动硬盘ntfs?快速读取和编辑Mac外置移动硬盘

苹果电脑怎么用移动硬盘ntfs&#xff1f;如果你对电脑比较熟悉的话&#xff0c;可能知道NTFS磁盘格式。该格式专门为Windows系统设计的&#xff0c;也称为Windows NT文件系统。从Windows系统迁移到Mac可能是一项相当困难的任务&#xff0c;因为NTFS格式的硬盘在Mac上不能正常工…

如何在Mac上给移动硬盘加密

随着人们的安全意识越来越强&#xff0c;手机加密、Wi-Fi加密&#xff0c;甚至平时工作的U盘、移动硬盘也要加密。在Mac上对移动硬盘加密并不是很难&#xff0c;通过磁盘工具对硬盘进行格式化处理&#xff0c;并重新选择磁盘格式便可实现加密。下面就让我们来看具体的操作吧&am…

mac无法在移动硬盘上新建文件夹 mac如何在移动硬盘新建文件夹

明明是新买的硬盘&#xff0c;为什么把移动硬盘插入Mac后&#xff0c;Mac无法在移动硬盘上新建文件夹呢&#xff1f;相信很多Mac用户都曾遇到过Mac无法在移动硬盘上新建文件夹的问题。为什么会出现这样的问题呢&#xff1f;用户应该怎么解决呢&#xff1f;本文就来为大家介绍ma…

Mac无法写入移动硬盘 这些软件帮你解决

疫情期间因工作需要&#xff0c;从淘宝上买了一个移动硬盘&#xff0c;将公司的文件拷贝到这个移动硬盘上&#xff0c;并没有发现什么问题&#xff0c;一拿回到家里就懵圈了&#xff0c;突然发现里面的文件都无法进行修改或剪切粘贴。 一番百度之后&#xff0c;我找到了原因&a…

Mac如何拷贝文件到移动硬盘

haha~ 看到这个标题不要以为博主这是傻了: “切, 往移动硬盘拷文件谁不会啊~”, “又在故弄玄虚, 就这也写博客~” … 确实, 我要把这个写成博客了. 因为今天要拷贝MacOS Sierra安装包到另外一台电脑上, 安装包有4.7个G, U盘果断不行, 于是换上移动硬盘, 连上电脑, 将安装包拖入…

Mac下如何把iphone资料备份到移动硬盘

一般的备份方法 首先新系统的iphone备份已经转到了访达 连接iphone后在访达左边栏会看到你的手机 在终端输入下面这段命令行 ln -s /Volumes/Data/ios_backup &#xff5e;/Library/Application\ Support/MobileSync/Backup /Volumes/Data/ios_backup 这行是你想要指定的目…

怎样将iphone照片通过MAC导入移动硬盘?

iMazing是一款第三方的苹果iOS设备管理软件&#xff0c;大家使用数据线或Wi-Fi将苹果设备与电脑进行连接以后&#xff0c;就可以用它进行音乐传输、照片传输和数据备份等操作。 它支持Windows系统和Mac系统&#xff0c;下面通过一篇教程&#xff0c;教大家如何通过Mac系统的iM…

mac怎么用ntfs硬盘 NTFS移动硬盘怎么在mac上使用

品牌型号:MacBook Air 系统:macOS 10.13 软件版本:Tuxera Ntfs for mac 2020 初次接触到Mac电脑的用户&#xff0c;会发现自己的移动硬盘或U盘连接到电脑后仅有只读权限&#xff0c;并不能对其写入数据。这和移动硬盘格式有着密切的关系&#xff0c;NTFS格式在Mac电脑上并不…