首页 > 其他分享 >蓝桥杯单片机快速开发笔记——超声波测距

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

时间:2024-03-19 19:02:53浏览次数:30  
标签:定时器 TX Delay12us 蓝桥 单片机 信号 time 超声波 测距

一、原理分析

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

原理:

  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。

标签:定时器,TX,Delay12us,蓝桥,单片机,信号,time,超声波,测距
From: https://blog.csdn.net/weixin_62434750/article/details/136818733

相关文章

  • 蓝桥杯 X进制减法
    注意,一定不要给(A[i]-B[i])*w取模,因为它可能是负数!!!这个错误我检查了俩小时,呜呜呜呜呜呜呜除此之外这题只要思路对了,难度是比较小的题目思路:1.反向输入,因为权重和题目顺序是相反的      2.B数组的大小要和A一样,因为A长度比较大,或者二者一样长  ......
  • 用 滑动窗口 算法 解决 蓝桥杯子矩阵 的运行超时 问题
    这题如果用暴力算法解决,会用到四个for循环。当数据很大时,会超时,无法通过蓝桥杯。如果掌握了二维滑动窗口,会让时间复杂度减少俩个数量级,很好地解决超时的问题。关于滑动窗口算法,如果读者不会的话,建议去哔站看大佬的讲解视频,笔者也是昨天才学的。如果已经会了滑动窗口算法,......
  • P8685 [蓝桥杯 2019 省 A] 外卖店优先级
    这道题虽然难度很低,但是细节不少1.要先处理减,再处理加。因为是先经历了空档期的优先级衰减,然后才有订单带来的优先级提升;先减后加的时候有0这个下限兜底,如果先加后减可能会导致答案偏小。2.减之后和加之后都要check一下,如果in_cache为true,减完之后小于等于三,但是加了以后又上升......
  • 单片机各种位运算总结
    单片机各种位运算总结当在单片机中需要进行寄存器操作或者读取/发送数据时,可能用到位操作,因此在此做一个总结,将可能用到的位操作进行一个总结并解析。位运算具体的计算方式:【STM32】位操作、按位与、按位或、按位异或、取反、左移、右移等基础C语言知识补充_按位与操作是什么......
  • 0098-基于单片机的洗衣机仿真设计
    功能描述1、采用51/52单片机作为主控芯片;2、采用数码管显示计时秒数,单个操作均为20秒;3、采用继电器控制进水、排水;4、采用L298驱动电机;5、具有强洗、标准洗、弱洗、甩干四种模式;6、强洗流程:进水、三轮洗涤、排水、甩干、进水、漂洗、排水、甩干;7、标准洗流程:进水、两轮......
  • 692、基于51单片机的自行车(调速,LCD1602)
    毕设帮助、开题指导、技术解答(有偿)见文末。目录一、设计功能二、proteus仿真三、原理图四、程序源码五、资料包括一、设计功能自行车调速系统1、使用LCD1602显示当前速度和设置速度2、使用电位器设置当前速度,模拟把手调速3、按键启停系统4、速度控制......
  • 693、基于51单片机的RGB调色(PWM)
    毕设帮助、开题指导、技术解答(有偿)见文末。目录一、设计功能二、proteus仿真三、原理图四、程序源码五、资料包括一、设计功能采用PWM调制方式进行三基色LED配色控制的研究,实验证明其电路简单、操作方便,能很好的实现各种颜色的配置和切换使用6个按键分别......
  • 694、基于51单片机的报警器(模拟量,上限,TLC1543,LCD1602)
    毕设帮助、开题指导、技术解答(有偿)见文末。目录一、设计功能二、proteus仿真三、原理图四、程序源码五、资料包括一、设计功能简易报警器(可用作CO2、CH4、CO、粉尘、酒精、NH2等模拟量传感器报警)1、测量物理量的浓度值2、如果浓度值超过阀值,报警。3、......
  • 688、基于51单片机的智能婴儿车(温湿度,音乐,避障,声音)
    毕设帮助、开题指导、技术解答(有偿)见文末。目录一、设计功能二、proteus仿真三、原理图四、程序源码五、资料包括一、设计功能二、proteus仿真三、原理图四、程序源码五、资料包括需要完整的资料可以点击下面的名片,找我要资源......
  • 2024 蓝桥打卡Day15
    洛谷刷题P8752[蓝桥杯2021省B2]特殊年份题目[P8752[蓝桥杯2021省B2]特殊年份](https://www.luogu.com.cn/problem/P8752)题解P8780[蓝桥杯2022省B]刷题统计题目[P8780[蓝桥杯2022省B]刷题统计](https://www.luogu.com.cn/problem/P8780)题解P......