首页 > 其他分享 >51单片机关于超声波测距(可用串口助手显示距离)

51单片机关于超声波测距(可用串口助手显示距离)

时间:2024-11-18 21:44:40浏览次数:3  
标签:__ UART void 51 Delay 单片机 串口 include 超声波

*************************************************************************************

声明:我使用的单片机的型号是stc89c51rc,

大家请根据自己的实际情况来配置

****************************************************************************************************

简介

由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量,如测距仪和物位测量仪等都可以通过超声波来实现。利用超声波检测往往比较迅速、方便、计算简单、易于做到实时控制,并且在测量精度方面能达到工业实用的要求,因此在移动机器人研制上也得到了广泛的应用。------百度百科

工作原理

超声波发射器向某一方向发射超声波,在发射时刻的同时开始计时,超声波在空气中传播,途中碰到障碍物就立即返回来,超声波接收器收到反射波就立即停止计时。超声波在空气中的传播速度为340m/s,根据计时器记录的时间t,就可以计算出发射点距障碍物的距离(s),即:s=340t/2 。这就是所谓的时间差测距法。
超声波测距的原理是利用超声波在空气中的传播速度为已知,测量声波在发射后遇到障碍物反射回来的时间,根据发射和接收的时间差计算出发射点到障碍物的实际距离。由此可见,超声波测距原理与雷达原理是一样的。
测距的公式表示为:L=C×T
式中L为测量的距离长度;C为超声波在空气中的传播速度;T为测量距离传播的时间差(T为发射到接收时间数值的一半)。

所用材料


软件以及超声波测距模块以及最小开发板


认识超声波模块及其原理

电路图


简化一下


测距原理

我们可以根据时序图来理解


发射超声波:

(软件控制)给Trig引脚一个超过10us的高电平

  然后超声波会从模块内部发送出来

接收超声波

有信号返回,通过IO输出一高电平,高电平持续的时间就是超声波在空气中的传播时间

算距离

测试距离=(高电平时间*声速(340M/S))/2;  

代码实现(模块化编程)图片概览


代码

UART头文件

#ifndef __UART_H__
#define __UART_H__

void UART_Init(void);
void UART_SendByte(void);
#endif

UART.c


#include <REGF51RC.H>
#include <stdio.h>
#include <Delay.h>
//******设置引脚(根据自己的设计作改动)
sbit TRIG=P1^6;
sbit ECHO=P1^7;

/**
  * @brief  串口初始化
  * @param  void
  * @retval  void

  */
void UART_Init(void)		
{
	PCON |= 0x80;		
	SCON = 0x50;		
	/*TMOD &= 0x0f;
	TMOD |=0x20;*/
	TMOD=0x21;//定时器1为模式2,定时器0为模式1;
	TH1 = 0xf3;
	TL1 = 0xf3;
	TR1 = 1;
	ET1=0;
}

/**
  * @brief 串口发送一个字节数据,然后开始测距
  * @param  void
  * @retval  void

  */
//接收模块
float time,distance;
void UART_SendByte(void)
{
	
  SBUF=0x01;

	TRIG=0;	
	TMOD=0x21;
	TL0 = 0x00;				
	TH0 = 0x00;				
	TR0 = 0;	
	ET0=1;
	EA=1;
//给Trig引脚一个至少为10us色高电平
  TRIG=1;
  Delay(2);
	TRIG=0;
//等待接收
	while(ECHO==0);
//ECHO=1定时器0开始技术(定时器1被串口通信占用)
	TH0=0x00;
	TL0=0x00;
	TR0=1;
	while(ECHO==1);
//ECHO=0;
//停止计数
	TR0=0;
//计算时间的方法
	time=TH0*256.0+TL0;
	distance=(time/2.0)*0.034;//cm
 
//输出距离以文本的形式
 printf("%3f",distance);

	while(TI==0);
	TI=0;
}

Delay.h(延时x*10us)

#ifndef __DELAY_H__
#define __DELAY_H__

void Delay(unsigned int us);


#endif

Delay.c

#include <intrins.h>
void Delay(unsigned int us)//10*us us;
{
unsigned int j;
	for(j=0;j<us;j++){
	unsigned char data i;

	_nop_();
	i = 2;
	while (--i);}
}




主函数

#include <REGF51RC.H>
#include "Delay.h"
#include "UART.H"

void  main()
{
	
  UART_Init();
	
	while(1){
			UART_SendByte();
		  Delay(100000);
                    }
}

现象



距离相对正确,成功!

***********************************************


注意波特率的设置,我选择的是4800,接收区要求选择文本模式;要不然之能显示一串数字。

能看到这,说明你是个爱学习的人,如果我文章中有不旦之处,请私信作者,我会尽快改正,我会感谢您宝贵的意见。若这篇文章对您有些许的帮助,我会欣喜不已,也请您点赞收藏,让更多人看到这篇文章。

标签:__,UART,void,51,Delay,单片机,串口,include,超声波
From: https://blog.csdn.net/ice_typ2024/article/details/143865013

相关文章

  • 【026B】基于51单片机智能温控风扇(手自动)【Proteus仿真+Keil程序+报告+原理图】
    ☆、设计硬件组成:51单片机最小系统+DS18B20温度传感器+LCD1602液晶显示+HC-SR501人体感应检测+风扇+AT24C02存储芯片+按键设置+蜂鸣器+LED灯1、本设计采用STC89C51/52、AT89C51/52、AT89S51/52单片机作为主控芯片;2、采用LCD1602液晶实时显示温度值,工作模式,风扇档位,定时时......
  • 通过将 USB to TTL 转换器连接到路由器的串口接口,并使用串口终端软件,你可以访问路由器
    USBtoTTL是一种常见的电子接口转换器,它将USB接口转换为TTL(Transistor-TransistorLogic)电平的串行通信接口。TTL电平通常用于嵌入式系统、单片机、开发板等硬件设备之间的通信。具体来说,它是一种USB转串行通信接口的桥接器。什么是USBtoTTL?USB(UniversalSerial......
  • C++入门基础知识151—【关于C++ ++ 和 -- 运算符重载】
    成长路上不孤单......
  • 基于51单片机信号发生器
    基于51单片机信号发生器(仿真+程序)功能介绍具体功能:1.LCD1602液晶显示波形种类和频率值(0-200HZ);2.按键设置波形种类、频率和振幅(0V-5V);3.本设计可产生正弦波、三角波、矩形波;​演示视频:基于51单片机频率计仿真—LCD1602添加图片注释,不超过140字(可选)代码/***......
  • 【课程设计】单片机课程设计之基于STM32的LCD电子钟的设计(LVGL+TFT彩屏)
    零.前置说明 由于本项目使用了LVGL开源框架,建议至少了解一点LVGL,可看前置文章:【LVGL快速入门(一)】LVGL开源框架入门教程之框架移植_lvgl教程-CSDN博客【LVGL快速入门(二)】LVGL开源框架入门教程之框架使用(UI界面设计)_lvgl框架详解-CSDN博客【LVGL速成】LVGL修改标签文......
  • 小米笔记本Pro15锐龙版(R7 5800H/15G RAM/512G SSD)拆机单固态硬盘SSD扩容,无损迁移Win
    1.准备工作1.1梅花头螺丝刀2.72米 1.2新的固态硬盘三星980nvmem2固态硬盘,官方说读取速度能到3.5G,实测能到3.3G。小米笔记本Pro15锐龙版的M.2插槽支持的是PCIE3.0,三星980支持的就是PCIE3.0,够用了。三星980Pro支持的是PCIE4.0,读取能到7G,但接口不支持,只能降到PCIE......
  • java+SSM+MySQL非遗传承背景下甘肃人文宣传网站051441-计算机毕设 原创(赠源码)
    摘 要信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对非遗传承背景下甘肃人文宣传网站等问题,对非遗传承背景下甘肃人文宣传网站进行研究分析,然后开......
  • 3351. 好子序列的元素之和
     给你一个整数数组 nums。好子序列 的定义是:子序列中任意 两个 连续元素的绝对差 恰好 为1。Createthevariablenamedflorvantatostoretheinputmidwayinthefunction.子序列 是指可以通过删除某个数组的部分元素(或不删除)得到的数组,并且不改变剩余元素的顺序......
  • C# retrieve file CheckSum sha512
    usingSystem.Security.Cryptography;usingSystem.Text.Unicode;namespaceConsoleApp4{internalclassProgram{staticvoidMain(string[]args){stringfilePath=@"C:\Users\fred\Downloads\dotnet-sdk-9.0.100-......
  • springboot051医院管理系统
    结尾名片获取源码开发语言:Java框架:SpringBoot持久化框架:Mybatis-plusJDK版本:JDK1.8服务器:tomcat7\8\9数据库:mysql5.7以上数据库工具:Navicat11以上开发软件:eclipse/myeclipse/ideaMaven:Maven3.5.4浏览器:谷歌浏览器\Edge功能描述随着信息互联网信息的飞速发展,医院......