超声波测距模块的使用

超声波测距模块的使用

超声波测距模块:

超声波测距模块有好多种类型,目前比较常用的有URM37超声波传感器默认是232接口,可以调为TTL接口,URM05大功率超声波传感器测试距离能到10米,算是目前来说测试距离比较远的一款了,另外还有比较常用的国外的几款SRF系列的超声波模块,目前的超声波模块精度能到1cm

工作原理:

超声波测距模块是用来测量距离的一种产品,通过发送和就接收超声波,利用时间差和声音传播速度,计算出模块到前方障碍物的距离。

具体使用及代码

1、定义引脚

#include
#include
sbit Trig = P1^0;
sbit Echo = P1^1;

2、设定串口波特率

void init_115200()
{
	SCON = 0x50;
	T2CON |= 0X30;
	TH1 = 0xFF;
	TL1 = 0xFD;
	RCAP2H = 0XFF;
	RCAP2L = 0XFD;
	TR2 = 1;
	ES = 1;
	EA = 1;
	ET0=1;
}

3、设定发送时间

void Delay10us()
{
	TMOD |= 0x1;
	TH0 = 0xFF;
	TL0 = 0xF6;
	TR0 = 1;
	while(!TF0);
	TF0 = 0;
}

void CSB_Rstart()  //启动超声波模块,初始化
{
	Trig=0;
	Trig=1;
	Delay10us();
	Trig=0;
}

4、获取时间和距离

int gettime()//获取时间
{
	unsigned int time = 0;
	time = TH0<<8 | TL0;  //TH0*256+TL0
	return time;
}

float CSB_Getdis(unsigned int time)  //获取距离 
{
	float distance;
	distance = (float)time * 0.0017;
	TH0=0;
	TL0=0;//清空计时器·
	return distance;
}

void star()
{
	TH0 = 0;
	TL0 = 0;
	TR0 = 1;
}

void end()
{
	TR0 = 0;
}

 void CSB_GetOnce()  //获取一次超声波测距模块的距离
{
	CSB_Rstart();
	while(!Echo);//当Echo为零时等待
	star();
	while(Echo);//当Echo为1计数并等待
	end();
}

5、将所测距离打印出来

int main()
{
	unsigned int time = 0;
	float dis;
	char buf[24]={'\0'};
	init_115200();
	
	while(1)
	{  
		CSB_GetOnce();
		time = gettime();
		dis = CSB_Getdis(time);
		sprintf(buf,"dis=%fcm\r\n",dis);
		delay();
		upt(buf);
	}
	return 0;
}

打印函数

void shuchu(char c)
 {
	SBUF = c;
	while(TI==0);
	TI = 0;	   
}

void upt(char *p)
 {
 	while(*p != '\0'){
	shuchu(*p);
	p++;
	}
 }

延时函数

void delay()
{
	int i;
	int j;
	for(i=0;i<100;i++)
		for(j = 0;j<2000;j++);
}

你可能感兴趣的:(嵌入式,单片机)