【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();} }
程序经过上述是可以实现的(●'◡'●)
当然这里只是最基本的操作,只要我们知道它的原理就能实现复杂的操作了。
相关文章:

【Proteus】按键的实现『⒉种』
🚩 WRITE IN FRONT 🚩 🔎 介绍:"謓泽"正在路上朝着"攻城狮"方向"前进四" 🔎🏅 荣誉:2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2222年获评…...

Windows 11 安装 Python 3.11 完整教程
Windows 11 安装 Python 3.11 完整教程 一、安装包安装 1. 下载 Python 3.11 安装包 打开浏览器,访问 Python 官方下载页面。点击“Download Python 3.11”,下载适用于 Windows 的安装包(Windows installer)。 2. 安装 Python 3.11 运行下载的安装包 python-3.11.x-amd6…...
外呼系统的功能有哪些
1. 自动拨号 - 系统能够自动拨打电话,避免了手动拨号的繁琐过程。 - 可以根据设定的电话号码列表自动拨号,提高电话接触率和工作效率。 2. 呼叫分配 - 根据事先设定的规则和策略,将呼叫分配给不同的坐席或代表。 - 确保呼叫平均分配和资源优…...

【C语言】C语言 4 个编译过程详解
C语言的编译过程涉及几个关键步骤、概念和细节,每个步骤都有助于将人类可读的源代码转换为可执行的机器码。以下是详细的解释和示例: 一、什么是编译? 编译是将源代码转换为目标代码的过程。它是在编译器的帮助下完成的。编译器检查源代码是…...
Linux 常见的几种编辑器的操作步骤
在大多数命令行文本编辑器中,保存并关闭文件的操作方式基本相似。以下是常见的几种编辑器的操作步骤: 使用 vi 编辑器保存并关闭文件 编辑文件: sudo vi /path/to/file 编辑内容: 按 i 进入插入模式,编辑文件内容。 …...

LabVIEW汽车转向器测试系统
绍了一种基于LabVIEW的汽车转向器测试系统。该系统集成了数据采集、控制和分析功能,能够对转向器进行高效、准确的测试。通过LabVIEW平台,实现了对转向器性能参数的实时监测和分析,提升了测试效率和数据精度,为汽车转向器的研发和…...

image媒体组件属性配合swiper轮播
图片组件(image) 先插入个图片试试,插入图片用src属性,这是图片: 代码如下: <template><view><swiper indicator-dots indicator-color "#126bae" indicator-active-color &…...

nginx的匹配及重定向
一、nginx的匹配: nginx中location的优先级和匹配方式: 1.精确匹配:location / 对字符串进行完全匹配,必须完全符合 2.正则匹配:location ^~ ^~ 前缀匹配,以什么为开头 ~区分大小写的匹配 ~* 不区分…...

云计算【第一阶段(23)】Linux系统安全及应用
一、账号安全控制 1.1、账号安全基本措施 1.1.1、系统账号清理 将非登录用户的shell设为/sbin/nologin锁定长期不使用的账号删除无用的账号 1.1.1.1、实验1 用于匹配以/sbin/nologin结尾的字符串,$ 表示行的末尾。 (一般是程序用户改为nologin&…...

YUM——简介、安装(Ubuntu22.04)
1、简介 YUM(Yellowdog Updater, Modified)是一个开源的命令行软件包管理工具,主要用于基于 RPM 包管理系统的 Linux 发行版,如 CentOS、Red Hat Enterprise Linux (RHEL) 和 Fedora。YUM 使用户能够轻松地安装、更新、删除和管理…...
Java面向对象练习(4.文字格斗游戏)(2024.7.4)
角色类 package FightGame20240704; import java.util.Random; public class GameRole {Random r new Random();private String name;private int blood;private char gender;private String face;public GameRole(){}public GameRole(String name, int blood, char gender){…...

Python获取QQ音乐歌单歌曲
准备工作 歌单分享的url地址 比如: https://i.y.qq.com/n2/m/share/details/taoge.html?hosteuinoKvzoK4l7evk7n**&id9102222552&appversion130605&ADTAGwxfshare&appshareiphone_wx 代码实现 def mu(share_url):share_url share_url.split(id…...

Linux系统部署MongoDB开源文档型数据库并实现无公网IP远程访问
文章目录 前言1. 安装Docker2. 使用Docker拉取MongoDB镜像3. 创建并启动MongoDB容器4. 本地连接测试5. 公网远程访问本地MongoDB容器5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定TCP地址远程访问 💡 推荐 前些天发现了一个巨牛的人工智能学习网站&am…...

WPF Menu实现快捷键操作
很多小伙伴说,在Menu中,实现单个快捷键操作很简单,怎么实现多个快捷键操作和,组合快捷键呢,今天他来了。 上代码和效果图 一、Ctrl Shift 任意子母键实现快捷键组合 <Window x:Class"XH.TemplateLesson.M…...

VSCode常用的一些插件
Chinese (Simplified) 汉语(简体)拓展包。 Auto Close Tag 可以自动增加xml/html的闭合标签。 CodeSnap 截图神器。截图效果在下面。 Dracula Official vscode一个很好看的主题。 Git Graph git管理工具。 GitHub Repositories 有了它,不…...

OV通配符证书用于什么单位
OV(Organization Validation)通配符SSL证书是一种专门为组织或企业设计的SSL证书类型,它不仅提供了标准的SSL加密功能,还包含了对组织身份的验证。这种证书非常适合以下几种类型的单位使用: 企业级网站: …...

【数据结构】06.栈队列
一、栈 1.1栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈&#…...

完全理解C语言函数
文章目录 1.函数是什么2.C语言中的函数分类2.1 库函数2.1.1 如何使用库函数 2.2自定义函数 3.函数的参数3.1 实际参数(实参)3.2 形式参数(形参) 4.函数调用4.1传值调用4.2 传址调用4.3 练习 5.函数的嵌套调用和链式访问5.1 嵌套调…...
性能测试:JMeter与Gatling的高级配置
性能测试是软件开发过程中不可或缺的一部分,它帮助我们确保应用在高负载下仍能保持良好的响应时间和稳定性。本文将深入探讨两种流行的性能测试工具:Apache JMeter和Gatling,并提供详细的高级配置指南以及Java代码示例。 Apache JMeter 高级…...
Linux 软件管理
Linux 软件管理 在 Linux 系统中,RPM(Red Hat Package Manager)和 YUM(Yellowdog Updater, Modified)是用于软件包管理的重要工具。 RPM RPM 是由 Red Hat 公司开发的软件包管理系统。 RPM 软件包通常具有 .rpm 扩…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...

优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...
「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案
在移动互联网营销竞争白热化的当下,推客小程序系统凭借其裂变传播、精准营销等特性,成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径,助力开发者打造具有市场竞争力的营销工具。 一、系统核心功能架构&…...

AxureRP-Pro-Beta-Setup_114413.exe (6.0.0.2887)
Name:3ddown Serial:FiCGEezgdGoYILo8U/2MFyCWj0jZoJc/sziRRj2/ENvtEq7w1RH97k5MWctqVHA 注册用户名:Axure 序列号:8t3Yk/zu4cX601/seX6wBZgYRVj/lkC2PICCdO4sFKCCLx8mcCnccoylVb40lP...

qt+vs Generated File下的moc_和ui_文件丢失导致 error LNK2001
qt 5.9.7 vs2013 qt add-in 2.3.2 起因是添加一个新的控件类,直接把源文件拖进VS的项目里,然后VS卡住十秒,然后编译就报一堆 error LNK2001 一看项目的Generated Files下的moc_和ui_文件丢失了一部分,导致编译的时候找不到了。因…...

Selenium 查找页面元素的方式
Selenium 查找页面元素的方式 Selenium 提供了多种方法来查找网页中的元素,以下是主要的定位方式: 基本定位方式 通过ID定位 driver.find_element(By.ID, "element_id")通过Name定位 driver.find_element(By.NAME, "element_name"…...