当前位置: 首页 > news >正文

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

一.查看电路图

按键是使用的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 4void 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.lryc.cn/news/285699.html

相关文章:

  • 【论文阅读】One For All: Toward Training One Graph Model for All Classification Tasks
  • Python多线程爬虫——数据分析项目实现详解
  • unity全局音量管理/全局音量设置与音量设置界面(含静音功能)
  • C++ vector 数组转换、查找、最大最小值、排序、排行的几种用法
  • vmware 安装Rocky-9.3系统
  • C++提高编程——模板
  • 单线程、同步、异步、预解析、作用域、隐式全局变量、对象创建、new
  • 《设计模式的艺术》笔记 - 外观模式
  • sql 查询时间范围内的数据
  • TestNG中的@BeforeSuite注释
  • [学习笔记]刘知远团队大模型技术与交叉应用L3-Transformer_and_PLMs
  • 图像处理工具包Pillow的使用分享
  • python进程间通信——命名管道(Named Pipe、FIFO)
  • 03 OSPF 学习大纲
  • HJ7 取近似值【C语言】
  • php基础学习之常量
  • 2024最新面试经验分享
  • 《WebKit 技术内幕》之八(1):硬件加速机制
  • 子表单扫码录入,显著节省填写时间
  • 【Redis】Ubuntu安装配置
  • idea远程服务调试
  • Google Colab运行Pytorch项目
  • Android Studi安卓读写NDEF智能海报源码
  • Demo: 实现PDF加水印以及自定义水印样式
  • 每日OJ题_算法_二分查找①_力扣704. 二分查找
  • 【Python】--- 基础语法(1)
  • 详解gorm中DB对象的clone属性
  • 数据库(MySQL库表操作)
  • 内网穿透的应用-如何使用Docker部署Redis数据库并结合内网穿透工具实现公网远程访问
  • 计算机网络复试