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

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


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

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


一、题目难点解析

  1. 性能要求中:设定的温度参数在退出参数设置界面是有效
    解释:“有效”指的是进行了“温度参数”与“实际温度”的比较,且能够用万用表测得模拟输出有变化。
    题意指,参数界面只负责显示温度参数,但并不进行温度参数与实际温度的比较,设置的温度参数并不是立即生效,故在参数界面下改变温度参数后,用万用表测模拟输出仍然是一个固定的值。
    只有退出参数界面(进入DAC输出界面)时才生效,万用表测模拟输出的值有所变化。
    方法:在数码管显示中的dac界面(stat_smg == 3 即 case 3)中,将温度参数(temp_param)赋值给专门用来比较的温度变量(param)。
    退出参数设置界面后,下一个正是dac界面,满足了退出后参数有效的要求
  1. DA转换:
    方法:代码如下
void DA_out(unsigned char dat)		
{
	I2CStart();
	
	I2CSendByte(0x90);				//PCF8591的写设备地址
	I2CWaitAck();	
	
	I2CSendByte(0x43);				//输出DAC,转换AIN3
	I2CWaitAck();

	I2CSendByte(dat);				//设置DAC电压输出参数
	I2CWaitAck();
	
	I2CStop();
}

unsigned int smg_dac = 0;			//数码管显示的数字量
void Mode_Work()
{
	unsigned char data_dac = 0;
	Read_Temp();
	
	switch(mode)
	{
		case 1:
			if(real_temp < param)	//与退出参数设置界面后生效的温度参数相比较
				smg_dac = 000;		//float real_temp; 实际温度(带小数点)
			else
				smg_dac = 500;
		break;
			
		case 2:
			if(real_temp < 20)
				smg_dac = 100;
			else if(real_temp < 40)
				smg_dac = 15 * real_temp - 200;
			else
				smg_dac = 400; 
		break;
	}
	data_dac = smg_dac * 0.51;		//精度换算为模拟量 5V(数码管上显示为500)对应255,255/500=0.51
	DA_out(data_dac);				//输入数字量,输出模拟量(在板子上用万用表测)
}

二、易出错点提示

  1. 温度显示两位小数
    方法:乘以分辨率后的数值,再乘以100,将两个小数位移到整数位,便于数码管处理

在这里插入图片描述

//float real_temp; 实际温度(带小数点)
//unsigned int smg_temp; 数码管上显示(四位整数)
//unsigned int temp; 乘以分辨率之前的原始温度数据
if((temp & 0xf800) == 0x0000)	    //判断前五位是否为0(为0即获取的温度为正数)
	{
		real_temp = temp * 0.0625;
	}
	smg_temp = real_temp * 100;		//数码管上显示四位数字,故将小数位的两位提到整数位
	SMG_Display();

  1. 为不影响数码管显示和数据采集过程,可以在按键松手检测的while语句中刷新相关函数

三、完整代码链接

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


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

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值