摘要:本文为作者对第十五届蓝桥杯嵌入式设计与开发项目模拟赛(第三期)——程序设计试题的解析。本文包括“题目要求”、“程序设计”、“效果展示”3个部分。供复盘使用。若发现错误之处,请不吝赐教。
链接:蓝桥杯嵌入式方向备赛记录(STM32G431)为作者备赛蓝桥杯嵌入式过程中,整理的学习总结。包括各模块使用要点、各模块程序等,基本搭建好工程框架,给出了各模块处理程序。
写在前面:本道题很常规,没有难度。只有一处存在疑问/歧义。
目录
一、题目要求
二、程序设计
(一)思路分析
前期已准备好模块程序、搭建好工程框架,下面结合本道题,实际分析工程思路:
1、涉及考点
按键、ADC、LED、串口、LCD。
2、几条主线
(1)按键:要完成按键检测+功能处理。“按键检测”使用模块程序(非阻塞+移位消抖)即可。下面分析具体功能:B1:界面切换按键,程序上改变界面状态标志位即可;B2、B3、B4:不同界面下执行对应功能,通过运算符对变量处理,处理好变量关系即可。
(2)ADC:采集:R37电压,注意校准即可。处理:注意C语言相关问题。
(3)LED:
常规操作:判断标志位、位带操作。主要是点亮1秒后熄灭:systic里进行秒计数;ADC处理函数内,当检测通过(合格时),将秒计数清0;在LED处理函数内,判断检测通过标志位且秒计数<2,即点亮,否则熄灭。这样就实现了:检测通过且在1秒内,灯亮。1秒后,灯不亮。
(4)串口:接收到固定数据后,返回信息。使用串口模块程序即可。4个函数:中断回调函数、判断合法性函数、串口处理函数、串口重定向。注意:9600,速度慢,单片机程序执行很快,可以将串口处理函数减速:
if(ucUar < 100) //加上去后,没有出现发送R37/8不回复的情况了 return; ucUar = 0;
(5)LCD:常规。
3、注意点
(1)合理设置变量,减小复杂度,大大缩减工作量。float 、uint8_t类型变量。如2.2在加减,可以加减22(以整型运算),在显示处/10.0(转化为浮点型)。
(2)巧妙/多设置状态标志位,使复杂问题清晰化。
(3)文章开头提到的疑问/歧义?:
疑问:合格率清零,那么对应的总检测数、符合标准数,要不要清0?
假设:总数:2 合格数 1 合格率50% 改变产品标准,清零合格率,若再检测一个,合格。则有两种处理:(1)总数为1,合格数为1,合格率100%;(2)总数为3,合格数为2,合格率66.7%。哪种思路正确呢?本程序采用思路(2)处理。最终测评为满分。