超声波测距模块

简介
HC-SR04超声波模块可提供2cm~400cm的距离感测功能,测量精度可以达到3mm。模块包括超声波发射器,接收器与控制电路。

基本工作原理
采用Trig引脚触发,给至少10us的高电平脉冲信号
模块自动发送8个40kHz的方波,自动检测是否有信号返回
有信号返回,通过Echo引脚输出一个高电平脉冲,高电平脉冲持续的时间就是超声波从发射到反射返回的时间。距离=(高电平脉冲时间*340)/2
超声波测距模块_第1张图片

超声波实物图:
超声波测距模块_第2张图片
接线方式:VCC、trig(控制端)、 echo(接收端)、 GND

距离=(高电平持续时间*声速(340m/s))/2

超声波代码:
#include
#include

sbit Echo=P1^0;//接受端
sbit Trig=P1^1;
void delay(int time)
{
int i;
int j;
for(i=0;i<200;i++)
for(j=0;j }
void initfunc_115200()
{
//SCON=0x40;
// SCON=0x50;
SCON |=0x1<<6|0x1<<4;

T2CON=0x1<<4|0x1<<5;

TH2=0xFF;
TL2=0xFD;
RCAP2H=0xFF;
RCAP2L=0xFD;
TR2=1;

ES =1;
EA =1;

}

void sendbyte(char a)
{
SBUF=a;
while(TI!=1);
TI=0;
//delay();
}

void sendstring(char *p)
{
while (*p!=’\0’){
sendbyte(*p);
p++;
}
}

void delay10us()
{
TMOD|=0x01;
TH0=0xff;
TL0=0xf6;
TR0=1;
while(TF0!=1);
TF0=0;
}

void initCsb()
{
Trig=0;
Trig=1;
delay10us();//采用IO口TRIG触发测距,给至少10us的高电平信号;
Trig=0;

}

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

void endTime()
{
TR0=0;
}

int getBoTime()
{ unsigned int time;
time=TH0<<8|TL0;
return time;
}

float getDis(unsigned int time)//得到一次超声波测距模块的距离
{
float dis;
dis=(float)time*0.017;
return dis;//计算
}
int main()
{
unsigned int time;
float dis;
char buf[24]={"\0"};
initfunc_115200();
while(1){

initCsb();

while(Echo!=1);
startTime();
while(Echo!=0);//ECHO变成高电平得到发出声波到返回值接受声波时间
endTime();
time=getBoTime();
dis=getDis(time);
sprintf(buf,"dis=%f\r\n",dis);//构建字符串
sendstring(buf);
delay(200);
}

}

烧入代码得到结果:
超声波测距模块_第3张图片

你可能感兴趣的:(超声波测距模块)