#include<reg52.h>
#define uc unsigned char
uc ms=0,s=0;
sbit trig=P1^7;
sbit echo=P1^6;
void delay(uc c)
{
while(--c);
}
void delay1(uc c1)
{
uc a,b;
for(;c1>0;c1--)
for(a=38;a>0;a--)
for(b=130;b>0;b--);
}
void putc(uc j)
{
SBUF=j;
while(TI==0);
TI=0;
}
void putstr(uc * k)
{
while(*k!='\0')
putc(*k++);
}
void send()
{
trig=1;
delay(5);
trig=0;
}
void main()
{
TMOD=0X21;
TH0=0;
TL0=0;
TH1=0XFD;
TL1=0XFD;
TR1=1;
SCON=0X50;
ET0=1;
EA=1;
while(1)
{
send();
while(echo==0);
TR0=1;
TH0=0;
TL0=0;
while(echo==1);
TR0=0;
s=(TH0*256+TL0)/58;
putstr("距离为:");
putc(s/100+'0');
putc(s/10%10+'0');
putc(s%10+'0');
delay1(20);
}
}
注:这个程序是利用串口调试工具实现的,所以需要单片机有USB转TTL模块,如果没有需要外界串口模块;同时,串口调试工具不同,返回的字符可能存在译码不正确的情况,如果出现大家可以在评论区或私信交流~
- 接线:
- 超声波模块:
- VCC、GND与单片机的相应引脚连接
- trig接P1^7
- echo接P1^6