【51单片机系列】矩阵按键介绍

news2025/1/19 8:01:42

本节实现的功能是:通过开发板上的矩阵键盘控制静态数码管显示对应的键值0-F。

文章目录

  • 一、矩阵按键介绍
  • 二、硬件设计
  • 三、软件设计

一、矩阵按键介绍

独立键盘与单片机连接时,每一个按键都需要单片机的一个I/O口。若某单片机系统需要较多按键,如果用独立按键便会占用过多的I/O口资源。

当用到多个按键时,为了减少I/O口引脚,引入了矩阵按键。比如4*4矩阵键盘。

对于4*4矩阵键盘,开发板上通常将16个按键排成4行4列。第一行将每个按键的一端连接在一起构成行线,第一列将每个按键的另一端连接在一起构成列线,这样便一共有4行4列共8根线。将这8根线连接到单片机的8个I/O口上,通过程序扫描键盘可以检测16个键。

无论是独立键盘还是矩阵键盘,单片机检测其是否被按下的依据都是一样的,即检测与该键对应的I/O口是否为低电平。独立键盘有一端固定为低电平而矩阵键盘两端都与单片机I/O口相连,在检测时需编程通过单片机I/O口送出低电平。检测方法最常用的是行列扫描和线翻转法。

  • 行列扫描法检测时,先送一列为低电平,其余几列全为高电平,此时确定列数;然后立即轮流检测一次各行是否有低电平,若检测到某一行为低电平,此时确定了行数,便可以确认当前被按下的键是哪一行哪一列的。用同样方法轮流送各列一次低电平,再轮流检测一次各行是否变为低电平,这样即可检测完所有的按键,当有按键被按下时便可判断出按下的键是哪一个键。
  • 线翻转法检测时,就是使所有行线为低电平时,检测所有列线是否有低电平,如果有,就记录列线值;然后再翻转,使所有列线都为低电平,检测所有行线的值。由于有按键按下,行线的值也会有变化,记录行线的值,从而就可以检测到全部按键。

矩阵按键也需要按键消抖。

二、硬件设计

实现功能:通过开发板上的矩阵键盘控制静态数码管显示对应的键值0-F。用到的硬件资源有:

  • 动态数码管
  • 4*4矩阵按键

硬件电路如下:
矩阵按键硬件设计

从上图可以看出,4*4矩阵按键引出的8根控制管脚直接连接到51单片机的P1口上。

三、软件设计

要想51单片机能够检测按键是否按下,必须通过单片机管脚来控制矩阵按键。

代码实现如下:

/*
	实现功能:使用独立按键控制指示灯的亮灭
	[2023-12-06] zoya
*/
#include "reg52.h"

typedef unsigned char u8;
typedef unsigned int u16;


#define GPIO_DIG P0  // 动态数码管
#define GPIO_KEY P1  // 矩阵按键

u8 keyVal;  // 记录按键位置
u8 code smg[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71, 0x00};  // 共阴极数码管

// 延时函数,i=1延时10us
void delay(u16 i)
{
	while(i--);
}

// 检测矩阵按键的哪个键按下,线翻转法检测哪个按键被按下
void KeyDown()
{
	char a = 0;
	GPIO_KEY = 0x0f;  // 所有行线全部为低电平
	if(0x0f != GPIO_KEY)  // 检测是否有键被按下,如果有键被按下,GPIO_KEY不会为0x0f
	{
		delay(1000);  // 延时10ms进行消抖
		if(0x0f != GPIO_KEY)  // 再次判断是否有键被按下
		{
			// 测试列
			GPIO_KEY = 0x0f;
			// 检测列是否有低电平
			switch(GPIO_KEY)
			{
				case 0x07: keyVal = 0; break;  // 第一列的某行被按下,假设是第一行
				case 0x0b: keyVal = 1; break;  // 第二列的某行被按下,假设是第一行
				case 0x0d: keyVal = 2; break;  // 第三列的某行被按下,假设是第一行
				case 0x0e: keyVal = 3; break;  // 第四列的某行被按下,假设是第一行
			}
			
			// 测试行
			GPIO_KEY = 0xf0;
			switch(GPIO_KEY)
			{
				case 0x70: keyVal = keyVal + 0; break;  // 第一行的某列被按下
				case 0xb0: keyVal = keyVal + 4; break;  // 第二行的某列被按下
				case 0xd0: keyVal = keyVal + 8; break;  // 第三行的某列被按下
				case 0xe0: keyVal = keyVal + 12; break;  // 第四行的某列被按下
			}
			
		}
		
		while((a <50) && (GPIO_KEY != 0xF0))  // 检测按键松手检测
		{
			delay(100);
			a++;
		}
	}
}


void main()
{
	while(1)
	{
		KeyDown();
		GPIO_DIG = smg[keyVal];
	}
}

仿真结果:

矩阵按键控制动态数码管显示0-F

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1293626.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QT----Visual Studio输入中文报错,常量中有换行符

问题描述 在VS中写qt时发现在标题中输入了中文直接把报错无法运行 解决方法1 修改文件的编码方式。在VS菜单栏 工具->自定义-》命令-》选择文件-》添加高级保存选项命令。 双加选中添加中文的文件&#xff0c;文件-》高级保存选项-》修改utf-8就可以运行了 解决方法2…

用C语言的循环嵌套打印菱形

这是用循环弄出来的&#xff0c;看的时候可以列一个表&#xff0c;将空格&#xff0c;要打印的*数&#xff0c;行数对应出来&#xff0c;因为里面涉及到一些数学公式&#xff0c;写出来的话方便观察&#xff01; #define _CRT_SECURE_NO_WARNINGS 1//C语言中用scanf可能会警告&…

【K8S】Hello World

文章目录 1 搭建本地测试环境1.1 安装 docker和 Colima1.2 安装 minikube1.3 启动minikube1.4 安装 kubectl1.5 注册 docker hub镜像仓库 2 k8s核心资源概念2.1 Pod2.2 Deployment2.3 Service2.4 Ingress 参考资料 1 搭建本地测试环境 本文以 mac os为例 1.1 安装 docker和 C…

Day53力扣打卡

打卡记录 重新规划路线&#xff08;dfs&#xff09; 链接 class Solution:def dfs(self, x: int, parent: int, e: List[List[List[int]]]) -> int:res 0for edge in e[x]:if edge[0] parent:continueres edge[1] self.dfs(edge[0], x, e)return resdef minReorder(se…

Android 11.0 MTK Camera2 设置默认拍照尺寸功能实现

1.前言 在11.0的系统rom定制化开发中,在mtk平台的camera2关于拍照的一些功能修改中,在一些平台默认需要设置最大的分辨率 来作为拍照的分辨率,所以就需要了解拍照尺寸设置流程,然后来实现相关的功能 如图: 2.MTK Camera2 设置默认拍照尺寸功能实现的核心类 \vendor\me…

Terraform实战(二)-terraform创建阿里云资源

1 初始化环境 1.1 创建初始文件夹 $ cd /data $ mkdir terraform $ mkdir aliyun terraform作为terraform的配置文件夹&#xff0c;内部的每一个.tf&#xff0c;.tfvars文件都会被加载。 1.2 配置provider 创建providers.tf文件&#xff0c;配置provider依赖。 provider…

AUTOSAR 入门

前言 AUTOSAR是什么Vector DaVinci 工具功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants 创建一个自定义列表如何创建一个注脚注释也是必…

nodejs微信小程序+python+PHP的智能停车系统-计算机毕业设计推荐django

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

Leetcode刷题笔记题解(C++):165. 比较版本号

思路&#xff1a;利用小数点来分开求和&#xff0c;判断和是否相等来推断两个版本号是否一致 class Solution { public:int compareVersion(string version1, string version2) {int i0;//记录version1的字符下标int j0;//记录version2的字符下标int num10;//保存version1的和…

【Android】查看keystore的公钥和私钥

前言&#xff1a; 查看前准备好.keystore文件&#xff0c;安装并配置openssl、keytool。文件路径中不要有中文。 一、查看keystore的公钥&#xff1a; 1.从keystore中获取MD5证书 keytool -list -v -keystore gamekeyold.keystore 2.导出公钥文件 keytool -export -alias …

在线学习平台-班级模块

在线学习平台-项目搭建 在线学习平台-需求分析 若依的基本使用 通过分析可知,班级模块的结构会比较简单,可以先从班级模块入手 1.先在domain里写上班级里的属性 快捷方式: 时区可以这里找,时区和数据库名之间要加一个 ? 右键需要的数据库模型,便可直接生成 生成的实体类不…

智能优化算法应用:基于蛇优化算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于蛇优化算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于蛇优化算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.蛇优化算法4.实验参数设定5.算法结果6.参考文献7.…

服务器配置免密SSH

在当今互联网时代&#xff0c;远程工作和网络安全已成为信息技术领域的热点话题。无论是管理远程服务器、维护网络设备还是简单地从家中连接到办公室&#xff0c;安全始终是首要考虑的因素。这就是为什么 SSH&#xff08;Secure Shell&#xff09;成为了网络专业人士的首选工具…

Python---类的综合案例

1、需求分析 设计一个Game类 属性&#xff1a; 定义一个类属性top_score记录游戏的历史最高分 定义一个实例属性player_name记录当前游戏的玩家姓名 方法&#xff1a; 静态方法show_help显示游戏帮助信息 类方法show_top_score显示历史最高分 实例方法start_game开始当前…

20231207给NanoPC-T4(RK3399)开发板刷Android12的挖掘机方案的LOG

20231207给NanoPC-T4(RK3399)开发板刷Android12的挖掘机方案的LOG 2023/12/7 23:50 SDK&#xff1a;rk356x_android12_220722.tgz 只修改DTS的DTC部分就【直接】可以跑NanoPC-T4 参考资料&#xff1a; http://www.friendlyelec.com.cn/agent.asp http://www.friendlyelec.com.c…

JS的变量提升ES6基础

JS的变量提升&ES6基础 变量var关键字var声明作用域实例一实例二多个变量 变量提升 let关键字暂时性死区全局声明for循环中使用let const关键字 变量 ECMAScript变量时松散类型的&#xff0c;意思是变量可以用于保存任何类型的数据。 声明变量&#xff1a;var 、const、let …

NumPy学习:NumPy(Numerical Python)基础(一)

1.什么是NumPy NumPy 是 Python 中用于科学计算的基础包。 它是一个 Python 库&#xff0c;提供多维数组对象&#xff0c; 各种派生对象&#xff08;例如掩码数组和矩阵&#xff09;&#xff0c;以及 用于对阵列进行快速操作的各种例程&#xff0c;包括 数学、逻辑、形状操作、…

AI助力智慧农业,基于YOLOv8全系列模型【n/s/m/l/x】开发构建不同参数量级的识别系统

智慧农业随着数字化信息化浪潮的演变有了新的定义&#xff0c;在前面的系列博文中&#xff0c;我们从一些现实世界里面的所见所想所感进行了很多对应的实践&#xff0c;感兴趣的话可以自行移步阅读即可&#xff1a; 《自建数据集&#xff0c;基于YOLOv7开发构建农田场景下杂草…

视觉资料记录

1. 江南才尽&#xff0c;年少无知&#xff01;_RK3399移植,(02)Cartographer源码无死角解析-免费,(01)ORB-SLAM2源码无死角解析-免费-CSDN博客江南才尽&#xff0c;年少无知&#xff01;擅长RK3399移植,(02)Cartographer源码无死角解析-免费,(01)ORB-SLAM2源码无死角解析-免费,…

HCIP考试实验

实验更新中&#xff0c;部分配置解析与分析正在完善中........... 实验拓扑图 实验要求 要求 1、该拓扑为公司网络&#xff0c;其中包括公司总部、公司分部以及公司骨干网&#xff0c;不包含运营商公网部分。 2、设备名称均使用拓扑上名称改名&#xff0c;并且区分大小写。 3…