第十四届单片机嵌入式蓝桥杯

一、CubeMx配置

(1)LED配置

(1)LED灯里面用到了SN74HC573ADWR锁存器,这个锁存器有一个LE引脚,这个是我们芯片的锁存引脚(使能引脚),由PD2这个端口来控制的

(2)LD1~LD8这八个LED灯由PC8~PC15这八个端口控制,且因为LD左端通过300欧的电阻连到了VDD(电源的正引脚) ,若想要点亮LED灯的话,则需要给PC8~PC15低电平,这样灯才会亮,电流会从VDD顺着LED流到PC8

(2)定时器配置

         根据题目需要配置PA1和PA7的定时器端口

         因为通过PA1引脚输出频率、占空比可调节的脉冲信号,所以预分频器可以不用写,就直接不分频

 

         通过PA7引脚完成脉冲捕获功能

(3)按键配置

(4)设置一个用于中断任务的定时器(1ms的定时器)并且使能其更新中断

 (5)使能中断

(6)ADC配置

         因为题目是通过R37来调节占空比的 ,但是R37是CubeMx中的PB15,所以需要用它来配置ADC

 二、keil5配置

(1)添加lcd文件

        可以看前面的csdn看看怎么要添加文件

(2)添加头文件
#include "lcd.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h" //字符串
#include "math.h"   //数据库

 (3)不要忘了开下载的魔术棒

三、做题代码

3.1

(1)按键按下切换界面的代码【一般的】
//*********************这些都是写在int main 函数外面的代码********************************//按键有关的定义uint8_t key_state=0;    //按键的模式:0,1,2,3
int keypresstime[4]={0};//一共有四个按键//按键的函数(底层)char Key_scan(void) //这里的函数要用char 不能用void 因为有返回值
{if(!HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0))keypresstime[0]++;
//如果按键按下,就开始计时(前面有一个!是代表非0)else if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)&&keypresstime[0]>20){keypresstime[0]=0;return 1;}
//如果按键松开,而且此时的按键时长>20ms(也相当于是按下的消抖)。那么按键的时间清零且此时回到按键按下前的状态else if(!HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1))keypresstime[1]++;else if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)&&keypresstime[1]>20){keypresstime[1]=0;return 2;}else if(!HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2))keypresstime[2]++;else if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2)&&keypresstime[2]>20){keypresstime[2]=0;return 3;}else if(!HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0))keypresstime[3]++;else if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)&&keypresstime[3]>20){keypresstime[3]=0;return 4;}else {keypresstime[0]=0;keypresstime[1]=0;keypresstime[2]=0;keypresstime[3]=0;} //如果什么都没发生return 0;
}//**********************************切记:一定要打开定时器********************************
HAL_TIM_Base_Start_IT(&htim6);//***********************************这些是放在while循环里面的函数************************if(Flag_lcd==0)LCD_data();else if (Flag_lcd==1)LCD_para();else if (Flag_lcd==2)LCD_recd();LCD_show();//如果不添加这个的话,就没办法显示界面的内容//上面的是显示界面if(key_state==1){Flag_lcd++;Flag_lcd=Flag_lcd>2?0:Flag_lcd;//如果>2的话,那么就把Flag_lcd变成0//当然这一句也可以变成一个if循环来表达}//这个是按键按下切换界面的代码
(2)按键按下切换界面的代码【最好的】

         其实不太理解这个底层函数的逻辑

//*********************这些都是写在int main 函数外面的代码//按键有关的定义struct keys
{unsigned char judge_sta;bool key_sta;bool single_flag;bool long_flag;unsigned int key_time;
};//定义几个标志位struct keys key[4]={0,0,0};    //有四个按键//按键的底层函数(放在中断回调函数里面)void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if(htim->Instance==TIM6)//开的中断的定时器{//按键部分key[0].key_sta=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0);key[1].key_sta=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1);key[2].key_sta=HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2);key[3].key_sta=HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0);for(int i=0;i<4;i++){switch (key[i].judge_sta){case 0:  //消抖{if(key[i].key_sta==0){key[i].judge_sta=1;key[i].key_time=0;}}break;case 1:{if(key[i].key_sta==0)  ///确定按下{key[i].judge_sta=2;}else key[i].judge_sta=0;}break;case 2:{if(key[i].key_sta==1){key[i].judge_sta=0;					if(key[i].key_time<70){key[i].single_flag=1;  //单机}}else {key[i].key_time++;if(key[i].key_time>70)  key[i].long_flag=1;  //长按}}break;}}}}//**********************************切记:一定要打开定时器
HAL_TIM_Base_Start_IT(&htim6);//***********************************这些是放在while循环里面的函数if(Flag_lcd==0)LCD_data();else if (Flag_lcd==1)LCD_para();else if (Flag_lcd==2)LCD_recd();LCD_show();//如果不添加这个的话,就没办法显示界面的内容if(Flag_lcd==0)LCD_data();else if (Flag_lcd==1)LCD_para();else if (Flag_lcd==2)LCD_recd();LCD_show();//如果不添加这个的话,就没办法显示界面的内容

3.2

四、不理解的代码

(1)

五、出现问题的步骤

(1)LCD不显示界面 

         这个问题是因为这个频率最开始设置的是8,应该设置的频率是24

 (2)按键无法执行切换页面的任务

         按键无法执行相应的任务是因为这几个配置我最开始配置成了GPIO_Output

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

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

相关文章

【前端】如何制作自己的网站(7)

以下内容接上文。 结合图片的超链接 将img元素作为内容&#xff0c;放在a元素中。即可为图片添加一个超链接。 例如右边的代码&#xff0c;点击头像就会打开“aboutme.html“。 点击右边的图片试试&#xff5e; 两个非文本元素——图片与超链接。 从现在开始&#xff0…

API项目3:API签名认证

问题引入 我们为开发者提供了接口&#xff0c;却对调用者一无所知 假设我们的服务器只能允许 100 个人同时调用接口。如果有攻击者疯狂地请求这个接口&#xff0c;那是很危险的。一方面这可能会损害安全性&#xff0c;另一方面耗尽服务器性能&#xff0c;影响正常用户的使用。…

Golang | Leetcode Golang题解之第492题构造矩形

题目&#xff1a; 题解&#xff1a; func constructRectangle(area int) []int {w : int(math.Sqrt(float64(area)))for area%w > 0 {w--}return []int{area / w, w} }

DeBiFormer:带有可变形代理双层路由注意力的视觉Transformer

https://arxiv.org/pdf/2410.08582v1 摘要 带有各种注意力模块的视觉Transformer在视觉任务上已表现出卓越的性能。虽然使用稀疏自适应注意力&#xff08;如在DAT中&#xff09;在图像分类任务中取得了显著成果&#xff0c;但在对语义分割任务进行微调时&#xff0c;由可变形…

【论文精读】RELIEF: Reinforcement Learning Empowered Graph Feature Prompt Tuning

RELIEF: Reinforcement Learning Empowered Graph Feature Prompt Tuning 前言AbstractMotivationSolutionRELIEFIncorporating Feature Prompts as MDPAction SpaceState TransitionReward Function Policy Network ArchitectureDiscrete ActorContinuous ActorCritic Overall…

Firefox火狐浏览器打开B站视频时默认静音

文章目录 环境问题解决办法 环境 Windows 11家庭版Firefox浏览器 131.0.2 (64 位) 问题 用Firefox浏览器打开B站的视频时&#xff0c;默认是静音播放的&#xff1a; 而其它浏览器&#xff0c;比如Chrome和Edge&#xff0c;默认是带声音播放的。 虽然不是什么大问题&#xf…

二叉树与堆讲解

目录 1.树的概念及结构 1.树的概念 2.树的相关概念 3.树的表示 2.二叉树 1.概念 2.特殊的二叉树 1.满二叉树 2.完全二叉树 3.二叉树的性质 4.二叉树的存储结构 1.顺序结构 2.链式存储 3.堆 1.堆的概念及结构 2.堆的实现 1.堆的创建 2.堆的初始化&#xff08;H…

Javascript算法——双指针法移除元素、数组去重、比较含退格字符、有序数组平方

数组移除元素&#xff08;保证数组仍连续&#xff09; 暴力求解法&#xff08;两层for循环&#xff09;,length单词拼写错误❌二次嵌套for的length设置 /*** param {number[]} nums* param {number} val* return {number}*/ var removeElement function(nums, val) {let leng…

三、账号密码存储

使用Playfers存储 Unity本地持久化类Playerprefs使用详解 - PlaneZhong - 博客园 (cnblogs.com) 一、登陆界面切换 1、登陆界面的脚本&#xff08;机制类脚本&#xff09; 在这个UI上挂载一个脚本LoginWnd 先声明一下这个脚本&#xff0c;拖拽 2、在登录模块中调用 这里的l…

手写Spring IOC-简易版

目录 项目结构entitydaoIUserDaoUserDaoImpl serviceIUserServiceUserServiceImpl ApplicationContext 配置文件初始化 IOC 容器RunApplication 注解初始化 IOC 容器BeanAutowired Reference 项目结构 entity User Data NoArgsConstructor AllArgsConstructor Accessors(chai…

神经网络中使用的激活函数有什么用?

&#x1f381;&#x1f449;点击进入文心快码 Baidu Comate 官网&#xff0c;体验智能编码之旅&#xff0c;还有超多福利&#xff01;&#x1f381; &#x1f50d;【大厂面试真题】系列&#xff0c;带你攻克大厂面试真题&#xff0c;秒变offer收割机&#xff01; ❓今日问题&am…

最新仿蓝奏网盘系统源码 附教程

自带的蓝奏云解析&#xff0c;是之前的代码&#xff0c;截至发帖时间&#xff0c;亲测依旧有效&#xff0c;可以扒拉下来做蓝奏云解析接口。 使用方法&#xff1a;可以将文件上传至蓝奏云&#xff0c;然后通过此套系统&#xff0c;二次解析下载&#xff0c;不会暴露你的真实蓝…

PCL 点云配准-4PCS算法(粗配准)

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 加载点云数据 2.1.2 执行4PCS粗配准 2.1.3 可视化源点云、目标点云和配准结果 2.2完整代码 三、实现效果 3.1原始点云 3.2配准后点云 PCL点云算法汇总及实战案例汇总的目录地址链接…

扫雷(C 语言)

目录 一、游戏设计分析二、各个步骤的代码实现1. 游戏菜单界面的实现2. 游戏初始化3. 开始扫雷 三、完整代码四、总结 一、游戏设计分析 本次设计的扫雷游戏是展示一个 9 * 9 的棋盘&#xff0c;然后输入坐标进行判断&#xff0c;若是雷&#xff0c;则游戏结束&#xff0c;否则…

FPGA实现PCIE采集电脑端视频转SFP光口UDP输出,基于XDMA+GTX架构,提供4套工程源码和技术支持

目录 1、前言工程概述免责声明 2、相关方案推荐我已有的PCIE方案1G/2.5G Ethernet Subsystem实现物理层方案1G/2.5G Ethernet PCS/PMA or SGMII Tri Mode Ethernet MAC实现物理层方案 3、PCIE基础知识扫描4、工程详细设计方案工程设计原理框图电脑端视频PCIE视频采集QT上位机X…

VSCODE c++不能自动补全的问题

最近安装了vscode&#xff0c;配置了C/C扩展&#xff0c;也按照网上说的配置了头文件路径 我发现有部分头文件是没办法解析的&#xff0c;只要包含这些头文件中的一个或者多个&#xff0c;就没有代码高亮和代码自动补全了&#xff0c;确定路径配置是没问题的&#xff0c;因为鼠…

【GT240X】【3】Wmware17和Centos 8 安装

文章目录 一、说明二、安装WMware2.1 下载WMware2.2 安装2.3 虚拟机的逻辑结构 三、安装Centos3.1 获取最新版本Centos3.2 创建虚拟机 四、问题和简答4.1 centos被淘汰了吗&#xff1f;4.2 centos里面中文显示成小方块的解决方法4.3 汉语-英语输入切换4.4 全屏和半屏切换 五、练…

【图论】(一)图论理论基础与岛屿问题

图论理论基础与岛屿问题 图论理论基础深度搜索&#xff08;dfs&#xff09;广度搜索&#xff08;bfs&#xff09;岛屿问题概述 岛屿数量岛屿数量-深搜版岛屿数量-广搜版 岛屿的最大面积孤岛的总面积沉没孤岛建造最大人工岛水流问题岛屿的周长 图论理论基础 这里仅对图论相关核…

精英高匿ip的自述

大家好&#xff0c;我是精英高匿IP。在网络世界里&#xff0c;我有着自己独特的看家本领&#xff0c;今天我就让大家见识一下我的本事。 我是一个神秘的网络侠客&#xff0c;我在数据的江湖中穿梭自如且不留痕迹。大家可能好奇我为什么叫精英高匿IP。“精英”代表着我拥有卓越…

【命令操作】Linux上通过mdadm配置软RAID _ 统信 _ 麒麟 _ 方德

往期好文&#xff1a;【功能介绍】麒麟2403支持配置任务栏上的图标“从不合并”啦&#xff01; Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于如何在Linux系统上使用mdadm工具配置软件RAID&#xff08;Redundant Array of Independent Disks&#xff0c;独立磁…