蓝桥杯单片机快速开发笔记——超声波测距

一、原理分析

        超声波测距是一种常见的测距方法,其原理是利用超声波在空气中传播的速度恒定且较快的特性,通过发送超声波信号并接收回波,计算出物体与传感器之间的距离。以下是超声波测距的原理和应用:

原理:

  1. 发送超声波信号:超声波传感器发送一个短脉冲的超声波信号。
  2. 接收回波:超声波信号遇到物体后会被反射回来,传感器接收到回波信号。
  3. 计算时间差:通过测量发送超声波和接收回波之间的时间差,可以计算出超声波在空气中传播的时间。
  4. 计算距离:利用声波在空气中的传播速度(约为340m/s),将时间差转换为距离,即距离 = 速度 x 时间差。

应用:

  1. 测距应用:超声波测距广泛应用于机器人导航、智能车辆、无人机等领域,用于测量物体与传感器之间的距离,实现避障、定位等功能。
  2. 液位检测:超声波传感器可以用于检测液体的液位高度,常见于水箱、油箱等液位监测系统中。
  3. 智能家居:超声波传感器可以用于智能家居系统中,如智能灯光控制、智能门窗感应等。
  4. 工业自动化:在工业自动化领域,超声波传感器常用于测量物体的距禋、检测物体的存在等。

  注意事项:

        超声波模块的TX引脚接到单片机的P1.0端口RX引脚接到单片机的P1.1端口,注意按照上图连接好。

二、思维导图

三、示例框架

#include "intrins.h"
#include "stc15.h"
#include "smg.h"


sbit TX = P1^0;
sbit RX = P1^1;


extern unsigned int dat_f;

void Delay12us()                  //@12.000MHz 延时12us
{
	unsigned char i;
 
	_nop_();
	_nop_();
	i = 33;
	while (--i);
}

void Send_Wave()                 //产生8个40KHx超声波信号
{
	unsigned char i;
	for(i = 0; i < 8; i++)
	{
		TX = 1;           //将 TX 端口置为高电平,表示开始发送超声波信号。
		Delay12us();	    //调用延时函数 Delay12us(),延时12微秒。
		TX = 0;           //将 TX 端口置为低电平,表示停止发送超声波信号。
		Delay12us();
	}
}
 
void Measure_Distance()	        //超声波测距
{
	unsigned int time = 0;    //定义了一个无符号整型变量 time,用于存储测量到的时间。
														//将 TMOD 寄存器的高四位清零,保留低四位不变。这样可以确保只修改定时器1的工作模式,而不影响其他位。
	
	TMOD &= 0x0f;	            //定时器1模式0,13位定时器,最大8192个计数脉冲								
	TL1 = 0x00;										
	TH1 = 0x00;		
	
	Send_Wave();		    //发送超声波信号							
	TR1 = 1;            //启动定时器1						
	while((RX == 1) && (TF1 == 0));    //在循环中等待接收到超声波信号的回波且没有超出测量范围。
									   //TF1 是一个标识符,用于表示定时器1的溢出标志
	TR1 = 0;            //停止定时器				
	
	if(TF1 == 0)	            //正常测量范围							
	{
		time = TH1;			                        //将定时器1的值 TH1 读取到 time 变量中。						
		time = (time << 8) | TL1;		            //将定时器1的值 TL1 读取并与 TH1 合并,得到完整的时间值。
		dat_f = ((time / 10) * 17) / 100 + 3;   //根据计算公式将测量到的时间转换为距离,并存储在 dat_f 变量中。
	}
	else                        //超出测量范围			
	{
		TF1 = 0;
		dat_f = 999;
	}
}
  1. unsigned int dat_f;:定义一个无符号整型变量 dat_f,用于存储测量到的距离。

  2. void Delay12us():定义一个延时函数,用于实现12微秒的延时。

  3. void Send_Wave():定义一个函数,用于产生8个40KHz的超声波信号。在循环中,先将 TX 端口置为高电平,然后调用 Delay12us() 函数实现延时,再将 TX 端口置为低电平,再次调用 Delay12us() 函数实现延时。

  4. void Measure_Distance():定义一个超声波测距函数。在函数中:

    • 清零定时器1的模式位,设置为模式0,13位,最大8192个计数脉冲。
    • 将定时器1的低8位寄存器 TL1 和高8位寄存器 TH1 初始化为0。
    • 调用 Send_Wave() 函数发送超声波信号。
    • 启动定时器1。
    • 在 while 循环中,等待接收到超声波信号的回波或者超出测量范围。
    • 停止定时器1。
    • 如果测量在正常范围内,将定时器1的值读取到 time 变量中,然后根据一定的计算公式将测量到的时间转换为距离,并存储在 dat_f 变量中。
    • 如果超出测量范围,将 dat_f 设为999。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MyBookShopWeb第三波+书店商城asp.net+sqlserver

MyBookShopWeb第三波书店商城asp.netsqlserver 说明文档 运行前附加数据库.mdf&#xff08;或sql生成数据库&#xff09; 主要技术&#xff1a; 基于asp.net架构和sql server数据库&#xff0c;并采用三层架构 功能模块&#xff1a; 用户功能有首页 购买商品 购物车 我…

苍穹外卖-day04:项目实战-套餐管理(新增套餐,分页查询套餐,删除套餐,修改套餐,起售停售套餐)业务类似于菜品模块

苍穹外卖-day04 课程内容 新增套餐套餐分页查询删除套餐修改套餐起售停售套餐 要求&#xff1a; 根据产品原型进行需求分析&#xff0c;分析出业务规则设计接口梳理表之间的关系&#xff08;分类表、菜品表、套餐表、口味表、套餐菜品关系表&#xff09;根据接口设计进行代…

几个不错的 Jupyter Notebook 云端展示平台

jupyter nbviewer URL:https://nbviewer.jupyter.org/ 结合Github的示例用法&#xff1a;https://nbviewer.jupyter.org/github/ <用户名或者用户名/存放ipynb文件的仓库或者Gist ID> 例如&#xff1a;https://nbviewer.jupyter.org/github/yeshan333/JupyterNotebook…

通过点击按钮实现查看全屏和退出全屏的效果

动态效果如图&#xff1a; 可以通过点击按钮&#xff0c;或者esc键实现全屏和退出全屏的效果 实现代码&#xff1a; <template><div class"hello"><el-button click"fullScreen()" v-if"!isFullscreen">查看全屏</el-butt…

登录远程SQLServer

1&#xff0c;登录格式: 服务器名称:192.168.0.104,1433 192.168.0.104&#xff1a;SQLServer所在远程PC的IP &#xff0c;&#xff1a;逗号分割IP与端口号 1433&#xff1a;SQLServer所使用的端口号&#xff08;默认为1433&#xff09;&#xff0c;当使用默认端口号时可以省…

《1w实盘and大盘基金预测 day6》

昨日预测完美&#xff0c;点位基本符合&#xff0c;我预测3052&#xff0c;实际最低3055。 走势也符合高平开&#xff0c;冲高回落&#xff0c;再反震荡上涨 大家可以观察我准不准哟&#xff5e;后面有我的一些写笔记、分享的网站。 关注公众号&#xff0c;了解各种理财预测内…

WanAndroid(鸿蒙版)开发的第三篇

前言 DevEco Studio版本&#xff1a;4.0.0.600 WanAndroid的API链接&#xff1a;玩Android 开放API-玩Android - wanandroid.com 其他篇文章参考&#xff1a; 1、WanAndroid(鸿蒙版)开发的第一篇 2、WanAndroid(鸿蒙版)开发的第二篇 3、WanAndroid(鸿蒙版)开发的第三篇 …

微信小程序 nodejs+vue+uninapp学生在线选课作业管理系统

基于微信小程序的班级作业管理助手使用的是MySQL数据库&#xff0c;nodejs语言和IDEA以及微信开发者工具作为开发工具&#xff0c;这些技术和工具我在日常的作业中都经常的使用&#xff0c;并且因为对编程感兴趣&#xff0c;在闲暇时间也进行的进行编程的提高&#xff0c;所以在…

09|代理(上):ReAct框架,推理与行动的协同

应用思维链推理并不能解决大模型的固有问题&#xff1a;无法主动更新自己的知识&#xff0c;导致出现事实幻觉。也就是说&#xff0c;因为缺乏和外部世界的接触&#xff0c;大模型只拥有训练时见过的知识&#xff0c;以及提示信息中作为上下文提供的附加知识。如果你问的问题超…

AI+权重衰退

AI权重衰退 1权重衰退2代码实现 2丢弃法 1权重衰退 AI权重衰退是指在人工智能&#xff08;AI&#xff09;领域中的一种技术或方法&#xff0c;用于训练机器学习模型时对权重进行惩罚或调整&#xff0c;以避免过拟合现象的发生。 在机器学习中&#xff0c;过拟合是指模型在训练…

c语言文件操作(中)

目录 1. 文件的顺序读写1.1 顺序读写函数1.2 顺序读写函数的原型和介绍 结语 1. 文件的顺序读写 1.1 顺序读写函数 函数名功能适用于fgetc字符输入函数所有输出流fputc字符输出函数所有输出流fgets文本行输入函数所有输出流fputs文本行输出函数所有输出流fscanf格式化输入函数…

苍穹外卖-day08:导入地址簿功能代码(单表crud)、用户下单(业务逻辑)、订单支付(业务逻辑,cpolar软件)

苍穹外卖-day08 课程内容 导入地址簿功能代码用户下单订单支付 功能实现&#xff1a;用户下单、订单支付 用户下单效果图&#xff1a; 订单支付效果图&#xff1a; 1. 导入地址簿功能代码&#xff08;单表crud&#xff09; 1.1 需求分析和设计 1.1.1 产品原型&#xff08…

C++_day6

思维导图&#xff1a; 2试编程 封装一个动物的基类&#xff0c;类中有私有成员: 姓名&#xff0c;颜色&#xff0c;指针成员年纪 再封装一个狗这样类&#xff0c;共有继承于动物类&#xff0c;自己拓展的私有成员有:指针成员:腿的个数(整型 int count)&#xff0c;共有成员函数…

7.测试教程-自动化测试selenium-2

文章目录 1.webdriver API1.1元素的定位1.2id定位1.3name 定位1.4tag name 定位和class name 定位1.5CSS 定位(常用)1.5.1概念1.5.2实操1.5.3语法 1.6XPath 定位1.6.1概念1.6.2实操1.6.3语法 1.7link text定位1.8Partial link text 定位1.9一个简单的测试实战1.10CSS定位和XPat…

【人工智能】英文学习材料03(每日一句)

&#x1f33b;个人主页&#xff1a;相洋同学 &#x1f947;学习在于行动、总结和坚持&#xff0c;共勉&#xff01; 目录 Chain Rule (链式法则) Dimensionality Reduction (降维) Long Short-Term Memory (LSTM) (长短期记忆网络) Gradient Explosion (梯度爆炸) Gradie…

Java项目:63 ssm网上花店设计+vue

作者主页&#xff1a;舒克日记 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 系统具备友好性且功能完善。管理员登录进入后台之后&#xff0c;主要完成花材选择管理&#xff0c;用户管理&#xff0c;鲜花管理&#xff0c;鲜花出入…

计算机网络实践学习 思科实验31:配置思科DHCP

思科实验31&#xff1a;配置思科DHCP 实验拓扑图实验目标实验步骤实验配置 实验拓扑图 实验目标 配置思科设备作为DHCP服务器 实验步骤 配置OSPF路由协议配置R1为DHCP服务器配置DHCP中继&#xff0c;使得PC3可以获得地址全网通信测试 实验配置 1、配置R1为DHCP服务器&…

React Native: could not connect to development server

问题&#xff1a; 运行模拟器错误&#xff1a;无法连接到开发服务器 原因分析&#xff1a; 1、确认模拟器连接状态&#xff0c;是连接成功的 查看进程的端口占用&#xff0c;也没问题 lsof -i tcp:8081 kill pid2、检查包服务器是否运行正常 连接真机进行调试发现真机是正常…

【力扣精选算法100道】——带你了解(数组模拟栈)算法

目录 &#x1f4bb;比较含退格的字符串 &#x1f388;了解题意 &#x1f388;分析题意 &#x1f6a9;栈 &#x1f6a9;数组模拟栈 &#x1f388;实现代码 844. 比较含退格的字符串 - 力扣&#xff08;LeetCode&#xff09; &#x1f4bb;比较含退格的字符串 &#x1f3…

查看网卡和网关命令

ifconfig&#xff08;接口配置&#xff09; 是一个网络管理工具&#xff0c;它用于配置和查看 Linux 操作系统中网络接口的状态&#xff0c;使用ifconfig&#xff0c;您可以分配 IP 地址、启用或禁用接口、管理 ARP 缓存、路由等。 ping命令是个使用频率极高的网络诊断工具。…