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

蓝桥杯嵌入式(G431)备赛笔记——ADC+LCD

目录

题目要求(真题):

cubeMX配置:

小试牛刀:

 Keil代码:

效果演示:


题目要求(真题):

使用第十一届第二场真题,练习ADC波部分的代码

cubeMX配置:

配置PB12,PB15为ADC输入通道

PB12对应R38,配置为ADC1的通道11

PB15对应R37,配置为ADC2的通道15

 最好将采样时间拉到最高,防止出错。

小试牛刀:

 Keil代码:

user.c

#include "user.h" // 包含用户自定义头文件 user.hu32 adc_tick=0; // 定义 ADC 计时变量 adc_tick
u32 r37_value=0; // 定义变量存储 ADC1 读取的数值 r37_value
u32 r38_value=0; // 定义变量存储 ADC2 读取的数值 r38_value
float r37_volt=0; // 定义变量存储 ADC1 转换后的电压值 r37_volt
float r38_volt=0; // 定义变量存储 ADC2 转换后的电压值 r38_voltvoid ADC_proc() // 定义 ADC 处理函数 ADC_proc
{if(uwTick-adc_tick<100) // 如果当前时间与上次 ADC 触发的时间间隔小于100msreturn; // 直接返回,不进行 ADC 采样adc_tick = uwTick; // 更新 ADC 触发时间为当前时间HAL_ADC_Start(&hadc1); // 启动 ADC1 转换r38_value = HAL_ADC_GetValue(&hadc1); // 获取 ADC1 转换后的数值r38_volt = r38_value*3.3/4096; // 计算 ADC1 转换后的电压值HAL_ADC_Start(&hadc2); // 启动 ADC2 转换r37_value = HAL_ADC_GetValue(&hadc2); // 获取 ADC2 转换后的数值r37_volt = r37_value*3.3/4096; // 计算 ADC2 转换后的电压值
}u8 ui=1; // 定义变量存储用户界面状态 ui
u8 pa6_duty=10; // 定义变量存储 PA6 的占空比 pa6_duty
u8 pa7_duty=10; // 定义变量存储 PA7 的占空比 pa7_dutyvoid KEY_proc() // 定义按键处理函数 KEY_proc
{// 对四个按键进行单击、长按、双击的处理if(single_key_flag[0]==1) // 如果按键1单次按下{ui+=1; // 切换 LCD 显示模式if(ui>=3) ui=1; // 如果超过最大模式数,回到第一个模式single_key_flag[0]=0; // 清除按键标志}if(single_key_flag[1]==1) // 如果按键2单次按下{pa6_duty+=10; // 增加 PA6 的占空比if(pa6_duty>=100) pa6_duty=10; // 如果占空比超过100%,重置为10%__HAL_TIM_SetCompare(&htim16, TIM_CHANNEL_1, pa6_duty); // 设置 PWM 输出的占空比single_key_flag[1]=0; // 清除按键标志}if(single_key_flag[2]==1) // 如果按键3单次按下{pa7_duty+=10; // 增加 PA7 的占空比if(pa7_duty>=100) pa7_duty=10; // 如果占空比超过100%,重置为10%__HAL_TIM_SetCompare(&htim17, TIM_CHANNEL_1, pa7_duty); // 设置 PWM 输出的占空比single_key_flag[2]=0; // 清除按键标志}
}u32 lcd_tick=0; // 定义 LCD 刷新计时变量 lcd_tickvoid Disp_proc () // 定义显示处理函数 Disp_proc
{if(uwTick-lcd_tick<100) // 如果当前时间与上次 LCD 刷新的时间间隔小于100msreturn; // 直接返回,不进行 LCD 刷新lcd_tick=uwTick; // 更新 LCD 刷新时间为当前时间if(ui==1) // 如果当前界面为模式1{u8 text[50]; // 定义字符数组用于存储显示的文本信息sprintf(text, "      DATE        "); // 格式化字符串,显示日期LCD_DisplayStringLine(Line1, (unsigned char *)text); // 在第1行显示文本信息sprintf(text, "    V:%.2f V      ", r37_volt); // 格式化字符串,显示 ADC1 电压值LCD_DisplayStringLine(Line3, (unsigned char *)text); // 在第3行显示文本信息sprintf(text, "    Mode:         "); // 格式化字符串,显示模式LCD_DisplayStringLine(Line5, (unsigned char *)text); // 在第5行显示文本信息sprintf(text, "    V:%.2f V      ", r38_volt); // 格式化字符串,显示 ADC2 电压值LCD_DisplayStringLine(Line4, (unsigned char *)text); // 在第4行显示文本信息}if(ui==2) // 如果当前界面为模式2{u8 text[50]; // 定义字符数组用于存储显示的文本信息sprintf(text, "      Para        "); // 格式化字符串,显示参数LCD_DisplayStringLine(Line1, (unsigned char *)text); // 在第1行显示文本信息sprintf(text, "    PA6:%d        ", pa6_duty); // 格式化字符串,显示 PA6 占空比LCD_DisplayStringLine(Line3, (unsigned char *)text); // 在第3行显示文本信息sprintf(text, "    PA7:%d        ", pa7_duty); // 格式化字符串,显示 PA7 占空比LCD_DisplayStringLine(Line5, (unsigned char *)text); // 在第5行显示文本信息}
}

ADC_proc 函数用于采样两个模拟输入通道的电压值并计算,KEY_proc 函数处理按键操作并控制相关功能,Disp_proc 函数根据当前界面状态和采样到的数据更新 LCD 显示。

user.h

#ifndef __USER_H // 如果未定义过 __USER_H 宏
#define __USER_H // 定义 __USER_H 宏,防止头文件重复包含#include "main.h" // 包含主头文件 main.h
#include "lcd.h" // 包含 LCD 相关头文件 lcd.h
#include "key.h" // 包含按键相关头文件 key.h
#include "led.h" // 包含 LED 相关头文件 led.h
#include "tim.h" // 包含定时器相关头文件 tim.hvoid ADC_proc(void); // 声明按键处理函数 ADC_proc
void KEY_proc(void); // 声明按键处理函数 KEY_proc
void Disp_proc(void); // 声明显示处理函数 Disp_proc#endif // 结束条件编译指令

main.c

int main(void)
{/* USER CODE BEGIN 1 */ // 在这里插入用户自定义的代码段1/* USER CODE END 1 */ // 用户自定义的代码段1结束/* MCU Configuration--------------------------------------------------------*/ // MCU 配置/* Reset of all peripherals, Initializes the Flash interface and the Systick. */ // 复位所有外设,初始化 Flash 接口和 SysTick 定时器HAL_Init(); // HAL 库初始化/* USER CODE BEGIN Init */ // 用户自定义的代码段2开始/* USER CODE END Init */ // 用户自定义的代码段2结束/* Configure the system clock */ // 配置系统时钟SystemClock_Config(); // 调用系统时钟配置函数/* USER CODE BEGIN SysInit */ // 用户自定义的代码段3开始/* USER CODE END SysInit */ // 用户自定义的代码段3结束/* Initialize all configured peripherals */ // 初始化所有配置的外设MX_GPIO_Init(); // 初始化 GPIO 外设MX_TIM3_Init(); // 初始化定时器 TIM3MX_TIM16_Init(); // 初始化定时器 TIM16MX_TIM17_Init(); // 初始化定时器 TIM17/* USER CODE BEGIN 2 */ // 用户自定义的代码段4开始LED_disp (0); // 调用 LED 显示函数,将 LED 初始状态设置为关闭HAL_TIM_Base_Start_IT(&htim3); // 启动 TIM3 定时器的基本定时器模式并启用定时器中断LCD_Init(); // LCD 初始化HAL_TIM_PWM_Start(&htim16, TIM_CHANNEL_1); // 启动 TIM16 定时器的 PWM 模式,并启用通道1HAL_TIM_PWM_Start(&htim17, TIM_CHANNEL_1); // 启动 TIM17 定时器的 PWM 模式,并启用通道1/* USER CODE END 2 */ // 用户自定义的代码段4结束/* Infinite loop */ // 无限循环/* USER CODE BEGIN WHILE */ // 用户自定义的代码段5开始LCD_Clear(Black); // 清屏,将背景色设置为黑色LCD_SetBackColor(Black); // 设置背景色为黑色LCD_SetTextColor(White); // 设置文本颜色为白色while (1) // 进入无限循环{/* USER CODE END WHILE */ // 用户自定义的代码段5结束/* USER CODE BEGIN 3 */ // 用户自定义的代码段6开始ADC_proc(); // ADC处理函数KEY_proc(); // 处理按键事件Disp_proc (); // 控制 LCD 显示内容}/* USER CODE END 3 */ // 用户自定义的代码段6结束
}

关键函数:

HAL_ADC_Start(&hadc2);  //开启ADC

HAL_ADC_GetValue(&hadc2); //获取ADC的值

效果演示:

蓝桥杯嵌入式ADC效果演示

相关文章:

蓝桥杯嵌入式(G431)备赛笔记——ADC+LCD

目录 题目要求&#xff08;真题&#xff09;&#xff1a; cubeMX配置&#xff1a; 小试牛刀&#xff1a; Keil代码&#xff1a; 效果演示&#xff1a; 题目要求&#xff08;真题&#xff09;&#xff1a; 使用第十一届第二场真题&#xff0c;练习ADC波部分的代码 cubeMX配…...

最近公共祖先(LCA)

题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先。 输入格式 第一行包含三个正整数 N,M,S,分别表示树的结点个数、询问的个数和树根结点的序号。 接下来 N−1 行每行包含两个正整数x,y,表示 x 结点和 y 结点之间有一条直接连接的边(数据保证可以…...

ABBYY FineReader15免费电脑OCR图片文字识别软件

产品介绍&#xff1a;ABBYY FineReader 15 OCR图片文字识别软件 ABBYY FineReader 15是一款光学字符识别&#xff08;OCR&#xff09;软件&#xff0c;专门设计用于将扫描的文档、图像和照片中的文本转换成可编辑和可搜索的格式。这款软件利用先进的OCR技术&#xff0c;能够识别…...

2024年第十七届 认证杯 网络挑战赛 (A题)| 保暖纤维的保暖能力 |数学建模完整代码+建模过程全解全析

当大家面临着复杂的数学建模问题时&#xff0c;你是否曾经感到茫然无措&#xff1f;作为2022年美国大学生数学建模比赛的O奖得主&#xff0c;我为大家提供了一套优秀的解题思路&#xff0c;让你轻松应对各种难题。 让我们来看看认证杯 网络挑战赛 (A题&#xff09;&#xff01…...

算法训练营第37天|LeetCode 738.单调递增的数字 968.监控二叉树

LeetCode 738.单调递增的数字 题目链接&#xff1a; LeetCode 738.单调递增的数字 解题思路&#xff1a; 从后向前遍历&#xff0c;当不满足递增条件时&#xff0c;当前位置赋值为9&#xff0c;前一位减一。之后记录不满足位置&#xff0c;将后续全部赋值为9. 代码&#x…...

Vue+el-table 修改表格 单元格横线边框颜色及表格空数据时边框颜色

需求 目前 找到对应的css样式进行修改 修改后 css样式 >>>.el-table th.el-table__cell.is-leaf {border-bottom: 1px solid #444B5F !important;}>>>.el-table td.el-table__cell,.el-table th.el-table__cell.is-leaf {border-bottom: 1px solid #444B5F …...

大恒相机-程序异常退出后显示被占用

心跳时间代表多久向相机发送一次心跳包&#xff0c;如果超时则设备会认为断开了&#xff0c;停止工作并主动释放占用资源。 在相机打开后添加代码&#xff1a; #ifdef _DEBUG//设置心跳超时时间 3sObjFeatureControlPtr->GetIntFeature("GevHeartbeatTimeout")-&…...

头歌-机器学习 第16次实验 EM算法

第1关:极大似然估计 任务描述 本关任务:根据本节课所学知识完成本关所设置的选择题。 相关知识 为了完成本关任务,你需要掌握: 什么是极大似然估计; 极大似然估计的原理; 极大似然估计的计算方法。 什么是极大似然估计 没有接触过或者没有听过”极大似然估计“的同学…...

电脑启动引导的两种方式

电脑启动引导的两种方式 电脑启动引导有两种方式&#xff1a;Legacy 传统模式 和 UEFI 新型模式。 一、Legacy&#xff1a;指 主板的 传统的 BIOS 传输模式引导启动加载操作系统。 1.只支持 MBR 分区表&#xff0c;支持 32位和64位操作系统&#xff08;如&#xff1a;winXP&…...

用php编写网站源码的一些经验

一、var_dump()函数 var_dump()函数在有页面跳转的情况下会看不到信息。因为 var_dump()函数输出信息默认显示到本页面。因此要看到var_dump()函数的输出&#xff0c;在有页面跳转时&#xff0c;需要将页面跳转改成显示本页面。 放在var_dump()函数里的变量如果是空值&#x…...

海山数据库(He3DB)原理剖析:浅析OLAP数据库计算引擎中的统计信息

背景&#xff1a; 统计信息在计算引擎的优化器模块中经常被提及&#xff0c;尤其是在基于成本成本优化&#xff08;CBO&#xff09;框架中统计信息发挥着至关重要的作用。CBO旨在通过评估执行查询的可能方法&#xff0c;并选择最有效的执行计划来提高查询性能。而统计信息则提…...

视频图像的两种表示方式YUV与RGB(4)

本篇主要讲YUV与RGB之间的转换&#xff0c;包括YUV444 颜色编码格式 转为 RGB 格式 &#xff0c;RGB颜色编码格式转为 YUV444 格式。 一、 YUV与RGB之间的转换 YUV与RGB颜色格式之间进行转换时 , 涉及一系列的数学运算 ; YUV 颜色编码格式转为RGB格式的转换公式 取决于 于 YUV …...

PostgreSQL入门到实战-第十四弹

PostgreSQL入门到实战 PostgreSQL数据过滤(七)官网地址PostgreSQL概述PostgreSQL中BETWEEN 命令理论PostgreSQL中BETWEEN 命令实战更新计划 PostgreSQL数据过滤(七) BETWEEN运算符允许您检查值是否在值的范围内。 官网地址 声明: 由于操作系统, 版本更新等原因, 文章所列内容…...

分布式数据库中间件 Mycat 和 ShardingSphere 对比

Mycat 和 ShardingSphere 都是流行的分布式数据库中间件&#xff0c;都可以用于实现数据分片、读写分离和分布式事务等功能&#xff0c;但它们在设计理念、特点和功能实现上有一些区别 1. 设计理念&#xff1a; Mycat&#xff1a; 基于 MySQL 协议的代理式架构&#xff0c;主要…...

Python实现BOA蝴蝶优化算法优化BP神经网络回归模型(BP神经网络回归算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 蝴蝶优化算法(butterfly optimization algorithm, BOA)是Arora 等人于2019年提出的一种元启发式智能算…...

3D Web轻量化引擎HOOPS Commuicator如何从整体装配中创建破碎的装配零件和XML?

前言 虽然可以从某些本机CAD格式&#xff08;其子组件驻留在单独的文件中&#xff0c;例如CATIA V5、Creo - Pro/E、NX或SolidWorks&#xff09;创建破碎装配&#xff0c;但无法从整体装配文件&#xff08;例如IFC、Revit&#xff09;创建或3DXML。 本文介绍了一个示例&#…...

关于运行阿里云直播Demo pub get 报的错

flutter --version dart --version 如何使用Flutter框架推流_音视频终端 SDK(Apsara Video SDK)-阿里云帮助中心 终端输入 dart pub --trace get --no-precompile 打印详细报错信息 详细咨询chatgpt pub.dev 中已经是最新版本了 项目中已经是最新版本了 最终定位到 终端…...

C语言调用Python

目录 1.直接调用python语句 头文件引用 2.调用无参有参函数 1、调用无参函数 1.建立nopara.py文件 2.使用c语言根据上面流程进行调用 2、调用有参函数 1.建立nopara.py文件 2.使用c语言根据上面流程进行调用 C语言调用python需要我们已经安装好了libpython3的 dev依赖…...

SVN客户端异常问题处理

1、如遇svn服务端异常&#xff08;所有用户登录不上&#xff09; &#xff08;1&#xff09;登录192.168.**.**服务器&#xff0c;找到E:\仓库所在盘\VisualSVN-GlobalWinAuthz.ini &#xff08;2&#xff09;先备份VisualSVN-GlobalWinAuthz.ini文件 &#xff08;3&#xf…...

gin+sse实现离散的消息通知

虽然网上的都是用sse实现将实时消息流不间断的推给前端&#xff0c;但是sse也可以模拟websocket进行突发的消息通知&#xff0c;而不是一直读取数据并返回数据。即服务端保存所有的连接对象&#xff0c;前端管理界面发送正常的http请求&#xff0c;在后端遍历所有的连接对象&am…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接&#xff1a;3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

线程同步:确保多线程程序的安全与高效!

全文目录&#xff1a; 开篇语前序前言第一部分&#xff1a;线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分&#xff1a;synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分&#xff…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

android13 app的触摸问题定位分析流程

一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...

Python 实现 Web 静态服务器(HTTP 协议)

目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1&#xff09;下载安装包2&#xff09;配置环境变量3&#xff09;安装镜像4&#xff09;node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1&#xff09;使用 http-server2&#xff09;详解 …...

Ubuntu系统多网卡多相机IP设置方法

目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机&#xff0c;交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息&#xff0c;系统版本&#xff1a;Ubuntu22.04.5 LTS&#xff1b;内核版本…...

Matlab实现任意伪彩色图像可视化显示

Matlab实现任意伪彩色图像可视化显示 1、灰度原始图像2、RGB彩色原始图像 在科研研究中&#xff0c;如何展示好看的实验结果图像非常重要&#xff01;&#xff01;&#xff01; 1、灰度原始图像 灰度图像每个像素点只有一个数值&#xff0c;代表该点的​​亮度&#xff08;或…...

Qt的学习(一)

1.什么是Qt Qt特指用来进行桌面应用开发&#xff08;电脑上写的程序&#xff09;涉及到的一套技术Qt无法开发网页前端&#xff0c;也不能开发移动应用。 客户端开发的重要任务&#xff1a;编写和用户交互的界面。一般来说和用户交互的界面&#xff0c;有两种典型风格&…...

npm安装electron下载太慢,导致报错

npm安装electron下载太慢&#xff0c;导致报错 背景 想学习electron框架做个桌面应用&#xff0c;卡在了安装依赖&#xff08;无语了&#xff09;。。。一开始以为node版本或者npm版本太低问题&#xff0c;调整版本后还是报错。偶尔执行install命令后&#xff0c;可以开始下载…...