51单片机14(独立按键实验)

一、按键介绍

1、按键是一种电子开关,使用的时候,只要轻轻的按下我们的这个按钮,按钮就可以使这个开关导通。

2、当松开这个手的时候,我们的这个开关,就断开开发板上使用的这个按键,它的内部结构,我们可以看到左图右图这一块,就是我们的这个按键的一个内部的一个结构图。

3、这个,是我们的一个开发板上使用的这种按键,然后,看一下这个按键上面有四个角,这个角被这个挡住了。

(1)然后呢,我们可以从这个结构图当中可以看到,这两个角距离相对于这两个角的距离,要长一点,那对应到我们这个图当中就相当于一角和三角以及二角和四角,

(2)这个时候,初始是导通的,也就是说这两个角在你用按键不按下的时候,这两个角就是连接在一起的,你用万用表去测量它的导通性的时候,这两个角是连接在一起导通的。然后这两个角,三角和四角也就是这两个短的,三角和四角这两个短的,它是不导通的,也就是说你当按键没按下的时候,这两个角是不导通的,你按下的时候,它这个就导通了。

(3)所以呢,当我们要使用按键来控制一些我们的外部设备的时候,那这个充当开关的这个功能,就相当于我们的三角和四角,或者我们的一角和二角,这里就相当于一个开关,它初始情况不导通,那当按键按下的时候,这里就导通了一角和二角也导通。

(4)所以我们这里连接到假设这里有一个电源5V进来,然后连接到我们外部的一个风电机,我们电机另一端接GND,当我们按键按下的时候,这个5V就流到我们的电机这里来,然后呢,电机就有电,就进行工作,当我们松开的时候,这个电源,5V就进来,它这里是断开的,所以它流不进来,所以电机它不会转,所以类似一个开关的一个功能,这是我们的一个按键。

4、通常,我们的这个按键所使用的开关,都是一些机械的弹性开关,当我们的这个机械触点断开的时候或者是闭合的时候,因为这里的一个开关机械开关闭合或者是断开的时候,这个电压信号,我们可以看一下,这是理想的一个波形,理想的一个波形假设。

5、将我们的按键,这里接到我们的一个单片机管脚,另一端接到我们的GND,假设,然后,当我们的按键按下的时候,我们是不是理想状况下,这个管脚就变成了低电平了,这是一个理想的一个变电平。

6、然后呢,当我们的按键松开的时候,是不是这里就断开这个VCC,这个管脚这里通常有个下上拉,有个上拉电阻,所以它默认是VCC,也就是高电平,当按下的时候变成低电平,那松开的时候,这里是断开的,它由这个上拉电阻,把它拉高,所以这里又变成了高电平,所以这是一个理想的波形。

7、但实际上是不是这种波形呢,不是的,因为我们的这种机械开关,它里面会有一个抖动的情况,那我们来看一下实际的这种波形,当我们的按键没有按下,它默认是高电平,假设我们有上拉电阻,当我们按键按下的时候,这里呢会存在一个抖动,抖动过程之后,才会进入一个稳定的一个闭合状态,也就是说,当我们的按键按下的时候,刚开始它会有一个抖动的过程,抖动了一段时间之后,才变成低电平,变成低电平。同理,当我们按键松开的时候,它也是会有一个抖动,抖动一段时间之后,又变成了高电平,由我们的这个上拉电阻把它拉高,这才是我们的实际的一个波形。

8、这个抖动对我们后续有什么影响,我们能不能直接就是不管这个抖动产生的影响,不行的,这个抖动它的影响会比较严重,尤其是对于一些控制的设备,假设我对这个按键,低电平有效,按键按下的时候,我对单片机是输入,是低电平。

9、那我的程序在判断按键按下的时候,我假设我的程序是这样,比如说我这里连接的是IO口,IO口,那如果等于低电平,那我操作我的机台执行功能,但是这里有个抖动,抖动,那这里你按下的时候可能这里已经变成了低电平,然后这个器材执行,然后它又变成了高电平,然后又变成了低电平,又执行了一次,也就是说我们在按键按下的时候这个抖动有可能会让我们机台执行多次,这种情况,那同理这种释放也是一样的,尤其是在我们使用按键来统计我们按键按下的次数的时候,这个影响更为明显,因为你按键按下它这个抖动的过程中,有可能我们的程序如果是不对这个抖动处理的话,那你有可能对这个低电平的这个次数,有可能是多次的触发,多次的触发。

9、假设这个图里,我们认为是低电平,它累计一次按键按下,然后到了这里抖动,又累计一次,这样就实际上有了两次了,等到最后一次稳定又有三次,但实际上我们希望等到的是我们按键按下一次就是一次。而不是这里统计的三次,所以这个抖动我们是需要滤除掉的。怎么去滤除,首先我们要了解这个抖动的大概时间是多少,根据实际经验,这个抖动通常是5到10毫秒的一个范围,所以呢,如果把这个抖动的这一块时间,通过我们的延时滤除掉这一块,那到了稳定的时候,我再判断按键按下,是不是可以把这一块给滤除掉,同理,释放也是一样,那这样一来,我们怎么操作,假设同样回到我们刚才的这个例子。

10、如果我IO=0,然后执行,如果我们前面不进行滤波,不进行把这个抖动消除,那我就执行我们的功能,这样是不可以的,刚才我们已经解释了,但是现在我们要消除这个抖动怎么办,根据它的抖动的时间范围,它是5到10毫秒,那我就延时个10毫秒,我这里就有个delay。假设延时个10毫秒,这是10毫秒,延时了10毫秒之后,到了下面这一块,我继续判断,判断这个IO是不是等于零,那这个delay这一块是不是相当于把这一块的抖动给滤除掉了,因为我这里又进行了判断,前面这一块就不做其他的功能,只是一个延时,把这一块给忽略掉,然后再判断这个稳定的闭合状态,如果这一次确实是等于低电平,也就是说确实是按键按下了,那我再执行对应的功能,所以,通过这个delay就可以对这个抖动给消除掉。那么通常我们在使用按键的时候,我们通常都是前期判断按键,按下了再做处理,处理完之后,我们后面的释放,可能一般都不会去管它,当然你要去处理这一块,我们可以通过一个While循环,我们等待这个高电平,我们就退出。

11、像这里,如果不是高电平,那就不退出,不退出我们就认为按键还是处于按下的一个状态,当然这一块,我们也不用去处理,因为我检测到了这里,我就进行操作了,操作一次,后面就不管了,等待下一次按下,我又继续操作,这是我们的一个抖动的一个处理,刚才我们使用的是软件的一个消抖,这称为软件消抖,软件消抖的一个方法。所以在使用按键的时候,通常我们都要使用这种软件消抖。当然除了软件消抖,还有硬件消抖。

12、那么硬件消抖,顾名思义,它要增加额外的一些硬件,硬件电路比如说通过RC的一个电路,我在这个按键的一端,比如说我连到这个CPU的时候,我在这里接一个电阻,再接一个电容等等在串两级或者是一级都可以,然后再输入我们的IO口,那这里呢,这个电容RC就相当于一个充放电,当我按下的时候,我对这个电容充电,充电完成,然后再返回到这一块,就相当于这一块利用了充电的一个时间,把它给滤除掉,然后到了真正稳定的时间才传输给这个单片机的IO口。是这么一个电路。

13、当然网上还有各种各样比较经典的一些硬件消抖的一些电路,那么硬件消抖,顾名思义,它就要增加一些硬件,那对于如果说是在你的产品当中应用的按键数量比较多的话,那你一个按键要增加这种硬件的一个消抖电路,那它的一个电路的一个PCB占用的面积就比较大,而且你的成本也会增加,所以在实际的应用开放当中,我们通常采用的是软件的一个消抖方法,如果对于一些工业产品,可能会增加一些硬件的一个消抖方法,再配合软件消抖达到一个更好的效果。

二、硬件设计

1、

2、A2到A4使用了四个按键K1到K4,然后A5到A7使用的K1到K8总共八个按键,它们的使用方法是完全一样的,所以你会使用这四个按键的某一个,其他的按键使用都是完全一样,下面我们就来看一下,上面的这个A2到A4的四个按键电路我们可以看到,它是绑定到我们的IO口上面,绑定到我们的IO口,所以它是固定的,比如我们的K1按键,它是连接在P3.1管脚,所以你不能定义其他的管脚,因为它的硬件连接已经固定,无法更改。K2它是连到P30,K3连到P32,K4连接到P33,那么K3和K4的管脚P32,P33,这两个管脚又可以作为外部的一个中断的一个管脚。所以我们学习外部中断的时候,依然可以使用K3按键和K4按键。这是我们的四个按键的介绍。

另一端呢,是连接到GND,也就是我们刚才介绍的,当我们的按键按下的时候,这个GND是不是低电平,低电平这里就是连接在一起了。所以对应的管脚就会得到一个低电平。如果按键不按下,那么默认管脚就是高电平,因为它有上拉电阻,所以大家在识别这个按键的时候有没有按下的时候,那我们可以判断它是否等于低电平。

3、下面这个是我们的A5到A7的这个按键的一个电路,那从这张图我们可以看到,K1到K8,它是连接到这个端子排针上面JPI,因为我们介绍过A5到A7的板子,它的各个模块都是独立,我们要是用这个按键的话,就需要我们人为的把这个按键的一个管脚连接到我们的单片机任何一个管脚来进行一个实验的程序的一个编写,那么为了跟我们的教程配合兼容的话,那我们可以K1,K2,K3,K4也可以连接到P31,P30,P32和P33这么一个管脚,所以呢,你在做独立按键实验的时候,可以直接将我们的第一个K1连接到我们的P30,后面也是如此。这四个按键就跟我们的A2到A4的这个板子的一个程序就兼容了。那至于后面的四个按键,那你自己可以定义了。所以你要是用这个按键,你掌握一个它的一个软件的编写就可以了。

三、软件设计

1、本章所要实现的功能是:通过开发板上的独立按键K1控制D1指示灯亮灭。

2、

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

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

相关文章

免费分享:2021年度全国城乡划分代码(附下载方法)

《关于统计上划分城乡的规定》指出:“本规定作为统计上划分城乡的依据,不改变现有的行政区划、隶属关系、管理权限和机构编制,以及土地规划、城乡规划等有关规定”。统计用区划代码和城乡划分代码用于统计工作,需要在其他工作中使…

回溯题目的套路总结

前言 昨天写完了LeeCode的7,8道回溯算法的题目,写一下总结,这类题目的共同特点就是暴力搜索问题,排列组合或者递归,枚举出所有可能的答案,思路很简单,实现起来的套路也很通用,一…

java题目之抽奖以及优化方式

public class Main9 {public static void main(String[] args) {int[]arr{ 2,588,888,1000,10000};int [] newArrnew int[arr.length];//3.抽奖Random rnew Random();//因为有5个奖项,所以这里循环五次for (int i 0; i <5 ; ) {//获取随机索引int randomIndexr.nextInt(arr…

前端-模拟请求数据mook第三方插件 json-server的使用

大纲 第一步下载第二配置mook的数据源第三配置启动命令第四运行模拟服务第五测试接口如果要进行更复杂的操作 第一步下载 npm install json-server -D"devDependencies": {"json-server": "^1.0.0-beta.1"}第二配置mook的数据源 在项目的根目录…

图纸为什么需要加密?2024超好用的图纸加密软件推荐

图纸通常包含产品的设计细节、规格和技术信息&#xff0c;这些都是公司的核心知识产权。加密可以防止未经授权的访问和复制&#xff0c;避免知识产权被盗用或侵权。 图纸加密软件对于保护企业的知识产权和商业秘密至关重要&#xff0c;特别是在CAD&#xff08;计算机辅助设计&…

内网安全:各类密码的抓取

Mimikatz在线读取SAM文件 离线读取SAM文件 在线读取lsass进程 离线读取lsass进程 BrowserGhost浏览器密码抓取 Sharp-HackBrowserData浏览器密码抓取 SharpDecryptPwd数据库密码抓取 LaZagne各类密码的抓取 Windows其他类型抓NTLM Hash工具 sam文件和lsass进程就是Wind…

谷粒商城-商品上架

1.sku在es中的存储模型分析(spring整和es) es中所有数据存在内存中,内存产品贵,能节省就节省,只保存有用的信息 两种保存方法:(空间换时间,时间换空间): 我们选空间换时间 ES中放这些东西: "mappings": { "properties": { "skuId"…

【C++】deque以及优先级队列

容器适配器 deque的介绍deque的原理介绍 priority_queue的介绍与使用priority_queue的介绍priority_queue的使用constructor&#xff08;构造函数&#xff09;emptypushpoptopsize priority_queue的模拟实现 仿函数何为适配器容器适配器deque的缺陷选择deque作为适配器的理由ST…

使用element UI Cascader 级联选择器实现省/市/区选择

<template><div><label>位置</label><el-cascader:options"pcaTextArr"v-model"selectedOptions"change"handleChangeAddress":props"{expandTrigger: hover,multiple: true,checkStrictly: true,emitPath: fal…

mailcow搭建安装教程:如何搭建专属邮箱!

mailcow搭建安装教程怎么用&#xff1f;怎么有效搭建邮箱服务器&#xff1f; 随着电子邮件在工作和生活中的重要性日益增加&#xff0c;拥有一个专属的电子邮件服务器变得越来越有吸引力。AokSend将详细介绍如何通过mailcow搭建一个专属邮箱&#xff0c;为你提供全方位的邮件管…

看起来很炫酷的科技感登录页面模板HTML

代码下载地址&#xff1a; 炫酷科技感登录页面模板带动画 (bootstrapmb.com)https://www.bootstrapmb.com/item/11891

Mailspring搭建安装教程:打造个性邮件体验

Mailspring搭建安装教程步骤&#xff01;如何选择电子邮件服务商&#xff1f; Mailspring作为一款功能强大、界面友好的邮件客户端&#xff0c;成为了许多用户的首选。AokSend将为大家提供详细的Mailspring搭建安装教程&#xff0c;帮助您打造个性化的邮件体验。 Mailspring搭…

Mybatis<collection>实现一对多

时隔多年又用到这样的查询方式了,提前声明一下分页最后返回的数据会小于每页条数&#xff0c;废话不多说直接上代码&#xff01; Data public class PbcUserTargetTaskPageVO {ApiModelProperty("个人绩效指标id")private Long id;ApiModelProperty("月份"…

uniapp判断h5/微信小程序/app端+实战展示

文章目录 导文使用条件编译的基本语法常见的平台标识符示例实战展示使用场景举例注意事项 导文 这里是导文 当你在开发Uni-app时&#xff0c;需要根据不同的平台&#xff08;比如App端、H5端、微信小程序等&#xff09;来执行不同的代码逻辑&#xff0c;可以使用条件编译来实现…

使用Fiddler进行Android和IOS抓包

Android抓包 要使用Telerik Fiddler Classic捕获Android设备的网络流量&#xff0c;您需要执行以下步骤&#xff1a; 在Fiddler Classic上进行设置&#xff1a; 确保已安装并使用BouncyCastle作为证书生成器。较新的Android版本会拒绝有效期超过两年的证书&#xff0c;目前只…

微信小程序开发--点击圆圈小问号弹注解tip 点击其他区域关闭(组件 w-tip 弹框在小圆圈的 上下左右 可以自己控制 )

引言 在微信小程序开发中&#xff0c;实现用户交互的多样性是提升用户体验的关键之一。本文将详细介绍如何在微信小程序中实现点击圆圈小问号弹出注解&#xff08;Tip&#xff09;的功能。这种功能常见于帮助信息、提示说明等场景&#xff0c;能够为用户提供即时的帮助和反馈。…

C语言迷宫

目录 开头程序程序的流程图程序输入与输出的效果结尾 开头 大家好&#xff0c;我叫这是我58。今天&#xff0c;我要来看我用C语言编译出来的迷宫游戏。 程序 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <Windows.h> void printmaze(char s…

若依前后端获取当前用户

后端 Autowired private TokenService tokenService;LoginUser loginUser tokenService.getLoginUser(); sysInquiry.setCreateBy(loginUser.getUsername()); sysInquiry.setCreateTime(DateUtils.getNowDate()); 前端 获取使用 const nickName this.$store.state.user.nick…

每日OJ_牛客_DD5 进制转换

目录 牛客_DD5 进制转换 解析代码 牛客_DD5 进制转换 进制转换_牛客题霸_牛客网 解析代码 本题题目很简单&#xff0c;题目的本意就是将10进制的数转换成N进制。N(2 ≤ N ≤ 16)可以看出进制最多可以到16进制。 首先想清楚原理&#xff1a;N进制数&#xff0c;每个进制位的值…

【Js】获取当前日期时间

日期基本数据&#xff1a; var myDate new Date(); //Date 对象会自动把当前日期和时间保存为其初始值 myDate.getYear(); //返回当前年份(2位)&#xff1b;请使用 getFullYear() 方法代替 myDate.getFullYear(); //返回完整的年份(4位,1970-????) myDate.getMonth();…