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

news2024/9/21 14:33:34

一、按键介绍

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.coloradmin.cn/o/1939065.html

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

相关文章

从千台到十万台,浪潮信息InManage V7解锁智能运维密码

随着大模型技术的深度渗透,金融行业正经历着前所未有的智能化变革。从“投顾助手”精准导航投资蓝海,到“智能客服”秒速响应客户需求,大模型以其对海量金融数据的深度挖掘与高效利用,正显著提升金融服务的智能化水准,…

Java:拦截器简介和应用示例(多个拦截器+校验token是否为空)

JAVA 拦截器 简介 拦截器和过滤器均可以拦截http请求,过滤器偏向于基础设施工作,拦截器偏向于业务,拦截器允许在执行Controller之前做验证预处理,在Controller执行之后对返回对象做加工处理。可以用于:权限检查、日志…

2014年全国大学生数学建模竞赛C题生猪养殖管理(含word论文和源代码资源)

文章目录 一、部分题目二、部分论文三、部分源代码四、完整word版论文和源代码 一、部分题目 2014高教社杯全国大学生数学建模竞赛题目 C题 生猪养殖场的经营管理 某养猪场最多能养10000头猪,该养猪场利用自己的种猪进行繁育。养猪的一般过程是:母猪配…

第3关 -- Git 基础知识

任务1: 破冰活动:自我介绍 任务2: 实践项目:构建个人项目 MeiHuaYiShu

【BUG】已解决:ModuleNotFoundError: No module named ‘_ctypes‘

已解决:ModuleNotFoundError: No module named ‘_ctypes‘ 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰,211科班出身,就职于医疗科技公司,热衷分享知识,武汉城…

【Langchain大语言模型开发教程】记忆

🔗 LangChain for LLM Application Development - DeepLearning.AI 学习目标 1、Langchain的历史记忆 ConversationBufferMemory 2、基于窗口限制的临时记忆 ConversationBufferWindowMemory 3、基于Token数量的临时记忆 ConversationTokenBufferMemory 4、基于历史…

双笼转子感应电机建模仿真(2):任意速旋转坐标系下xy/xy数学模型及仿真模型

1.概述 2. 双笼转子三相感应电机数学模型 2.1. 定子基准下ABC/qd数学模型 2.2. 任意速旋转坐标系下xy/xy数学模型 2.3. 空间矢量数学模型 3. 双笼转子三相感应电动机仿真模型 3.1 基于任意速xy/xy坐标系数学模型(1)~(5)的仿真模型 3.2. 基于任意速xy/xy坐标系中瞬态等效电…

MATLAB图像处理分析基础(一)

一、引言 MATLAB软件得到许多数字图像处理学生、老师和科研工作者的喜爱,成为数字图像处理领域不可或缺的工具之一,其与其他软件相比有以下诸多显著优点。首先,MATLAB 拥有强大的内置函数库,涵盖了图像读取、显示、处理及分析的全…

OpenCV 遍历Mat,像素操作,使用TrackBar 调整图像的亮度和对比度 C++实现

文章目录 1.使用C遍历Mat,完成颜色反转1.1 常规遍历方式1.2 迭代器遍历方式1.3指针访问方式遍历(最快)1.4不同遍历方式的时间对比 2.图像像素操作,提高图像的亮度3.TrackBar 进度条操作3.1使用TrackBar 调整图像的亮度3.2使用TrackBar 调整图…

【JavaEE进阶】——Spring事务和事务传播机制

目录 🚩事务 🎈为什么需要事务? 🎈事务的操作 🚩Spring 中事务的实现 🎈数据准备 🎈Spring 编程式事务(了解) 🎈Spring 声明式事务 Transactional 🍭Transactional 详解 &…

2013年全国大学生数学建模竞赛B题碎纸片复原(含word论文和源代码资源)

文章目录 一、部分题目二、部分论文三、部分源代码四、完整word版论文和源代码(两种获取方式) 一、部分题目 2013高教社杯全国大学生数学建模竞赛题目 B题 碎纸片的拼接复原 破碎文件的拼接在司法物证复原、历史文献修复以及军事情报获取等领域都有着重…

基于术语词典干预的机器翻译挑战赛笔记Task2 #Datawhale AI 夏令营

上回: 基于术语词典干预的机器翻译挑战赛笔记Task1 跑通baseline Datawhale AI 夏令营-CSDN博客文章浏览阅读718次,点赞11次,收藏8次。基于术语词典干预的机器翻译挑战赛笔记Task1 跑通baselinehttps://blog.csdn.net/qq_23311271/article/d…

统计一个页面用到的html,css,js

<!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>统计html</title><style>* {margin: …

【人工智能】AI音乐创作兴起与AI伦理的新视角

文章目录 &#x1f34a;AI音乐创作&#xff1a;一键生成&#xff0c;打造你的专属乐章&#x1f34a;1 市面上的AI音乐应用1.1 Suno AI1.2 网易天音 &#x1f34a;2 AI音乐创作的流程原理(直接制作可跳到第3点)2.1 AI音乐流派2.2 AI音乐风格2.3 AI音乐的结构顺序2.5 选择AI音乐乐…

基于PSO算法优化PID参数的一些问题

目录 前言 Q1&#xff1a;惯性权重ω如何设置比较好&#xff1f;学习因子C1和C2如何设置&#xff1f; Q2&#xff1a;迭代速度边界设定一定能够遍历&#xff08;/覆盖&#xff09;整个PID参数二维空间范围吗&#xff1f;还是说需要与迭代次数相关&#xff1f;迭代次数越高&a…

阵列信号处理学习笔记(一)--阵列信号处理定义

阵列信号 阵列信号处理学习笔记&#xff08;一&#xff09;–阵列信号处理定义 阵列信号处理学习笔记&#xff08;二&#xff09;–空域滤波基本原理 文章目录 阵列信号前言一、阵列信号处理定义1.1 信号1.2 阵列 二、雷达数据中哪些属于空间采样总结 前言 MOOC 阵列信号处理…

Bubbliiiing 的 Retinaface rknn python推理分析

Bubbliiiing 的 Retinaface rknn python推理分析 项目说明 使用的是Bubbliiiing的深度学习教程-Pytorch 搭建自己的Retinaface人脸检测平台的模型&#xff0c;下面是项目的Bubbliiiing视频讲解地址以及源码地址和博客地址&#xff1b; 作者的项目讲解视频&#xff1a;https:…

数据结构排序合集(笔记)

目录 一.插入排序与希尔排序 二.选择排序与堆排序 三.冒泡排序和快速排序 四.归并排序 五.计数排序 一.插入排序与希尔排序 时间复杂度空间复杂度稳定性插入排序O&#xff08;N^2&#xff09;O(1)稳定希尔排序O(N^1.3)O(1)不稳定 插入排序&#xff1a; 希尔排序&#xff…

css-01-如何实现“文本过长(文本在一行排),超出部分被省略号代替”

目录 需求代码代码解释 需求 最近写一个项目&#xff0c;遇到了一个问题&#xff0c;就是希望实现下面这种文字效果&#xff1a;文字在一行排&#xff0c;超出的部分用省略号代替 代码 <!DOCTYPE html> <html lang"en"><head><meta charset…

OCC 创建点线面体

目录 一、利用封装已有算法实现 1、盒子建模算法封装 2、可视化 二、利用OCC 点线面实现 1、实现过程 2、实现一个面 3、拉伸面生成体 4、旋转面生成体 三、总结 一、利用封装已有算法实现 1、盒子建模算法封装 BRepPrimAPI_MakeBox box(2, 2, 2); 2、可视化 void VTK…