蓝桥嵌入式第十届省赛做题分享(ADC校准、LED与LCD冲突)
ADC校准、LED与LCD冲突、定时器LED闪烁。
目录
前言
看过前几篇文章的小伙伴都知道我是只分享做题思路的,具体的代码实现的话,有需要再发邮箱给我。
那么,我们开始分析第十届省赛的题目吧。这届题目相对来说还是比较简单的,直接看着题目就能码甚至都不用画思维导图,但我还是建议各位在做工程题目时可以养成画思维导图的习惯,这样在敲代码的时候会顺畅很多。
思维导图
根据题意我们可以画出以下思维导图来辅助我们进行功能实现。

页面
页面切换
首先便是简单的页面切换,用一个bool类型的p_flag变量即可,按键B1负责实现p_flag的取反(在0和1之间),便可实现页面切换。
setting界面
内设有三个用按键实现的功能,注意,B2~4三个按键只在setting界面下有效,即p_flag==1时,可实现按键功能。
B2是选择按键,用int类型的变量%4即可循环切换。B3、B4是变量加、减按键。注意一个小细节,B3“加”按键时,对于min不可以大于max(min<=max),同理B4“减”按键时,max不可以小于min(max>=min)。
ADC校准
ADC使用久之后会出现部分偏差,若不进行校准的话,模拟电压输出最高仅能达到3.25(达不到3.3)。那么校准方式也比较简单了,用一个函数即可。
//在ADC使用前加上下列函数。(hadc2是因为R37使用的是ADC2通道)
HAL_ADCEx_Calibration_Start(&hadc2,ADC_SINGLE_ENDED);
其他处理
解决LED与LCD的使用冲突
在lcd.c中找到下列三个函数

在每个函数的开头和结尾分别进行一次处理,即在使用前先存下寄存器的状态,每次使用完成后将寄存器的状态重置,便可避免使用完lcd后对led的影响。



定时器LED闪烁
通过设置定时器(以TIM4为例),下列设置的是1ms扫描一次。

在中断处理函数中(注意关键词,中断处理,因此你需要将NVIC Settings里中断处理勾选上)。
接下来可设置led_time计时,当时间达到200ms时反转led标志位,同时时间归0重新开始计时。

而在led的处理中,注意使用后一定要将led_flag标志位归0,才可达到闪烁效果,否则将会处于常亮状态。
If(led_flag==1){
//led亮
Led_flag=0;
}else{
//led灭
}
总结
至此,本次分析便到此结束,一部分模块已经实现,剩下的只需要利用这些“积木”搭出房子即可。若需源代码可以私聊或评论留下邮箱。
往期推荐:
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐
所有评论(0)