【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.mzph.cn/news/868719.shtml

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

相关文章

Qt 进程间通信(一)——QSharedMemory共享内存

QSharedMemory共享内存 序言环境理论—逻辑理解实战—代码读取示例写入示例 序言 讲讲Qt的共享内存吧&#xff0c;巩固下 环境 msvc2022 Qt5.15 参考文档&#xff1a;https://doc.qt.io/qt-5/qsharedmemory.html 理论—逻辑理解 看下面前&#xff0c;你需要将共享内存看成…

JS数据类型检测的方式有哪些 (常用)

typeof 其中数组、对象、null都会被判断为object&#xff0c;其他判断都正确typeof返回的类型都是字符串形式 instanceof instanceof &#xff1a;用于检测一个实例是否属于某个类&#xff0c;通过验证当前类的原型 prototype 是否出现在实例的原型链 __proto__ 上。它不能检测…

如何在Excel中对一个或多个条件求和?

在Excel中&#xff0c;基于一个或多个条件的求和值是我们大多数人的常见任务&#xff0c;SUMIF函数可以帮助我们根据一个条件快速求和&#xff0c;而SUMIFS函数可以帮助我们对多个条件求和。 本文&#xff0c;我将描述如何在Excel中对一个或多个条件求和&#xff1f; 在Excel中…

DataExcelServer局域网文件共享服务器增加两个函数

1、PFSUM合并指定路径下单元格ID的值 PFSUM("/103采购/8月采购名细","amount") 第一个参数为路径&#xff0c;第二个参数为单元格的ID 2、PFQuery 查询路径下 单元格ID值的列表 PFQuery("/103采购/8月采购名细","amount") 查询/103采…

【vue】JSON数据导出excel

前言 导出方式有很多种&#xff0c;但是若只需要数据导出成.xlsx文件并下载的话&#xff0c;只用xlsx一个插件就行 目标 1 实现数据导出excel 2 如何设置表格列宽 3 如何在文件中创建工作表 准备工作 1 安装 npm i xlsx -S 2 引入 npm i xlsx -S 二、导出excel 创建文件 con…

LeetCode 算法:腐烂的橘子 c++

原题链接&#x1f517;&#xff1a;腐烂的橘子 难度&#xff1a;中等⭐️⭐️ 题目 在给定的 m x n 网格 grid 中&#xff0c;每个单元格可以有以下三个值之一&#xff1a; 值 0 代表空单元格&#xff1b;值 1 代表新鲜橘子&#xff1b;值 2 代表腐烂的橘子。 每分钟&#…

选择适合的220V转5V电源芯片,220V转5V非隔离降压电源ic

#### 问题&#xff1a; 在设计一个需要将220V交流电转换为5V直流电的电路时&#xff0c;我应该选择哪种型号的电源芯片&#xff1f;我需要输出电流在200mA以内&#xff0c;有没有推荐的型号&#xff1f; #### 答案&#xff1a; 在220V交流电转换为5V直流电的应用中&#xff0c…

【Spring Boot】Spring AOP中的环绕通知

目录 一、什么是AOP?二、AOP 的环绕通知2.1 切点以及切点表达式2.2 连接点2.3 通知&#xff08;Advice&#xff09;2.4 切面(Aspect)2.5 不同通知类型的区别2.5.1 正常情况下2.5.2异常情况下 2.6 统一管理切点PointCut 一、什么是AOP? Aspect Oriented Programming&#xff…

STM32学习历程(day5)

EXTI外部中断 中断 中断就是在主程序运行过程中 出现了特定的中断触发条件&#xff08;中断源&#xff09;&#xff0c;CPU会暂停当前的程序&#xff0c;去处理中断程序 处理完会返回被暂停的位置 继续运行原来的程序。 中断优先级 当有多个中断源同时申请中断时 CPU会根据…

【面试八股总结】线程基本概念,线程、进程和协程区别,线程实现

一、什么是线程&#xff1f; 线程是“轻量级进程”&#xff0c;是进程中的⼀个实体&#xff0c;是程序执⾏的最小单元&#xff0c;也是被系统独立调度和分配的基本单位。 线程是进程当中的⼀条执行流程&#xff0c;同⼀个进程内多个线程之间可以共享代码段、数据段、打开的文件…

王老师 linux c++ 通信架构 笔记(二)配置服务器为固定的 ip 地址、远程登录、安装 gcc g++ 与虚拟机文件夹共享

&#xff08;7&#xff09;本条目开始配置 linux 的固定 ip 地址&#xff0c;以作为服务器使用&#xff1a; 首先解释 linux 的网口编号&#xff1a; linux 命令 cd &#xff1a; change directory 改变目录。 ls &#xff1a; list 列出某目录下的文件 根目录文件名 / etc &a…

JAVA基础-----final关键字

一、前言 final关键字的含义&#xff1a; final在Java中是一个保留的关键字&#xff0c;可以声明成员变量、方法、类以及本地变量。一旦你用final修饰&#xff0c;你将不能改变被修饰的代码&#xff0c;编译器会检查代码&#xff0c;如果你试图将变量再次初始化的话&#xff0…

I 2U-Net:具有丰富信息交互的双路径 U-Net 用于医学图像分割| 文献速递-基于深度学习的多模态数据分析与生存分析

Title 题目 I 2U-Net: A dual-path U-Net with rich information interaction for medical image segmentation I 2U-Net&#xff1a;具有丰富信息交互的双路径 U-Net 用于医学图像分割 01 文献速递介绍 在计算机视觉领域&#xff0c;医学图像分割是一个主要挑战&#xff…

【IMU】 椭球拟合标定加计Bias、Scale

椭球拟合简介 MESE IM&#xff35;中&#xff0c;x,y,z轴的度量单位并不相同&#xff0c;假设各轴之间相互直。 加计静止状态&#xff08;也就是只受重力的状态下&#xff09;&#xff0c;各个姿态只受重力的&#xff0c;x,y,z轴值&#xff08;假设x,y,z轴相互垂直并且度量单…

TCP的p2p网络模式

TCP的p2p网络模式 1、tcp连接的状态有以下11种 CLOSED&#xff1a;关闭状态LISTEN&#xff1a;服务端状态&#xff0c;等待客户端发起连接请求SYN_SENT&#xff1a;客户端已发送同步连接请求&#xff0c;等待服务端相应SYN_RECEIVED&#xff1a;服务器收到客户端的SYN请请求&…

EPICS数据库示例

本文目标是使用EPICS数据库示例帮助新手理解如何使用不同的示例。 1、使用seq和mbbo的简单选择器 这个简单示例展示了如何使用一个mbbo和一个seq来旋转哪个值将被设置到一个PV。 # 这个mbbo记录将选择将运行seq的哪段 record(mbbo, "CHOOSE") {field(VAL, "…

ArcGIS中国工具(ArcGISCTools)等插件使用体验

ArcGIS中国工具&#xff08;ArcGISCTools&#xff09;的主要功能 1. 接合图表生成 这个功能允许用户生成标准分幅图的行政区边框注记&#xff0c;并在打印时自动加入。这对于需要制作标准地图的用户非常实用。 2. 图框工具 图框工具可以帮助用户创建和管理地图的图框&#…

Qt creator 控件转到槽 报错 The class containing “Ui:Dialog“ could not be found in

今天调试程序&#xff0c;发现主界面控件转到槽&#xff0c;报错如下图&#xff1a; 问题表现为&#xff1a;只有主窗口控件有这个错误&#xff0c;其他子窗口正常。 解决&#xff1a; 在网上搜这个报错信息&#xff0c;都没有一个很好的解决办法。 最后发现是我在子窗口中要…

Java根据经纬度获取两点之间的距离

Java根据经纬度获取两点之间的距离&#xff0c;最近在实现类似于钉钉打卡签到的需求&#xff0c;因为对精度要求不是很高&#xff0c;所以可以通过一个球面距离的公式来求两点距离&#xff0c;这里将地球当成一个球体&#xff0c;实际上地球是一个不规则的球体&#xff0c;所以…

C++继承(一文说懂)

目录 一&#xff1a; &#x1f525;继承的概念及定义1.1 继承的概念1.2 继承定义1.2.1 定义格式1.2.2 继承关系和访问限定符1.2.3 继承基类成员访问方式的变化 二&#xff1a;&#x1f525;基类和派生类对象赋值转换三&#xff1a;&#x1f525;继承中的作用域四&#xff1a;&a…