蓝桥杯嵌入式(G431)备赛笔记——按键模块设计

news2025/1/17 1:02:47

cubeMX配置:

原理图

引脚配置为上拉模式

定时器

使用定时器3(通用定时器,使用外部晶振,内部时钟),分频系数为80(从0开始则为80-1),则每1s 1m次,定时评率为为10000,对应1s 1m/10000次,频率为10ms每次

一定记得开启NVIC使能中断

编写中断回调函数

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

代码模板:

思路:

单个单机按键带长按键判断—>单个单机按键加双击按键,同时修复长按键误触发短按键功能bug—>4个单机按键加双击按键,同时优化代码,修改bug

开始之前:重整了工程结构
删除common.c/.h
在main.h中加入
#define uint unsigned int
#define uchar unsigned char
在main.c中引用自定义库:
#include "led.h"
在自定义库的.h改引用main.h,代替common.h

Interrupt.c:
#include "interrupt.h" // 引入头文件 interrupt.h

uchar judge_state=0,key_num=100,key_time=0; // 定义全局变量 judge_state 表示按键状态,key_num 表示按键编号,key_time 表示按键按下的时间

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) // 定义定时器中断回调函数
{
    if(htim->Instance==TIM3) // 判断是否是定时器3的事件
    {
        switch (judge_state) // 根据按键状态进行不同的处理
        {
            case 0: // 初始状态
            {
                if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)==0) // 检测按键是否按下
                {
                    judge_state=1; // 进入按键按下状态
                    key_time=0; // 按键计时清零
                }
                break;
            }
            case 1: // 按键按下状态
            {
                if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)==0) // 继续检测按键是否按下
                {
                    judge_state=2; // 进入按键确认按下状态
                    key_num=1; // 按键确认按下,设置按键编号为1
                }
                else 
                    judge_state=0; // 按键未按下,返回初始状态
    

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

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

相关文章

windows程序设计课程作业-1

目录 1、作业内容 2、主要思路 (1)写接口 (2)写类具体实现接口 (3)声明委托 (4)创建实例 (5)实例化委托 3、难点分析 1)想明白接口的作用 2)委托的作用 4、实现代码 5、运行结果 1、作业内容 使用 C# 编码(涉及类、接口、委托等关…

Android Studio学习10——资源res的使用

一、String,StringArray的使用 一次修改,多出生效 String StringArray 二、color的使用 颜色代码对应表 和上面的相似用法 三、Dimen(尺寸)的使用 用的少,一般直接写尺寸 四、如何写一个drawable作为背景 五、如何写一个可以改变的drawable(按钮按下…

python爬虫———post请求方式(第十四天)

🎈🎈作者主页: 喔的嘛呀🎈🎈 🎈🎈所属专栏:python爬虫学习🎈🎈 ✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天…

【Qt 学习笔记】如何在Qt中打印日志 | qDebug的使用 | Assistant的使用

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 如何在Qt中打印日志 | qDebug的使用 文章编号:Qt 学习笔记…

全文更新:什么是Power Path?充电时是充电器供电还是电池供电?

原文来自微信公众号:工程师看海,与我联系:chunhou0820 看海原创视频教程:《运放秘籍》 昨天的文章误删了一部分,很多同学留言想看全文,现补充、更新如下: 前段时间,交流群里有位同学…

【群智能算法改进】一种改进的鹦鹉优化算法 鹦鹉优化器 IPO算法【Matlab代码#73】

文章目录 【获取资源请见文章第5节:资源获取】1. 原始鹦鹉优化算法PO2. 改进后的IPO算法2.1 自适应切换因子2.2 混合柯西和高斯变异 3. 部分代码展示4. 仿真结果展示5. 资源获取 【获取资源请见文章第5节:资源获取】 1. 原始鹦鹉优化算法PO 鹦鹉优化算法…

由王雅贤带你深入《DBWGLX vs Ethan_Wang》

vs是versus。 (百度收录我DBWG🙏🙏🙏) 算来篇自传吧。像自我介绍和简历我是完全没写过喵~ 2024年4月6日12:44:53書 本命王雅贤,DBWGLX我的微信号,至于什么意思,吊臂王锅的意思&am…

ARM FVP平台的terminal窗口大小如何设置

当启动ARM FVP平台时,terminal窗口太小怎么办?看起来非常累眼睛,本博客来解决这个问题。 首先看下ARM FVP平台对Host主机的需求: 通过上图可知,UART默认使用的是xterm。因此,我们需要修改xterm的默认字体设…

sql语句如何在MySQL中执行?

我们先来对MySQL的基础结构进行分析 一、 MySQL 基础架构分析 1.1 MySQL 基本架构概览 下图是 MySQL 的一个简要架构图,从下图你可以很清晰的看到用户的 SQL 语句在 MySQL 内部是如何执行的。 简单来说 MySQL 主要分为 Server 层和存储引擎层: Server…

性能分析--内存知识

内存相关知识 计算机中与CPU进行数据交换的桥梁。内存的速度,比CPU的速度要慢很多。比磁盘速度要快很多。内存中存放数据,一旦断电就会消失。linux系统的 /proc路径下的文件,都是内存文件。内存大小,一般 是GB为单位。 现在都操作…

【Pt】马灯贴图绘制过程 04-玻璃脏迹

目录 效果 步骤 一、透明玻璃 二、烟熏痕迹 三、粗糙 四、浮尘 效果 步骤 一、透明玻璃 1. 打开纹理集设置,着色器链接选择“新的着色器链接” 在着色器设置中可以看到此时名称为“Main shader (Copy)” 这里修改名称为“玻璃” 在…

【加密周报】比特币“强烈看涨”信号来了!巨鲸们正疯狂囤积稳定币!SEC呼吁公众对以太币ETF提供意见!

在过去一周里,比特币价格经历了一段下跌,并在随后出现了一些反弹迹象。与此同时,链上数据显示,巨鲸们在囤积稳定币,预示着“强烈的看涨情绪”。以太坊方面,美国证券交易委员会(SEC)已…

异常练习题

第一题:分析题 package chapter09_exception_teacher.src.com.atguigu05.exer.exer2;/*** 输出结果:* 进入方法A* 用A方法的finally* 制造异常* 进入方法B* 调用B方法的finally** author shkstart* create 0:57*/ public class ReturnExceptionDemo {sta…

【算法题】树节点的第 K 个祖先

题目: 给你一棵树,树上有 n 个节点,按从 0 到 n-1 编号。树以父节点数组的形式给出,其中 parent[i] 是节点 i 的父节点。树的根节点是编号为 0 的节点。 树节点的第 k 个祖先节点是从该节点到根节点路径上的第 k 个节点。 实现…

算法 ST表

思想(本质为dp): 题目AcWing1270. 数列区间最大值: 1270. 数列区间最大值 - AcWing题库 输入一串数字,给你 M 个询问,每次询问就给你两个数字 X,Y要求你说出 X到 Y这段区间内的最大数。 输入格式 第一…

Java数据结构队列

队列(Queue) 概念 队列的使用 注意:Queue是个接口,在实例化时必须实例化LinkedList的对象,因为LinkedList实现了Queue接口。 import java.util.LinkedList; import java.util.Queue;public class Test {public static void main(String[]…

初识二叉树和二叉树的基本操作

目录 一、树 1.什么是树 2. 与树相关的概念 二、二叉树 1.什么是二叉树 2.二叉树特点 3.满二叉树与完全二叉树 4.二叉树性质 相关题目: 5.二叉树的存储 6.二叉树的遍历和基本操作 二叉树的遍历 二叉树的基本操作 一、树 1.什么是树 子树是不相交的;…

windows server 2019-DHCP服务器搭建

一、DHCP的原理: 1,获得ip的过程 客户机发送请求给所有DHCP服务器 DHCP服务器收到请求后发送响应包给客户机 客户机收到响应包(第一个到达的)后,检验响应包里面的ip能不能用(使用ping的方式&#xff0c…

Ideal的使用技巧

一、springcloud项目如何将多个服务放到services中一起启动 1、打开ideal,再view -> Tool Windows -> services 2、在services界面 找到 run configuration type -> springboot即可 二、配置临时的启动参数 1、在edit configurations中 2、选择相应的服务…

网络原理 - HTTP / HTTPS(5)——https协议

目录 一、HTTPS是什么 为什么要进行加密 二、“加密” 是什么 三、HTTPS的工作过程 (1)引入对称加密 对称密钥的特点: (2)引入非对称加密 非对称加密的特点: (3)中间人攻击…