蓝桥杯第15届真题解析

 

 

由硬件框图可以知道我们要配置LED 和按键、lcd,解决lcd引脚冲突

LED

先配置LED的八个引脚为GPIO_OutPut,锁存器PD2也是,然后都设置为起始高电平,生成代码时还要去解决引脚冲突问题

 

按键

按键配置,由原理图按键所对引脚要GPIO_Input

生成代码,在文件夹中添加code文件夹,code中添加fun.c、fun.h、headfile.h文件,去资源包中把lcd.c、lcd.h、fonts.h添加到code中,然后去写按键控制灯亮灭的程序,看是否有问题

按键控制led没有问题后写lcd显示代码,显示没问题后,解决lcd与led引脚冲突问题,方法在我的其他文章中

  HAL_GPIO_WritePin (GPIOD,GPIO_PIN_2,GPIO_PIN_RESET ); //为解决引脚冲突初始化lcd时    LCD_Init ();                                                                                                  要将锁存器锁存器来;
  LCD_Clear (Black);
  LCD_SetBackColor(Black);
  LCD_SetTextColor(White);

LCD显示函数

void lcd_show(void)
{
    sprintf(text,"      hello world");
    LCD_DisplayStringLine (Line0 ,(uint8_t *)text);
}

脉冲捕获

PA15  PB4输入频率测量,使用pwm输入模式测量比较准确,题目要求频率10次/秒刷新,这里需要使用定时器,定时器可以用10ms,时间短的定时器便于使用。

配置pwm输入捕获

建立handlie.c handle.h文件

我分别选着TIM2 TIM3  combined channels

选择 PWM input on ch1

psc 80-1   记得去勾选中断

生成代码,添加.h文件,main中开启TIM

 HAL_TIM_IC_Start_IT(&htim2 ,TIM_CHANNEL_1)注意这里开启的是TIM_IC_Start

找到回调函数,写功能代码,这里回调函数也是要IC的

void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)
{
    
}

计算公式又来请查看我的另一篇文章,PWM的输入捕获

这次代capture哪里加了1主要个好处
避免0错误
或者修正精度
单片机除数为0会死机~
 

频率要求10次/秒刷新这就要用到定时器,PX要求可正可负,定义时就要有int类型

tim配置如下,参数来源请参考我蓝桥杯第16届的模拟一解析,要开启中断再生成代码

注意定时器的配置、开启代码与前面定时器配置输入捕获的不同,回调函数也不一样

用led来判断一下定时器是否好使

定时器没有问题,我们去定时10次/秒更新频率,更新时把题目要求的频率校准做了

页面切换

用标志位进行页面切换,三个页面以上我们用switch来切换

 data界面

data页面中有单位切换,这个用if来实现,小于/大于多少变成什么单位,注意还有要求,f为负数时显示NULL

其中还要实现模式转换,模式的转换我们也用标志位实现

这里是频率界面

按照题目要求,B3按键是用来切换频率界面与周期界面的,去key中的B3按键中写切换的代码

频率转周期

注意我们频率单位是hz,t=1/f,这里周期的单位是s,题目要求是um,要进行单位换算,也就是t要✖1000 000才得到um

易错点:定义float fAT,它是浮点型,fA是无符号整型,计算fAT时被除数1要写成1.0,否则出错;fAT=fAT/1000;1000不用写成1000.0,因为商fAT都是是float;上面代码中FB=fB/1000.0,1000要写成1000.0是因为FB是float型,fB是uint。

para参数界面

recd统计页面

页面残留问题

para recd界面显示的行数比data界面的都多,从para recd两个界面切换回data界面就会有残留显示,则还需要去相应界面中把对应的行数显示为空白

频率超限设置

我们设置的频率fA/B超过设置的PH值一次,对应NHA/B就加一次,这里的一次是高于后又低于算一次,高于后不低于继续高于不能再算一次

频率突变

这里要求三秒内,这就需要我们去配置定时器了

定时器配置

1.选用哪一个

2.根据定时时长设置psc、arr值,启用中断

3.生成代码,开启定时器

4.定时器回调函数写功能代码

定时器我们上面已经定义了一个10ms的,可以选择直接在里面写

if(fA>0)语句是防止一开始就加一,因为上电时fAfB是0的,然后再10ms内更新了数据,就会没有操作就加1了

功能按键

加减按键

参数界面参数选择

要求进如参数界面时,默认选择PD,所以要去切换界面的按键四中写一个条件语句确保完成要求

按键清零(长按键)

这里长安一秒就需要用到定时B3prees记录按下的时间,如果B3按下,B3press=1开始计时,当放开按键的时候去比较按下的时间,超过一秒就清零;

led指示灯

在前面写的void change ()函数用if语句写led的亮灭

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

51c自动驾驶~合集22

我自己的原文哦~ https://blog.51cto.com/whaosoft/11870502 #自动驾驶数据闭环最前沿论文 近几年,自动驾驶技术的发展日新月异。从ECCV 2020的NeRF问世再到SIGGRAPH 2023的3DGS,三维重建走上了快速发展的道路!再到自动驾驶端到端技术的…

【Python】——使用python实现GUI图书管理系统:Tkinter+SQLite实战

本文将通过一个完整的python项目——图书管理系统,演示如何利用Tkinter构建GUI 界面,结合SQLite数据库实现增删改查功能。代码简洁易懂,适合python初学者学习和二次开发。 一、项目功能概览 图书管理:添加、查看、修改、删除图书…

Docker创建自定义网桥并指定网段

前言 docker0是Docker默认网络的核心组件, 通过虚拟网桥和NAT技术, 实现了容器间的通信以及容器与外部网络的交互。然而, docker0网段是固定的(通常是172.17.0.0/16), 为了更灵活地管理容器网络,Docker支持创建自定义网桥,允许用户指定网段。 例如, 在…

Spring Boot集成Spring Ai框架【详解 搭建Spring Ai项目,以及简单的ai大模型智能体应用,附有图文+示例代码】

文章目录 一.Spring Ai介绍1.0 认识Spring Ai1.1 特征1.1 大模型专业名字介绍1.1.1 RAG(检索增强生成)RAG 的基本原理RAG 的关键技术RAG 的优势RAG 的应用场景 1.1.2 fine-tuning(微调)1.1.3 function-call(函数调用) 1.2 创建简单的Spring Ai项目 二.Spring Ai简单的智能应用2…

51c自动驾驶~合集53

我自己的原文哦~ https://blog.51cto.com/whaosoft/13431196 #DriveTransformer 上交提出:以Decoder为核心的大一统架构写在前面 & 笔者的个人理解 当前端到端自动驾驶架构的串行设计导致训练稳定性问题,而且高度依赖于BEV,严重限…

【C语言】联合体 `union` 的妙用

C 语言联合体的妙用:结合 . 和 -> 操作符与 typedef 的深入剖析 在 C 语言中,联合体(union)是一种独特的复合数据类型,因其内存共享特性而在内存优化、类型切换和底层操作中展现出妙用。与结构体(struct)不同,联合体允许同一块内存存储不同类型的数据,提供高效且灵…

UDP协议(20250303)

1. UDP UDP:用户数据报协议(User Datagram Protocol),传输层协议之一(UDP,TCP) 2. 特性 发送数据时不需要建立链接,节省资源开销不安全不可靠的协议 //一般用在实时性比较高…

自动化学习-使用git进行版本管理

目录 一、为什么要学习git 二、git是什么 三、git如何使用 1、git的下载安装和配置 2、git常用的命令 3、gitee远程仓库的使用 (1)注册 (2)创建仓库 (3)配置公钥(建立电脑和git…

20250301在chrome中安装CRX猫抓

20250301在chrome中安装CRX猫抓 2025/3/1 18:08 百度:猫抓 CRX https://www.crx4chrome.com/crx/49597/ 猫抓 (cat-catch) Crx File 2.5.9 for Chrome (Latest Version) Get Latest Version of 猫抓 (cat-catch) from Web Store Developer Tools > cat-catch / E…

[LeetCode]day33 150.逆波兰式求表达值 + 239.滑动窗口最大值

逆波兰式求表达值 题目链接 题目描述 给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。 请你计算该表达式。返回一个表示表达式值的整数。 注意: 有效的算符为 ‘’、‘-’、‘*’ 和 ‘/’ 。 每个操作数(运…

pnpm+monorepo实现前端公共函数、组件库

一、前言 1. pnpm pnpm 是前端包管理工具之一,常见的还有npm、yarn等,但pnpm由于安装速度快、磁盘占用低、内置支持monorepo等优势,所以更推荐使用。 1-1 包管理工具核心特点对比 特性pnpmnpmyarn安装速度🚀 快(基…

【计算机网络入门】初学计算机网络(八)

目录 1. S-W协议的信道利用率 2. GBN、SR协议的信道利用率 3.术语补充 3.1 滑动窗口协议 3.2 ARQ协议、连续ARQ协议 4. 信道划分介质访问控制 4.1 时分复用(TDM) 4.2 统计时分复用(STDM) 4.3 频分复用(FDM&a…

JVM基本概念及内存管理模型

一、JVM基本概念 JVM(Java Virtual Machine,Java 虚拟机)是 Java 程序运行的核心组件。它负责将 Java 字节码转换为特定平台的机器指令,并提供内存管理、垃圾回收、安全性等功能。JVM 的主要功能包括以下: 加载和执行…

Docker 学习(三)——数据管理、端口映射、容器互联

一、数据管理 容器中的管理数据主要有两种方式: 数据卷 (Data Volumes): 容器内数据直接映射到本地主机环境; 数据 卷容器( Data Volume Containers): 使用特定容器维护数据卷 1.…

解锁Egg.js:从Node.js小白到Web开发高手的进阶之路

一、Egg.js 是什么 在当今的 Web 开发领域,Node.js 凭借其事件驱动、非阻塞 I/O 的模型,在构建高性能、可扩展的网络应用方面展现出独特的优势 ,受到了广大开发者的青睐。它让 JavaScript 不仅局限于前端,还能在服务器端大展身手&…

我的ChatGPT怎么登不上?

近期,不少用户反馈在使用ChatGPT时遇到登录困难、连接超时等问题。本文将从技术角度分析常见原因,并提供合规、安全的解决方案,同时结合开发者实际需求推荐实用工具,助您高效应对登录障碍。 ChatGPT登录失败的常见原因 网络环境限…

小米手机如何录制屏幕?手机、电脑屏幕录制方法分享

大家最近有没有遇到想记录手机屏幕操作的情况? 比如精彩的游戏瞬间、有趣的视频教程,或者需要录制屏幕来制作演示材料。小米手机在这方面可是个好帮手,今天就来给你好好唠唠,小米手机如何录制屏幕,以及后续如何处理这…

【jenkins配置记录】

全局工具配置: D:\Program Files\Java\jdk1.8.0_281 D:\Program Files\Git\bin\git.exe E:\allure-2.13.2 2. GIT 3. 定时任务 H 8 * * 1-5 4. 构建触发器 5. 构建后操作 Allure Report 吐血记录:报告路径可以为 workspace 相对路径 6. 系统配置 em…

修改hosts文件,修改安全属性,建立自己的DNS

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…

详解LSM树

目录 什么是LSM树 磁盘结构与顺序IO LSM树结构 LSM树的写入 SSTable合并 LSM树的读取 LSM树的删除 总结 什么是LSM树 LSM 树全名日志结构合并树(Log-Structured Merge Tree),是一种用于存储和管理数据的树状数据结构,常用…