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

article/2025/1/17 6:03:38

一、矩阵键盘简介

        矩阵键盘,也称矩阵按键,是为了节约单片机IO口占用所引入的一种外设。

(图片截取至普中A2开发板原理图)

(图片截取至普中A2开发板实物图)

        我们知道,一个独立按键需要1个IO口。但是如果我们需要大量的按键,则需要大量的IO口,但是单片机现有的IO口并不能很好的满足,所以引入矩阵键盘。

二、矩阵键盘扫描原理

从独立按键到矩阵按键    

1.独立按键回顾

    上图的矩阵键盘共16个按键(4行×4列),先回到原来的一个独立按键分析。

 首先分析独立按键的原理图连接方式(如上图),以按键K1为例,按键K1一端连接到单片机的P3.1口,另一端接地(GND)。当按键K1被按下时,GND直接就连到P3.1。所以当K1被按下时,P3.1口为低电平。我们只需要判断P3.1口是否为低电平,即可判断K1是否被按下。

2.矩阵按键扫描思路

先分析矩阵按键的IO连线,有以下特征:

  1. P17~P14这四个IO口连接了每一矩阵键盘
  2. P13~P10这四个IO口连接了每一矩阵键盘

矩阵键盘扫描共有两种扫描方式:

  • 逐行扫描
  • 逐列扫描

先分析逐行扫描根据键盘被按下时,IO口为低电平这个特性。我们可以这样检测第一行:

  1. 给除第一行之外的其他行给高电平,防止其影响我们接下来的低电平检测
  2. 给第一行送低电平0
  3. 依次检测每一列的IO口电平(P13~P10),当出现低电平时,说明第一行的这一列的这个按键就被按下。

结合下图很好理解:

           要检测第一行,给其他行赋值高电平。假设S2被按下了,那么P17的低电平会顺着绿色路线通到S2的另一端IO口(P12),只要检测出P12为低电平,那么就可以得出结论:K2被按下

按照这个思路,继续依次检测其他行即可。

总结:

       按行扫描 给第1到第4行要扫描的行置0,其余行置1。然后对每一列进行读取,读出低电平的列则可以判断该行该列的按键被按下。

IO口电平(P17~P14:每行对应IO的口)检测的行若第K列IO口测出低电平
0 1 1 1第一行第K列被按下

1 0 1 1

第二行第K列被按下
1 1 0 1第三行第K列被按下
1 1 1 0第四行第K列被按下

按列扫描的结果类似:

IO口电平(P13~P10:每行对应IO的口)检测的列若第K行IO口测出低电平
0 1 1 1第K行第一列被按下

1 0 1 1

第K行第二列被按下
1 1 0 1第K行第三列被按下
1 1 1 0第K行第四列被按下

三、编程验证

1、先给出一些引脚定义

#include <REGX52.H>#define uchar unsigned char 
#define uint unsigned int 
#define led P0//IO口位选
sbit wei1=P2^2;
sbit wei2=P2^3;
sbit wei3=P2^4;//定义行引脚
sbit hang1=P1^7;
sbit hang2=P1^6;
sbit hang3=P1^5;
sbit hang4=P1^4;//定义列引脚
sbit lie1=P1^3;
sbit lie2=P1^2;
sbit lie3=P1^1;
sbit lie4=P1^0;

2、按行扫描代码:

	//扫描第一行的各列P1|=0xff;//IO口全部初始化为高电平hang1=0;//第一行设置为低电平if(lie1==0)//检测第一列是否为低电平(按键是否被按下){Delay10ms();//延时消抖if(lie1==0){while(lie1==0);key=1;//确认被按下,保存键值}}//下面依次扫描第二、三和第四列,方法类似if(lie2==0){Delay10ms();if(lie2==0){while(lie2==0);key=2;}}if(lie3==0){Delay10ms();if(lie3==0){while(lie3==0);key=3;}}if(lie4==0){Delay10ms();if(lie4==0){while(lie4==0);key=4;}}

第二行,第三行、第四行扫描的方法类似

只需把 if 判断改成对应的行,键值改为对应的键值即可

3.总代码

#include <REGX52.H>
#include <math.h>#define uchar unsigned char 
#define uint unsigned int 
#define led P0sbit wei1=P2^2;
sbit wei2=P2^3;
sbit wei3=P2^4;sbit hang1=P1^7;
sbit hang2=P1^6;
sbit hang3=P1^5;
sbit hang4=P1^4;sbit lie1=P1^3;
sbit lie2=P1^2;
sbit lie3=P1^1;
sbit lie4=P1^0;void play(int a);
void Delay10ms();
int scan();uchar code smg[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};int key=0;
int x;void main()
{while(1){play(scan());}}void play(int a)
{x=a;wei1=0;wei2=0;wei3=0;led=smg[x];Delay10ms();}int scan()
{P1|=0xff;hang1=0;if(lie1==0){Delay10ms();if(lie1==0){while(lie1==0);key=1;}}if(lie2==0){Delay10ms();if(lie2==0){while(lie2==0);key=2;}}if(lie3==0){Delay10ms();if(lie3==0){while(lie3==0);key=3;}}if(lie4==0){Delay10ms();if(lie4==0){while(lie4==0);key=4;}}P1|=0xff;hang2=0;if(lie1==0){Delay10ms();if(lie1==0){while(lie1==0);key=5;}}if(lie2==0){Delay10ms();if(lie2==0){while(lie2==0);key=6;}}if(lie3==0){Delay10ms();if(lie3==0){while(lie3==0);key=7;}}if(lie4==0){Delay10ms();if(lie4==0){while(lie4==0);key=8;}}P1|=0xff;hang3=0;if(lie1==0){Delay10ms();if(lie1==0){while(lie1==0);key=9;}}if(lie2==0){Delay10ms();if(lie2==0){while(lie2==0);key=10;}}if(lie3==0){Delay10ms();if(lie3==0){while(lie3==0);key=11;}}if(lie4==0){Delay10ms();if(lie4==0){while(lie4==0);key=12;}}P1|=0xff;hang4=0;if(lie1==0){Delay10ms();if(lie1==0){while(lie1==0);key=13;}}if(lie2==0){Delay10ms();if(lie2==0){while(lie2==0);key=14;}}if(lie3==0){Delay10ms();if(lie3==0){while(lie3==0);key=15;}}if(lie4==0){Delay10ms();if(lie4==0){while(lie4==0);key=0;}}return key;
}void Delay10ms()		//@11.0592MHz
{unsigned char i, j;i = 18;j = 235;do{while (--j);} while (--i);
}

四、课后作业(矩阵键盘计算器)

题目:请你利用矩阵按键和数码管来设计一个计算器,能够实现简单的四则整数运算和清零操作


http://chatgpt.dhexx.cn/article/AiTruZqh.shtml

相关文章

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

单片机编辑库一之延时与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电脑上并不…

mac不识别移动硬盘导致无法拷贝资源

背景 硬盘插入到Mac电脑上之后&#xff0c;mac不识别移动硬盘导致无法拷贝资源。 移动硬盘在Mac上无法被识别的原因可能有很多&#xff0c;多数情况下&#xff0c;是硬盘的格式与Mac电脑不兼容。 文件系统格式不兼容 macOS使用的文件系统是HFS或APFS&#xff0c;如果移动硬盘是…

Mac不能复制拷贝写入文件到移动硬盘/U盘解决办法

1.有的小伙伴把移动硬盘或 U 盘接入到 Mac 电脑上&#xff0c;当把文件拷贝到移动硬盘时&#xff0c;会发现不能复制文件到移动硬盘。这里因为移动硬盘或 U 盘是使用 Windows 系统下的 NTFS 分区格式&#xff0c;而 Mac 系统原生是不支持这种格式的&#xff0c;也就是为什么不能…

windows移动硬盘接到mac上使用(加载ntfs移动硬盘)

也就是将NTFS格式的移动硬盘&#xff0c;连接到mac上进行存储。 目录 步骤如下&#xff1a;1、接入硬盘&#xff0c;查看Device Node2、推出硬盘&#xff0c;一般桌面就有对应图标&#xff0c;右键推出就行3、建个目录&#xff0c;然后把硬盘挂上去就行4、解挂载硬盘 步骤如下…