笔记包括:①题目难点解析、②易出错点提示、③完整代码链接
注:本文提供的所有代码都是使用第十四届竞赛包完成
⭐系列文章链接⭐
【蓝桥杯单片机】十四届省赛“重难点”解析(附源码)
【蓝桥杯单片机】十三届省赛“重难点”解析(附源码)
【蓝桥杯单片机】十二届省赛“重难点”解析(附源码)
【蓝桥杯单片机】十一届省赛“重难点”解析(附源码)
一、题目难点解析
- 模式按键:
解释
:和S12按键要做的操作不同,并不需要显示任何界面在数码管上;是一种模式切换,在后文中有详细说明,在何种模式下继电器应该做出如何种响应
方法
:
①温度控制模式:在获取温度后将当前温度与温度参数作比较,使继电器吸合或断开
②时间控制模式:在获取时钟后判断是否为整点,并设置整点标志(F_time)与计时5s变量(count_5s);
当F_time == 1时开始计时同时打开继电器,判断5s条件满足后关闭继电器
- 按下显示界面1(分、秒),松开显示界面2(时、分):
方法
:(时间显示界面下)将按下与松开时的状态——看作是数码管显示的两种界面(stat_smg)
二、易出错点提示
- 数码管和LED共用P0口易冲突,使用选择锁存器同时赋值的算法,避免冲突;
且本届题目中对继电器与LED操作较多,注意赋值LED与继电器后要打开和锁住相应的锁存器
/*==============锁存器选择=============*/
void Select_HC573(unsigned char n, unsigned char dat)
{
P2 = P2 & 0x1f | 0x00; //赋值前,关闭全部锁存器
P0 = dat; //待设置的数据
switch(n) //选择锁存器
{ //高3位与0清零,或1重新赋值
//低5位与1值不变,或0值不变
case 4: P2 = P2 & 0x1f | 0x80; break;
case 5: P2 = P2 & 0x1f | 0xa0; break;
case 6: P2 = P2 & 0x1f | 0xc0; break;
case 7: P2 = P2 & 0x1f | 0xe0; break;
}
P2 = P2 & 0x1f | 0x00; //赋值后,关闭全部锁存器
}
- 温度一上电显示默认值85℃,第一次尝试使用软件生成的延时,在温度获取初始化中调用,以跳过默认值;
将温度获取初始化函数在主函数的while语句之前调用一次
void Delay750ms() //@12.000MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 35;
j = 51;
k = 182;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void Init_Read_Temp() //初次温度读取,避免读取默认值85
{
init_ds18b20(); //复位
Write_DS18B20(0xcc); //跳过ROM
Write_DS18B20(0x44); //转换温度
Delay750ms(); //直到首次温度转换完成
} //避免上电后读取温度默认值85
- 多次刷新数码管与温度数据,保证数码管的正常显示与温度值的更新
三、完整代码链接
下面提供了13届蓝桥杯单片机省赛代码,依据小蜜蜂老师风格编写
网盘链接:13届蓝桥杯单片机省赛代码-饥饿的半导体(提取码:1313)
本文是在博主练习完部分省赛题目后总结的笔记
文章为本人对试题的观点,难免有所欠缺,欢迎大家在评论区里共同讨论