矩阵式键盘接口设计(用单片机读取4x4矩阵式键盘的键号,并将其显示在数码管上)(Proteus 与Keil uVision联合仿真)

一、实验原理

1、分析电路中按键状态检测的方法。

        矩阵式(也称行列式)键盘用于按键数目较多的场合,由行线和列线组成,按键位于行、列交叉点上,见图5-26,一个4×4的行、列结构可以构成一个16个按键的键盘,只需要一个8位的并行I/O口即可。

       如果采用8×8的行、列结构,可以构成一个64按键的键盘,只需要两个并行I/O口即可。        在按键数目较多场合,矩阵式键盘要比独立式键盘节省较多I/O口线。 在图5-26中行线通过上拉电阻接+5V,当无键按下时,行线为高电平,而有键按下时,则对应的行线和列线短接,行线电平状态将由与此行线相连的列线电平决定。

         键盘矩阵中无按键按下时,行线处于高电平状态;当有按键按下时,行线电平状态将由与此行线相连的列线的电平决定。

图5-26

        列线的电平如果为低,则行线电平为低;列线的电平如果为高,则行线的电平也为高,这一点是识别矩阵式键盘是否有按键按下的关键所在。由于矩阵式键盘中行、列线为多键共用,各按键均影响该键所在行和列的电平,因此各按键彼此将相互发生影响,所以必须将行、列线信号配合,才能确定闭合键的位置。

识别矩阵键盘有无键被按下,可分两步进行

第1步,首先识别键盘有无键按下;

第2步,如有键被按下,识别出具体的键号。


     

下面以图5-26所示的K3键被按下为例,说明扫描法识别此键的过程。    

第1步,识别键盘有无键按下。首先把所有列线均置为0电平,然后检查各行线电平是否都为高电平,如果不全为高电平,说明有键按下,否则说明无键被按下。例如,当K3键按下时,第1行线电平为低电平,但还不能确定是K3被按下,因为如果同一行的K2、K1或K0之一被按下,行线也为低电平。所以,只能得出第1行有键被按下的结论。

第2步,识别出哪个按键被按下。采用逐行扫描法,在某一时刻只让1条列线处于低电平,其余所有列线处于高电平。当第1列为低电平,其余各列为高电平时,因为是K3被按下,所以第1行的行线仍处于高电平状态;而当第2列为低电平,其余各列为高电平时,同样也会发现第1行的行线仍处于高电平状态;直到让第4列为低电平,其余各列为高电平时,此时第1行的行线电平变为低电平,据此,可判断第1行第4列交叉点处的按键,即K3被按下。      

        与独立式键盘类似,常见的矩阵式键盘扫描的工作方式也分为查询方式和中断方式。

二、设计硬件电路原理图,画出实际接线图。

三、根据实验任务设计出相应的程序。

#include <reg51.h>
#define uchar unsigned char
sbit L1=P1^0; 								// 定义键盘的4列线
sbit L2=P1^1;
sbit L3=P1^2;
sbit L4=P1^3;          
uchar code dis[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86, 0x8e}; //共阳极数码管字符0~F // 对应的段码
unsigned int time;
void delay(unsigned int time)                   				//延时函数
{unsigned int i;for(i=0;i<time;i++){ }
}main()                      					//主函数
{uchar temp;uchar i;while(1){P1=0xef;             		      //行扫描初值,P1.4=0,P1.5~ P1.7=1for(i=0;i<=3;i++)  		      //按行扫描, i为行变量,一共4行{  if(L1==0) P2=dis[i*4+0]; //判第1列是否有键按下,若有,键号可 //能为0,4,8,C,键号的段码送显示if(L2==0) P2=dis[i*4+1]; //判第2列是否有键按下,若有,键号可能为//1,5,9,d,键号的段码送显示if(L3==0) P2=dis[i*4+2]; //判第3列是否有键按下,若有,键号可能为//2,6,A,E,键号的段码送显示if(L4==0) P2=dis[i*4+3];         //判第4列是否有键按下,若有,键号可   //能为3,7,b,F,键号的段码送显示delay(500);		   	//延时temp=P1;			//读入P1口的状态temp=temp|0x0f; 		//使P1.3~P1.0为输入temp=temp<<1; 	// P1.7~P1.4左移1位,准备下一行扫描temp=temp|0x0f;      //移位后,置P1.3~P1.0为1,保证其仍为输入P1=temp; 	      	//行扫描值送P1口,为下一行扫描做准备}}
}

三、实验结果:

(1)按下第一个按键时:

    (2)按下最后一个按键:

四、思考题

1、键盘接口程序设计的主要任务是?

(1)去抖动处理:由于机械按键在按下和释放时会产生抖动,需要设计去抖动算法来滤除这些不必要的信号波动,确保按键信号的准确性。

(2)数据转换:将键盘发送的扫描码转换为对应的字符码,以便操作系统识别和处理。

2、如何消除按键的抖动?

(1)硬件消抖:通过在键盘输入引脚上加一个RC组合电路,延迟触发信号的上升沿和下降沿,从而消除抖动。RC组合电路由一个电阻R和一个电容C组成,其原理是通过RC的时间常数来控制信号的上升和下降过程。

(2)软件消抖:在单片机程序中,可以采取一定的算法来检测按键的真实触发信号。当检测到按键状态发生变化时,即从未按下到按下或从按下到未按下,可以认为触发了一次按键操作。在这个过程中,使用去抖动算法来过滤掉抖动信号。

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

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

相关文章

FastAPI框架使用枚举来型来限定参数、FastApi框架隐藏没多大意义的Schemes模型部分内容以及常见的WSGI服务器Gunicorn、uWSGI了解

一、FastAPI框架使用枚举来型来限定参数 FastAPI框架验证时&#xff0c;有时需要通过枚举的方式来限定参数只能为某几个值中的一个&#xff0c;这时就可以使用FastAPI框架的枚举类型Enum了。publish:December 23, 2020 -Wednesday 代码如下&#xff1a; #引入Enum模块 from fa…

一张图片生成数字人的3D发型:技术创新与应用前景

随着人工智能(AI)和计算机图形学的不断进步,从单张肖像图像生成3D数字头发的技术正在变得越来越成熟。这项技术不仅能够处理复杂的编织和未编织发型,还能在虚拟现实、电影制作和美容行业中找到广泛的应用。本文将详细介绍一种创新的3D头发重建技术,探讨其关键特性、技术创…

Dit架构 diffusion范式分类+应用

1.ping 网址 2.ssh nscc/l20 3.crtl,打开vscode的setting 4.win 10修改ssh配置文件及其密钥权限为600 - 晴云孤魂 - 博客园 整体来看&#xff1a; 使用transformer作为其主干网络&#xff0c;代替了原先的UNet 在latent space进行训练&#xff0c;通过transformer处理潜…

搬砖 网盘一键转存源码

网盘一键转存源码&#xff0c;免费资源没测试 网盘一键转存源码&#xff0c;可以将您的百度网盘资源一键转存到。并支持后台设置开屏广告 源码截图&#xff1a; 下载地址&#xff1a; https://yuncv.lanzouw.com/i8dZk2btyl4h

04. maven 三种项目打包方式 pom、jar、war 的区别(记一次 Spring 项目启动报错)

文章目录 1. 记一次 Spring 项目启动报错1.1 现象1.2 分析1.3 过程复现 2. maven 项目三种打包方式的区别 1. 记一次 Spring 项目启动报错 1.1 现象 我在项目下创建了一个子模块&#xff0c;然后又将该子模块移除&#xff0c;之后启动报错&#xff0c;如下&#xff1a; com.…

深入理解 Java 对象的内存布局

对于 Java 虚拟机&#xff0c;都知道其内存区域划分成&#xff1a;堆、方法区、虚拟机栈等区域。但一个对象在 Java 虚拟机中是怎样存储的&#xff0c;相信很少人会比较清楚地了解。Java 对象在 JVM 中的内存布局&#xff0c;是了解并发编程同步机制的基础。 在 HotSpot 虚拟机…

通信工程学习:什么是IOT物联网

IOT&#xff1a;物联网 IOT物联网&#xff08;Internet of Things&#xff0c;简称IoT&#xff09;是一种通过信息传感设备&#xff0c;按约定的协议&#xff0c;将任何物体与网络相连接&#xff0c;以实现智能化识别、定位、跟踪、监管等功能的技术体系。以下是对IOT物联网的详…

Windows 通过 Docker 安装 GitLab

1. 安装 Docker Desktop 下载网站&#xff1a;Windows | Docker Docs 2. 拉取 GitLab Docker 镜像 打开 PowerShell 或 命令提示符&#xff0c;拉取 GitLab 镜像&#xff1a; docker pull gitlab/gitlab-ee:latest或则使用社区版&#xff1a; docker pull gitlab/gitlab-ce…

电脑无法无线投屏的解决办法

在前司的时候经常遇到电脑无法使用无线投屏器的情况&#xff0c;今天就来聊聊如何解决。 1.不会连接。这种情况&#xff0c;经常发生在WIN10升级WIN11之后&#xff0c;一般是两种办法&#xff0c;一种是同时按键盘上的WINDOWS和K键&#xff0c;右下角就会出来连接的图标&#…

showdoc二次开发

showdoc用的vue版本老&#xff0c;需要安装老版本nodejs&#xff0c;比如node 14.21.3 win32-x64-93_binding.node问题 https://github.com/sass/node-sass/releases 下载 web_src\node_modules\node-sass\vendor\win32-x64-93 下面重命名为binding.node 代理到php后端&…

2-114 基于matlab的CA模型

基于matlab的CA模型&#xff0c;Singer模型对单机动目标进行跟踪算法&#xff0c;具有10页实验文档。采用蒙特卡罗方法对一个二坐标雷达对一平面上运动的目标进行观测&#xff0c;得到跟踪滤波结果。程序已调通&#xff0c;可直接运行。 下载源程序请点链接&#xff1a;2-114 …

Crypto虐狗记---”你“和小鱼(八)

前言&#xff1a;剧情八 提示&#xff1a; 下载&#xff1a; 只给了公钥 那么可以用RsaCtfTool去分离公钥---》 得到(e&#xff0c;n)&#xff1a; 如何安装参考&#xff1a; kail下安装RsaCtfTool - 九皋777 - 博客园 (cnblogs.com) 已知n&#xff0c;那么去得到p q 或者使…

OBOO鸥柏丨深圳科学展馆引入液晶拼接屏中控宣传协议互动大屏

科技馆的展厅展区&#xff0c;宛如一扇通往未来世界的璀璨窗口&#xff0c;巧妙融合了OBOO鸥柏LCD液晶拼接屏的尖端显示技术&#xff0c;液晶拼接墙与沉浸式体感交互的梦幻体验交织成一幅幅生动的科技画卷。这里&#xff0c;中控协议的精准对接&#xff0c;如同智慧之网的织就者…

whisper 实现语音识别 ASR - python 实现

语音识别&#xff08;Speech Recognition&#xff09;&#xff0c;同时称为自动语音识别&#xff08;英语&#xff1a;Automatic Speech Recognition, ASR&#xff09;&#xff0c;将语音音频转换为文字的技术。 whisper是一个通用的语音识别模型&#xff0c;由OpenAI公司开发。…

家具城管理平台———未来之窗行业应用跨平台架构

一、家具城商城管理数字化 家具城商城电子化管理优势显著。能实时精确掌控库存&#xff0c;及时补货并降低积压。通过销售数据的精准分析&#xff0c;把握市场需求&#xff0c;优化采购与营销。提升客户服务&#xff0c;记录购买历史以提供个性化体验。简化采购&#xff0c;自动…

leetcode 力扣算法题 快慢指针 双指针 19.删除链表的倒数第n个结点

删除链表的倒数第N个结点 题目要求题目示例解题思路从题目中的已知出发思考寻找目标结点条件转换核心思路 需要注意的点改进建议 完整代码提交结果 题目要求 给你一个链表&#xff0c;删除链表的倒数第n个结点&#xff0c;并且返回链表的头结点。 题目示例 示例 1&#xff1…

微信小程序和抖音小程序的分享和广告接入代码

开发完成小程序或者小游戏之后&#xff0c;我们为什么要接入分享和广告视频功能&#xff0c;主要原因有以下几个方面。 微信小程序和抖音小程序接入分享和广告功能主要基于以下几个原因&#xff1a; 用户获取与增长&#xff1a;分享功能可以帮助用户将小程序内容传播给更多人&…

Crypto虐狗记---”你“和小鱼(外传)

前言&#xff1a;剧情十(我没看见还有一个。。。。) 提示&#xff1a; 下载&#xff1a; 参数有了&#xff0c;直接搞就行。。。 参考&#xff1a; *crypto*练2--攻防世界--easy_ECC - kubopiy - 博客园 (cnblogs.com) 大佬的脚本&#xff1a; 攻防世界 easy_ECC - diakla -…

鸿蒙next开发第一课03.ArkTs语法介绍-案例

前面已经学习了ArkTs的基本语法和DevEcoStudio的基本操作&#xff0c;接下来按照官方提示开发一个基本案例。 该案例是系统自带的demo&#xff0c;下载下来源代码后可以直接运行。 接下来我来演示如何运行demo。我在demo中加入了自己的注释。 切记&#xff1a;文件夹不能有中…

遥感滑坡目标检测数据集 2300张 滑坡 带标注 voc yolo 1类

遥感滑坡目标检测数据集 2300张 滑坡 带标注 voc yolo 1类 分类名: (图片张数&#xff0c; 标注个数) landsI ide: (2299&#xff0c;6545) 总数: (2314&#xff0c; 6545) 总类(nc): 1类 遥感滑坡目标检测数据集 (Remote Sensing Landslide Detection Dataset) 数据集概述 该…