1.简介
2.超声波的时序图
3.基于51单片机实现的代码
#include "reg52.h"
#include "intrins.h"
sbit led1=P3^7;//小于10,led1亮,led2灭
sbit led2=P3^6;//否则,led1灭,led2亮
sbit trig=P1^5;
sbit echo=P1^6;
void Delay10us() //@11.0592MHz
{unsigned char i;i = 2;while (--i);
}
void Delay200ms() //@11.0592MHz
{unsigned char i, j, k;_nop_();i = 2;j = 103;k = 147;do{do{while (--k);} while (--j);} while (--i);
}
void Timer0Init(void) //100微秒@11.0592MHz
{TMOD &= 0xF0; //设置定时器模式TMOD |= 0x01; //设置定时器模式TL0 = 0; //设置定时初值TH0 = 0; //设置定时初值// TR0 = 1; //定时器0开始计时
}
void startHC()
{trig=0;trig=1;Delay10us();trig=0;
}
void main()
{double time;double dis;Timer0Init();while(1){Delay200ms();//因为没有晶振,需要延时200msstartHC();//超声波初始化while(echo==0);TR0 = 1;//开启定时器,记录高电平时长while(echo==1);TR0 = 0;//关闭定时器time=(TH0*256+TL0)*1.085;//1.085微秒dis=time*0.017;//转化为微秒/cmif(dis<10){led1=0;led2=1;}else{led1=1;led2=0;}TL0 = 0; //重新设置定时初值,方便下一次测距TH0 = 0;}
}