【蓝桥杯单片机】十三届省赛“重难点”解析(附源码)

【蓝桥杯单片机】十三届省赛“重难点”解析


笔记包括:①题目难点解析、②易出错点提示、③完整代码链接
本文提供的所有代码都是使用第十四届竞赛包完成

⭐系列文章链接⭐
【蓝桥杯单片机】十四届省赛“重难点”解析(附源码)
【蓝桥杯单片机】十三届省赛“重难点”解析(附源码)
【蓝桥杯单片机】十二届省赛“重难点”解析(附源码)
【蓝桥杯单片机】十一届省赛“重难点”解析(附源码)


一、题目难点解析

  1. 模式按键
    解释:和S12按键要做的操作不同,并不需要显示任何界面在数码管上;是一种模式切换,在后文中有详细说明,在何种模式下继电器应该做出如何种响应
    方法
    ①温度控制模式:在获取温度后将当前温度与温度参数作比较,使继电器吸合或断开
    ②时间控制模式:在获取时钟后判断是否为整点,并设置整点标志(F_time)与计时5s变量(count_5s);
    当F_time == 1时开始计时同时打开继电器,判断5s条件满足后关闭继电器

在这里插入图片描述
在这里插入图片描述

  1. 按下显示界面1(分、秒),松开显示界面2(时、分)
    方法:(时间显示界面下)将按下与松开时的状态——看作是数码管显示的两种界面(stat_smg)

在这里插入图片描述

二、易出错点提示

  1. 数码管和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;	//赋值后,关闭全部锁存器
}

  1. 温度一上电显示默认值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

  1. 多次刷新数码管与温度数据,保证数码管的正常显示与温度值的更新

在这里插入图片描述

三、完整代码链接

下面提供了13届蓝桥杯单片机省赛代码,依据小蜜蜂老师风格编写
网盘链接:13届蓝桥杯单片机省赛代码-饥饿的半导体(提取码:1313)


本文是在博主练习完部分省赛题目后总结的笔记
文章为本人对试题的观点,难免有所欠缺,欢迎大家在评论区里共同讨论

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值