51单片机实现超声波测距

利用51单片机实现超声波测距功能,利用单片机控制超声波的发射和对超声波自发射至接收往返时间的计时。系统定时发射超声波,在启动发射电路的同时启动单片机内部的定时器,利用定时器的计数功能记录超声波发射的时间和收到反射波的时间。当收到超声波的反射波时,接收电路输出端产生一个负跳变,单片机检测到这个负跳变信号后,停止内部计时器计时,读取时间,计算距离,测量结果输出给LCD显示。

1.系统电路图

图片

超声波测距仪由单片机AT89C51、超声波电路和显示电路还有警报电路,按键控制等组成,如图所示。单片机选用AT89C51,采用12MHz高精度的晶振,以获得较稳定时钟频率,减小测量误差。单片机用P3.5端口输出超声波换能器所需的40kHz的方波信号,P3.2(以超声波模块2为例)端口监测超声波接收电路输出的返回信号。显示电路采用简单实用的LCD显示屏。

2.系统软件流程图

系统首先完成初始化,超声波发射端向目标发射超声波,接收头接收到反射的回波后(有高电平),经过接收电路处理,向单片机P3.2输入一个低电平脉冲。单片机控制着超声波的发送,超声波发送完毕后,立即启动内部计时器计时,当检测到P3.2由高电平变为低电平后,立即停止内部计时器计时。单片机将测得的时间与声速相乘再除以2即可得到测量值,最后经LCD显示屏测得的结果显示出来。

图片

3.系统仿真效果及程序获取方式见连接基于51单片机的超声波三路测距icon-default.png?t=LA92https://mp.weixin.qq.com/s?__biz=MzkzMjI5OTExMA==&mid=2247484177&idx=1&sn=8f6908d4ba0528e68f998829fd881dfb&chksm=c25cab18f52b220eb4d9b0853043933c8579d9e5390395a747544583c6012cedcd9f8e75e5f2&token=946648640&lang=zh_CN#rd

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;
}

如需完整项目代码,可发送公众号消息《超声测距程序》索取。

 

版权声明:本文为CSDN博主「少年不懂编程」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/chanchairen/article/details/121887322

生成海报
点赞 0

少年不懂编程

我还没有学会写个人说明!

暂无评论

相关推荐

趣聊51之串口通信(概念篇)

对于刚刚接触单片机的同学们来说,串口通信似乎是一个神秘感十足的东西,笔者在刚刚开始学习51单片机时,读的是郭天祥先生的那本著名的《新概念51单片机教程》,贼厚的一本书,但是等

K210应用5-使用中断方式通过UART接收数据

使用中断方式通过UART接收数据 实验目的本节实验目的为实现串口发送和接收。这一节计划采取中断的方式来实现串口接收,K210串口接收到0x00,则熄灭前节提到的红色LED灯,并通过串口打印Red Le

嵌入式体系结构复习笔记

寄存器表示C语言的对应关系 R0: 存储C语言函数返回值R14 : 存储C的函数返回地址R15 : 当前执行程序的代码地址 ARM的常用指令 将数据加载到寄存器:MOV/LDR子程序调用指令: BL软中断调用指