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.mfbz.cn/a/843292.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

用Java手写jvm之实现java -version的效果

写在前面 源码 。 本文来用纯纯的Java代码来实现java -version的效果,就像下面这样: 1:程序 这里输出类似这样的: java version "9" Java(TM) SE Runtime Environment (build 9181) Java HotSpot(TM) 64-Bit Serve…

突破•指针二

听说这是目录哦 复习review❤️野指针🫧assert断言🫧assert的神奇之处 指针的使用和传址调用🫧数组名的理解🫧理解整个数组和数组首元素地址的区别 使用指针访问数组🫧一维数组传参的本质🫧二级指针&#x…

filebeat,kafka,clickhouse,ClickVisual搭建轻量级日志平台

springboot集成链路追踪 springboot版本 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.3</version><relativePath/> <!-- lookup parent from…

python—爬虫爬取电影页面实例

下面是一个简单的爬虫实例&#xff0c;使用Python的requests库来发送HTTP请求&#xff0c;并使用lxml库来解析HTML页面内容。这个爬虫的目标是抓取一个电影网站&#xff0c;并提取每部电影的主义部分。 首先&#xff0c;确保你已经安装了requests和lxml库。如果没有安装&#x…

HTML零基础自学笔记(上)-7.18

HTML零基础自学笔记&#xff08;上&#xff09; 参考&#xff1a;pink老师一、HTML, Javascript, CSS的关系是什么?二、什么是HTML?1、网页&#xff0c;网站的概念2、THML的基本概念3、THML的骨架标签/基本结构标签 三、HTML标签1、THML标签介绍2、常用标签图像标签&#xff…

数据结构----算法复杂度

1.数据结构前言 数据是杂乱无章的&#xff0c;我们要借助结构将数据管理起来 1.1 数据结构 数据结构(Data Structure)是计算机存储、组织数据的⽅式&#xff0c;指相互之间存在⼀种或多种特定关系的数 据元素的集合。没有⼀种单⼀的数据结构对所有⽤途都有⽤&#xff0c;所…

ranger审计日志对接CDH solr

作者&#xff1a;耀灵 一、准备条件 1、已安装完毕ranger-admin 2、已在CDH上部署solr&#xff08;注意在安装solr时更改下solr在zk上的节点信息&#xff09; 二、更改相关配置 1、修改ranger-2.1.0-admin/contrib/solr_for_audit_setup/install.properties SOLR_USERsolr …

科研绘图系列:R语言单细胞聚类气泡图(single cell bubble)

介绍 单细胞的标记基因气泡图是一种用于展示单细胞数据中特定基因表达情况的可视化方法。它通常用于展示细胞亚群中标记基因的表达水平,帮助研究者识别和区分不同的细胞类型。在这种图表中,每个细胞亚群用不同的颜色表示,而基因表达水平则通过气泡的大小来表示,从而直观地…

嵌入式C++、FreeRTOS、MySQL、Spring Boot和MQTT协议:智能零售系统详细流程介绍(代码示例)

项目概述 随着科技的发展&#xff0c;零售行业正经历着一场数字化转型。智能零售系统通过集成嵌入式技术和大数据分析&#xff0c;为商家提供了高效的运营管理工具。该系统的核心目标是提升顾客体验、优化库存管理、降低运营成本以及实现精准营销。 本项目将结合多种技术栈&a…

tree组件实现折叠与展开功能(方式1 - expandedTree计算属性)

本示例节选自vue3最新开源组件实战教程大纲&#xff08;持续更新中&#xff09;的tree组件开发部分。考察响应式对象列表封装和computed计算属性的使用&#xff0c;以及数组reduce方法实现结构化树拍平处理的核心逻辑。 实现思路 第一种方式&#xff1a;每次折叠或展开后触发…

【LeetCode】对称二叉树

目录 一、题目二、解法完整代码 一、题目 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true 示例 2&#xff1a; 输入&#xff1a;root [1,2,2,null,3,null,3] 输出&#…

洗地机哪个牌子好性价比高又实惠?四款洗地机好洗地机的品牌推荐

在追求家居清洁效率与成本效益并重的今天&#xff0c;选择一款性价比高且实惠的洗地机显得尤为重要。市场上洗地机品牌琳琅满目&#xff0c;至于洗地机哪个牌子好性价比高又实惠成为很多人心中的疑问。为此&#xff0c;我们精心搜集并推荐四款洗地机好洗地机的品牌&#xff0c;…

数据结构之跳表SkipList、ConcurrentSkipListMap

概述 SkipList&#xff0c;跳表&#xff0c;跳跃表&#xff0c;在LevelDB和Lucene中都广为使用。跳表被广泛地运用到各种缓存实现当中&#xff0c;跳跃表使用概率均衡技术而不是使用强制性均衡&#xff0c;因此对于插入和删除结点比传统上的平衡树算法更为简洁高效。 Skip lis…

【学习笔记】无人机系统(UAS)的连接、识别和跟踪(七)-广播远程识别码(Broadcast Remote ID)

目录 引言 5.5 广播远程识别码&#xff08;Broadcast Remote ID&#xff09; 5.5.1 使用PC5的广播远程识别码 5.5.2 使用MBS的广播远程识别码 引言 3GPP TS 23.256 技术规范&#xff0c;主要定义了3GPP系统对无人机&#xff08;UAV&#xff09;的连接性、身份识别、跟踪及…

达梦数据库DM8-索引篇

目录 一、前景二、名词三、语法1、命令方式创建索引1.1 创建索引空间1.2.1 创建普通索引并指定索引数据空间1.2.2 另一种没验证&#xff0c;官方写法1.3 复合索引1.4 唯一索引1.5 位图索引1.6 函数索引 2、创建表时候创建索引3、可视化方式创建索引3.1 打开DM管理工具3.2 找到要…

appium2.0 执行脚本遇到的问题

遇到的问题&#xff1a; appium 上的日志信息&#xff1a; 配置信息 方法一 之前用1.0的时候 地址默认加的 /wd/hub 在appium2.0上&#xff0c; 服务器默认路径是 / 如果要用/wd/hub 需要通过启动服务时设置基本路径 appium --base-path/wd/hub 这样就能正常执行了 方法二…

利用request + BeautifulSoup 模块批量爬取内容,实现批量获取书名对应的豆瓣评分

文章目录 代码代码解释控制台输出结果 代码 #-*- coding:utf-8 -*- from bs4 import BeautifulSoup import requests, time, jsonheaders {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.39…

初识godot游戏引擎并安装

简介 Godot是一款自由开源、由社区驱动的2D和3D游戏引擎。游戏开发虽复杂&#xff0c;却蕴含一定的通用规律&#xff0c;正是为了简化这些通用化的工作&#xff0c;游戏引擎应运而生。Godot引擎作为一款功能丰富的跨平台游戏引擎&#xff0c;通过统一的界面支持创建2D和3D游戏。…

jmeter-beanshell学习11-从文件获取指定数据

参数文件里的参数可能过段时间就不能用了&#xff0c;需要用新的参数。如果有多个交易&#xff0c;读不同的参数文件&#xff0c;但是数据还是一套&#xff0c;就要改多个参数文件。或者只想执行参数文件的某一行数据&#xff0c;又不想调整参数文件顺序。 第一个问题目前想到…

Transformer 翻译

Attention Is All You Need Ashish Vaswani∗ Google Brain avaswanigoogle.com Noam Shazeer∗ Google Brain noamgoogle.com Niki Parmar∗ Google Research nikipgoogle.com Jakob Uszkoreit∗ Google Research uszgoogle.com Llion Jones∗ Google Research lliongoogle.c…