目录

一、按钮简单操作回忆

二、按钮新操作实现

(1)按钮的点击实现灯亮/灭

①连接电路

②初始化板载LED和按钮

③按钮程序的基本原理(核心仍为0亮/1灭)

④按钮消抖的原理

三、按钮封装的操作-点击,双击,多击,长按

(1)实验结果

使用串口调试助手实现,按钮的多种操作实现串口助手的数字变化。(单机-数字+1,双击数字清零,长按数字持续++) 

(2)搭建电路

(3)串口的初始化

(4)按钮初始化

(5)进程函数(必须要有的)


一、按钮简单操作回忆

首先,回忆一下之前学过的GPIO的按钮实验,即做到了持续按下按钮,灯持续亮,松开按钮,则灯灭。

代码的简单逻辑是:

二、按钮新操作实现

(1)按钮的点击实现灯亮/灭

最终实现:当点击按钮并松开的时候,实现灯亮,再点击然后松开的时候,实现灯灭,即不断的点击切换灯的状态。(这就不是之前的长按了)

①连接电路

 

②初始化板载LED和按钮

初始化按钮,其实就是初始化单片机的随便一个正常的GPIO的引脚,初始化为输入上拉模式;

初始化板子上的LED,其实就是将指定的GPIO的13引脚初始化为输出开漏模式;

③按钮程序的基本原理(核心仍为0亮/1灭)

这里主要的难点是当按钮被点击后,你松开按钮的一瞬间让灯实现状态的转换。

所以需要获取松开按钮的指令,核心为0亮/1灭,所以使用两变量存储状态的变化,当变化发送,并且是信号从0变为1,表示松开按钮了,那就向板载灯发送对应的信号。

这里逻辑很简单,就是默认是按钮松开的,所以默认是1的信号,然后不断的读当前的输入寄存器的信号,当发生变化了,就:

首先判断当前的变化是松开还是按下,我们这里实现的是按钮松开去实现灯的变化,所以选择第一个去实现。

之后在当前的if条件里面去切换亮灭状态。(这里有个小难点,你不知道当前的灯的状态是啥,所以你不好控制让他亮还是灭,所以这里使用GPIO自带的读取输出寄存器的值(读取最近一次发送的值)接口去读取他之前是的状态是啥,如果之前的输出寄存器是1(灭),那么就写0让他亮,相反同理。)

④按钮消抖的原理

通过前面的实验会进行基本的实现,但是会出现一个问题,就是按钮有时候按下去失灵,这就是抖动出现的毛刺现象。

比如当按下的时候,会出现不稳定的波动毛刺,既而导致刚按下或者松开的一会,会有高低电压的抖动,而失灵也正是因为此时你刚按下的时候,他一开始抖动造成的0-1-0-1-0这种,那因为一开始这种抖动变化的很快,导致人眼只能看见一开始的0和最后抖完的0,所以就相当于没有变化,即失灵现象。

要解决这种,直接加个延迟就行。 

 

三、按钮封装的操作-点击,双击,多击,长按

(1)实验结果

使用串口调试助手实现,按钮的多种操作实现串口助手的数字变化。(单机-数字+1,双击数字清零,长按数字持续++) 

(2)搭建电路

(3)串口的初始化

串口初始化,就两步

(1)IO引脚的初始化

(2)自身模块的初始化

(4)按钮初始化

封装函数里面有这个button的封装,直接用就行,其中有按钮的Init,具体的功能为:

实现了按钮的初始化,同样是两个参数:

一个是名称(需要自己定义一个变量去传地址进去)

一个是结构体(内部的那几个可以都默认为0)

注意:这里按钮的初始化里面没有初始化引脚为IPU即输入上拉模式,是因为在这个初始化参数里面默认实现了,所以这里的结构体只需提供GPIO名称和引脚编号


(5)进程函数(必须要有的)

该函数需要放到main的while里面生效。

原因就是这个函数内部就是前面实现的那个按钮点击实现灯亮/灭的操作,这里去掉了灯的亮灭指令保留按钮的按或者释放的检测功能。

当按钮按下/释放的时候,会自动执行(按钮按下/或者按钮释放的回调函数)以及一个按钮轮询的一个函数,这个函数里面就根据检测到按钮的实现情况去动态的调用你自己实现的按钮点击和按钮长按的回调函数

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

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

相关文章

星域智链科技:用科技点亮生活,以 AI 拓展无限可能

星域智链科技(东莞市)有限公司简介 星域智链科技(东莞市)有限公司,理念是 让科技便利生活、丰富生活,专注于科技、AI领域。 全场景 GPS 定位器 —— 精准追踪,守护安全,适用于车辆…

国内代理IP在SEO行业中的应用

随着互联网的快速发展,SEO(搜索引擎优化)已经成为了数字营销的重要组成部分。无论是企业还是个人站长,都希望通过SEO提升自己网站的排名和流量。然而,随着竞争的激烈,传统的SEO优化手段已经逐渐显现出局限性…

Linux + arm 内存屏障

ARM 硬件层的屏障指令DMB (Data Memory Barrier):保证在它之前的内存访问(符合给定域/类型)在它之后的内存访问之前对可见性排序。常用域:ish(Inner Shareable),sy(system-wide&…

网络安全中的远程控制活动检测与防御策略

本文还有配套的精品资源,点击获取 简介:远程控制技术在IT领域中用于网络连接和设备操作,但同样被黑客利用进行非法入侵。端口占用情况是识别远程控制活动的关键因素,使用工具如"cports"可以监控这些端口。系统中未知…

UIGestureRecognizer 各个子类以及其作用

在 iOS 里,UIGestureRecognizer 是一个抽象基类,专门用来处理手势事件。它本身不能直接用,必须用它的 子类。这些子类分别对应常见的手势识别器。常见的 UIGestureRecognizer 子类及作用1. UITapGestureRecognizer作用:点击手势&a…

计算机网络 HTTPS 全流程

HTTPS 通信的全流程(特别是 TLS 握手阶段)中使用的三个随机数是保障安全性的核心设计,不能随意减少。每个随机数都承担着至关重要的安全职责。下面详细解释 HTTPS 全流程,并重点分析这三个随机数的作用和必要性:&#…

DL00271-基于YOLOv11的激光雷达LiDAR船舶目标检测含完整数据集

【CSDN推荐】基于YOLOv11的激光雷达(LiDAR)船舶目标检测——含完整数据集!🚢 科研人员必看! 高校老师、学生和研究者们,前沿技术来了!本论文利用YOLOv11模型,结合激光雷达&#xff0…

SQL-leetcode—3374. 首字母大写 II

3374. 首字母大写 II 表:user_content -------------------- | Column Name | Type | -------------------- | content_id | int | | content_text| varchar | -------------------- content_id 是这张表的唯一主键。 每一行包含一个不同的 ID 以及对应的文…

告别笼统的 200 OK:一份给 API 设计者的 HTTP 状态码终极指南

文章目录写在前面问题描述核心结论与建议简要描述详细阐述1xx - 信息性响应 (Informational)2xx - 成功 (Successful)3xx - 重定向 (Redirection)4xx - 客户端错误 (Client Error)5xx - 服务器错误 (Server Error)HTTP 状态码速查表参考以及更多更详细的状态码查询写在前面 你…

从防抖节流到链表树:编程世界中的抽象优化艺术

从防抖节流到链表树:编程世界中的抽象优化艺术 在编程的知识体系中,有些概念看似毫不相关,却在底层逻辑上有着惊人的相似之处。防抖与节流、链表与树,这两组分属不同领域的概念,正是这种思维共性的典型代表。它们不仅展…

第三阶段数据-3:数据库脚本生成,备份与还原,分离与附加

1_生成数据库脚本(1)在数据库上右键选择任务(2)选择生成脚本(3)选择下一步,如果下次不想显示此页面,可勾选不再显示此页(4)如果导出全部数据,选择…

React框架超详细入门到实战项目演练【前端】【React】

React框架 1.前端展示解释 当客户端访问服务器时,会从服务器中下载很多静态文件到本地,比如css、js等前端渲染文件 下载完成之后浏览器会将这些文件组合形成前端页面渲染出来。 2.React概述 React是一个专注于构建用户界面的JavaScript库,…

本地部署的终极多面手:Qwen2.5-Omni-3B,视频剪、音频混、图像生、文本写全搞定

Qwen2.5-Omni-3B是什么? Qwen2.5-Omni-3B 是由阿里巴巴 Qwen 团队推出的一款轻量级多模态大模型,作为 Qwen2.5-Omni-7B 的高效优化版本,专为消费级硬件环境量身打造。该模型具备处理文本、音频、图像和视频等多种模态输入的能力,…

连续空间强化学习:策略输出的两种形态 —— 概率分布与确定性动作

在强化学习的世界里,智能体与环境的交互核心是 “动作选择”。当面对离散动作空间(如围棋的落子点、游戏的按键操作)时,智能体可以直接枚举或概率选择有限的动作;但在连续动作空间中(如机器人关节角度、无人…

IT运维背锅权限泄露?集中式管控如何化解风险?

在企业数字化转型的浪潮中,IT运维团队常常被推到风口浪尖。员工离职后权限未及时回收、账号共享导致数据泄露、跨系统权限配置不一致……这些问题一旦暴露,IT运维往往成为“背锅侠”。权限泄露不仅威胁企业数据安全,还可能导致合规性风险&…

2025 世界机器人大会启示录:机构学 × AI × 视频链路的融合之路

引言 2025 年 8 月 8 日,北京再一次成为全球瞩目的科技焦点——世界机器人大会盛大开幕。来自全球的 200 余家顶尖企业齐聚一堂,带来超过 1500 件展品,其中首发新品突破 100 款,涵盖了从工业制造、医疗康复到服务陪伴、特种作业的…

从零开始部署经典开源项目管理系统最新版redmine6-Linux Debian12

安装Debian 12 前面为了在windows上好开发,想要在windows上配置开发环境,以源码方式在本地部署运行,但经过好几天各种版本切换及配置组件库等各种操作后,证明windows上搭建redmine6支持的运行环境没有那么简单,后续有…

超长视频生成新突破!LongVie框架问世,创作不再受时长限制

超长视频生成新突破!LongVie框架问世,创作不再受时长限制 文章来源:Poixe AI 在AI技术飞速发展的当下,视频生成领域取得了令人瞩目的进步,尤其是在短视频创作方面。然而,当视频时长超过一分钟时&#xff…

MongoDB 查询方法与高级查询表(Python版)

目录 一、MongoDB3步快速安装 1.1​下载安装包 1.2运行安装程序​ 1.3​验证安装​打开CMD执行: 1.4 基本查询操作 二、高级查询操作符表 2.1 比较操作符 2.2 逻辑操作符 2.3 元素操作符 2.4 数组操作符 三、高级查询案例 3.1 复杂条件组合 3.2 数组查…

选型指南:如何为企业挑选合适的边缘计算网关

选型指南:如何为企业挑选合适的边缘计算网关在企业迈向智能化转型的道路上,选择一款合适的物联网边缘计算网关至关重要。面对众多型号和功能各异的网关产品,企业该如何做出正确抉择呢?​首先要考虑的是网关的兼容性。蓝蜂物联网边…