1、超声波测距模块
发送波:TRIG(给TRIG端口至少10us的高电平)
开始发:ECHO由低电平跳转到高电平,表示开始发送波
接受波:ECHO由高电平跳转到低电平,表示波回来了
时间计算:发波时开始启动定时器,收波时停止定时器,计算中间经过多少时间(ECHO维持高电平的时间)
距离计算:速度(340m/s)*时间/2
2、实验
当距离小于10cm时,D5亮D6灭,否则D5灭D6亮
代码如下:
//距离小于10cm,D5亮,D6灭,反之相反
#include "reg52.h"
sbit D5 = P3^7;
sbit D6 = P3^6;
sbit Trig = P1^5;
sbit Echo = P1^6;
void Time0Init()
{
//设置定时器0工作模式1,初始值0开始数数
TMOD &= 0xF0;
TMOD |= 0x01;
TH0 = 0;
TL0 = 0;
}
void Delay10us() //@11.0592MHz
{
unsigned char i;
i = 2;
while (--i);
}
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;//us为单位
//5、距离=速度*时间/2
dis = time*0.017;
if(dis<10)
{
D5 = 0;
D6 = 1;
}
else
{
D5 = 1;
D6 = 0;
}
//定时器数据清零,以便于下次测距
TH0 = 0;
TL0 = 0;
}
}