【TB作品】51单片机 Proteus仿真 超声波读取+LCD1602显示仿真12MHZ

在这里插入图片描述

实验报告:51单片机 Proteus仿真 超声波读取+LCD1602显示仿真

一、实验背景

本实验旨在使用51单片机(AT89C51)结合超声波传感器HC-SR04和LCD1602液晶显示屏,通过Proteus仿真平台实现超声波测距功能,并将测得的距离显示在LCD1602上。该系统可以用于智能小车避障、距离检测等应用场景。

二、硬件介绍

  1. 51单片机(AT89C51)

    • 主频:12MHz
    • 存储器:4KB Flash,128B RAM
    • 定时器:两个16位定时器
    • I/O口:4个8位并行I/O口
  2. 超声波传感器(HC-SR04)

    • 工作电压:5V
    • 工作频率:40kHz
    • 测量范围:2cm-400cm
    • 测量精度:±3mm
    • 引脚:VCC, GND, Trig, Echo
  3. LCD1602液晶显示屏

    • 显示内容:2行16字符
    • 工作电压:5V
    • 控制接口:8位并行数据接口或4位并行数据接口

三、器件连接

  • HC-SR04连接

    • VCC连接到5V电源
    • GND连接到地
    • Trig连接到P1.5
    • Echo连接到P1.6
  • LCD1602连接

    • RS连接到P2.0
    • RW连接到P2.1
    • E连接到P2.2
    • 数据线D4-D7分别连接到P2.4-P2.7

四、设计原理

1. 超声波测距原理

超声波传感器通过发射40kHz的超声波脉冲,当遇到障碍物时,超声波反射回来。传感器接收反射波并计算从发射到接收的时间差,根据公式:
[ \text{距离} = \frac{\text{时间差} \times \text{声速}}{2} ]
计算出距离。声速在空气中约为340m/s。

2. 定时器使用

定时器0配置为模式1(16位定时器),用于测量Echo引脚的高电平时间。通过中断处理溢出情况,确保测量的精确性。

3. LCD1602显示

LCD1602使用4位数据接口模式连接到单片机。通过初始化函数LCD_init进行初始化,之后通过LCD_write_str函数将测量结果显示到屏幕上。

五、电路原理

1. 超声波模块

Trig引脚通过软件控制发射超声波脉冲,Echo引脚接收反射信号,并由定时器0记录高电平持续时间。

2. 定时器与中断

定时器0的溢出中断服务程序设置一个标志位Flag_Ultrasonic,表示测量超时,防止因未接收到反射信号而导致程序卡死。

3. LCD1602控制

通过定义的函数库实现对LCD1602的控制,包括初始化、清屏、光标移动和字符串显示等功能。

六、程序原理

程序主要包括以下几个部分:

  1. 初始化部分

    • 初始化LCD1602
    • 初始化定时器0
  2. 测距过程

    • 控制Trig引脚发出10us高电平脉冲
    • 等待Echo引脚变高,启动定时器0
    • Echo引脚变低,停止定时器0
    • 计算时间差并转换为距离
  3. 显示部分

    • 将计算出的距离转换为字符串格式
    • 调用LCD_write_str函数显示到LCD1602上
void main() {unsigned char disp[10];unsigned int distance = 0;Trig = 0;Echo = 1;LCD_init();Init_Timer0();delay_ms(100);while (1) {TR0 = 0;TH0 = 0;TL0 = 0;Trig = 1;_nop_(); _nop_(); _nop_(); _nop_(); _nop_();Trig = 0;while (!Echo);TR0 = 1;while (Echo);TR0 = 0;distance = Conut();sprintf(disp, "%dmm", distance);LCD_write_str(6, 1, disp);}
}

程序简要说明

  • main函数初始化硬件和软件环境,进入主循环。
  • 通过控制Trig引脚发出超声波信号,并测量Echo引脚高电平持续时间。
  • 计算距离并转换为字符串格式,显示在LCD1602上。

七、总结

本实验通过Proteus仿真平台,成功实现了51单片机结合超声波传感器和LCD1602显示屏的距离测量系统。实验过程中,熟悉了定时器的使用、中断的处理以及液晶显示屏的控制方法,为后续更加复杂的应用奠定了基础。

资料

https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2

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

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

相关文章

leetcode hot100

哈希 49.字母异位词分组 HashMap的含义比较晕,可以重做 双指针 11.盛最多水的容器 双指针的起始位置和移动条件没转过来,可以重做 15.三数之和 不太熟练,可以再做一遍 42.接雨水 还可以用dp和单调栈做 双指针法: 首先需要注意…

【DFS(深度优先搜索)详解】看这一篇就够啦

【DFS详解】看这一篇就够啦 🍃1. 算法思想🍃2. 三种枚举方式🍃2.1 指数型枚举🍃2.2 排列型枚举🍃2.3 组合型枚举 🍃3. 剪枝优化🍃4. 图的搜索🍃5. 来几道题试试手🍃5.1 选…

MySQL参数lower_case_table_name

系统参数lower_case_table_name是 MySQL 中的一个系统变量,它控制着 MySQL 服务器如何存储和比较表名的大小写。这个参数对于在不同操作系统上运行的 MySQL 实例来说非常重要,因为不同操作系统对文件名的大小写敏感性不同。 lower_case_table_names 可以…

助力开发者,而非取代

AI:助力开发者,而非取代 在软件开发的广阔天地中,生成式人工智能(AIGC)正以其独特的方式重塑着行业的面貌。AI工具如GitHub Copilot、TabNine等,以其强大的能力成为开发者的得力助手。但随着AI的不断进步&…

spark任务,使用 repartition 对数据进行了重新分区,但任务输入数据大小仍存在不均衡

目录 目录 确认 Spark 任务重新分区后的数据不均衡 1. 检查分区大小 2. 使用 DataFrame API 检查分区 3. 使用 Spark UI 查看分区情况 4. 使用日志记录分区信息 可能原因 1. 数据分布不均衡 2. 分区策略 3. 数据预处理 解决方案 1. 检查数据分布 2. 使用 coalesce…

【C语言小知识】ctype.h系列的字符函数

ctype.h系列的字符函数 链接: ctype.h 在代码中,本意是将字符转换,但过程中标点也会被转换,这是因为对应的ASCII码会被相对应的转换,如果程序值转换字母,保留所有的非字母字符(不是空格会更好)。…

代码随想录算法训练营Day62|冗余连接、冗余连接II

冗余连接 108. 冗余连接 (kamacoder.com) 考虑使用并查集&#xff0c;逐次将s、t加入并查集中&#xff0c;当发现并查集中find(u)和find(v)相同时&#xff0c;输出u和v&#xff0c;表示删除的边即可。 #include <iostream> #include <vector> using namespace s…

【分布式系统】注册中心Zookeeper

目录 一.Zookkeeper 概述 1.Zookkeeper 定义 2.Zookkeeper 工作机制 3.Zookkeeper 特点 4.Zookkeeper 数据结构 5.Zookkeeper 应用场景 统一命名服务 统一配置管理 统一集群管理 服务器动态上下线 软负载均衡 6.Zookkeeper 选举机制 第一次启动选举机制 非第一次…

P2895题解

BFS板子题&#xff0c;但有坑点需要注意&#xff0c;以此纪念一下本人发生事故之后的第一道题。 #include<bits/stdc.h> using namespace std; const int MAX30010; struct node{int x,y,t;bool v; }m[MAX][MAX];//路径地图 int star[MAX][MAX];//下坠时间地图 int fx[]…

单元测试和集成测试

软件测试中&#xff0c;单元测试和集成测试是比较常见的方法 单元测试&#xff1a;这是一种专注于最小可测试单元&#xff08;通常是函数或方法&#xff09;的测试&#xff0c;用于验证单个组件的行为是否符合预期。它通常由开发者自己完成&#xff0c;可以尽早发现问题&#…

解锁京东 APP 商品详情的 API 接口获取方法

在当今数字化的商业世界中&#xff0c;获取准确和及时的商品信息对于许多业务场景至关重要。其中&#xff0c;通过 API 接口来获取京东 APP 商品详情成为了一种备受关注的技术手段。 一、为什么要获取京东 APP 商品详情 电商数据分析 对于电商从业者和数据分析人员来说&#x…

uboot镜像之boot烧写

适用场景:单板上没有boot&#xff0c;和按地址烧写配合&#xff0c;可完成单板所有镜像的烧写。 原理:bootrom读取u-boot.bin至内存并执行此u-boot 然后运行uboot,通过uboot sf命令烧录uboot.bin到flash存储空间去. bootrom读取u-boot.bin至内存并执行此u-boot 通过uboot sf命…

php文件引入。 ctrl+鼠标左键可以成功追踪,代码执行报错

举例&#xff1a; admin文件夹 同级文件singer.php admin文件夹下的文件AdminController 需要在AdminController引入singer.php文件 require require_once include include_once均报错 这时候需要引入文件路径&#xff1a;require_once __DIR__ . /../signer.php;

Unity3D 游戏摇杆的制作与实现详解

在Unity3D游戏开发中&#xff0c;摇杆是一种非常常见的输入方式&#xff0c;特别适用于移动设备的游戏控制。本文将详细介绍如何在Unity3D中制作和实现一个虚拟摇杆&#xff0c;包括技术详解和代码实现。 对惹&#xff0c;这里有一个游戏开发交流小组&#xff0c;大家可以点击…

从输入 URL 到页面展示到底发生了什么?

1.输入网址&#xff0c;浏览器解析URL信息&#xff0c;准备发送HTTP请求 输入一个网址&#xff08;URL&#xff09;并准备发送HTTP请求时&#xff0c;可以从URL中获取以下信息&#xff1a; 协议&#xff1a;URL的开头部分&#xff0c;如http://或https://&#xff0c;指示了使用…

Spark SQL----内置函数Array Functions

Spark SQL----内置函数Array Functions Array Functions 例子&#xff1a; -- array SELECT array(1, 2, 3); -------------- |array(1, 2, 3)| -------------- | [1, 2, 3]| ---------------- array_append SELECT array_append(array(b, d, c, a), d); ----------------…

Python中的列表、元组、字典和集合的特性及其使用场景。

Python中的列表&#xff08;List&#xff09;、元组&#xff08;Tuple&#xff09;、字典&#xff08;Dictionary&#xff09;和集合&#xff08;Set&#xff09;是四种非常基础且强大的数据结构&#xff0c;它们在Python编程中被广泛使用。每种数据结构都有其独特的特性和使用…

AIGC的行业发展

1. AIGC的行业发展 AIGC&#xff08;Artificial Intelligence Generated Content&#xff0c;人工智能生成内容&#xff09;是利用人工智能技术来自动生成内容的一种新型内容创作方式。它基于生成对抗网络(GAN)、大型预训练模型等技术&#xff0c;通过对已有数据进行学习和模式…

【开发工具】webStrom2024版-插件

Chinese (Simplified) Language Pack / 中文语言包 英文界面变为中文界面。 Material Theme UI 界面美化 Rainbow Brackets 代码量变大时&#xff0c;总会伴随着各种括号&#xff1b;它能将括号赋予不同的颜色&#xff0c;方便我们区分。 Translation 中英互译&#xff0c;…

Codeforces Round 918 (Div. 4)(A~F)

目录 A. Odd One Out B. Not Quite Latin Square C. Can I Square? D. Unnatural Language Processing E. Romantic Glasses F. Greetings A. Odd One Out Problem - A - Codeforces 输出一个不同于其他两个数的数&#xff0c;用异或操作可以轻松解决。 void solve{int…