news 2026/4/3 5:13:58

51单片机两路超声波测距:从原理到代码实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
51单片机两路超声波测距:从原理到代码实现

51单片机程序 两路超声波测距 超声波测距,带温度补偿, 两路超声波测距,18b20测温带温度补偿,lcd1602显示温度和实测距离。 keil4程序源码,有proteus仿真文件。

在电子制作的世界里,超声波测距是一项非常实用的技术,今天咱就来讲讲51单片机如何实现两路超声波测距,并且带上温度补偿,再用18B20测温,最后通过LCD1602显示温度和实测距离,还会分享Keil4程序源码以及Proteus仿真文件哦。

超声波测距原理

超声波测距的基本原理就是通过发送超声波脉冲,然后检测反射回来的回波,根据超声波在空气中传播的时间来计算距离。公式为:距离 = 声速 × 时间 / 2 。但声速会随温度变化,所以温度补偿就很重要啦。

18B20测温原理

18B20是常用的数字温度传感器,它采用单总线通信协议。单片机只需一根线就能和它进行数据交互,读取到当前的温度值。

硬件连接

  1. 超声波模块:每个超声波模块有四个引脚,分别为VCC、GND、Trig(触发引脚)和Echo(回响引脚)。VCC接5V,GND接地,Trig和Echo分别接到51单片机的I/O口。
  2. 18B20:同样有三个引脚,VCC接5V,GND接地,DQ(数据引脚)接到51单片机的I/O口。
  3. LCD1602:VSS接地,VDD接5V,V0接电位器调节对比度,RS、RW、E分别接单片机I/O口,D0 - D7接单片机I/O口(也可以采用4位模式连接,这里为方便讲解采用8位模式)。

Keil4程序源码

头文件包含与全局变量定义

#include <reg51.h> #include <intrins.h> #include <1602.h> // 自定义的LCD1602驱动头文件 #include <18b20.h> // 自定义的18B20驱动头文件 sbit Trig1 = P1^0; // 第一路超声波触发引脚 sbit Echo1 = P1^1; // 第一路超声波回响引脚 sbit Trig2 = P1^2; // 第二路超声波触发引脚 sbit Echo2 = P1^3; // 第二路超声波回响引脚 unsigned int distance1, distance2; // 存储两路距离 float temperature; // 存储温度

这里定义了各个引脚的位变量,还有用于存储距离和温度的变量。

18B20温度读取函数

float read_temperature() { unsigned char low, high; float temp; init_18b20(); // 初始化18B20 write_byte_18b20(0xcc); // 跳过ROM操作命令 write_byte_18b20(0x44); // 启动温度转换 _nop_(); _nop_(); init_18b20(); write_byte_18b20(0xcc); write_byte_18b20(0xbe); // 读取温度寄存器 low = read_byte_18b20(); high = read_byte_18b20(); temp = (high << 8) | low; if (temp & 0xf800) { // 负数处理 temp = ~temp + 1; temp = -((float)temp * 0.0625); } else { temp = (float)temp * 0.0625; } return temp; }

这个函数先初始化18B20,然后发送命令启动温度转换,再读取温度寄存器的值,最后根据数据格式计算出实际温度值。

超声波测距函数

unsigned int measure_distance(sbit Trig, sbit Echo) { unsigned int time; Trig = 0; _nop_(); _nop_(); Trig = 1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); Trig = 0; while (!Echo); TR0 = 1; // 启动定时器0 while (Echo); TR0 = 0; // 停止定时器0 time = TH0 * 256 + TL0; TH0 = 0; TL0 = 0; return time * 0.017; // 根据声速计算距离 }

这个函数通过控制Trig引脚发送超声波脉冲,然后等待Echo引脚回响,利用定时器0记录回响时间,从而计算出距离。

主函数

void main() { init_lcd(); // 初始化LCD1602 TMOD = 0x01; // 定时器0工作在模式1 TH0 = 0; TL0 = 0; while (1) { temperature = read_temperature(); distance1 = measure_distance(Trig1, Echo1); distance2 = measure_distance(Trig2, Echo2); // 根据温度补偿声速计算更准确的距离,这里简单示意,实际可优化 // 假设声速与温度关系:v = 331.5 + 0.607 * temperature // 重新计算distance1和distance2 display_temperature(temperature); // 自定义函数显示温度到LCD1602 display_distance1(distance1); // 自定义函数显示第一路距离到LCD1602 display_distance2(distance2); // 自定义函数显示第二路距离到LCD1602 delay(500); // 延时 } }

主函数里先初始化LCD1602和定时器0,然后在循环里不断读取温度和两路距离,最后显示在LCD1602上,并适当延时。

Proteus仿真

Proteus仿真文件可以帮助我们在实际制作硬件之前验证程序的正确性。在Proteus中搭建好51单片机、超声波模块、18B20和LCD1602的电路连接,然后导入编译好的Hex文件,运行仿真就能看到LCD1602上显示出实时的温度和两路超声波测量的距离啦。

51单片机程序 两路超声波测距 超声波测距,带温度补偿, 两路超声波测距,18b20测温带温度补偿,lcd1602显示温度和实测距离。 keil4程序源码,有proteus仿真文件。

希望通过这篇博文,大家能对51单片机的两路超声波测距、18B20测温以及LCD1602显示有更深入的理解,赶紧动手试试吧!

上述代码中的自定义函数(如display_temperature等)需根据实际情况编写,这里主要展示核心逻辑代码。完整的工程文件(Keil4项目和Proteus仿真文件)可以在相关论坛或我的个人资源分享区获取哦(如有)。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/30 10:13:00

探索MATLAB图像检索的多样世界

MATLAB图像检索&#xff0c;有各种方法的&#xff0c;词袋的&#xff0c;颜色特征&#xff0c;形状特征&#xff0c;hu不变矩&#xff0c;lbp纹理特征等在图像处理领域&#xff0c;图像检索一直是个热门话题。MATLAB作为强大的工具&#xff0c;为我们提供了实现多种图像检索方法…

作者头像 李华
网站建设 2026/4/1 4:52:31

ArcGIS大师之路500技---062调整面要素到指定面积

文章目录前言一、需求说明二、比例工具的使用前言 本文介绍使用ArcGIS比例工具实现调整面要素至指定面积。 一、需求说明 我们有一个面要素类&#xff0c;然后绘制一个圆形&#xff0c;添加面积字段&#xff0c;并计算其面积为&#xff1a;53895.2892平方米。 目标&#xff1…

作者头像 李华
网站建设 2026/3/31 12:45:04

【课程设计/毕业设计】基于微信小程序的健康生活服务系统设计与实现基于django+微信小程序的健康生活系统【附源码、数据库、万字文档】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/4/1 1:53:13

电机NVH分析之根原因查找与谐波计算工具探索

电机NVH分析&#xff0c;根原因查找。 定子,转子谐波次数与电磁力波次数对应关系表。 excel格式&#xff0c;输入极槽等参数可以自动计算。在电机领域&#xff0c;NVH&#xff08;Noise, Vibration, Harshness&#xff0c;噪声、振动与声振粗糙度&#xff09;分析至关重要&…

作者头像 李华
网站建设 2026/4/3 0:09:37

知网vs维普AIGC检测对比:哪个更严?实测数据告诉你答案

知网vs维普AIGC检测对比&#xff1a;哪个更严&#xff1f;实测数据告诉你答案 TL;DR&#xff1a;同一篇论文&#xff0c;知网和维普的AIGC检测结果可能相差20%-46%。实测发现维普检测更严格&#xff0c;知网相对宽松。以学校指定平台为准是第一原则。不管用哪个平台检测&#x…

作者头像 李华
网站建设 2026/4/1 21:37:48

【开题答辩全过程】以 高校体育赛事管理系统的设计与实现为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

作者头像 李华