超声波模块HC-SRO4

1)引脚和原理:
该模块有VCC、GND、Trig和Echo针脚。
TRIG是输出和ECHO是输入。
该模块的工作原理为,先向TRIG脚输入至少10us的触发信号,该模块内部将发出 8 个 40kHz 周期电平并检测回波。一旦检测到有回波信号则ECHO输出高电平回响信号。回响信号的脉冲宽度与所测的距离成正比。由此通过发射信号到收到的回响信号时间间隔可以计算得到距离。公式: 距离=高电平时间*声速(340M/S)/2。

2)实现功能:
通过超声波模块测距离,并将测试距离显示到串口助手上。

3)工具:
超声波模块、51单片机、定时器模块、串口

3)代码:
#include
#include
unsigned int time;
char buf[32]={0};
float distance;
sbit TRIG=P1^0; //超声波上引脚TRIG,接单片机引脚
sbit ECHO=P1^1;//ECHO 接单片机引脚

void delay() //延时函数
{
int i;
for(i=0;i<5000;i++);
}

void inputstr(char character ) //串口输入输出存放数据,输出一个字符

	SBUF=character;	

}
void inputstring(char *p) //串口输入输出存放数据,输出一串字符
{
while(*p!=’\0’){
inputstr(*p);
p++;
delay();
}
}

void initUART_115200() //初始化串口,使用波特率115200
{
SCON = 0x50; //0101 0000 方式一
TH2=0xFF;
TL2=0xFD;
RCAP2H=0xFF;
RCAP2L=0xFD;
T2CON=0x34; //波特率115200 算法巩固
}

void init_timer() //定时器初始化
{
TMOD=0x01; //定时器0的工作方式
TH0=0xff; //高八位,设置初始值 10us
TL0=0xf6; //底八位
}
void open_counttime() //定时器开始计时,初值为0
{
TH0=0;
TL0=0;
TR0=1;
}
void end_counttime() //定时器 结束计时
{
TR0=0;
}
int get_time() //计算定时器 计时的时间。
{
unsigned int a;
a=TH0*256 + TL0; // ***
return a;
}

void CSB_Init() //超声波模块初始化
{
TMOD=0x01;
TH0=0;
TL0=0;
EA=1;
ET0=1;
TRIG = 0;
}

void main()
{
initUART_115200();
init_timer();
while(1){
CSB_Init();
TRIG=1; //输出拉高
TR0=1; //定时器开始工作
while(TF0==1); //等待10us
TR0=0; //关闭计时器
TRIG=0; //输出拉低

while(ECHO!=1);																							
open_counttime();
while(ECHO!=0);										//	输入时间,接收脉冲时间,用于计算距离																										
end_counttime();
time=get_time();																														
																																
distance = (float)time * 0.017	;
sprintf(buf,"distance=%f\r\n",distance);

inputstring(buf);
delay();

}

}

你可能感兴趣的:(超声波模块HC-SRO4)