【51单片机系列】独立按键介绍

本文是关于独立按键的介绍及使用。首先介绍了按键,包括什么是按键及使用按键时如何实现软件消抖。然后使用proteus仿真实现独立按键控制LED指示灯的操作。

之前的LED、蜂鸣器、数码管中IO口都是作为输出使用,这里通过独立按键实验介绍IO口作为输入的使用。

文章目录

  • 一、按键介绍
  • 二、独立按键检测原理
  • 三、硬件设计
  • 四、软件设计

一、按键介绍

按键是一种电子开关,使用时按开关按钮就可使开关接通,当松开手时,开关断开。简单的按键及内部简易图如下:

按键及内部简易图

按键管脚两端距离长的表示默认是导通状态,距离短的默认是断开状态。

如果按键按下,初始导通状态变为断开,初始断开状态变为导通。

通常的按键使用的开关为机械弹性开关,当机械触电断开、闭合时,电压信号如下所示:

机械触点断开闭合时的电压信号

由于机械点的弹性作用,按键开关在闭合时不会马上稳定的接通,在断开时也不会一下子断开。因而在闭合和断开的瞬间均伴随着一连串的抖动。抖动时间的长短由按键的机械特性决定,一般为5ms到10ms。

按键稳定闭合时间的长短由操作人员的按键动作决定,一般为零点几秒至数秒。按键抖动会引起按键被误读多次。为了确保CPU对按键的依次闭合仅作一次处理,必须及时进行消抖。

按键消抖有两种方式,一种是硬件消抖,另一种是软件消抖。为了使电路更加简单,通常采用软件消抖。

软件消抖一般来说一个简单的按键消抖就是先读取按键的状态,如果得到按键按下之后,延时10ms,再次读取按键状态,如果按键还是按下状态,那么说明按键已经按下。其中的延时10ms就是软件消抖处理。

常用的软件去抖动方法:

  1. 先设置IO口为高电平,由于开发板IO有上拉电阻,默认IO为高电平;
  2. 读取IO口电平确认是否有按键按下;
  3. 如果有IO电平为低电平后,延时几个毫秒;
  4. 再读取该IO电平,如果仍为低电平,说明按键按下;
  5. 执行相应按键的程序;

键盘分为编码键盘和非编码键盘。键盘上闭合键的识别由专用的硬件编码器实现,并产生键编码号或键值的称为编码键盘,如计算机键盘。靠软件编程来识别的键盘称为非编码键盘。

单片机系统中,用的较多的是非编码键盘。非编码键盘又分为独立键盘和行列式键盘(即常说的矩阵键盘)。

二、独立按键检测原理

独立按键电路构成是由各个按键的一个管脚连接在一起接地,按键其它引脚分别接到单片机IO口。

单片机的IO口既可作为输出也可作为输入使用,当检测按键时用的是它的输入功能,独立按键的一端接地,另一端与单片机的某个IO口相连,开始时先给IO口赋一高电平,然后让单片机不断检测该IO口是否变为低电平,当按键闭合时,相当于该IO口通过按键与地相连,变成低电平,程序一旦检测到IO口变为低电平则说明按键被按下,然后执行相应的指令。

三、硬件设计

要实现的功能是:通过开发板上的独立按键控制LED指示灯亮灭。使用到的硬件资源如下:

  • LED指示灯
  • K1按键

proteus中仿真如下:

独立按键硬件设计

从电路中可以知道,该电路是独立的,4个独立按键的控制管脚直接连接到单片机的P3^0 ~ P3^3 IO口上。

要想单片机能够检测按键是否按下,需要通过单片机管脚来控制独立按键。

四、软件设计

实现代码如下:

/*实现功能:使用独立按键控制指示灯的亮灭[2023-12-06] zoya
*/
#include "reg52.h"typedef unsigned int u16;sbit KEY1 = P3^0;  // 独立按键#define GPIO_LED P2  // 指示灯// 延时函数,i=1延时10us
void delay(u16 i)
{while(i--);
}// 独立按键处理函数
void keypros()
{if(0 == KEY1){  // 2. 读取IO口是否为低电平确认按键是否按下delay(1000);  // 3. 延时10msif(0 == KEY1) {  // 4. 在读取IO口判断是否为低电平,如果仍然是低电平,说明按键按下GPIO_LED = ~GPIO_LED;  // 5. 执行按键按下的操作}while(!KEY1);  // 6. 稳定闭合期间保持按键操作}
}void main()
{KEY1 = 1;  // 1. 先设置IO口为高电平GPIO_LED = 0xFF;  // 默认指示灯为不亮状态while(1){keypros();}
}

仿真结果:

独立按键控制指示灯

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

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

相关文章

Edge 中的msedgewebview2总想联网

目录预览 一、问题描述二、原因分析三、解决方案四、参考链接 一、问题描述 使用Edge浏览器的时候,右下角火绒总会弹出“msedgewebview2”想要联网的弹窗,如下 点击发起程序,找到路径如下: C:\Program Files (x86)\Microsoft\…

zabbix 进阶

zabbix的字段发现机制: zabbix客户端主动和服务端联系,将自己的地址和端口发送服务端实现字段添加监控主机。 客户端是主动一方。 缺点:自定义网段中主机数量太多,登记耗时会很久,而且这个自动发现机制不是很稳定。…

centos6.8下载地址

Index of /centos-store/6.8/isos/x86_64/ (liu.se) archive.kernel.org : http - rsynclinuxsoft.cern.ch : http - rsyncmirror.nsc.liu : http - rsync

被遗忘的书籍

C-被遗忘的书籍_牛客小白月赛82 (nowcoder.com) #include <iostream> #include <queue> #include <string> #include <stack> #include <vector> #include <set> #include <map> #include <unordered_map> #include <unor…

计组中各种透明性总结

虚拟存储器&#xff0c;对应用程序员不可见。主存- cache层由硬件自动完成&#xff0c;对程序员不可见。cache纯硬件&#xff0c;程序员不可见。内存&#xff0c;对程序员可见。知识点来源&#xff1a;王道模拟第六套主存-辅存层由硬件和操作系统共同完成&#xff0c;对应用程序…

【Docker一】Docker架构、镜像操作和容器操作

一、docker基本管理和概念 1、概念 docker&#xff1a;开源的应用容器引擎。基于go语言开发的。运行在Linux系统中的开源的轻量级的“虚拟机” docker的容器技术可用在一台主机上轻松到达为任何应用创建一个轻量级到的&#xff0c;可移植的&#xff0c;自给自足的容器 dock…

免费的数据采集软件,最新免费的几款数据采集软件【2024】

在当今数字化时代&#xff0c;数据是企业决策和业务发展的关键。而如何高效获取数据成为许多企业和研究机构的关注焦点。本文将深入探讨数据采集软件的种类。帮助大家选择最适合自己需求的数据采集工具。 数据采集软件种类 在众多数据采集软件中&#xff0c;有一类强大而多样…

postgresql自带指令命令系列二

简介 在安装postgresql数据库的时候会需要设置一个关于postgresql数据库的PATH变量 export PATH/home/postgres/pg/bin:$PATH&#xff0c;该变量会指向postgresql安装路径下的bin目录。这个安装目录和我们在进行编译的时候./configure --prefix [指定安装目录] 中的prefix参…

跨境电商运营常用的ChatGPT通用提示词模板

市场分析&#xff1a;如何分析目标市场&#xff1f; 选品策略&#xff1a;如何选择要销售的商品&#xff1f; 供应链管理&#xff1a;如何管理供应链&#xff1f; 物流解决方案&#xff1a;如何选择合适的物流解决方案&#xff1f; 跨国支付&#xff1a;如何处理跨国支付&a…

labelimg遇到的标签修改问题:修改一张图像的标签时,保存后导致classes.txt改变

问题描述&#xff1a;修改一张图像的标签时候&#xff0c; classes.txt 会同步更新&#xff0c;导致重新生成了 classes.txt 但是这个 classes.txt 只有你现在写的那个类别名&#xff0c;以前的没有了。 解决&#xff1a;设置一个 predefined_classes.txt&#xff0c;内容和模…

Metasploit渗透测试的漏洞利用和攻击方法

预计更新 第一章 Metasploit的使用和配置 1.1 安装和配置Metasploit 1.2 Metasploit的基础命令和选项 1.3 高级选项和配置 第二章 渗透测试的漏洞利用和攻击方法 1.1 渗透测试中常见的漏洞类型和利用方法 1.2 Metasploit的漏洞利用模块和选项 1.3 模块编写和自定义 第三章 Me…

基于ssm理发店会员管理系统的设计和实现论文

摘 要 网络技术和计算机技术发展至今&#xff0c;已经拥有了深厚的理论基础&#xff0c;并在现实中进行了充分运用&#xff0c;尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代&#xff0c;所以对于信息的宣传和管理就很关键。因此理发店会员信息…

Cache的基本概念和原理

目录 一. Cache的工作原理二. 局部性原理三. 性能分析四. 待解决的问题 \quad 一. Cache的工作原理 \quad 存储系统存在的问题 虽然双端口RAM、多模块存储器提高存储器的工作速度, 但是优化后的速度与CPU差距依然很大, 为了改善这个问题就出现了Cache, 来解决存储器与CPU速度不…

创作活动(五十一)———编程中常见的技术难题有哪些?

#编程中常见的技术难题有哪些&#xff1f;# 编程世界里的三大谜题&#xff1a;bug、性能优化与跨平台兼容性 每个职业都有其固有的挑战和困难&#xff0c;对于程序员来说&#xff0c;这些困难往往来自于技术本身。编程&#xff0c;就像是一个充满谜题的世界&#xff0c;而程序…

大屏适配方案二——vw和vh

按照设计稿的尺寸&#xff0c;将px按比例计算转为vw和vh&#xff0c;转换公式如下 假设设计稿尺寸为 1920*1080&#xff08;做之前一定问清楚 ui 设计稿的尺寸&#xff09;即&#xff1a; 网页宽度1920px 网页高度1080px我们都知道 网页宽度100vw 网页宽度100vh所以&#xff0…

ubuntu安装docker及docker常用命令

docker里有三个部分 daemon 镜像 和 容器 我们需要了解的概念 容器 镜像 数据卷 文章目录 docker命令docker镜像相关命令docker容器相关命令数据卷ubuntu安装docker docker命令 #启动&#xff0c;停止&#xff0c;重启docker systemctl start docker systemctl stop docker s…

SpringBoot的依赖管理和自动配置

与其明天开始&#xff0c;不如现在行动&#xff01; 文章目录 1 依赖管理机制2 自动配置机制2.1 初步理解2.2 完整流程 &#x1f48e;总结 1 依赖管理机制 为什么导入starter-web后所有相关依赖都会导入进来&#xff1f; 开发什么场景&#xff0c;导入什么场景启动器-spring-bo…

vscode调试pytorch分布式训练

launch.json文件如下"cwd" "${fileDirname}"表示代码调试的根目录是当前你调试的文件&#xff0c;也就是pretrain.py所在的目录。其他路径参数都是相对这个目录的 如果改成"cwd" "${workspaceFolder}" 表示代码调试的根目录是打开的工…

【Python百宝箱】构筑铜墙铁壁:Python 认证与授权库实战指南

Python认证与授权&#xff1a;构建安全、可扩展的应用 前言 在当今数字化时代&#xff0c;用户认证和授权是构建安全、可信任的应用程序的基石。Python生态系统提供了丰富而强大的库和工具&#xff0c;以支持多种身份验证和授权方案。本文将深入探讨一系列Python库&#xff0…

MyBatis框架中的5种设计模式总结

前言 MyBatis框架中使用的5种设计模式分别是&#xff1a;1、建造者模式&#xff08;生成器模式&#xff09;。2、工厂模式。3、单例模式。4、代理模式。5、适配器模式。 1、建造者模式&#xff08;生成器模式&#xff09; 在MyBatis环境的初始化过程中&#xff0c;SqlSessio…