
输出是高低电平,高电压的时间代表超声波的回波时间。

HC-SR04超声波模块使用问题
这个要测测硬件哪里有故障了。
一般来说是硬件得的问题。
一般来说是硬件得的问题。

关于HC-SR04超声波模块51单片机读数的问题
#include/
/
正常程序 #include #define uchar unsigned char #define uint unsigned int #define ulong unsigned long sbit TA=P3^7;
/
/
输出信号 sbit RX=P3^3;
/
/
接收信号 sbit wei=P1^6;
sbit duan=P1^7;
sbit in1=P1^0;
sbit in2=P1^1;
sbit in3=P1^2;
sbit in4=P1^3;
uint time,m;
/
/
定义脉冲个数 uint timeH,timeL;
uint qian,bai,shi,ge;
ulong s=0;
/
/
用于显示最后计算的距离 bit flag;
/
/
溢出标志位接收标志位 uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92, 0x82,0xf8,0x80,0x90,0x88,0x83,0xc6, 0xa1,0x86,0x8e,0x89};
uchar code table1[]={0xfe,0xfd,0xfb,0xf7};
void display(uint qian,uint bai,uint shi,uint ge,uint s );
void delay(uint z) { uint x,y;
for(x=z;
x>
0;
x--) for(y=200;
y>
0;
y--);
} void delay20us() { uchar a;
for(a=0;
a<
100;
a++);
} void qianjin() { in1=1;
in2=0;
in3=1;
in4=0;
} void houtui() { in1=0;
in2=1;
in3=0;
in4=1;
} void main() { uint s;
TA=0;
EA=1;
TMOD=0x10;
while(1) { EA=0;
TA=1;
delay20us();
delay20us();
TA=0;
while(RX==0);
flag=0;
EA=1;
EX1=1;
TH1=0;
TL1=0;
TF1=0;
TR1=1;
delay(70);
TR1=0;
EX1=0;
if(flag==1) { time=timeH*256+timeL;
/
/
s=time*0.17;
s=(time*1.7)/
100;
display(qian,bai,shi,ge,s);
} if(flag==0) { s=0;
} if(s>
=100) qianjin();
if(s<
=90) houtui();
} } void display(uint qian,uint bai,uint shi,uint ge,uint s ) { uchar i;
qian=s/
1000;
bai=s%1000/
100;
shi=s%100/
10;
ge=s%10;
for(i=0;
i<
10;
i++) { wei=1;
P2=0xfe;
wei=0;
duan=1;
P2=table[qian];
duan=0;
delay(10);
P2=0xff;
/
/
消隐 wei=1;
P2=0xfd;
wei=0;
duan=1;
P2=table[bai];
duan=0;
delay(10);
P2=0xff;
/
/
消隐 wei=1;
P2=0xfb;
wei=0;
duan=1;
P2=table[shi];
duan=0;
delay(10);
P2=0xff;
/
/
消隐 wei=1;
P2=0xf7;
wei=0;
duan=1;
P2=table[ge];
duan=0;
delay(10);
P2=0xff;
/
/
消隐 } } void time1() interrupt 0 { timeH=TH1;
timeL=TL1;
flag=1;
EX1=0;
} void time3() interrupt 3 { TH1=0;
TL1=0;
}
/
正常程序 #include #define uchar unsigned char #define uint unsigned int #define ulong unsigned long sbit TA=P3^7;
/
/
输出信号 sbit RX=P3^3;
/
/
接收信号 sbit wei=P1^6;
sbit duan=P1^7;
sbit in1=P1^0;
sbit in2=P1^1;
sbit in3=P1^2;
sbit in4=P1^3;
uint time,m;
/
/
定义脉冲个数 uint timeH,timeL;
uint qian,bai,shi,ge;
ulong s=0;
/
/
用于显示最后计算的距离 bit flag;
/
/
溢出标志位接收标志位 uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92, 0x82,0xf8,0x80,0x90,0x88,0x83,0xc6, 0xa1,0x86,0x8e,0x89};
uchar code table1[]={0xfe,0xfd,0xfb,0xf7};
void display(uint qian,uint bai,uint shi,uint ge,uint s );
void delay(uint z) { uint x,y;
for(x=z;
x>
0;
x--) for(y=200;
y>
0;
y--);
} void delay20us() { uchar a;
for(a=0;
a<
100;
a++);
} void qianjin() { in1=1;
in2=0;
in3=1;
in4=0;
} void houtui() { in1=0;
in2=1;
in3=0;
in4=1;
} void main() { uint s;
TA=0;
EA=1;
TMOD=0x10;
while(1) { EA=0;
TA=1;
delay20us();
delay20us();
TA=0;
while(RX==0);
flag=0;
EA=1;
EX1=1;
TH1=0;
TL1=0;
TF1=0;
TR1=1;
delay(70);
TR1=0;
EX1=0;
if(flag==1) { time=timeH*256+timeL;
/
/
s=time*0.17;
s=(time*1.7)/
100;
display(qian,bai,shi,ge,s);
} if(flag==0) { s=0;
} if(s>
=100) qianjin();
if(s<
=90) houtui();
} } void display(uint qian,uint bai,uint shi,uint ge,uint s ) { uchar i;
qian=s/
1000;
bai=s%1000/
100;
shi=s%100/
10;
ge=s%10;
for(i=0;
i<
10;
i++) { wei=1;
P2=0xfe;
wei=0;
duan=1;
P2=table[qian];
duan=0;
delay(10);
P2=0xff;
/
/
消隐 wei=1;
P2=0xfd;
wei=0;
duan=1;
P2=table[bai];
duan=0;
delay(10);
P2=0xff;
/
/
消隐 wei=1;
P2=0xfb;
wei=0;
duan=1;
P2=table[shi];
duan=0;
delay(10);
P2=0xff;
/
/
消隐 wei=1;
P2=0xf7;
wei=0;
duan=1;
P2=table[ge];
duan=0;
delay(10);
P2=0xff;
/
/
消隐 } } void time1() interrupt 0 { timeH=TH1;
timeL=TL1;
flag=1;
EX1=0;
} void time3() interrupt 3 { TH1=0;
TL1=0;
}
