利用51单片机实现超声波测距功能,利用单片机控制超声波的发射和对超声波自发射至接收往返时间的计时。系统定时发射超声波,在启动发射电路的同时启动单片机内部的定时器,利用定时器的计数功能记录超声波发射的时间和收到反射波的时间。当收到超声波的反射波时,接收电路输出端产生一个负跳变,单片机检测到这个负跳变信号后,停止内部计时器计时,读取时间,计算距离,测量结果输出给LCD显示。
1.系统电路图
超声波测距仪由单片机AT89C51、超声波电路和显示电路还有警报电路,按键控制等组成,如图所示。单片机选用AT89C51,采用12MHz高精度的晶振,以获得较稳定时钟频率,减小测量误差。单片机用P3.5端口输出超声波换能器所需的40kHz的方波信号,P3.2(以超声波模块2为例)端口监测超声波接收电路输出的返回信号。显示电路采用简单实用的LCD显示屏。
2.系统软件流程图
系统首先完成初始化,超声波发射端向目标发射超声波,接收头接收到反射的回波后(有高电平),经过接收电路处理,向单片机P3.2输入一个低电平脉冲。单片机控制着超声波的发送,超声波发送完毕后,立即启动内部计时器计时,当检测到P3.2由高电平变为低电平后,立即停止内部计时器计时。单片机将测得的时间与声速相乘再除以2即可得到测量值,最后经LCD显示屏测得的结果显示出来。
3.系统仿真效果
4.附录距离计算函数
/*********************************************************/
// 计算超声传感器测量到的距离
/*********************************************************/
uint GetDistance(void)
{
uint ss; // 用于记录测得的距离
TH0=0;
TL0=0;
Trig1_P=1; // 给超声波模块1一个开始脉冲
DelayMs(1);
Trig1_P=0;
while(!Echo1_P); // 等待超声波模块1的返回脉冲
TR0=1; // 启动定时器,开始计时
while(Echo1_P); // 等待超声波模块1的返回脉冲结束
TR0=0; // 停止定时器,停止计时
ss=((TH0*256+TL0)*0.034)/2; // 距离cm=(时间us * 速度cm/us)/2
return ss;
}