【蓝桥杯嵌入式】蓝桥杯嵌入式第十二届省赛题,考点:模拟电压,串口通信,计时器

本文主要是介绍【蓝桥杯嵌入式】蓝桥杯嵌入式第十二届省赛题,考点:模拟电压,串口通信,计时器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 🎊【蓝桥杯嵌入式】专题正在持续更新中,原理图解析✨,各模块分析✨以及历年真题讲解✨都在这儿哦,欢迎大家前往订阅本专题,获取更多详细信息哦🎏

🎏【蓝桥杯嵌入式】蓝桥杯第十届省赛真题

🎏【蓝桥杯嵌入式】蓝桥杯第十二届省赛程序真题

🎏【蓝桥杯嵌入式】蓝桥杯第十三届省赛程序真题

🪔本系列专栏 -   蓝桥杯嵌入式_勾栏听曲_0的博客

🍻欢迎大家  🏹  点赞👍  评论📨  收藏⭐️

📌个人主页 -  勾栏听曲_0的博客📝

🔑希望本文能对你有所帮助,如有不足请指正,共同进步吧🏆

🎇仰之弥高,钻之弥坚,瞻之在前,忽焉在后。📈

目录

题目

硬件框图

功能描述

赛题分析

代码实现

LCD模块

中断(按键与计时)模块

按键模块

串口模块


题目

硬件框图

功能描述

基本功能

        1)测量竞赛板上电位器R37输出的模拟电压信号Vwa;,并通过LCD 实现数据的
实时显示。

        2)通过按键完成显示界面切换、参数设置等功能。

        3)支持通过串口进行参数设置的功能。

        4)通过LED指示灯完成状态指示功能。

        5)设计要求
                电压数据刷新时间:≤0.5秒。
                按键响应时间:≤0.1秒。
                根据试题要求设计合理的电压数据采样频率,并对ADC采样到的电压数据进行有效的数字滤波。

显示功能

        1)数据界面
                通过液晶屏显示三个数据项,包括:界面名称Data、电位器R37输出的电压值V和计时结果T,电压值保留小数点后2位有效数字。

        2)参数界面
                通过液晶屏显示三个数据项,包括界面名称Para、电压参数Vmax和Vmin。电压参数保留小数点后1位有效数字。

        显示说明·
                显示背景色(BackColor):黑色。

                显示前景色(TextColor):白色。

                请严格按照图示要求设计各个信息项的名称(区分字母大小写)和行列位置。

                计时结果以秒为单位,计时条件下数据实时刷新。

        计时说明
                1)当电位器R37的输出电压上升到Vmin时,开始计时,声到电压上升到Vmax结束计时。

                2)满足开始计时条件,计时时间重置为0秒,并以秒单位开始计时。

        如上图所示的电压变化曲线中,从t1时刻开始以秒为单位计时,直到t2时刻触发停止计时条件,停止计时;t3时刻重新触发计时(计时时间重置为0),直到t4时刻停止计时。

         如上图所示的电压变化曲线中,从t1时刻开始以秒为单位计时,t2时刻再次触发计时条件,重置计时时间为0,直至t3时刻结束计时。

按键功能

        1) B1:界面切换按键.切换选择数据界面或参数界面。

        2) B2:每次按下B2按键,Vmax参数加0.1V,当参数加到3.3V,再次按下B2后返回0.0V。

        3) B3:每次按下B3按键,Vm参数加0.1V,当参数加到3.3V,再次按下B3后返回0.0V。

        4) 当设备从参数界面退出,返回数据界面时,自动判断当前设置的参数是否合理,如参数合理则使之生效,如不合理,则弃用本次设置的参数,使用进入参数界面前的原参数。

        备注:
                B2和B3按键仅在参数设置界面有效。
                要求Vmax ≥ Vmin + 1V.
                要求Vmax、Vmin可设置范围为0.0V-3.3V。

串口通信功能

        1)使用 STM32 USART2完成串口功能。

        2)通信波特率:9600bps。

        3)串口参数设置命令:“Vmax,Vmin”
                例如:“3.2,1.4”,将电压参数Vmax和Vmin分别设置为3.2V和1.4V。

                备注:示例中的双引号为字符串标识,非参数设置命令内容。

        4)如通过串口接收到的指令存在格式或逻辑错误,设备不执行该条命令。

LED指示灯功能

        1)LD1,若当前触发了计时功能,且计时尚未结束,LD1点亮,否则LD1熄灭。

        2)LD2,若通过按键设置的参数不合理,LD2点亮,直至下次设置了正确的参数后熄灭。

        3)LD3,若串口接收到格式错误指令或不满足参数合理性判断的要求时LD3点亮,直至下次接收到正确指令后熄灭。

初始状态说明
        1)上电后,默认处于数据界面。

        2)上电默认参数:

                Vmax: 3.0V

                Vmin: 1.0v


赛题分析

        实现看硬件框图,了解考点,本次赛题的考点除了老三样(LED,按键,LCD)以外,主要的考点就是模拟电压输入与串口通信了。

        再往下看,就能看到功能描述,就能知道本题大概方向了。主要是测量R37的模拟电压信号,然后串口有一些接收的功能要求。

        我们接着往下面看,来到LCD模块,其主要就是把每行每列的字母数值的位置确定。有需要实时显示的就要实时刷新。

        再往下的计时,就是本次考题比较核心的内容了,什么时候开始计时,什么时候结束,这两个是很好判断的,但是什么条件时是需要将计时重置为0,这个就需要注意一下了,有两种情况:第一,计时正常结束后,重新开始新一轮的计时;第二,计时开始后,未到计时结束,又重新开始计时。计时是实用中断来实现。

        按键与平常也有一些区别,就是在参数界面将参数调好之后,并不会立刻改变真实的参数值,而是需要先进性参数合理性判断,符合要求的参数变动才会保存,否则还是沿用未进行调整时的参数。

        串口模块也是用于参数设置,同样的,也需要对参数的合理性进行判断,不合理则不采用,合理则改变参数为串口接收到的数值。

        LED模块就是一些指示功能,穿插在其他模块中得以体现。

代码实现

LCD模块

        LCD模块就是将各个参数完全按照赛题上的规格来显示即可。

void disp_proc()
{if(view==0){char text[30];sprintf(text,"      Data   ");LCD_DisplayStringLine(Line0, (uint8_t *)text);sprintf(text," V:%.2fV",R37_v);LCD_DisplayStringLine(Line2, (uint8_t *)text);sprintf(text," T:%ds",times);LCD_DisplayStringLine(Line3, (uint8_t *)text);		}else if(view==1){char text[30];sprintf(text,"      Para    ");LCD_DisplayStringLine(Line0, (uint8_t *)text);sprintf(text," Vmax:%.1fV     ",max_v);LCD_DisplayStringLine(Line2, (uint8_t *)text);sprintf(text," Vmin:%.1fV     ",min_v);LCD_DisplayStringLine(Line3, (uint8_t *)text);}
}

中断(按键与计时)模块

        中断中,包含了本次赛题多个重点:R37模拟电压信号的获取,计时器计时,计时器何时开始计时,何时结束计时,何时重置计时器。外加一些LED的操作。

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if(a++ >20){R37_v = getADC(&hadc2);if(R37_f < min_v && R37_v >= min_v){times = 0;flag_t = 1;TurnOn_LED(1);}else if(flag_t == 1 && R37_v < min_v){flag_t = 0;TurnOff_LED(1);}else if(flag_t == 1 && R37_v >= max_v){flag_t = 2;TurnOff_LED(1);}a = 0;R37_f = getADC(&hadc2);}if(flag_t == 1){if(s++ == 100){times++;s = 0;}}else if(flag_t == 2){flag_t = 0;}if(htim->Instance==TIM3){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;}elsekey[i].judge_sta = 0;}break;case 2:{				if(key[i].key_sta==1) 		//判断是否松手{if(key[i].key_time < 100){key[i].key_flag = 1;}key[i].judge_sta = 0;		}else{key[i].key_time++;if(key[i].key_time > 100)				//一次扫描10毫秒,100次1000毫秒,就是判断是否长按超过1000毫秒//未松手时,就会执行相应反应{key[i].long_flag = 1;}}}break;}}}
}

按键模块

        按键模块包括判断按键界面上调整参数是否合理的判断,判断后参数的改动。

void key_proc()
{if(key[0].key_flag == 1){if(view == 1){if(max_v < min_v + 0.99){max_v = max;min_v = min;TurnOn_LED(2);}else{TurnOff_LED(2);}}else if(view == 0){max = max_v;min = min_v;}view = !view;LCD_Clear(Black);key[0].key_flag = 0;}if(key[1].key_flag == 1){if(view == 1){max_v += 0.1;if(max_v > 3.3){max_v = 0;}}key[1].key_flag = 0;}if(key[2].key_flag == 1){if(view == 1){min_v += 0.1;if(max_v > 3.3){min_v = 0;}}key[2].key_flag = 0;}}

串口模块

        串口模块只用实现接收功能,接收并判断参数是否合理,合理就对参数进行改变,不合理参数就不做改变。

void uart_rx_proc()
{if(rx_pointer>0){if(rx_pointer==7)	//如果接收到的是7个字符{sscanf(rxdata,"%c.%c,%c.%c",&max_g,&max_x,&min_g,&min_x);	//将字符串拆分max_g1 = atoi(&max_g);max_x1 = atoi(&max_x);min_g1 = atoi(&min_g);min_x1 = atoi(&min_x);if(max_g1 + max_x1/10 >= min_g1 +min_x1/10 +1){max_v = max_g1 + max_x1/10;min_v = min_g1 +min_x1/10;TurnOff_LED(3);}else{TurnOn_LED(3);}}rx_pointer=0;memset(rxdata,0,30);}
}

        望本篇文章对你有所帮助,并在比赛中取得佳绩 👑

这篇关于【蓝桥杯嵌入式】蓝桥杯嵌入式第十二届省赛题,考点:模拟电压,串口通信,计时器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/524291

相关文章

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

usaco 1.2 Transformations(模拟)

我的做法就是一个一个情况枚举出来 注意计算公式: ( 变换后的矩阵记为C) 顺时针旋转90°:C[i] [j]=A[n-j-1] [i] (旋转180°和270° 可以多转几个九十度来推) 对称:C[i] [n-j-1]=A[i] [j] 代码有点长 。。。 /*ID: who jayLANG: C++TASK: transform*/#include<

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

荣耀嵌入式面试题及参考答案

在项目中是否有使用过实时操作系统? 在我参与的项目中,有使用过实时操作系统。实时操作系统(RTOS)在对时间要求严格的应用场景中具有重要作用。我曾参与的一个工业自动化控制项目就采用了实时操作系统。在这个项目中,需要对多个传感器的数据进行实时采集和处理,并根据采集到的数据及时控制执行机构的动作。实时操作系统能够提供确定性的响应时间,确保关键任务在规定的时间内完成。 使用实时操作系统的

hdu4431麻将模拟

给13张牌。问增加哪些牌可以胡牌。 胡牌有以下几种情况: 1、一个对子 + 4组 3个相同的牌或者顺子。 2、7个不同的对子。 3、13幺 贪心的思想: 对于某张牌>=3个,先减去3个相同,再组合顺子。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOExcepti

嵌入式Openharmony系统构建与启动详解

大家好,今天主要给大家分享一下,如何构建Openharmony子系统以及系统的启动过程分解。 第一:OpenHarmony系统构建      首先熟悉一下,构建系统是一种自动化处理工具的集合,通过将源代码文件进行一系列处理,最终生成和用户可以使用的目标文件。这里的目标文件包括静态链接库文件、动态链接库文件、可执行文件、脚本文件、配置文件等。      我们在编写hellowor

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟)

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟) 题目描述 给定一个链表,链表中的每个节点代表一个整数。链表中的整数由 0 分隔开,表示不同的区间。链表的开始和结束节点的值都为 0。任务是将每两个相邻的 0 之间的所有节点合并成一个节点,新节点的值为原区间内所有节点值的和。合并后,需要移除所有的 0,并返回修改后的链表头节点。 思路分析 初始化:创建一个虚拟头节点

vue2 组件通信

props + emits props:用于接收父组件传递给子组件的数据。可以定义期望从父组件接收的数据结构和类型。‘子组件不可更改该数据’emits:用于定义组件可以向父组件发出的事件。这允许父组件监听子组件的事件并作出响应。(比如数据更新) props检查属性 属性名类型描述默认值typeFunction指定 prop 应该是什么类型,如 String, Number, Boolean,