蓝桥杯单片机第十二届国赛真题解析-功能全部实现

前言:

本文详细解析了蓝桥杯单片机第十二届国赛真题

本篇所示代码已实现所有功能,但因4t上无相关真题的测评,不排除会有未发现的bug,文章最后会附上完整工程,有需要的同学自行提取

一.测量模式

蓝桥杯单片机第十二届国赛真题解析-功能全部实现_第1张图片

蓝桥杯单片机第十二届国赛真题解析-功能全部实现_第2张图片

1.定时模式

定时模式相对来说比较容易实现,如果时钟底层用的是十六进制来写入的时间数据,可以设置一个变量将十六进制转化为十进制再去余采集时间参数,或者直接使用十进制的时钟底层(具体可以看另一篇文章-ds1302模块)

值得注意的是当该秒满足触发条件时有1s的满足时间(例如2s初到2s末),而在这段时间内时

距离数据是在不断读取的,会造成数据跳动,所以我们使用标志位1s读取一次距离

2.触发模式

通过光敏电阻采集的亮暗变化状态进行触发,即判断上一次的状态和这一次的状态进行比较,若满足从亮到暗则进行一次数据采集

二.数据计算(最大值 最小值 平均值)

1.最大值最小值的判断

if(ucRtc[2]%time_record==0)
{
	right=1;
 if(old_length!=0)
 {
	if(maxlength==0)maxlength=old_length;
	else if(maxlength!=0)
	{
		if(length>=maxlength)maxlength=length;
	}
		
	if(minlength==0)minlength=old_length;
	else if(minlength!=0)
	{
		if(length!=0&&length

2.平均值

if(count4>=1000)
{	
	flag_length=1;
	length=len;
	if(length!=0)
 {
	num++;//记录次数
	sumlength+=length;//总值		
	count4=0;
	right=0;
 }
}
//平均值=总值*1.0/次数

三.连续测量

蓝桥杯单片机第十二届国赛真题解析-功能全部实现_第3张图片

要连续三次满足距离条件

可以设一个变量,满足条件时,变量加一,一旦不满足条件直接将其值清零,最后再判断该变量的值是否大于等于3

if(lengthmode==1)
{
	if(length>=(length_record*10-5)&&length<=(length_record*10+5))
	{
		i++;	
		if(i>=3)Led_Config(4,1);
	}
	else 	if(length<(length_record*10-5)||length>(length_record*10+5))
	{
		i=0;Led_Config(4,0);
	}
}

四.超声波误差问题

#include 
#include 

sbit TX=P1^0;
sbit RX=P1^1;

void Delay14us()	//@12.000MHz
{
	unsigned char data i;

	_nop_();
	_nop_();
	i = 38;
	while (--i);
}

void WaveInit()
{
	unsigned char i;
	EA=CR=0;//让超声波更稳定
	for(i=0;i<10;i++)
	{
		TX=1;
		Delay14us();		
		TX=0;
		Delay14us();		
	}
	EA=CR=1;
}

unsigned char csb()
{
	unsigned int time;
	CMOD=0x00;
	CH=CL=0;
	WaveInit();
	CR=1;
	while((RX==1)&&(CF==0));
	CR=0;
	if(CF==0)
	{
		time=CH<<8|CL;
		return (time*0.017+2);//经实际测量 手动校准加2
	}
	else 
	{
		CF=0;
		return 0;
	}
}

五.完整工程链接

链接:https://pan.baidu.com/s/11ETRR727S8ISoush9FQxTw?pwd=1111 
提取码:1111 
 

你可能感兴趣的:(蓝桥杯单片机试题解析,蓝桥杯,单片机,51单片机)