简介

数据手册可与此处下载

时序

  • TRIG端口触发测距,需保持至少10us的高电平信号
  • 模块自动发送8个40khz的方波,自动检测是否有信号返回
  • 有信号返回时,通过ECHO输入高电平,高电平的时间即为超声波传播的时间
  • 注意测量周期需要大于60ms避免两次信号之间的干扰;同时需要设置测量时间溢出避免无法检测到信号时单片机的未响应。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
void sr04_measure()
{
uint time=0;
trg=1;
delay_10us();
trg=0; //拉高trg保持10us以上触发测距
while(echo==0); //等待echo变为高电平
TR0=1;
while(echo==1&&TF0==0); //等待echo变为低电平或者定时器溢出
TR0=0;
if(TF0==1)
{
TF0=0;
TH0=TL0=0;
distance=999;
}
else
{
time=TH0*256+TL0;
TH0=TL0=0;
distance=(time*1.7)/100;
}
}

void main()
{
init_sys();
init_timer0();
init_timer1();
while(1)
{
if(flag_200ms)
{
flag_200ms=0;
sr04_measure(); //每200ms测量一次避免干扰
}
}
}