九层妖塔 起于垒土
● 改编自国信长天蓝桥杯官方蓝皮书例程,按照自己的习惯进行了补充和修改
蓝桥杯单片机第七届省赛-模拟风扇控制系统
-
- Notes1:按键按下后在某些情况下给一定的缓冲时间
- Notes2:用定时器定时在IO口模拟输出矩形波PWM波
- Notes3:DS18B20小数部分的处理
- Notes4:DS18B20单总线onewire严格时序与定时器中断冲突的处理
- Notes5:P34引脚的定时器1输出功能
2021.3.16
第七届省赛例程在官方蓝皮书上也有,由于模板用的就是官方的,也就没有粘贴一大段代码的必要性了。仅记录刷题过程中的感悟,和对比官方给出的第七届代码后自己写的代码的不足。
Notes1:按键按下后在某些情况下给一定的缓冲时间
第七届中,有要求按下S5后改变正在按秒递减的数值。此时如果在按下直接修改相关变量值,此变量值又会马上进行递减,所以看到的现象就是 :假设设置为60后,数码管马上变为60,之后很快递减,数码管显示59的时间不足1s,影响体验。而且是按一下S5是将倒计时时间修改为60,再按下一次修改为120,所以缓冲时间就有存在的必要了。
例程中使用的方法是设置一个延时缓冲变量ui_S5_Dly
,在按下S5后,处理完相应的任务后,将变量ui_S5_Dly
赋值为2。在60或120开始递减时先递减ui_S5_Dly
,获得2s的延迟时间。
case 5: //按键5
{
………………
………………
ui_S5_Dly = 2;
}break;
if(ui_S5_Dly) ui_S5_Dly--;
else if(uc_Work_Mode_1_Less_time) uc_Work_Mode_1_Less_time--;
Notes2:用定时器定时在IO口模拟输出矩形波PWM波
Notes3:DS18B20小数部分的处理
在第七届例程中直接右移四位,将小数部分忽略。
或者可以通过sprintf的格式控制,控制小数部分的位数%02.0f
。
onewire