#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