目录

前言

思维导图

页面

页面切换

setting界面

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灭

}

总结

至此,本次分析便到此结束,一部分模块已经实现,剩下的只需要利用这些“积木”搭出房子即可。若需源代码可以私聊或评论留下邮箱。

往期推荐:

按键长短按实现

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐