【Proteus】按键的实现『⒉种』

  •  🚩 WRITE IN FRONT 🚩       

  • 🔎 介绍:"謓泽"正在路上朝着"攻城狮"方向"前进四" 🔎
  • 🏅 荣誉:2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2222年获评百大博主、华为云享专家、阿里云专家博主、掘金优秀创作者、腾讯云年度进取作者、全网粉丝量8w+、个人社区人数累计5w+、全网访问量100w+ 🏅
  • 🆔 本文章内容由 謓泽 原创 如需相关转载请提前告知博主 ⚠
  • 📑 创作时间:2022 年 5 月 1 日 📅
  • 📝 个人主页:謓泽的博客 📃
  • 📣 专栏系列:『proteus』_謓泽的博客-CSDN博客📃
  • 🙌 Gitee:謓泽 (wsxsx) - Gitee.com ⭐️
  • 🎁 点赞👍+ 收藏⭐️+ 留言📝​
  • ✉️ 我们并非登上我们所选择的舞台,演出并非我们所选择的剧本 📩

前言

今天我们来讲解Proteus 当中的按键,如何使用独立按键的详细操作过程可以看我之前写过的『51单片机』的内容如↓

🍊链接→【51单片机】独立按键控制LED灯(四种形式)

之前通过学习『51单片机』的知识学过独立按键。

趁着学习『Proteus』再来复习一遍。

介绍原理

按键实际上分为很多种种类,但是我们常用的种类有:④引脚的独立按键、⑥脚的话就有自锁开关像单片机下载的就是自锁的。等......

那么我们单片机上用的基本都是轻触按键:相当于是一种电子开关,按下时开关接通,松开时开关断开,实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通和断开。

独立按键具有四个"头",独立按键主要有四个部分:1、底座,2、金属弹片(这个金属弹片是鼓起来的,当你按下去的时候它会变平,松手的时候又会鼓起来的),3、就是按键的头,4、就是金属的盖子。那么在相同的两个引脚当中其实它就是内部连接起来的金属片,无论你按不按下去,它前后的两个引脚都是连接起来的。就是始终都是具有导通性质的,向外具有两个接触的点。按下的时候四个引脚全部都是连接的,松手的时候两边分别连接,之间是断开的。

按键原理

结构:通过一个上拉电阻连接到单片机上的IO口上,再通过一个按键进行接地。那么当我们没有按下的时候相当于断开就为高电平。当我们按下的时候由于接地(Gnd),此时为低电平相当于闭合。因此我们在单片机上的轻触按键是低电平有效的。

这里的上拉电阻主要确保初始电压为高电平以及起到一个对电路保护作用防止短路。

按键消抖

  • 对于机械开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开,所以在开关闭合及断开的瞬间会伴随一连串的抖动。
  • 在按键闭合的时候会产生一些抖动,没有按键按下的话它就是一个高电平(1)(单片机上电的时候所有的IO口默认都是高电平)。在我们按下按键的时候它就会变成(0),并且由于它的是机械触电会弹开,然后上下抖动几下,然后才会稳定的变成(0)。抖动的时间上面图中也表示的是(5~10)ms。当抖动消失的时候进入了一个稳定的低电平(0),这个持续时间是看你手什么时候松开这个按键。在松手的时候也会产生抖动,它也不会突然变成高电平(1),也会抖动产生时间为(5~10)ms。最后,松手。 

按键的消抖有两种方法如下↓

加个线,把这个线通过这些电路里面进行一些触发器等等,通过一些电路来进行操作,把这个抖动进行一些过冲,然后再给我们单片机进行点上。比较麻烦!

  •  通过软件来进行一个延迟函数,把这个消抖进行操作。

键盘的分类

独立式键盘

键盘的分类分为两种:独立式键盘和行列键盘。

独立式键盘特点⇢每个键占用一根并口线,键位多的时候占用并口线多。用于建位较少的情况下,处理简单直接判并口线。

行列式对于按键较多的情况下使用起来具有优势。

Proteus 按键仿真

概述→用独立按键控制数码管上的显示,每次按下一次按键数码管就自增+1数字。

用的到元器件仿真如下↓

  • AT89C51
  • 数码管:7seg,注:⑧位数码管。在Proteus在下端的线是共阴的,在上端共阳的。
  • GROUND:接地。
  • RES:电阻。
  • BUTTON:轻触按键。

  • 上述上拉电阻钳位高电平以及起到一个保护的作用。 

题目→用独立按键控制数码管上的显示,每次按下一次按键数码管就自增+1数字。

程序文件如下↓

#include <REGX51.H>
sbit key0 = P1^0;
unsigned int Num;
void Delay(unsigned int xms)
{
	unsigned char i, j;
	while(xms--)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
	}
}
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

int main(void)
{
	while(1)
	{
		 P2 = NixieTable[Num];
		 if(key0 == 0)
		 {
			 Delay(20);		    //延时消抖
			 while(key0==0);	//松手检测
			 Delay(20);		    //延时消抖
			 Num++;
		 }
		 if(Num==10)
		 {
			 Num = 0;
		 }
	}
}

程序经过上述是可以实现的(●'◡'●)

行列按键 - 矩阵按键 

特点:键位上分布在行和列交叉点上,占用的并口线少,键位越多越明显。 

介绍如下↓

在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。

采用逐行或逐列的"扫描",就可以读出任何位置按键的状态。

结构:在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式。在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(⑨键) 由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。  

Proteus 矩阵仿真 

概述→用独立按键控制数码管上的显示,每次按下一次按键数码管就自增+1数字。

用的到元器件仿真如下↓

  • AT89C51
  • 数码管:7seg,注:在Proteus在下端的线是共阴的,在上端共阳的。
  • GROUND:接地。
  • BUTTON:轻触按键。

注:进行逐行扫描的话,开发板是会出现问题的。说明一下这个开发板!不是这个矩阵键盘和知识点的一个问题。这是它内部电路的连接问题按行扫描的话这个P15口的话可能会一会给高电平或者低电平。(会连接到五线四相步进电机然后BZ连接到蜂鸣器上,因为我们这个蜂鸣器它是无源蜂鸣器,所以当你按行扫描的时候它有可能就会发出声音) 

所以,我们通常会采取逐列扫描。当上述L0被置为低电平,L1、L2、L3全部为高电平的话,那么就相当于只有L0的那一列可以被扫描,如果我们把H0置为低电平的话,H1、H2、H3为高电平的话。此时我们的第一个按键就被按下了。同理。

如果对这块不了解的话可以看博主写的那个单片机系列的内容。

题目→使用矩阵键盘上的第一个按键控制数码管1~9显示上电默认为0,已逐列扫描的形式。

程序文件如下↓

#include <REGX51.H>
sbit H1 = P1^4;
void Delay(unsigned int xms)
{
	unsigned char i, j;
	while(xms--)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
	}
}
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
unsigned int Num = 0;
void detect()
{
	//检测P1口的按键是否被按下
	P1 = 0xFE;
	if(H1 == 0)
	{
		Delay(20);
		while(H1==0);
		Delay(20);
		P2 = NixieTable[Num+1];
		Num++;
		if(Num == 10)
		{
			Num = 0;
		}
		P2 = NixieTable[Num];
	}
}
int main(void)
{
	//刚开始上电默认为0数码管
	P2 = NixieTable[Num];
	while(1)
	{
		//检测
		detect();
	}
}

程序经过上述是可以实现的(●'◡'●)

当然这里只是最基本的操作,只要我们知道它的原理就能实现复杂的操作了。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序毕业设计-走失人员的报备平台系统项目开发实战(附源码+论文)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…

【Python学习】流程控制、函数与类详解

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引言 Python作为一门强大而又简洁的编程语言&#xff0c;提供了丰富的工具和结构来帮助开发者编写清晰、高效的代码。在本文中…

企业搭建知识库:解锁无限潜力的钥匙

在当今这个信息爆炸的时代&#xff0c;企业如何高效地管理、传播与利用知识&#xff0c;已成为衡量其竞争力的重要标尺。知识库&#xff0c;作为这一背景下的产物&#xff0c;正逐步成为企业不可或缺的数字资产。它不仅是一个自助式的数字门户&#xff0c;更是连接员工、客户与…

加入AIGC的小艺还有这些大用处 快来看

说到毕业&#xff0c;有不舍、有迷茫也有期待&#xff0c;在这种复杂的情绪里&#xff0c;手机里的小艺&#xff0c;简直是贴心小棉袄&#xff0c;给了我很多依靠&#xff0c;让我能勇敢的往前走。 在离别时候有太多的不舍&#xff0c;想要写段寄语记录下来&#xff0c;这时候小…

记录AllWinner H700芯片 LCD屏幕显示不正常,有色块问题

现象&#xff1a; 修改后&#xff1a; 文档&#xff1a; 测试命令&#xff08;需要kernel打开 CONFIG_DEVMEMy&#xff09;&#xff1a; 读取&#xff1a; devmem2 $((0x6511000 0x0088)) w 写入&#xff1a; devmem2 $((0x6511000 0x0088)) w 0x7000000 代码&#xff1…

程序员自由创业周记#37:程序员创业的几个方向

程序员自由创业周记#37&#xff1a;程序员创业的几个方向 报志愿 这几天亲戚一外甥报志愿&#xff0c;让我推荐&#xff0c;我基于自己的认知觉得还是计算机相关是第一优选&#xff0c;即便现在各大互联网公司都过得不怎么好&#xff0c;裁员的消息此起彼伏&#xff0c;很多计…

从零到一:eBay自养号测评全流程解析与实操建议

eBay自养号测评是一种通过模拟真实买家行为&#xff0c;为卖家提供市场反馈并提升店铺权重和排名的技术手段。以下是进行eBay自养号测评的具体步骤和注意事项&#xff1a; 一、准备阶段 1. 技术配置&#xff1a;搭建境外服务器&#xff1a;选择稳定的境外服务器&#xff0c;模…

内网学习第6天 liunx定时任务 环境变量和权限配置,以及数据库提权

内网学习的第5天呢&#xff1f;&#xff1f;我就没有写&#xff0c;那个主要就是利用内核漏洞以及suid&#xff0c;来进行提权的。 我在虚拟机上面进行提权&#xff0c;我没有成功&#xff0c;我本地的虚拟机呢&#xff0c;扫出来的漏洞poc也没有让我提权成功。所以我就没有写…

知识图谱构建助手安装配置使用!Sapphire Ventures最全Sales AI图谱:AI如何重塑销售行业?

知识图谱构建助手安装配置使用!Sapphire Ventures最全Sales AI图谱:AI如何重塑销售行业? 项目简介 llmgraph 使您能够从给定的源实体维基百科页面创建 GraphML、GEXF 和 HTML 格式(通过 pyvis 生成)的知识图。知识图谱是通过从 ChatGPT 或 LiteLLM 支持的其他大型语言模型…

从零开始开发跑腿配送系统:技术选型与架构设计

开发一个跑腿配送系统涉及多个技术栈和模块&#xff0c;从前端到后端&#xff0c;再到数据库和实时通信&#xff0c;每一个环节都至关重要。本文将详细介绍从零开始开发跑腿配送系统的技术选型与架构设计&#xff0c;并提供部分代码示例以帮助理解。 一、技术选型 前端技术&am…

视频号矩阵源码:构建短视频生态的基石

在数字化时代&#xff0c;视频内容已成为连接品牌与消费者的重要桥梁。视频号矩阵源码&#xff0c;作为短视频营销自动化的创新引擎&#xff0c;正在帮助内容创作者和营销团队以前所未有的效率和智能&#xff0c;管理和扩展他们的视频内容。本文将深入探讨视频号矩阵源码的核心…

13-错误-ERROR: duplicate key value violates unique constraint “ux_xxx“

13-错误-ERROR: duplicate key value violates unique constraint “ux_xxx” 更多内容欢迎关注我&#xff08;持续更新中&#xff0c;欢迎Star✨&#xff09; Github&#xff1a;CodeZeng1998/Java-Developer-Work-Note 技术公众号&#xff1a;CodeZeng1998&#xff08;纯纯…

代谢组数据分析(十二):岭回归、Lasso回归、弹性网络回归构建预测模型

欢迎大家关注全网生信学习者系列: WX公zhong号:生信学习者Xiao hong书:生信学习者知hu:生信学习者CDSN:生信学习者2介绍 在代谢物预测模型的构建中,我们采用了三种主流的回归分析方法:岭回归、Lasso回归以及弹性网络回归。这三种方法各有其独特的原理和适用场景,因此在…

从0构建一款appium-inspector工具

上一篇博客从源码层面解释了appium-inspector工具实现原理&#xff0c;这篇博客将介绍如何从0构建一款简单的类似appium-inspector的工具。如果要实现一款类似appium-inspector的demo工具&#xff0c;大致需要完成如下六个模块内容 启动 Appium 服务器连接到移动设备或模拟器启…

HTML+CSS笔记

标签 HTML标签 网页的大包围 整体网页内容的外衣 所有的网页文档内容都要写在 html标签内 lang属性&#xff0c;是指内容语言的&#xff0c;目的是让浏览器知晓这个页面的主要展示语言 是什么 只跟浏览器的翻译有关 主要展示的语言如果是英语 en&#xff0c;主要展示的语言如果…

移动硬盘传输中断后无法识别:深度解析与数据救援指南

在日常的数据存储与传输过程中&#xff0c;移动硬盘凭借其大容量、便携性成为众多用户的首选。然而&#xff0c;当我们在复制或移动大量数据时遭遇传输中断&#xff0c;随后发现移动硬盘无法被电脑识别&#xff0c;这无疑是一场数据安全的紧急警报。此情此景&#xff0c;不仅影…

Docker学习笔记(三)Dockerfile

一、什么是Dockerfile Dockerfile 是一个用于自动化构建 Docker 镜像的文本文件&#xff0c;其中包含了从一个基础镜像开始&#xff0c;到最终形成所需定制镜像的所有指令集。这个文件中的每一条指令都对应着构建镜像过程中的一个步骤或一层&#xff0c;指导 Docker 如何安装软…

红蓝对抗下的内网横向移动渗透技术详解

一、利用Windows计划任务横向移动 Windows计划任务是一个非常实用的功能&#xff0c;可以帮助我们自动完成一些重复性的任务。比如&#xff0c;我们可以设定一个计划任务来自动备份文件、更新软件、执行脚本等,本文主要介绍了如何利用Windows计划任务进行横向渗透。 &#xf…

线程池实践篇

文章目录 配置线程池参数定义参数实体bean配置线程池使用 配置线程池参数 定时任务线程池基础参数 # 定时任务线程池基础参数 task:pool:corePoolSize: 5 # 核心线程数maxPoolSize: 20 # 设置最大线程数keepAliveSeconds: 300 # 设置线程活跃时间&#xff0c;单位秒queueCapa…

[C++初阶]vector的初步理解

一、标准库中的vector类 1.vector的介绍 1. vector是表示可变大小数组的序列容器 &#xff0c; 和数组一样&#xff0c;vector可采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问&#xff0c;和数组一样高效。但是又不像数组&#xff0c;它的大…