基于51单片机超声波测距

超声波模块

1.简介

基于51单片机超声波测距_第1张图片

超声波测距模块是用来测量距离的一种产品,通过发送和收超声波,利用时间差和声音传播速度,计算出模块到前方障碍物的距离。模块除了两个电源引脚外,还有TRIG,ECHO引脚,可接入单片机作为外设开发。

2.如何使用超声波模块

超声波模块测距原理是通过TRIG发送波,ECHO接受波来实现的,通过计算来回时间算出超声波距离。

超声波时序图

基于51单片机超声波测距_第2张图片

观察时序图可知,通过给Trig端口至少10us的高电平触发模块发出超声波信号,当Echo信号由低电平跳转到高电平,表示开始发送波,由高电平跳转回低电平,表示波回来了。

通过Echo引脚维持高电平的时间得到超声波来回的时间,我们可以当波发出去的那一下,开始启动定时器,波回来的那一下,我们开始停止定时器,计算出中间经过多少时间。

距离=速度(340m/s)*时间/2。

3.代码实现

#include 
#include 
sbit D5=P3^7;
sbit D6=P3^6;
sbit Trig=P1^5;
sbit Echo=P1^6;
void Delay10us()		//@11.0592MHz
{
	unsigned char i;

	i = 2;
	while (--i);
}
void Delay300ms()		//@11.0592MHz
{
	unsigned char i, j, k;

	_nop_();
	i = 3;
	j = 26;
	k = 223;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

void Time0init()
{
	TMOD &=0xF0;
	TMOD |=0x01;
	TH0=0;
	TL0=0;
}
void startHC()
{
	Trig=0;
	Trig=1;
	Delay10us();
	Trig=0;
}
void main()
{
	double time;
	double dis;
	Time0init();
	while(1){
	//1.给Trig至少10us高电平
  startHC();
	//2.由低电平跳转高电平,表示开始发送波
	while(Echo==0);
	TR0=1;
	//3.由高电平跳转低电平,表示波回来了
	while(Echo==1);
	//回来那下停止定时器
	TR0=0;
	//4.计算时间
	time=(TH0*256+TL0)*1.085;
	//5.计算距离
	dis=0.017*time;
	if(dis<10){
    D5=0;
		D6=1;
  }else{
    D5=1;
		D6=0;
  }
	Delay300ms();
	 TH0=0;
	 TL0=0;
 }
}

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