【Protues仿真】基于AT89C52单片机的超声波测距

目录

1 HCSR04超声波测距传感器

1.1 基本参数

1.2 引脚说明

1.3 工作原理(时序图)

2 基于AT89C52单片机的超声波测距电路原理图

2.1 硬件连接说明

2.2 工作原理

3 基于AT89C52单片机的超声波测距控制程序

3.1.1 初始化设置

3.1.2 超声波测距原理

3.1.3 显示功能

3.1.4 注意事项

3.1.6 实现程序

3.1.7 _nop_()函数


摘要:

本文介绍基于AT89C52单片机的HC-SR04超声波测距系统实现方案。HC-SR04模块工作电压5V,测量范围2-400cm,精度±3mm,通过40kHz超声波实现测距。系统硬件连接包括单片机与传感器的Trig、Echo引脚对接,以及LCD显示模块。软件采用定时器测量回波高电平时间,按距离=时间×0.017cm/μs公式计算距离值,并通过LCD实时显示。程序实现包含初始化、超声波触发、时间测量和显示功能,测量周期建议大于60ms。该系统具有结构简单、成本低的特点,适合短距离测距应用,若需提高精度可增加温度补偿算法。

1 HCSR04超声波测距传感器

HC-SR04 是一款非常经典的低成本超声波测距模块,通过发射超声波并接收回波来测量前方障碍物的距离。

1.1 基本参数

参数

数值/说明

工作电压

DC 5V

工作电流

< 15mA

测距范围

2cm ~ 400cm(理论)

测距精度

±3mm(典型)

工作频率

40kHz

触发信号

10μs 高电平脉冲

回波信号

高电平持续时间表示距离

测量角度

~15° 锥形波束

尺寸

约 45 × 20 × 15 mm

1.2 引脚说明

引脚

名称

功能说明

VCC

电源

接 5V

GND

接地

Trig

触发

输入触发信号

Echo

回波

输出回波信号(5V)

注意:Echo 引脚输出的是 5V 信号,如果接 3.3V 单片机(如 ESP8266/ESP32),建议加电阻分压或电平转换器,避免烧坏 GPIO。

1.3 工作原理(时序图)

1 向Trig 引脚发送一个 ≥10μs 的高电平脉冲;

2 模块自动发射 8 个 40kHz 超声波脉冲;

3 Echo 引脚输出高电平,持续时间与超声波往返时间成正比;

4 距离计算公式:

距离(cm)=(Echo高电平时间/2)*声音传播速度

2 基于AT89C52单片机的超声波测距电路原理图

功能:AT89C52控制HC-SR04超声波传感器和LCD显示

2.1 硬件连接说明

HC-SR04 VCC → 5V

HC-SR04 GND → GND

HC-SR04 Trig → P2.0

HC-SR04 Echo → P2.1

LCD数据线 → P0口

LCD RS → P2.2

LCD RW → P2.3

LCD EN → P2.4

2.2 工作原理

首先,给Trig引脚一个至少10us的高电平脉冲,然后模块会自动发送8个40kHz的超声波脉冲,并检测回波。

当检测到回波时,Echo引脚会输出高电平,高电平的持续时间就是超声波从发射到返回的时间。

距离 = (高电平时间 * 声速(340m/s)) / 2

注意:由于声速随温度变化,但这里我们忽略温度补偿,使用340m/s。

3 基于AT89C52单片机的超声波测距控制程序

如上图所示,示波器中黄色线表示Trig引脚信号,用于产生至少10us的高电平脉冲。蓝色线表示Echo引脚会输出高电平,高电平的持续时间与测量距对应。

    1. 程序功能说明

3.1.1 初始化设置

配置LCD显示

初始化定时器0用于测量时间间隔

3.1.2 超声波测距原理

向TRIG引脚发送至少10μs的高电平脉冲

超声波模块自动发送8个40kHz的脉冲

检测ECHO引脚的高电平持续时间

根据时间计算距离:距离 = (时间 × 声速) / 2

3.1.3 显示功能

在LCD上显示测量得到的距离值

3.1.4 注意事项

测量周期最好大于60ms,以防止发射信号对回响信号的影响

实际应用中可能需要添加温度补偿以提高精度

如果测量环境复杂,可能需要添加滤波算法

3.1.6 实现程序

//库函数与位定义
#include <reg52.h>
#include <intrins.h>#define uint unsigned int
#define uchar unsigned char// LCD引脚定义
sbit LCD_RS = P2^2;
sbit LCD_RW = P2^3;
sbit LCD_EN = P2^4;// HC-SR04引脚定义
sbit TRIG = P2^0;
sbit ECHO = P2^1;// 全局变量
uint distance = 0;
uint time = 0;// LCD延时函数
void lcd_delay(uint ms) {uint i, j;for(i = 0; i < ms; i++)for(j = 0; j < 120; j++);
}// LCD写命令函数
void lcd_write_cmd(uchar cmd) {LCD_RS = 0;LCD_RW = 0;LCD_EN = 0;P0 = cmd;LCD_EN = 1;lcd_delay(1);LCD_EN = 0;lcd_delay(1);
}// LCD写数据函数
void lcd_write_data(uchar dat) {LCD_RS = 1;LCD_RW = 0;LCD_EN = 0;P0 = dat;LCD_EN = 1;lcd_delay(1);LCD_EN = 0;lcd_delay(1);
}// LCD初始化函数
void lcd_init() {lcd_write_cmd(0x38); // 16x2显示,5x7点阵,8位数据接口lcd_write_cmd(0x0C); // 显示开,光标关,闪烁关lcd_write_cmd(0x06); // 写入新数据后光标右移lcd_write_cmd(0x01); // 清屏lcd_delay(2);
}// 显示字符串函数
void lcd_display_string(uchar *str) {while(*str != '\0') {lcd_write_data(*str++);}
}// 显示数字函数
void lcd_display_number(uint num) {uchar i;uchar digits[4];if(num > 999) {digits[0] = num / 1000 + '0';digits[1] = (num % 1000) / 100 + '0';digits[2] = (num % 100) / 10 + '0';digits[3] = num % 10 + '0';for(i = 0; i < 4; i++) {lcd_write_data(digits[i]);}}else if(num > 99) {digits[0] = num / 100 + '0';digits[1] = (num % 100) / 10 + '0';digits[2] = num % 10 + '0';for(i = 0; i < 3; i++) {lcd_write_data(digits[i]);}}else if(num > 9) {digits[0] = num / 10 + '0';digits[1] = num % 10 + '0';for(i = 0; i < 2; i++) {lcd_write_data(digits[i]);}}else {lcd_write_data(num + '0');}
}// 定时器0初始化
void timer0_init() {TMOD = 0x01; // 定时器0工作方式1TH0 = 0;TL0 = 0;ET0 = 1; // 允许定时器0中断EA = 1;  // 开启总中断
}// 超声波测距函数
uint ultrasonic_measure() {TRIG = 1;_nop_();//空格起延时作用_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();TRIG = 0;while(!ECHO); // 等待ECHO变高TR0 = 1; // 启动定时器0while(ECHO); // 等待ECHO变低TR0 = 0; // 停止定时器0time = TH0 * 256 + TL0;//计时TH0 = 0;TL0 = 0;// 计算距离 (cm) = (时间 * 声速) / 2// 声速 = 340m/s = 0.034cm/μs// 定时器每计数1次为1μsdistance = time * 0.017; // 简化计算: 0.034/2 = 0.017return distance;
}// 主函数
void main() {lcd_init();timer0_init();lcd_write_cmd(0x80); // 设置LCD显示位置lcd_display_string("Distance:");while(1) {distance = ultrasonic_measure();lcd_write_cmd(0x89); // 设置显示位置lcd_display_number(distance);lcd_display_string("cm   ");// 延时一段时间再进行下一次测量lcd_delay(5);}
}// 定时器0中断服务函数
void timer0_isr() interrupt 1 {// 定时器溢出处理TH0 = 0;TL0 = 0;
}

3.1.7 _nop_()函数

_nop_()是8051单片机中的一个内联函数,它产生一个NOP(空操作)指令,消耗一个机器周期的时间。在12MHz晶振的系统中,一个NOP指令执行时间为1μs。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/96563.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/96563.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LLM - Agent核心架构:四大“身体”部件

文章目录一、Agent核心架构&#xff1a;四大“身体”部件1. 核心大脑&#xff1a;大型语言模型&#xff08;LLM&#xff09;2. 记忆系统&#xff1a;短期与长期记忆3. 工具箱&#xff08;Toolkit&#xff09;&#xff1a;从“思想家”到“行动家”4. 驱动循环&#xff08;Engin…

html-docx-js 导出word

2025.08.23今天我学习了如何将html页面内容导出到word中&#xff0c;并保持原有格式&#xff0c;效果如下&#xff1a;代码如下&#xff1a;1&#xff1a;列表页面按钮<el-button type"warning" plain icon"el-icon-download" size"mini" cli…

Science Robotics 通过人机交互强化学习进行精确而灵巧的机器人操作

机器人操作仍然是机器人技术中最困难的挑战之一&#xff0c;其方法范围从基于经典模型的控制到现代模仿学习。尽管这些方法已经取得了实质性进展&#xff0c;但它们通常需要大量的手动设计&#xff0c;在性能方面存在困难&#xff0c;并且需要大规模数据收集。这些限制阻碍了它…

Dism++备份系统时报错[句柄无效]的解决方法

当使用Dism进行系统备份时遇到“[句柄无效]”的错误&#xff0c;这通常是由于某些文件或目录的句柄无法正确访问或已被占用所导致。以下是一种有效的解决方法&#xff1a;一、查看日志文件定位日志文件&#xff1a;首先&#xff0c;打开Dism软件所在的目录&#xff0c;并找到其…

华为/思科/H3C/锐捷操作系统操作指南

好的,这是一份针对 华为(VRP)、思科(IOS/IOS-XE)、H3C(Comware)和锐捷(Ruijie OS) 这四大主流网络设备厂商操作系统的对比操作指南。本指南将聚焦于它们的共性和特性,帮助你快速掌握多厂商设备的基本操作。 四大网络厂商操作系统综合操作指南 一、 核心概念与模式对…

一文读懂 DNS:从域名解析到百度访问全流程

目录 前言 一、什么是 DNS&#xff1f;—— 互联网的 “地址簿” 为什么需要 DNS&#xff1f; DNS 的核心参数 二、DNS 解析原理&#xff1a;递归与迭代的协作 1. 两种核心查询方式 2. 完整解析流程&#xff08;以www.baidu.com为例&#xff09; 缓存清理命令 三、DNS …

初试Docker Desktop工具

文章目录1. 概述2. 下载3. 安装4. 注册5. 登录6. 启动7. 容器8. 运行容器8.1 运行容器的镜像8.2 获取示例应用8.3 验证Dockerfile文件8.4 拉取Alpine精简镜像8.5 创建镜像8.6 运行容器8.7 查看前端9. 访问静态资源9.1 本地静态资源9.2 创建服务器脚本9.3 修改Dockerfile文件9.4…

百度披露Q2财报:营收327亿,AI新业务收入首超百亿

8月20日&#xff0c;百度发布2025年第二季度财报&#xff0c;显示季度总营收327亿元&#xff0c;百度核心营收263亿元&#xff0c;归属百度核心净利润74亿元&#xff0c;同比增长35%。受AI驱动&#xff0c;涵盖智能云在内的AI新业务收入增长强劲&#xff0c;首次超过100亿元&am…

【字母异位分组】

思路 核心思路&#xff1a;使用排序后的字符串作为键&#xff0c;将原始字符串分组 键的选择&#xff1a;对于每个字符串&#xff0c;将其排序后得到标准形式作为键分组存储&#xff1a;使用哈希表&#xff0c;键是排序后的字符串&#xff0c;值是对应的原始字符串列表结果构建…

高防cdn如何缓存网页静态资源

为什么需要优化网页静态资源的缓存&#xff1f; 网页静态资源包括图片、CSS、JavaScript等文件&#xff0c;它们通常体积大、访问频繁。在网页访问过程中&#xff0c;如果每次都从源服务器请求这些静态资源&#xff0c;会导致网络延迟和带宽消耗。而优化网页静态资源的缓存&am…

使用Pandas进行缺失值处理和异常值检测——实战指南

目录 一、缺失值处理 1.1 缺失值的识别 1.2 删除缺失值 1.3 填充缺失值 二、异常值检测 2.1 异常值的定义 2.2 常用检测方法 IQR&#xff08;四分位数间距&#xff09;法 Z-score&#xff08;标准分数&#xff09;法 三、实战案例&#xff1a;基因表达数据预处理 四…

B.30.01.1-Java并发编程及电商场景应用

摘要 本文深入探讨了Java并发编程的核心概念及其在电商系统中的实际应用。从基础并发机制到高级并发工具&#xff0c;结合电商业务场景中的典型问题&#xff0c;如高并发秒杀、库存管理、订单处理等&#xff0c;提供了实用的解决方案和最佳实践。 1. Java并发编程基础 1.1 并发…

怎样避免游戏检测到云手机?

以下是一些可能避免游戏检测到云手机的方法&#xff1a;云手机可能会因网络配置等因素出现一些异常网络行为&#xff0c;如网络延迟的规律性变化等&#xff0c;在使用云手机玩游戏时&#xff0c;尽量保持网络行为的稳定性和自然性&#xff0c;避免短时间内频繁切换网络连接&…

文件上传 --- uploadlabs靶场

目录 1 前端和js校验 抓包改包 2 . 2.1 .htaccess&#xff08;伪静态&#xff09; 2.2 %00截断 &#xff08;php5.2&#xff09; 2.3 user_init_ 2.4 3 图片码防御 4 竞争型漏洞 思路&#xff1a; 容易出现的问题: 1 前端和js校验 关闭JS的代码&#xff0c;上传PHP…

汉化版本 k6 dashboard

目前官方提供的 dashboard 只有英文版本&#xff0c;国内使用不方便&#xff0c;因此 fork 了下官方仓库&#xff0c;添加了汉化版本 https://github.com/kinghard7/xk6-dashboardhttps://github.com/kinghard7/xk6-dashboard安装 xk6 构建程序&#xff1a;go install go.k6.i…

视觉识别:ffmpeg-python、ultralytics.YOLO、OpenCV-Python、标准RTSP地址格式

视觉识别:ffmpeg-python、ultralytics.YOLO、OpenCV-Python、标准RTSP地址格式 ffmpeg-python 核心概念 常用过滤器(Filters) 高级操作 视频截帧转换图片示例 参考 ultralytics.YOLO(You Only Look Once) 1. 模型加载 2. 训练模型 (`train()`) 标准YAML格式示例 3. 预测 (…

浙江龙庭翔新型建筑材料有限公司全屋定制:畅享品质生活新境界!

在消费升级的时代浪潮中&#xff0c;浙江龙庭翔新型建筑材料有限公司以卓越的产品质量和创新的服务理念&#xff0c;重新定义全屋定制的内涵&#xff0c;为追求高品质生活的消费者打造理想家居。公司秉承"匠心质造&#xff0c;乐享生活"的核心价值观&#xff0c;将环…

鹰角网络基于阿里云 EMR Serverless StarRocks 的实时分析工程实践

一、客户背景与业务挑战 1.1 客户介绍 鹰角网络&#xff08;HYPERGRYPH&#xff09; 成立于2017年&#xff0c;总部位于上海&#xff0c;是中国知名游戏研发与发行公司&#xff0c;代表产品包括现象级手游《明日方舟》及《泡姆泡姆》《来自星辰》《终末地》等。公司依托阿里云…

LWIP的IP 协议栈

IP 协议栈 下面的分析把上文对 IPv4 概念的说明与 lwIP 中的具体实现代码对应起来&#xff0c;便于将理论与实现对照理解。分析覆盖&#xff1a;输入处理、路由与转发、输出与报文构建、分片/重组、校验和与各种配置点&#xff08;hook、选项、统计等&#xff09;。目录&#x…

高并发短信网关平台建设方案概述

本方案涵盖了架构设计、技术选型、核心功能、高可用保障以及实施路径,旨在构建一个能够应对千万级日吞吐量、稳定、安全、可扩展的现代短信网关平台。 高并发短信网关平台建设方案 一、 项目概述与目标 1.1 项目背景 为满足公司业务(如用户注册、登录、交易验证、营销通知…