news 2026/8/7 22:51:20

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/8/4 14:27:40

ABB机器人ABB选项添加:三种方法全解析

ABB选项添加&#xff0c;ABB机器人三种方法全套&#xff0c;真实、虚拟、密钥三种方法&#xff0c;含教程、含软件、含密钥&#xff0c;想怎么加就怎么加&#xff0c;想用真实密钥就用真实密钥&#xff0c;想用虚拟密钥就用虚拟密钥&#xff0c;随意加。在ABB机器人的使用过程中…

作者头像 李华
网站建设 2026/7/31 7:36:37

超实用的白光焊台控制板开发资料分享

白光jbc245/t12/936一A1321/A1322 oled1.3寸焊台控制板资料 &#xff0c;四合1资料。 全套带C语言程序&#xff0c;STC芯片方案&#xff0c;原理图pdf&#xff0c;pcb可直接打板&#xff0c;程序无缺无漏。 照片拍的都有 注意是开发资料&#xff01;嘿&#xff0c;各位电子爱好…

作者头像 李华
网站建设 2026/7/31 7:36:35

博图SCL+LAD之原创程序分享

博图SCLLAD之原创程序。 硬件配置S7-1214?3个CM1241 RS232?1个CB1241 RS485。 以下功能只是一部分&#xff0c;占总程序25%&#xff0c;请注意。 以下用SCL功能实现&#xff1a; 1&#xff1a;预设五组配方&#xff0c;包含条形码编码、光源亮度、板件厚度等信息&#xff0c;…

作者头像 李华
网站建设 2026/7/31 7:36:35

知网AIGC检测不通过?毕业生必看的3步自救攻略

知网AIGC检测不通过&#xff1f;毕业生必看的3步自救攻略 TL;DR&#xff1a;知网AIGC检测不通过别慌&#xff0c;按「定位问题段落 → 工具批量处理 → 人工精修」三步走&#xff0c;可以把AI率从80%降到10%以下。推荐用嘎嘎降AI处理&#xff08;达标率99.26%&#xff09;&…

作者头像 李华
网站建设 2026/8/6 8:11:34

Comsol超声管道导波模拟探索

comsol超声管道导波 利用侧面等效力源激励&#xff0c;对外直径40mm&#xff0c;壁厚3mm的钢管进行200kHz下的导波检测&#xff0c;在x200mm位置处设置裂纹缺陷&#xff0c;在x120mm位置处设置点探针 遇到裂纹前后的声场图如图1和2所示&#xff0c;点探针接收波形如图3所示&…

作者头像 李华