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

前言:

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

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

一.测量模式

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<minlength)minlength=length;
	}
 }
  if(length!=0)
 {
  	old_length=length;						
 }	
}		

2.平均值

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

三.连续测量

要连续三次满足距离条件

可以设一个变量,满足条件时,变量加一,一旦不满足条件直接将其值清零,最后再判断该变量的值是否大于等于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 <STC15F2K60S2.H>
#include <intrins.h>

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 
 

  • 39
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值