15:矩阵按键

news2024/10/7 18:22:06

矩阵按键

  • 1、 矩阵按键的原理图分析
  • 2、 矩阵键盘的工作过程
  • 3、编程实战
    • 3.1、先通过LED灯进行按键测试
    • 3.2、通过静态数码管显示键值

1、 矩阵按键的原理图分析

在这里插入图片描述

(1)横向和纵向分割
(2)按键两端分别接不同的IO引脚
(3)按键的物理作用不变:按下接通电路,弹起断开电路
把上面的图简化如下图:
在这里插入图片描述
由图得出2个不同的引脚控制一个按键。如8号引脚和4号引脚控制按键S1。

2、 矩阵键盘的工作过程

(1)单片机CPU先输出(IO引脚输出)0x0f(0000 1111)
既8~5为0,4~1为1。
(2)若没有按键按下,则单片机CPU收到的依然是0x0f。假如S1按键按下,则4号引脚的高电平1会变成低电平0,则CPU收到的是 0x07(0000 0111),但是S1,S5,S9,S13按下后也会使4号引脚变成低电平0。
(3)单片机CPU继续输出0xf0(1111 0000),既8~5为1 ,4~1为0。假如S1按键按下,则8号引脚的高电平1会变成低电平0,则CPU收到的是 0x70(0111 0000),但是S1,S2,S3,S4按下都会使8号引脚变成低电平0。
(4)从收到的数据(IO引脚输入)判断哪一列按下了。
(5)综合2次得到的行和列位置,计算出键值。

3、编程实战

3.1、先通过LED灯进行按键测试

按键接P2端口,从上到下是P2.7~P2.0

#include <REGX51.H>

#define LED P0
#define KEY P2


void main(void)
{
		KEY = 0X0F;    //从P2端口输出(0000 1111)
		if(KEY != 0X0F) //代表由按键按下
		{
			LED = KEY;
		}
}

0000 1111
K1按下:0000 0111
K2按下:0000 1011
K3按下:0000 1101
K4按下:0000 1110
由次可以类推出:
8位二进制,后4位代表列。

#include <REGX51.H>

#define LED P0
#define KEY P2


void main(void)
{
		KEY = 0Xf0;    //从P2端口输出(1111 0000)
		if(KEY != 0Xf0) //代表由按键按下,与P2连接的引脚输入不是1111 0000,
		{
			LED = KEY;
		}
}

1111 0000
K1按下:0111 0000
K5按下:1011 0000
K9按下:1101 0000
K13按下:1110 0000
由次可以类推出:
8位二进制,前4位代表行。

3.2、通过静态数码管显示键值

按键接P2端口,从上到下是P2.7~P2.0

#include <REGX51.H>

#define SMG P0
#define KEY P2

void delay10ms(void)  //消抖的延迟函数
{
    unsigned char a,b,c;
    for(c=5;c>0;c--)
        for(b=4;b>0;b--)
            for(a=248;a>0;a--);
}

void main(void)
{
	  while(1)
	{
	unsigned char hang,lie,keynum;
	unsigned char val[16] = {0xc0, 0xf9, 0xa4, 0xb0,
	0x99, 0x92, 0x82, 0xf8, 
	0x80, 0x90, 0x88, 0x83, 
	0xc6, 0xa1, 0x86, 0x8e};
	
/******判断是哪一行按下******/
		KEY = 0Xf0;    //从P2端口输出(0000 1111)
		if(KEY != 0Xf0) //代表有按键按下
	{
	   delay10ms();//消抖
			switch(KEY)
			{
				case 0x70:
					     hang = 1;
				break;
				case 0xb0:
					     hang = 2;
				break;
				case 0xd0:
					     hang = 3;
				break;
				case 0xe0:
					     hang = 4;
				break;
				default:
					break;
			}				
				
/******判断是哪一列按下******/
			KEY = 0x0F;//p2端口输出0000 1111
		if(KEY != 0x0f)//代表有按键按下
	  {
				switch(KEY)
			{
				case 0x07:
					     lie = 1;
				break;
				case 0x0b:
					     lie = 2;
				break;
				case 0x0d:
					     lie = 3;
				break;
				case 0x0e:
					     lie = 4;
				break;
				default:
					break;		
			}
		}
			keynum = (hang - 1)*4 + lie;
	}
	else//没有任何按键按下
		keynum = 0;//静态数码管一直显示为0
		 SMG = val[keynum];
 }
		
}

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

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

相关文章

ONLYOFFICE:一站式办公,探索高效办公新境界

写在前面ONLYOFFICE 介绍ONLYOFFICE 有哪些优势ONLYOFFICE 文档 8.0 发布如何体验 ONLYOFFICEONLYOFFICE 文档部分页面截图 写在前面 在当今这样一个数字化时代&#xff0c;办公软件已经成为我们日常工作中不可或缺的一部分&#xff0c;熟练使用 Office、WPS、腾讯文档、金山文…

openGauss学习笔记-215 openGauss性能调优-确定性能调优范围-性能日志

文章目录 openGauss学习笔记-215 openGauss性能调优-确定性能调优范围-性能日志215.1 性能日志概述215.2 性能日志收集的配置参数 openGauss学习笔记-215 openGauss性能调优-确定性能调优范围-性能日志 215.1 性能日志概述 性能日志主要关注外部资源的访问性能问题。 性能日…

户用光伏电站设计优化方案:为行业打造示范标杆

不可再生能源的日益消耗促使了大家对新能源的使用和推广&#xff0c;光伏发电已经成为国家和企业大力推崇的技术。其中&#xff0c;户用光伏发电是重要组成部分&#xff0c;有非常大的市场发展空间。然而&#xff0c;如何优化设计&#xff0c;提高效率&#xff0c;降低成本&…

牛客——中位数图(连续子数组和二维前缀和)

链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 来源&#xff1a;牛客网 题目描述 给出1~n的一个排列&#xff0c;统计该排列有多少个长度为奇数的连续子序列的中位数是b。中位数是指把所有元素从小到大排列后&#xff0c;位于中间的数。 输入描述: 第一行为两个正…

Java统计GitLab代码量

1、生成密钥 2、添加依赖 <dependency><groupId>org.gitlab4j</groupId><artifactId>gitlab4j-api</artifactId><version>5.3.0</version></dependency> Java代码实现 统计所有项目的代码行数&#xff1a; private Stri…

C++函数分文件编写之VScode版

VScode实现函数的分文件编写 1.下载插件创建项目2.分文件编写内容3.修改主函数文件名 我在分享内容时经常用的软件是VScode&#xff0c;相信有些内存敏感或需要VScode便利性的小伙伴也是更愿意使用VScode。那么接下来我们就盘一盘怎样使用VScode实现分文件编写。 1.下载插件创建…

2023年06月CCF-GESP编程能力等级认证Python编程二级真题解析

Python等级认证GESP(1~6级)全部真题・点这里 一、单选题(共15题,共30分) 第1题 高级语言编写的程序需要经过以下()操作,可以生成在计算机上运行的可执行代码。 A:编辑 B:保存 C:调试 D:编译 答案:D 第2题 能够实现下面流程图功能的伪代码是( )。 A:if …

动力电池智能工厂数字孪生可视化,助力新能源汽车产业数字化转型

动力电池智能工厂数字孪生可视化&#xff0c;助力新能源汽车产业数字化转型。随着新能源汽车产业的快速发展&#xff0c;动力电池作为新能源汽车的核心组成部分&#xff0c;其生产制造的数字化转型也成为了行业关注的焦点。动力电池智能工厂数字孪生可视化平台作为一种新型的技…

【PyQt5】一些基本操作

文章目录 前言一、查看自己的PyQt版本代码运行结果 二、查看PyQt5 的类或者对象的属性代码运行结果demo_pulsresult 三、帮助文档代码结果 前言 包括以下 查看自己的PyQt版本、查看某个类的使用方法 一、查看自己的PyQt版本 代码 import PyQt5.QtCore print(PyQt5.QtCore.P…

Web html和css

目录 1 前言2 HTML2.1 元素(Element)2.1.1 块级元素和内联(行级)元素2.1.2 空元素 2.2 html页面的文档结构2.3 常见标签使用2.3.1 注释2.3.2 标题2.3.3 段落2.3.4 列表2.3.5 超链接2.3.6 图片2.3.7 内联(行级)标签2.3.8 换行 2.4 属性2.4.1 布尔属性 2.5 实体引用2.6 空格2.7 D…

通过消息队列实现进程之间通信代码

#include <myhead.h> struct msgbuf {long int mtype; char mtext[1024]; }; //定义一个消息大小 #define MSGSIZE sizeof(struct msgbuf)-sizeof(long int) int main(int argc, const char *argv[]) {//1、创建key值以便创建消息队列key_t key ftok("/", k)…

IP代理在网络中解决了哪些问题?代理IP使用时效是什么意思?

随着互联网的普及和发展&#xff0c;IP代理作为一种网络工具&#xff0c;被广泛应用于各种场景。IP代理的使用可以解决很多网络中的问题&#xff0c;提高网络访问的速度和安全性。本文将详细介绍IP代理在网络中解决的问题&#xff0c;以及代理IP使用时效的含义。 一、IP代理在网…

Backtrader 文档学习-Indicators- TA-Lib

Backtrader 文档学习-Indicators- TA-Lib 1.概述 即使BT提供的内置指标数量已经很多&#xff0c;开发指标主要是定义输入、输出并以自然方式编写公式&#xff0c;还是希望使用TA-LIB。原因: 指标X在指标库中&#xff0c;而不在BT中TA-LIB众所周知的&#xff0c;人们信任口碑…

使用SPM_batch进行批量跑脚本(matlab.m)

软件&#xff1a;spm8matlab2023bwin11 数据格式&#xff1a; F:\ASL\HC\CBF\HC_caishaoqing\CBF.nii F:\ASL\HC\CBF\HC_caishaoqing\T1.nii F:\ASL\HC\CBF\HC_wangdonga\CBF.nii F:\ASL\HC\CBF\HC_wangdonga\T1.nii clear spmdirD:\AnalysisApps\spm8; datadirF:\ASL\HC\CBF…

代理IP使用:如何防范潜在的风险?

代理IP用途无处不在。它们允许您隐藏真实IP地址&#xff0c;从而实现匿名性和隐私保护。这对于保护个人信息、绕过地理受限的内容或访问特定网站都至关重要。 然而&#xff0c;正如任何技术工具一样&#xff0c;代理IP地址也伴随着潜在的风险和威胁。不法分子可能会滥用代理IP…

《合成孔径雷达成像算法与实现》Figure6.5

clc clear close all参数设置 距离向参数设置 R_eta_c 20e3; % 景中心斜距 Tr 2.5e-6; % 发射脉冲时宽 Kr 20e12; % 距离向调频率 alpha_os_r 1.2; % 距离过采样率 Nrg 320; % 距离线采样数 距离向…

上云03 | 数据库事务

文章目录 MySQL线程池禁用存储过程、函数、触发器、视图SQL执行原理执行步骤执行的底层原理详细执行步骤分析**Step 1:获取数据 (From, Join)****Step 2:过滤数据 (Where)****Step 3:分组 (Group by)****Step 4:分组过滤 (Having)****Step 5:返回查询字段 (Select)****Step 6:排…

前端复杂 table 渲染及 excel.js 导出

转载请注明出处&#xff0c;点击此处 查看更多精彩内容 现在我们有一个如图&#xff08;甚至更复杂&#xff09;的表格需要展示到页面上&#xff0c;并提供下载为 excel 文件的功能。 前端表格渲染我们一般会使用 element-ui 等组件库提供的 table 组件&#xff0c;这些组件一般…

C/C++ - 容器list

目录 容器特性 list 容器特性 使用场景 构造函数 默认构造函数 填充构造函数 范围构造函数 复制构造函数 大小函数 函数&#xff1a;size 函数&#xff1a;empty​ 函数&#xff1a;max_size​ 增加函数 函数&#xff1a;​push_back​ 函数&#xff1a;push_f…

Kubernetes 简介

&#x1f4ce;k8s 入门到微服务项目实战.xmindhttps://www.yuque.com/attachments/yuque/0/2024/xmind/35457682/1707117691869-1ea2805d-7218-4223-a0a9-877147ca84b2.xmind 目录 1、概念介绍 应用部署的演变 Kubernetes 架构图 分层架构 2、Kubernetes 组件 控制面板组…