Trig:当它为高电平10微秒的信号时,告诉超声波测距模块准备发射超声波
Echo:若为1则说明超声波已发出,若为0则说明超声波已返回。
超声波的速度约等于声速(340m/s)
一个机器周期的时间(计数器加1的时间):1.085微秒
代码示例:
#include "reg52.h"
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 Time0Init()
{
TMOD &= 0xF0;
TMOD |= 0x01;
TH0 = 0;
TL0 = 0;
}
void Delay500ms()//@11.0592MHz
{
unsigned char i, j, k;
i = 4;
j = 129;
k = 119;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void Delay10ms()//@11.0592MHz
{
unsigned char i, j;
i = 18;
j = 235;
do
{
while (--j);
} while (--i);
}
void Delay100ms()//@11.0592MHz
{
unsigned char i, j;
i = 180;
j = 73;
do
{
while (--j);
} while (--i);
}
void startHC()
{
Trig = 0;
Trig = 1;
Delay10us();
Trig = 0;
}
void main()
{
double time;
double dis;
Time0Init();
while(1){
Delay10ms();
startHC();
while(Echo == 0);
TR0 = 1;
while(Echo == 1);
TR0 = 0;
time = (TH0 * 256 + TL0)*1.085;
dis = time * 0.017;
if(dis < 30){
D5 = 0;
D6 = 1;
}else{
D5 = 1;
D6 = 0;
}
TH0 = 0;
TL0 = 0;
}
}
while循环改变灯的形态必须加延迟,因为闪的太快人眼反应不过来,测的距离是测距离模块最近的距离