第15届蓝桥杯嵌入式省赛准备第二天总结笔记(使用STM32cubeMX创建hal库工程+按键输入)

news2024/11/16 3:21:00

一.查看电路图

按键是使用的PB0,PB1,PB2,PA0四个引脚,然后使用CubeMX配置引脚,4个脚都配置为输入模式和上拉。

程序生成之后把不用的删掉,需要的留下,这里我把函数名改了。

然后写按键扫描读取程序,这里参考的正点原子的按键输入程序(感谢原子哥感谢左神)。

这是点C程序:

#include "key.h"

void Key_Init(void)
{

  GPIO_InitTypeDef GPIO_InitStruct = {0};
	
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();

  /*Configure GPIO pin : PA0 */
  GPIO_InitStruct.Pin = GPIO_PIN_0;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  /*Configure GPIO pins : PB0 PB1 PB2 */
  GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}

/*输入:1|0 模式 1为连续按,0为不连续按*/

unsigned char Key_Scan(unsigned char mode)
{
	static unsigned int key_mode;
	if(mode == 1)key_mode = 1;
	if(key_mode == 1&&(KEY0 == 0||KEY1 == 0||KEY2 == 0||KEY3 == 0))
	{
		HAL_Delay(10);
		key_mode = 0;
		if(KEY0 == 0){return KEY0_FLG;}
		else if(KEY1 == 0){return KEY1_FLG;}
		else if(KEY2 == 0){return KEY2_FLG;}
		else if(KEY3 == 0){return KEY3_FLG;}
	}
	else if(KEY0 == 1||KEY1 == 1||KEY2 == 1||KEY3 == 1) key_mode = 1;
	return 0;
}

这是点H程序:

#ifndef __KEY_H
#define __KEY_H
#include "main.h"

#define KEY0 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)
#define KEY1 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)
#define KEY2 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2)
#define KEY3 HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)

#define KEY0_FLG 1
#define KEY1_FLG 2
#define KEY2_FLG 3
#define KEY3_FLG 4

void Key_Init(void);
unsigned char Key_Scan(unsigned char mode);
#endif

这是主程序:滴答定时器10ms扫描一次,按键1按下的话LED显示0x55,按键2按下的话LED显示0xAA;Led_Disp程序是我自己写的,新手朋友注意

unsigned char key; 
int main(void)
{
  HAL_Init();
  SystemClock_Config();
	
  MX_GPIO_Init();
	LCD_Init();
	LED_Init();
	Key_Init();
  while (1)
  {
		if(uwTick % 10 == 0)
		{
			key=Key_Scan(0);
		}
		if(key == 1)
		{
      Led_Disp(0x55);
		}
		if(key == 2)
		{
     Led_Disp(0xaa);
		}
		  

  }

}

接下来看效果:

按键演示

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

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

相关文章

【Linux】—— 命名管道详解

命名管道是一种在操作系统中用于进程间通信的机制,它允许不同的进程之间通过管道进行数据交换。与匿名管道相比,命名管道具有更多的灵活性和功能。在本博客中,我们将深入探讨命名管道的概念、用途以及如何在编程中使用它们。 目录 &#xff…

【cucumber】cucumber-reporting生成测试报告

原始的cucumber report 比较粗糙 我们可以通过cucumber-reporting 插件对报告进去优化 在pom.xml里面添加cuccumber-reporting 插件 <!-- 根据 cucumber json文件 美化测试报告--><dependency><groupId>net.masterthought</groupId><artifactId>…

何为PyTorch?

PyTorch的名字来源于它的功能和设计哲学。"Py"代表Python&#xff0c;因为PyTorch是一个基于Python的深度学习库&#xff0c;它充分利用了Python语言的灵活性和易用性&#xff0c;为开发者提供了简洁而强大的接口。“Torch”则代表其前身—— Torch&#xff0c;这是一…

瓦片地图游戏开发的底层代码

原理&#xff1a; 二维数组存储每个瓦片序号 然后有一个缓冲区存储瓦片图片&#xff0c; 最后连续采样缓冲区&#xff0c;粘贴到屏幕上&#xff0c; 而缓冲区数据随着采样越界再重新更新 #include <graphics.h> #include <stdio.h>// 默认游戏地图 int map[20…

使用vue-pdf插件加载pdf

安装&#xff1a; // 安装这个版本&#xff0c;其它版本会有千奇百怪的错&#xff0c;这个版本和4.0.0都是可以的 cnpm install vue-pdf4.2.0// 安装pdfjs-dist cnpm install pdfjs-dist2.5.207 使用&#xff1a; // 我的css样式是pxToRem&#xff0c;友友们使用可能样式会有…

二叉树题目:二叉树的序列化与反序列化

文章目录 题目标题和出处难度题目描述要求示例数据范围 前言解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题&#xff1a;二叉树的序列化与反序列化 出处&#xff1a;297. 二叉树的序列化与反序列化 难度 8 级 题目描述 要求 序列…

大数据开发之Scala

第 1 章&#xff1a;scala入门 1.1 概述 scala将面向对象和函数式编程结合成一种简洁的高级语言 特点 1、scala和java一样属于jvm语言&#xff0c;使用时都需要先编译为class字节码文件&#xff0c;并且scala能够直接调用java的类库 2、scala支持两种编程范式面向对象和函数式…

MySQL索引优化:深入理解索引下推原理与实践

随着MySQL的不断发展和升级&#xff0c;每个版本都为数据库性能和查询优化带来了新的特性。在MySQL 5.6中&#xff0c;引入了一个重要的优化特性——索引下推&#xff08;Index Condition Pushdown&#xff0c;简称ICP&#xff09;。ICP能够在某些查询场景下显著提高查询性能&a…

JVM系列-3.类的生命周期

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring原理、JUC原理、Kafka原理、分布式技术原理、数据库技术、JVM原理&#x1f525;如果感觉博主的文…

想找一个没有中间商的账户,很简单,昂首资本推给你

各位投资者都知道&#xff0c;交易的成本决定我们是否盈利&#xff0c;那么有没有一个没有中间商的账户呢&#xff1f;当然有了&#xff0c;昂首资本这就推给你。 在交易的时候&#xff0c;银行为投资者提供兑换业务&#xff0c;并从中收取费用。至于经纪商&#xff0c;它是交…

爬虫requests+综合练习详解

Day2 - 1.requests第一血_哔哩哔哩_bilibili requests作用&#xff1a;模拟浏览器发请求 requests流程&#xff1a;指定url -> 发起请求 -> 获取响应数据 -> 持续化存储 爬取搜狗首页的页面数据 import requests# 指定url url https://sogou.com # 发起请求 resp…

GPS位置虚拟软件 AnyGo mac激活版

AnyGo for Mac是一款一键将iPhone的GPS位置更改为任何位置的强大软件&#xff01;使用AnyGo在其iOS或Android设备上改变其GPS位置&#xff0c;并在任何想要的地方显示自己的位置。这对那些需要测试应用程序、游戏或其他依赖于地理位置信息的应用程序的开发人员来说非常有用&…

idea远程服务调试

1. 配置idea远程服务调试 这里以 idea 新 ui 为例&#xff0c;首先点击上面的 debug 旁边的三个小圆点&#xff0c;然后在弹出的框框中选择 “Edit”&#xff0c;如下图所示。 然后进入到打开的界面后&#xff0c;点击左上角的 “” 进行添加&#xff0c;找到 “Remote JVM De…

Java 面向对象 04 构造方法(黑马)

这是以前没有赋值的时候&#xff0c;在&#xff08;&#xff09;里面是空的&#xff1a; 代码&#xff1a; 左边的是调用的空参构造&#xff0c;但是右边没有写空参构造&#xff0c;并不会报错&#xff0c;因为虚拟机会自己给外面一个空参构造的方法&#xff0c;就是这样的&am…

详谈c++智能指针!!!

文章目录 前言一、智能指针的发展历史1.C 98/03 的尝试——std::auto_ptr2.std::unique_ptr3.std::shared_ptr4.std::weak_ptr5.智能指针的大小6.智能指针使用注意事项 二、智能指针的模拟实现三、C11和boost中智能指针的关系 前言 C/C 语言最为人所诟病的特性之一就是存在内存…

《SPSS统计学基础与实证研究应用精解》视频讲解:SPSS数据文件读取

《SPSS统计学基础与实证研究应用精解》4.3 视频讲解 视频为《SPSS统计学基础与实证研究应用精解》张甜 杨维忠著 清华大学出版社 一书的随书赠送视频讲解4.3节内容。本书已正式出版上市&#xff0c;当当、京东、淘宝等平台热销中&#xff0c;搜索书名即可。本书旨在手把手教会使…

码农维权——案例分析之违法解除劳动合同(一)

目录 一、背景 二、举证责任方&#xff1a;需要公司举证 三、员工可以自证没有严重违反公司规章制度吗&#xff1f; 四、公司解除劳动合同的程序合法吗&#xff1f; 五、写在最后 一、背景 当前互联网行业普遍以”变相裁员“为目的&#xff0c;公司采用各种手段”逼迫“员…

<信息安全>《1 国内主要企业网络安全公司概览(一)》

1 深信服科技股份有限公司 信息内容LOGO成立日期2000年12月25日成立。总部深圳市南山区学苑大道1001号南山智园A1栋是否上市深信服[300454]A股市值265亿主要产品企业级网络安全云计算IT基础设施数据通信物联网员工规模9000人分支机构全球50多个荣誉国家级高新技术企业、中国软…

Python基础第七篇(Python的文件操作)

文章目录 一、文件编码二、文件的读取操作1.操作代码2.读出结果 三、文件的写出操作1.源代码2.读出结果 四、文件的追加操作1.源代码2.读出结果 这篇文章旨在深入浅出地介绍Python在文件操作上的能力&#xff0c;包括文件的编码、读取和写入等基本操作。内容丰富、易于理解&…

Macos flatter(用于快速LLL)本地编译安装(解决安装过程各种疑难杂症)

flatter是一个开源项目&#xff0c;能大大提高LLL的速度&#xff0c;项目提供的安装文档适用于Ubuntu&#xff0c;但是在macos上安装&#xff0c;总会遇到各种各样的问题&#xff0c;这里记录下所踩坑&#xff0c;帮助大家快速在macos上安装flatter。 文章目录 1.安装依赖库&am…