51超声波测距简易代码
一、基本思路
1、引脚:
Trig
(控制端):控制发出的超声波信号
Echo
(接收端):接收反射回来的超声波信号
2、计算公式:
测试距离 = ( 高电平时间 x 声速 (340m/s) ) / 2
二、程序代码
//大体代码
#include<reg52.h> //按各自主控芯片而定
#include<instrins.h> //_nop_()延时 1us 函数的头文件
#define Trig P1^0 //控制端
#define Echo P1^1 //接收端
typedef unsigned int u16;
typedef unsigned long u32;
u16 distance; //距离 mm为单位
u32 time; //间隔时间 10us为单位
//程序并不全,需要自己补全其他方面的代码,只给个核心代码
//测量距离
void measure()
{
//初始化
Trig = 0;
Echo = 0;
//清除各位
TH0 = 0;
TL0 = 0;
TF0 = 0; //定时器溢出标志位
// 向控制端输入一个大于10us的脉冲信号
Trig = 1;
_nop_(); //需要延时10us,_nop_()延时1us
//...
Trig = 0;
//等待接收端产生高电平并开时计时
while (!Echo);
TR0 = 1; //定时器开始工作
while (Echo); //当接收到回传信号,接收端置低电平,退出循环
TR0 = 0;
time = TH0 * 256 + TL0; //us
distance = (int)(0.17 * time); //(340 * 1000 (mm/s)) * (time * 10 / 1000000 (s)) / 2
}
三、结语
该篇文章并不全面,目的只在于将超声波的原理转为实实在在的代码实现。
其实,原理固然重要,但是实现又是另一会事,要多培养实践能力。
(本文参考了 US-100超声波 使用)