蓝桥杯 stm32 按键点灯 CubeMX

news2024/11/17 19:41:58

注:我们使用的是 HAL

文章目录

  • 前言
  • 一、按键 原理图:
  • 二、按键CubeMX配置:
  • 三、代码讲解
      • 1. 读按键:( 三行代码)
      • 2.按键消抖:
      • 3,按键点灯:
  • 总结
      • 实验效果:


前言

一、按键 原理图:

在这里插入图片描述
从图中我们可以看到有 4个按键,B1 , B2 , B3 , B4

对应的 GPIO 端口是 PB0 , PB1, PB2 ,PA0

当按键按下,IO 口读到低电平;按键弹起,IO 口读到高电平

LED 的原理图,CubeMX 配置,以及代码讲解都在我的上篇文章 里详细讲解了,这 篇文章主要为大家讲解 按键 的使用。
蓝桥杯嵌入式之 LED 闪烁


二、按键CubeMX配置:

(1)设置 IO 端口是 PB0 , PB1, PB2 ,PA0输入模式。
在这里插入图片描述

(2)设置 RCC

在这里插入图片描述

(3)设置时钟:选用内部时钟,80 MHZ.

在这里插入图片描述

(4)设置工程模式和版本。

在这里插入图片描述

(5)选取加入.c /.h文件(便于编写代码)

在这里插入图片描述

(6) 创建工程
在这里插入图片描述


三、代码讲解

1. 读按键:( 三行代码)

Trg 代表 单次触发。
Cont 表示 长按。
KB1 ~ KB4分别对应 按键 B1 ~ B4

#define  KB1  HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)  //B1
#define  KB2  HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)  //B2
#define  KB3  HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2)	//B3
#define  KB4  HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)	//B4
#define  KEYPORT   KB1 | (KB2<<1) |(KB3<<2) |(KB4<<3) | 0xf0

u8 Trg;   //全局变量,单次触发
u8 Cont;  //全局变量,长按

/* 三行代码读按键值 */
void Key_Read(void)
{
	u8 ReadData = (KEYPORT)^0xff;
	Trg = ReadData & (ReadData ^ Cont);
	Cont = ReadData;
}


2.按键消抖:

通常我们使用的都是机械弹性开关,当机械触点断开,闭合时,由于机械点的弹性作用,一个按键在按下,松开时不会马上接通,断开
在这里插入图片描述

为了确保按键的一次闭合一次断开只响应一次,需要进行消抖处理。

按键的抖动是由按键的机械特性决定的,一般都会在 10 ms 以内。

按下按键,10 ms 后读取按键值。

    __IO uint32_t keyTick = 0;

	while(1)
	{
		if(uwTick - keyTick < 10) //10ms 的机械消抖
		 return ;
		
		keyTick = uwTick;  //便于下一次按下按键,读取数值
		Key_Read();   //读取按键值
	}
	

uwTick 是延迟函数 HAL_Delay 里面的一个计时变量。 默认是 1ms 增加一次。

按下按键后,uwTick 开始计数,10 ms 后读取按键值。

keyTick = uwTick,便于下一次按下读取数值。

__IO uint32_t uwTick;

3,按键点灯:

可以通过 Trg & 0x01 按位进行判断是哪个按键按下。
例如:

	if(Trg & 0x01)     //按下B1
	{
		LED_Control(0x10);  //点亮 LED5 
	}
	 if(Trg & 0x02)  //B2
	{
		LED_Control(0x20);  //点亮 LED6 
	}

LED_Control ( 0x10 ) ; 该函数为点亮 LED 灯的函数,前面提到了在我的上篇文章的 例程代码 中已详细讲解。蓝桥杯嵌入式之 LED 闪烁

总结

实验效果:

实验效果录制在 B 占,在下面网址:
https://www.bilibili.com/video/BV1s24y1Y7uZ/?vd_source=986c364d205fa1124b337bc665f57c4f

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

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

相关文章

基于yolov5-v7.0开发构建银行卡号实例分割检测识别分析系统

在之前的文章中我们已经做了很多基于yolov5完成实例分割的项目&#xff0c;感兴趣的话可以自行移步阅读&#xff1a;《基于YOLOv5-v7.0的药片污染、缺损裂痕实例分割检测识别分析系统》《基于yolov5-v7.0开发构建裸土实例分割检测识别模型》《基于yolov5-v7.0开发实践实例分割模…

CSDN第24期周赛(记录一下)

▶ 爱要坦荡荡 (163.com) 每一道题都有思路&#xff0c;可是只有一道Accepted100%&#xff0c;一道很简单的50%&#xff0c;一道输出错误10%并报错Segmentation Fault&#xff0c;一道字符串有思路但是没时间了 一&#xff0c;蛇皮矩阵 Accepted 10% 报错Segmentation Fault…

2、矩阵介绍

目录 一、矩阵的构造 二、矩阵大小及结构的改变 三、矩阵下标的引用 1.矩阵下标访问单个矩阵元 2.线性引用矩阵元 3.访问多个矩阵元素 四、矩阵信息的提取 1.矩阵结构 2.矩阵大小 3.矩阵的数据类型 一、矩阵的构造 矩阵的构建方式有两种&#xff0c;一种与单元数组相…

【寒假每日一题】DAY.7 有序序列判断

牛客网例题&#xff1a;点我做题 【❤️温馨提示】先做题&#xff0c;再看讲解效果更佳哟 描述 输入一个整数序列&#xff0c;判断是否是有序序列&#xff0c;有序&#xff0c;指序列中的整数从小到大排序 或者从大到小排序(相同元素也视为有序)。输入描述&#xff1a; 第一行…

【C++】stack、queue的模拟实现及deque介绍

一、stack 1. 以vector作为底层容器 从栈的接口中可以看出&#xff0c;栈实际是一种特殊的vector&#xff0c;因此使用vector完全可以模拟实现stack。 由于stack的所有工作是底层容器完成的&#xff0c;而这种具有“修改某物接口&#xff0c;形成另一种风貌”的性质&#xf…

Dubbo学习

文章目录1.概念1.1 Dubbo特性1.2 设计架构2.快速开始2.1需求假设2.2.工程架构2.3 创建模块2.3.1 gmall-interface—公共接口层2.3.2 gmall-user—用户模块2.3.3 gmall-order-web—订单模块2.3.4 测试结果2.3.5 使用Dubbo改造2.3.6 注解版3.监控中心4.整合SpringBoot5.Dubbo配置…

高性能网络设计专栏-网络编程

以下是在零声教育的听课记录。 如有侵权&#xff0c;请联系我删除。 链接&#xff1a;零声教育官网 一、网络io与select&#xff0c;poll。epoll 网络IO &#xff0c;会涉及到两个系统对象 一个是 用户空间 调用 IO 的进程或者线程&#xff0c;另一个是 内核空间的 内核系统&a…

K_A11_007 基于STM32等单片机驱动K型热电偶( MAX6675) 串口与OLED0.96双显示

[TOC](K_A11_007 基于STM32等单片机驱动K型热电偶( MAX6675) 串口与OLED0.96双显示) 一、资源说明 单片机型号测试条件模块名称代码功能STC89C52RC晶振11.0592MK型热电偶( MAX6675) 模块STC89C52RC驱动K型热电偶( MAX6675)模块串口与OLED0.96双显示STM32F103C8T6晶振8M/系统时…

后端架构学习

心理预期 1. 什么是后端服务的架构&#xff1f;怎么去理解后端架构这个词&#xff1f; 学习架构的目的&#xff1a;可以更高效的解决复杂的业务问题和技术问题。对架构设计的一知半解会导致&#xff0c;设计不足或者多度设计的现象。架构师思考问题的角度 按出发点划分 从系统…

Linux虚拟机忘记密码

Linux虚拟机忘记密码 使用虚拟机过程中&#xff0c;我们有时会忘记root的登录密码&#xff0c;我们需要进入救援模式去命令passwd更改新的密码。 编辑模式(e) 在首页&#xff0c;按住e,进入编辑模式&#xff0c;找到LANGzh_CN.UTF-8&#xff0c;在末尾加上 init/bin/sh 挂载…

学长教你学C-day10-C语言数组

“同学们&#xff0c;我们前面讲过了变量和数据类型&#xff0c;我们来复习一下&#xff0c;用C语言变量存储数据1~10&#xff0c;然后再输出。小明小红你们上黑板来写&#xff0c;其他人写纸上就可以。” 小明和小红走向讲台拿起粉笔写下&#xff1a; 小红&#xff1a; #incl…

VS操作笔记1:添加项目与查看定义

1 在解决方案中添加项目 右击解决方案 点击“添加”——“新建项目”—— 创建新项目的方法与创建第一个时一样 创建之后&#xff0c;项目结构如下&#xff1a; 现在是两个项目&#xff0c;第一个c_test项目名称字体明显加粗&#xff0c;说明这是主项目&#xff0c;编译的时…

【Go基础】切片

切片 1. 切片的定义 切片&#xff08;slice&#xff09;是Golang中独有的数据类型。 数组有特定的用处&#xff0c;但是有不足之处 &#xff1a;运行时长度不可变。切片是随处可变的&#xff0c;它构建在数组之上&#xff0c;并且提供更强大的能力和便捷。 切片&#xff08…

vite构建vue项目目录简介

文章目录1.项目目录介绍2.开发插件安装3.vue组件中的语法规范(SFC 语法规范)4.npm run dev命令执行过程1.项目目录介绍 public 下面的不会被编译 可以存放静态资源assets 下面可以存放可编译的静态资源components 下面用来存放我们的组件App.vue 是全局组件main ts 全局的ts文…

react基础Day01-React概述脚手架搭建JSX组件

React基础知识点 目标 能够说出React是什么能够说出React的特点能够掌握React的基本使用能够使用React脚手架 什么是React &#xff08;★★★&#xff09; React是一个用于构建用户界面的javaScript库&#xff0c;起源于facebook的内部项目&#xff0c;后续在13年开源了出…

Mysql入门技能树-时间日期函数(二)-练习篇

EXTRACT 关于 Extract 操作和其它日期时间函数的对应关系&#xff0c;下列说法正确的是&#xff1a; 1.extract(mirosecond from date) 相当于 ms(date) 2.extract(second from date) 相当于 second(date) 3.extract(minute from date) 相当于 minute(date) 4.extract(hour f…

IO流(二)

1.对象流-ObjectInputStream和ObjectOutputStream&#xff08;处理流包装流&#xff09;的基本原理 看一个需求&#xff1a; 1.将int num100这个int数据保存到文件中&#xff0c;注意不是100数字&#xff0c;而是int 100,并且&#xff0c;能够从文件中直接恢复int 100 2.将Dog …

Excel工具类实现——基于poi5.2.3

初衷仅是因为网上的Excel工具类不是太老旧的方法&#xff0c;就是不是很满足我想法&#xff0c;就想要自己搞一个&#xff0c;不过还不支持合并单元格等复杂的操作&#xff0c;后续看看能不能优化&#xff0c;有大神有更好的方法&#xff0c;可以公众号联系我&#xff0c;让我学…

基于jsp+mysql+Spring的SpringBoot美容院预约管理系统设计和实现

基于jspmysqlSpring的SpringBoot美容院预约管理系统设计和实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文…

编制万年历的历程

初入编程之道的学子大都试编过万年历。万年历有二种&#xff1a;一为只有西历的月历&#xff0c;另一为有农历对照的月历或日历。编写万年历程序可以练练手&#xff0c;加深对编程语言的理解。记得我初入此道是在1994年&#xff0c;我那时刚买了486电脑&#xff0c;也刚开始有视…