【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.rhkb.cn/news/372654.html

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

相关文章

windows系统无法使用网络共享服务,设置防火墙入站规则解决

我们使用虚拟机的时候&#xff0c;已经配置好了网络&#xff0c;但是虚拟机和物理机就是无法通讯。可以使用关闭防火墙的方式解决这个问题&#xff0c;但是这个方法不是长久之计&#xff0c;非常不安全。那么&#xff0c;有什么其他的解决办法吗&#xff1f; 其中&#xff0c;p…

Redis基础教程(十八):Redis管道技术

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

Java基础-组件及事件处理(上)

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 Swing 概述 MVC 架构 Swing 特点 控件 SWING UI 元素 JFrame SWING 容器 说明 常用方法 示例&a…

AE常用工具

目录 图形工具&#xff08;快捷键Q&#xff09; 选取工具&#xff08;快捷键V&#xff09; 抓手工具&#xff08;快捷键H或空格&#xff09; 放缩工具&#xff08;快捷键Z或滚动滑轮&#xff09; 图形工具&#xff08;快捷键Q&#xff09; 按住alt并点击&#xff0c;可切换…

Kafka系列之Kafka知识超强总结

一、Kafka简介 Kafka是什么 Kafka是一种高吞吐量的分布式发布订阅消息系统&#xff08;消息引擎系统&#xff09;&#xff0c;它可以处理消费者在网站中的所有动作流数据。 这种动作&#xff08;网页浏览&#xff0c; 搜索和其他用户的行动&#xff09;是在现代网络上的许多社…

设计模式之职责链模式(Chain of Responsibility Pattern)

1.概念 职责链模式&#xff08;Chain of Responsibility Pattern&#xff09;&#xff1a;避免将请求发送者与接收者耦合在一起&#xff0c;让多个对象都有机会接收请求&#xff0c;将这些对象连接成一条链&#xff0c;并且沿着这条链传递请求&#xff0c;直到有对象处理它为止…

「Pytorch」CopyPaste 数据增强

数据增广是提升模型泛化能力重要的手段之一&#xff0c;CopyPaste 是一种新颖的数据增强技巧&#xff0c;已经在目标检测和实例分割任务中验证了有效性。利用 CopyPaste&#xff0c;可以合成文本实例来平衡训练图像中的正负样本之间的比例。相比而言&#xff0c;传统图像旋转、…

HTML5文本标签、图像标签、超链接

一、文本样式标签 字体样式标签&#xff1a; 加粗&#xff1a;<strong>…</strong> 斜体&#xff1a; < em >…</ em> eg&#xff1a; <h3>徐志摩人物简介</h3> <p> <strong>1910</strong>年入杭州学堂<br/> &l…

java之循环练习题

思路分析&#xff1a; 代码&#xff1a; public static void main(String[] args) {int sum0;for (int i1;i<100;i){for (int j1;j<i;j) {sum j;}}System.out.println(sum);} 结果为&#xff1a;

uniapp上架到appstore遇到的问题

1、appstore在美国审核&#xff0c;需要把服务器接口的国外访问权限放开 2、登陆部分 a、审核时只能有密码登陆&#xff0c;可以通过接口响应参数将其他登陆方式暂时隐藏&#xff0c;审核成功后放开即可 b、需要有账号注销功能 3、使用照相机和相册功能时需要写清楚描述文案

制作问卷表单二维码的方法,扫码登记信息更快捷

为了更好地收集用户信息&#xff0c;现在很多场景下会使用生成二维码的方式&#xff0c;让用户可以扫码自行填写相关信息&#xff0c;从而提高获取信息的效率以及填写数据的便捷性。那么用于收集用户数据的表单二维码是如何生成的呢&#xff1f;其实方法很简单&#xff0c;现在…

leetcode 283.移动零

leetcode 283.移动零 自己刷题并且进行记录一下 题解 c class Solution { public:void moveZeroes(vector<int>& nums) {int count 0;for (int i 0; i < nums.size(); i) {if(nums[i] ! 0) {nums[count] nums[i];if (count !i) {nums[i] 0;}count;}}} };

使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击-飞船动画(三)

文章目录 开发思路飞船尾焰左右移动动画唯一名称的添加 使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击&#xff08;一&#xff09; 使用Godot4组件制作竖版太空射击游戏_2D卷轴飞机射击-激光组件&#xff08;二&#xff09; 开发思路 整体开发还是基于组件的思维。相比…

录音的内容怎么做二维码?支持多种音频格式使用的制作技巧

怎么把录制的音频文件做成二维码呢&#xff1f;现在用二维码来存储内容是一种很常用的方式&#xff0c;让其他人扫描二维码来查看内容&#xff0c;从而提升内容传输的速度。比如现在很多人会将音频生成二维码&#xff0c;其他人可以通过扫码在手机上播放音频内容&#xff0c;那…

rfid资产管理系统解决方案 rfid固定资产管理系统建设方案

在现代化的仓库储备中&#xff0c;仅仅完成对货物进出的简单批次处理已经不再足够&#xff0c;对库内货品的种类、数量、生产属性、垛位等信息的清晰记录变得至关重要。然而&#xff0c;传统的资产管理方式如条形码在长期使用中逐渐暴露出不耐脏、数据存储量小、读取间隔短、不…

【Linux进阶】文件和目录的默认权限与隐藏权限

1.文件默认权限&#xff1a;umask OK&#xff0c;那么现在我们知道如何建立或是改变一个目录或文件的属性了&#xff0c;不过&#xff0c;你知道当你建立一个新的文件或目录时&#xff0c;它的默认权限会是什么吗&#xff1f; 呵呵&#xff0c;那就与umask这个玩意儿有关了&…

html——VSCode的使用

快捷键 快速生成标签&#xff1a;标签名tab 保存文件&#xff1a;CtrlS 设置自动保存【文件】→【自动保存】 快速查看网页效果&#xff1a;右击→Open in Default Browser 快捷键&#xff1a;altb 注意&#xff1a;必须安装了open in brows…

批量下载手机中APP程序中文件

需求 利用 adb pull 下载手机中app的某目录 adb pull 命令本身不支持直接下载整个目录&#xff08;文件夹&#xff09;及其所有子目录和文件作为一个单一的操作。但是&#xff0c;可以通过一些方法来间接实现这一目的。 方法 1. 首先将要下载的目录进行 tar 打包 # 在 And…

【软件测试】 1+X初级 功能测试试题

岗位管理模块需求说明书 人资管理员登录系统&#xff0c;在“岗位管理”模块&#xff0c;可以对系统中岗位数据进行维 护。岗位管理需求包括用户&#xff08;UI&#xff09;页面、业务规则两部分。 UI 页面 岗位管理&#xff1a;列表页 岗位管理&#xff1a;“添加岗位”窗口 …

Docker 使用基础(1)—镜像仓库

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;秒針を噛む—ずっと真夜中でいいのに。 0:34━━━━━━️&#x1f49f;──────── 4:20 &#x1f504; ◀️ ⏸ …