【蓝桥杯嵌入式】蓝桥杯第十届省赛真题,程序题全解析(含代码)

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

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

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

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

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

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

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

🎇君子欲讷于言而敏于行。📈

目录

题目

硬件框图

功能描述

题目分析

代码实现

adc模块

LCD与LED模块

按键模块


题目

硬件框图

功能描述

1基本功能
        1)测量竞赛板上电位器R37输出的模拟电压信号Via;,并通过液晶屏实时显示数据。

        2)通过LED指示灯实现超出上限、低于下限的提醒功能。

        3)通过按键实现阈值范围和输出提醒指示灯的设置功能。

 2显示功能
        1)数据显示界面
        数据显示界面包含三个显示要素:界面名称、采集的实时电压数据和状态。

 备注:
        上述界面供设计参考,选手可根据试题要求对界面进行设计,界面需包含试题要求的全部显示要素。

        电压单位为伏特,数据保留小数点后两位有效数字。

        状态(Status):超过上限(Upper)、低于下限(Lower)和正常(Normal)。

        2)参数配置界面
        参数配置界面包含五个显示要素:界面名称、电压的上限值、电压的下限值、电压超过上限的提醒指示灯、电压低于下限的提醒指示灯。

        备注:

        上述界面供设计参考,选手可根据试题要求对界面进行设计,界面需包含试题要求的全部显示要素。

        电压上、下限值设置范围为0-3.3V,设备应具备错误设置的保护功能。

        电压提醒指示灯设置范围为LD1到LD8,设备应禁止将上、下限指示灯设置为同一个指示灯。

3按键功能

        1)B1:定义为“设置”按键,按下此按键,切换选择数据显示界面和参数设置界面,按键工作流程如下图所示:

        2)B2:定义为“选择”按键,在参数设置界面按下此按键,切换选择参数项(电压的上限值、电压的下限值、电压超过上限的提醒指示灯、低于下限的提醒指示灯),被选择的参数项“高亮”显示。

        按键工作流程如下图所示:

        3)B3:定义为“加”按键。

        进行电压参数设置时,当前选择的电压参数加0.3V。

        进行LED提醒指示灯参数设置时,LED指示灯序号加1。

        4)B4:定义为“减”按键。

        进行电压参数设置时,当前选择的电压参数减0.3V。

        进行LED提醒指示灯参数设置时,LED指示灯序号减1。

        备注:
        B2、B3、B4仅在设置界面下有效。

        参数设置功能需保护数据边界,电压参数可设置范围0-3.3V,LED提醒指示灯可设置范围LD1—LD8。

        4LED指示灯功能
        1)R37输出电压值超过电压上限值时(V_{R37}>V的上限),上限提醒指示灯以0.2秒为间隔闪烁,下限指示灯熄灭。
        2)R37输出电压值低于电压下限值时(V_{R37}<V的下限),下限提醒指示灯以0.2秒为间隔闪烁,上限指示灯熄灭。
        3)R37输出电压值介于上限和下限电压之间时(V的下限≤V_{R37}≤V的上限),上限、下限提醒指示灯熄灭。
        4)竞赛板上除当前用做超出上限、低于下限提醒功能的指示灯外,其它指示灯应处于熄灭状态。

        5初始状态说明
        1)默认输出提醒指示灯。
                超过上限提醒指示灯:LD1
                低于下限提醒指示灯:LD2

        2)默认电压阈值参数。
                电压的上限值:2.4V
                电压的下限值:1.2V


真题讲解系列文章重点关注顶层逻辑代码编写,各模块的代码编写大家可点击【蓝桥杯嵌入式】蓝桥杯第十三届省赛程序真题,里面有各个模块的详细解析与代码编写


题目分析

硬件框图分析

        我们通过硬件框图可以看出本题需要哪些基础模块,如本题可看出涉及LCD,LED,按键,模拟电压(也就是模数转换),并因为LCD,LED,按键几乎每年都考,所以显而易见这一年的考试重点在于模拟电压。通过硬件框图知道这些信息后,来我们再来仔细看题。

功能描述分析

        最主要的是测量R37输出的模拟信号,也就是模数转换的过程,然后其他的就是老三样,常见的LCD屏显示,设置了电压的上下限阈值,与阈值相关的功能有LCD屏显示与LED灯,然后就是按键控制,按键只要将条件判断语句写好就行了。其中有一个新点,就是屏幕高亮显示。

总体设计思路

        先将R37的模拟信号获取,定义全局变量,方便其他.c文件使用。 根据按键功能将按键的逻辑实现好。LCD屏也是如此,注意变量的定义即可,实现好高亮显示。LED就是获取按键相关操作之后,判断电压值是否超过阈值,是则亮。

代码实现

adc模块

double getADC(ADC_HandleTypeDef *pin)
{
	uint adc;
	HAL_ADC_Start(pin);
	adc = HAL_ADC_GetValue(pin);
	return adc*3.3/4096;
}

LCD与LED模块

        其中包含高亮显示,高亮显示原理也很简单,在要显示高亮的那一行之前,将LCD背景换成你想要的高亮颜色,这里换成了黄色,然后在显示这一行的信息,注意一行没满用空格填充,否则这一行后面部分会没有高亮显示。显示完成后,再将LCD的背景色改为黑色。

void disp_proc()
{
	
	double V = getADC(&hadc2);
	if(view==0)
	{
		char text[30];
		sprintf(text,"      Main   ");
		LCD_DisplayStringLine(Line2, (uint8_t *)text);
		sprintf(text,"   Volt:%.2f",getADC(&hadc2));
		LCD_DisplayStringLine(Line4, (uint8_t *)text);
		
		if(V > max_v)
		{
			sprintf(text,"   Status:Upper");
			LCD_DisplayStringLine(Line5, (uint8_t *)text);
		}
		else if(V < min_v)
		{
			sprintf(text,"   Status:Lower");
			LCD_DisplayStringLine(Line5, (uint8_t *)text);
		}
		else
		{
			sprintf(text,"   Status:Normal");
			LCD_DisplayStringLine(Line5, (uint8_t *)text);
		}
		
	}
	else if(view==1)
	{
		char text[30];
		
		//disp_clear();
		sprintf(text,"    Setting    ");
		LCD_DisplayStringLine(Line1, (uint8_t *)text);
		if(hang == 1)
		{
			LCD_SetBackColor(Yellow);
			sprintf(text,"   Max Volt:%.2f     ",max_v);
			LCD_DisplayStringLine(Line3, (uint8_t *)text);
			LCD_SetBackColor(Black);
		}
		else
		{
			sprintf(text,"   Max Volt:%.2f     ",max_v);
			LCD_DisplayStringLine(Line3, (uint8_t *)text);
		}
		if(hang == 2)
		{
			LCD_SetBackColor(Yellow);
			sprintf(text,"   Min Volt:%.2f     ",min_v);
			LCD_DisplayStringLine(Line4, (uint8_t *)text);
			LCD_SetBackColor(Black);
		}
		else
		{
			sprintf(text,"   Min Volt:%.2f     ",min_v);
			LCD_DisplayStringLine(Line4, (uint8_t *)text);
		}
		
		if(hang == 3)
		{
			LCD_SetBackColor(Yellow);
			sprintf(text,"   Upper:LD%d        ",up_led);
			LCD_DisplayStringLine(Line6, (uint8_t *)text);
			LCD_SetBackColor(Black);
		}
		else
		{
			sprintf(text,"   Upper:LD%d        ",up_led);
			LCD_DisplayStringLine(Line6, (uint8_t *)text);
		}
		if(hang == 4)
		{
			LCD_SetBackColor(Yellow);
			sprintf(text,"   Lower:LD%d        ",lo_led);
			LCD_DisplayStringLine(Line7, (uint8_t *)text);
			LCD_SetBackColor(Black);
		}
		else
		{
			sprintf(text,"   Lower:LD%d        ",lo_led);
			LCD_DisplayStringLine(Line7, (uint8_t *)text);
		}
		
	}
	
	LED_mie();
	
	if(V < min_v)
	{
		TurnOn_LED(lo_led);
	}
	else
	{
		TurnOff_LED(lo_led);
	}
	if(V > max_v)
	{
		TurnOn_LED(up_led);
	}
	else
	{
		TurnOff_LED(up_led);
	}
}

按键模块

void key_proc()
{
	if(key[0].key_flag == 1)
	{
		view = !view;
		LCD_Clear(Black);
		key[0].key_flag = 0;
	}
	if(key[1].key_flag == 1)
	{
		if(view == 1)
		{
			hang++;
			if(hang == 5)
			{
				hang = 1;
			}
		}
		key[1].key_flag = 0;
	}
	if(key[2].key_flag == 1)
	{
		if(view == 1)
		{
			if(hang == 1 && max_v < 3.3)		//不超过3.3
			{
				max_v = max_v + 0.3;
			}
			else if(hang == 2 && min_v < 3.3 && min_v < max_v)			//不超过3.3,并且不超过max_v
			{
				min_v = min_v + 0.3;
			}
			
			else if(hang == 3)
			{
				if(up_led+1 == lo_led)
						up_led++;
				if(++up_led >= 9)
				{
					up_led = 1;
				}
				if(up_led == lo_led)
						up_led++;
			}
			
			else if(hang == 4)
			{
				if(up_led == lo_led+1)
						lo_led++;
				if(++lo_led >= 9)
				{
					lo_led = 1;
				}
				if(up_led == lo_led)
						lo_led++;
			}
		}
		key[2].key_flag = 0;
	}
	if(key[3].key_flag == 1)
	{
		if(view == 1)
		{
			if(hang == 1 && max_v > 0 && max_v > min_v)
			{
				max_v = max_v - 0.3;
			}
			else if(hang == 2  && min_v > 0)
			{
				min_v = min_v - 0.3;
			}
			
			else if(hang == 3)
			{
				if(up_led-1 == lo_led)
						up_led--;
				if(--up_led <= 0)
				{
					up_led = 8;
				}
				if(up_led == lo_led)
						up_led--;
			}
			
			else if(hang == 4)
			{
				if(up_led == lo_led-1)
						lo_led--;
				if(--lo_led <= 0)
				{
					lo_led = 8;
				}
				if(up_led == lo_led)
						lo_led--;
			}
		}
		LED_mie();
		key[3].key_flag = 0;
	}
}

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

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

相关文章

C#和Lua的交互

1.C#调用Lua 1.1C#调用Lua文件中的全局变量 using System.Collections; using System.Collections.Generic; using System.IO; using UnityEngine; using XLua;/* *创建者: *创建时间: *描述:XLua管理器 *版本: */ public class XLuaManager {public static LuaEnv le;//Lua环…

计讯物联智慧景区应用解决方案,开启交互式智慧旅游新篇章

方案背景 后疫情时代&#xff0c;旅游市场逐步回暖。随着游客的旅游需求趋向个性化、多元化&#xff0c;景区的数字化转型升级势在必行。在此背景下&#xff0c;计讯物联充分发挥5G、云计算、物联网、大数据等技术的应用价值&#xff0c;以技术创新推动业务创新&#xff0c;面…

2022蓝桥杯省赛——砍竹子

问题描述 这天, 小明在砍竹子&#xff0c; 他面前有 n 棵竹子排成一排&#xff0c;一开始第 i 棵竹子的 高度为 hi​。 他觉得一棵一棵砍太慢了&#xff0c; 决定使用魔法来砍竹子。魔法可以对连续的一 段相同高度的竹子使用&#xff0c; 假设这一段竹子的高度为 H&#xff0…

【SSM】Spring6(二.Bean的生命周期)

文章目录1.Bean的作用域1.1 singleton1.2 prototype1.3 scope其它属性1.Bean的作用域 SpringBean.java package com.sdnu.spring6.bean;public class SpringBean {public SpringBean() {System.out.println("执行springBean的构造方法");} }spring-scope.xml <…

前后端分离下的-SpringSecurity

前后端分离下的SpringSecurity 项目创建 使用SpringBoot初始化器创建SpringBoot项目 修改项目依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2…

商务谈判Business Negotiation

目录 前言原文文章商务谈判常用会话前言 继续💪 原文文章 商务谈判常用会话 ❶ I cannot understand your point well. 我不太理解你的观点。 ❷ I’m conferring with my customers about online orders. 我现在跟我的顾客协商网上订单的事。 ❸ We express our pleasur…

Generalist: Decoupling Natural and Robust Generalization

通过原始图片在训练过程出的模型会受到敌对样本的干扰&#xff0c;这种问题虽然通过对抗训练增加了抵抗敌对样本的鲁棒性&#xff0c;但也损失了一部分自然泛化的能力。为了解决这个问题&#xff0c;我们将自然泛化和鲁棒泛化与联合训练解耦&#xff0c;并为每个训练制定不同的…

如何有效地跟踪项目进展?

项目失败的代价很高。通过进度跟踪&#xff0c;你可以预见问题&#xff0c;并采取必要的措施引导项目回到正轨。 根据最近的一项研究&#xff0c;由于项目表现不佳&#xff0c;组织平均浪费了其总投资的11.4%。此外&#xff0c;在那些低估了健全项目管理的重要性的企业中&…

高频面试:如何解决MySQL主从复制延时问题

MySQL 主从一直是面试常客&#xff0c;里面的知识点虽然基础&#xff0c;但是能回答全的同学不多。 比如我之前面试小米&#xff0c;就被问到过主从复制的原理&#xff0c;以及主从延迟的解决方案&#xff0c;你之前面试&#xff0c;有遇到过哪些 MySQL 主从的问题呢&#xff…

Goby漏洞更新 | SolarView Compact downloader.php 任意命令执行漏洞(CVE-2023-23333)

漏洞名称&#xff1a;SolarView Compact downloader.php 任意命令执行漏洞&#xff08;CVE-2023-23333 English Name&#xff1a;SolarView Compact downloader.php RCE (CVE-2023-23333) CVSS core: 10.0 影响资产数&#xff1a;5585 漏洞描述&#xff1a; Contec SolarV…

Java题目训练——统计每个月兔子的总数和字符串通配符

目录 一、统计每个月兔子的总数 二、字符串通配符 一、统计每个月兔子的总数 题目描述&#xff1a; 有一种兔子&#xff0c;从出生后第3个月起每个月都生一只兔子&#xff0c;小兔子长到第三个月后每个月又生一只兔子。 例子&#xff1a;假设一只兔子第3个月出生&#xff0c…

天气Weather

前言 加油 原文 天气常用会话 ❶ It looks as though it might clear up. 看起来天好像要转晴。 ❷ The forecast is not accurate. 预报不准确。 ❸ The weatherman says we’ll have a cold spell before the end of this week. 天气预报员说,在这个周末之前会有一股寒…

【数据结构与算法分析】0基础带你学数据结构与算法分析12--红黑树

红黑树 (red-black tree) 是一种自平衡二叉树&#xff0c;于 1972 年由 Rudolf Bayer 发明&#xff0c;发明时被称为 对称二叉 B 树&#xff0c;现代名称红黑树来自 Knuth 的博士生 Robert Sedgewick 于 1978 年发表的论文。红黑树的结构复杂&#xff0c;但操作有着良好的最坏情…

新的勒索软件是迄今为止最快的加密器

在一家美国公司遭到网络攻击后&#xff0c;恶意软件研究人员发现了一种似乎具有“技术独特功能”的新型勒索软件&#xff0c;他们将其命名为 Rorschach。 观察到的功能之一是加密速度&#xff0c;根据研究人员的测试&#xff0c;这将使 Rorschach 成为当今最快的勒索软件威胁。…

对Mysql的了解-索引

什么是索引? 索引是一种用于快速查询和检索数据的数据结构。常见的索引结构有: B 树&#xff0c; B树和 Hash。 索引的作用就相当于目录的作用。打个比方: 我们在查字典的时候&#xff0c;如果没有目录&#xff0c;那我们就只能一页一页的去找我们需要查的那个字&#xff0c…

结合基于规则和机器学习的方法构建强大的混合系统

经过这些年的发展&#xff0c;我们都确信ML即使不能表现得更好&#xff0c;至少也可以在几乎所有地方与前ML时代的解决方案相匹配。比如说一些规则约束&#xff0c;我们都会想到能否把它们替换为基于树的ml模型。但是世界并不总是黑白分明的&#xff0c;虽然机器学习在解决问题…

nacos本地启动单节点

1.官网下载 Releases alibaba/nacos GitHub 解压文件 unzip nacos-server-2.2.1.zip cd /Users/xiaosa/dev_tools/nacos/bin sh startup.sh -m standalone 启动不成功&#xff0c;报错入如下 原因是下面的配置为空。位置在nacos/config目录下的application.properties文件…

【英语】大学英语CET考试,导学规划与听力题答题技巧笔记(1-2)

文章目录1、课程规划和导学1.1 试卷结构和备考目标1.2 单词&#xff0c;听力&#xff0c;阅读&#xff0c;真题学习方法2、听力技巧课1&#xff08;导学与发音&#xff09;3、听力技巧课2&#xff08;答题技巧&#xff01;重要&#xff01;&#xff09;1、课程规划和导学 主讲…

C语言中宏和函数的9个区别,你都了解吗?

C语言中的宏和函数是非常相似的&#xff0c;它们都可以完成类似的功能。比如&#xff0c;想要求2个数的较大值&#xff0c;使用宏的写法是&#xff1a; // 宏的定义 #define MAX(x, y) ((x)>(y)?(x):(y))// 使用 int m MAX(10, 20);使用函数的写法是&#xff1a; // 函数…

[Golang从零到壹] 1.环境搭建和第三方包管理

文章目录安装go环境go.mod第一种情况&#xff0c;选择GOPATH第二种情况&#xff0c;不选择GOPATH(推荐)GO111MODULEgo module可执行文件位置安装go环境 go在安装时选择好安装目录完成安装之后&#xff0c;还需要设置两个环境变量&#xff1a;GOROOT、GOPATH GOROOT即go的安装…
最新文章