【蓝桥杯单片机组】超声波模块

超声波模块分为发射、接收两个部分:
发射:通过跳线帽将P10与发射端相连
接收:连接P11,采用CX20106A作为解调芯片,主要频率在38K~41KHz,超声波实验中主要使用40Hz,当CX20106A接受到40KHz的信号时,会在7脚产生一个低电平下降脉冲,在实际调试的时候只关心芯片的7脚在收到信号是是否有一个下降沿产生。在本电路的调试中,如果一直发射超声波,在7脚将会有周期的低电平产生。不会像通常认为的那样,即一直发射信号时,7脚一直为低电平。这是刚用CX20106时的一个常见错误。
编程 思想:
(1)开定时器开始定时
(2)发射超声波40KHz(每个电平维持100个NOP,一共8周期脉冲)
(3)检测是否有RX == 0的情况,若RX == 0则接收到了反馈的波
(4)定定时器,读时间
(5)读温度(读数时:温度 = 读数 * 0.0625)
(6)计算声速(声速 = 332 + 0.607 * 温度 (m/s))、距离(距离 = 时间 (us)* 声速(m/s) / 2)


附:发送超声波代码

void sendsonic()
{
	uchar i;
	for(i=8;i>0;i--)
	{
		TX = 0;
		SNOP;SNOP;SNOP;SNOP;SNOP;	SNOP;SNOP;SNOP;SNOP;SNOP;
		TX = 1;
		SNOP;SNOP;SNOP;SNOP;SNOP;	SNOP;SNOP;SNOP;SNOP;SNOP;
	}	
}

void main()
{
	speed = 0;time = 0;distans = 0;temper = 0;
	bit1=0;bit2=0;bit3=0;bit4=0;
	cls_buzz();
	Timer0Init();
	Timer1Init();
	EA = 1;

	while(1)
	{
		display();
		if(sonic_flag  == 1)
		{
			sonic_flag = 0;
			TR1 = 1;
			sendsonic();
			while(RX == 1 && timeflag < 3);
			TR1 = 0;

			if(timeflag >= 3)		//out of time
			{
				bit1 = 10; bit2 = 10; bit3 = 10; bit4 = 10;	
			}
			else
			{
				outarea = 0; 		//in area
				time = ((TH1<<8)|TL1) + timeflag * 65536;		//us
				temper = readtemper();

				speed = 332 +  0.607*temper;
				
				distans = speed * time * 0.00005; 

				bit1 = ((unsigned int)distans) /1000;
				bit2 = (((unsigned int)distans) % 1000)/100;
				bit3 = (((unsigned int)distans) % 100)/10;
				bit4 = ((unsigned int)distans) % 10;
			}
			TH1 = 0;
			TL1 = 0;
			timeflag = 0;
		}

	 	


	}
}

void t0_isr() interrupt 1
{

	static uchar iss2;
	iss2++;
	TL0 = 0xCD;		//设置定时初值	  //2ms
	TH0 = 0xF8;		//设置定时初值
	if(iss2>= 200)	//0.4s
	{
		iss2 = 0;
		sonic_flag = 1;
	}



}

void t1_isr() interrupt 3
{

	timeflag++; 

}

编程的时候出现的问题:距离一直计算出为0或1:

解决:将distance time speed等变量设置成double

还存在的问题:数码管定时闪烁(推测是超声波测距的程序打断了显示程序,导致显示时间不均匀)尚未找到良好解决方法

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值