单片机设计_超声波测距仿真(AT89C51)

2023-11-19

超声波测距仿真

一、电路设计

超声波模块介绍

由于超声波指向性强,能量消耗缓慢,在介质中传播的距离较远,因而超声波经常用于距离的测量,利用超声波检测往往比较迅速、方便、计算简单、易于做到实时控制,并且在测量精度方面能达到工业实用的要求,因此得到了广泛的应用。如图5即为HC-SR04超声波测距模块

图1 超声波测距传感器HC-SR04
1、基本工作原理:
如图6为超声波测距传感器HC-SR04模块,VCC 接 5V 电源,GND 为地 线,TRIG 为触发控制信号输入,ECHO为回响信号输出。超声波在传播时碰到障碍物即返回,HC-SR04模块收到回波信号后Echo口输出一个高电平。
2.、HC-SR04电气参数:
表2 HC-SR04的电气参数
HC-SR04超声波测距模块可提供2cm至400cm的非接触式距离感测功能,测距精度可达3mm;模块自身包括超声波发射器、接收器与控制电路。
图 2 超声波时序图
3、操作步骤为:
HC-SR04的Trig端口和Echo端口接入单片机的I/O口接,初始化时将trig和echo端口都置低,首先向给 trig 端发送至少10 us的高电平脉冲(模块自动向外发送8个40K的方波),如图6,然后等待,捕捉 echo 端输出一个高电平,当单片机检测到上升沿(或高电平)的同时,打开定时器开始计时,再次等待,直到单片机检测到echo变成下降沿(或低电平)时,结束计数,读出计时器的时间,计数器的计数值乘以单片机计数周期就是超声波从发射到接收的往返时间,即按照
*测试距离(S)=高电平时间(t)声速(v=340m/s)/2
就可以算出超声波到障碍物的距离。

二、运行结果

在这里插入图片描述

三、部分代码

/*想要更多项目私wo!!!*/
#include "task.h"

//全局变量定义
//段码表,适用于共阴数码管
unsigned int code duan_ma[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,		//0~9
								 0x77,0x7c,0x39,0x5e,0x79,0x71};	//A~F
unsigned int dis_buf[4];			//显示缓存

unsigned int S = 0;					//距离缓存变量
unsigned long time = 0;				//时间缓存变量 
unsigned int S_H = 400, S_L = 10;	//S_H:报警上限值,默认400cm,S_L:报警下限值,默认10cm



/* 延时,单位:ms */
void delayms(unsigned int ms)
{
	unsigned char a,b,c;

	while(--ms)
	{
	    for(c=1;c>0;c--)
	        for(b=142;b>0;b--)
	            for(a=2;a>0;a--);	
	}
}



/* 计算测距 */
void count(void)
{
	start_ranging();	//启动一次超声波
	while(!Echo);		//等待超声波模块输出IO拉高 
	TR0 = 1;			//开启定时器计时
	while(Echo);		//等待超声波模块输出IO拉低
	TR0 = 0; 			//关闭定时器计时
	
	/* 计算距离 */
	time = TH0 * 256 + TL0;	//得到的时间,专业写法应该是这样:time = TH0 << 8 | TL0
	TH0 = 0;				//定时计数器清零	
	TL0 = 0;
	
	S = (time * 1.7) / 100; //算出来是M				
}
/* 显示距离 */
void dis_distance(void)
{
	dis_buf[3] = 0x00;
	dis_buf[2] = duan_ma[S / 100 %10]; 	//取出百位数,并在数码管的第3位显示,从右往左数
	dis_buf[1] = duan_ma[S / 10 %10];	//取出十位数,并在数码管的第2位显示,从右往左数
	dis_buf[0] = duan_ma[S % 10]; 		//取出个位数,并在数码管的第1位显示,从右往左数	
}
/* 设置报警功能 */
void key_fuction(void)
{
	unsigned char mode_flag = 1;	//模式切换标记位,1:设置上限值,2:设置下限值,3:退出

	while(1)
	{
		if(key_scan() == 1)	
		{
			BEEP = 0;			//按键提示音
			delayms(50);
			BEEP = 1;
			delayms(1000);
			++mode_flag;
			if(mode_flag >= 3)	//如果满3了,则退出
				break;		
		}
		if(key_scan() == 2)		//如果加键按下
		{
			BEEP = 0;			//按键提示音
			delayms(50);
			BEEP = 1;
			delayms(1000);
			if(mode_flag == 1)	//设置上限值
			{
				++S_H;
				if(S_H > 400)
					S_H = 2;	
			}
			if(mode_flag == 2)	//设置下限值
			{
				++S_L;
				if(S_L > 400)
					S_L = 2;	
			}
		}
		if(key_scan() == 3)		//如果减键按下
		{
			BEEP = 0;			//按键提示音
			delayms(50);
			BEEP = 1;
			delayms(1000);
			if(mode_flag == 1)	//设置上限值
			{
				--S_H;
				if(S_H < 2)
					S_H = 400;	
			}
			if(mode_flag == 2)	//设置下限值
			{
				--S_L;
				if(S_L < 2)
					S_L = 400;	
			}
		}

		/* 报警设置显示 */
		if(mode_flag == 1) 	//显示设置上限值内容
		{
			dis_buf[3] = 0x76;						//第4位数码管显示字母 H
			dis_buf[2] = duan_ma[S_H / 100 % 10]; 	//显示百位数
			dis_buf[1] = duan_ma[S_H / 10 % 10];	//显示十位数
			dis_buf[0] = duan_ma[S_H % 10];			//显示个位数
		}
		if(mode_flag == 2)	 	//显示设置下限值内容
		{
			dis_buf[3] = 0x38;	//第4位数码管显示字母 L
			dis_buf[2] = duan_ma[S_L / 100 % 10]; 	//显示百位数
			dis_buf[1] = duan_ma[S_L / 10 % 10];	//显示十位数
			dis_buf[0] = duan_ma[S_L % 10];			//显示个位数
		}		
	}
}









本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单片机设计_超声波测距仿真(AT89C51) 的相关文章

  • 面试题: v-if和v-show有什么区别?

    面试题 v if和v show有什么区别 1 v if能够控制是否生成vnode 也就间接控制了是否生成对应的dom 当v if为true时 会生成对应的vnode 并生成对应的dom元素 当其为false时 不会生成对应的vnode 自然
  • openwrt 缺少 libc.so.6 libm.so.6 libpthread.so.0

    在开发openwrt时 编译内核的时候 自己写的代码在openwrt 编译报错 提示缺少依赖库文件 Package Gateway Auto is missing dependencies for the following librari
  • flutter版本号对比

    版本号对比 Future
  • 筛选素数之欧拉筛法 python实现 附带证明

    返回类型 列表 说明 返回小于upperBound的所有素数 def ouLaShai upperBound filter False for i in range upperBound 1 primeNumbers for num in
  • Java学习心得10——多态

    多态 一种类型的变量可以掌管多种类型的对象 这就是多态 说人话 直观理解成多种形态 人类就是多态的 黄种人 白种人 黑种人都是属于人类 人类这一个类可以表示黄种人 白种人 黑种人这三个类 这不就是多态多种形态吗 回到编程 Animal 动物
  • 【华为OD机试真题 python】数字加减游戏【2022 Q4

    题目描述 数字加减游戏 小明在玩一个数字加减游戏 只使用加法或者减法 将一个数字s变成数字t 在每个回合中 小明可以用当前的数字加上或减去一个数字 现在有两种数字可以用来加减 分别为a b a b 其中b没有使用次数限制 请问小明最少可以用
  • 第四章 Flume专题-日志采集工具

    一 Flume专题之组件及架构介绍 1 Flume概述 1 1 Flume定义 Flume是一种分布式的 高可靠的和高可用的服务 用于有效地收集 聚合和移动大量日志数据框架 Flume是一个简单灵活的基于流数据的体系结构 1 2 Flume
  • Delphi ListView 的用法

    Delphi ListView 的用法 常用技巧 增加 i ListView1 Items Count with ListView1 do begin ListItem Items Add ListItem Caption IntToStr

随机推荐

  • Vite搭建react+ts项目

    创建一个react项目 首先需要打开终端 进行vite的引入 yarn create vite 使用react模板创建项目 yarn create vite react test template react cd react test y
  • Float与二进制之间的转化(Java实现)

    在线转化 http www binaryconvert com 2 3 import java text DecimalFormat 4 5 6 public class SinglePrecision 7 8 浮点到二进制 9 publi
  • 采用通信方式控制台达B2伺服驱动器运行在速度模式

    目录 前言 一 伺服驱动器恢复出厂设置 二 伺服驱动器设置为速度模式 三 关闭告警信息 四 通讯功能设置 五 采用通信功能控制伺服驱动器按速度模式运行 总结 前言 最近 使用台达B2伺服驱动器做项目 项目中用伺服电机的速度模式驱动一个螺杆按
  • Linux笔记--查看Linux系统自动Kill掉的进程

    目录 1 前言 2 查看系统日志 3 参考 1 前言 今天在服务器训练一个模型 程序无任何错误 但一段时间后挂在后台的进程莫名被Kill掉 原因在于服务器 linux 系统的运行内存不足 为了避免系统奔溃 系统主动 kill 内存占用最大的
  • Python项目创建(Pycharm程序)

    点击 新建项目 创建一个新的项目 这一步重点在Python解释器的选择 一个是新建虚拟环境 另一个是使用已有环境 使用此工具新建环境 Virtualenv 新建后在项目根目录下会出现 venv 的文件夹 相当于把Python解释器复制过去一
  • RANSAC算法实现 + 直线拟合

    一 RANSAC算法 1 参考资料 1 题目来源与解析 商汤科技SLAM算法岗的RANSAC编程题 2 牛客网题目 编程题 线性回归 3 牛客网解答参考 商汤科技某算法岗的编程题有点过分了啊 4 RANSAC算法原理 RANSAC翻译 经典
  • TOPIAM 社区版 1.0.0 发布,开源 IAM/IDaaS 企业身份管理平台

    文章目录 产品概述 系统架构 功能列表 管理端 门户端 技术架构 后续规划 相关地址 Hi 亲爱的朋友们 今天是传统 24 节气中的立秋 秋天是禾谷成熟 收获的季节 经过长时间优化和迭代 TOPIAM 企业身份管控平台也迎来了当下的成长和收
  • [Redis]-四种部署方式

    森格 2022年11月 本文是对Redis部署方式的学习 主要学习基本原理 以及几种方式的优缺点 一 部署方式概况 对于Redis的安装部署主要可以分为单机版 主从同步 Sentinel哨兵 Cluster集群部署四种方式 下面一起看下几种
  • AutoCAD 2022 for Mac v2022(24.1.50.899)中文版介绍

    CAD2022 Mac是一款针对苹果电脑打造的CAD设计软件 用于二维绘图 详细绘制 设计文档和基本三维设计 广泛应用于机械设计 工业制图 工程制图 土木建筑 装饰装潢 服装加工等多个行业领域 CAD2022新特征 改进了桌面 Web和移动
  • 一个全网最详细的Python教程,不信你来学一学!2023Python入门教程完整版,无偿分享

    近几年 编程越来越火 网上也是铺天盖地的免费教程 中小学生都开始投入到学习中 编程学习从娃娃抓起 甚至有些小学生都做起了 UP 主 教大家学编程 PS 我落下了柠檬的眼泪 小小年纪就学得一手好编程 光从编程的难易度来说 Python 简单
  • IDEA进行了Pull操作,Merge时选择了他们的优先,但自己的代码没有Push导致自己未提交的代码没了,头脑发热我差点哭出来解决方案

    IDEA进行了Pull操作 Merge时选择了他们的优先 但自己的代码没有Push导致自己未提交的代码没了 头脑发热我差点哭出来解决方案 问题背景 解决方案 心得 Lyric 沉默是因为包容 问题背景 我和胖哥同时在一个项目里面开发 我让他
  • 华为OD机试 - 判断字符串子序列(Java)

    题目描述 给定字符串 target和 source 判断 target是否为 source 的子序列 你可以认为target和 source 中仅包含英文小写字母 字符串 source 可能会很长 长度 500 000 而 target是个
  • python笔记(爬虫 微爬取微信信息)

    views py import time import json import re import requests from bs4 import BeautifulSoup from flask import Blueprint ren
  • DevExpress ASP.NET GridView在Edit时弹出新窗体

    1 设置setting editing属性 选择PopupEditForm 2 如果在源代码中设置的话 如下
  • 机器学习入门教学——梯度下降、梯度上升

    1 简介 梯度表示某一函数在该点处的方向导数沿着该方向取得最大值 即函数在该点处沿着该方向 梯度的方向 变化最快 变化率 梯度的模 最大 可理解为导数 梯度上升和梯度下降是优化算法中常用的两种方法 主要目的是通过迭代找到目标函数的最大值和最
  • 编译原理实验一(C-语言词法分析器的编写C语言版本)

    编译原理实验一 C 语言词法分析器的编写C语言版本 一 tiny词法分析程序源代码阅读笔记 重要变量和函数 变量和函数 A 要计算的唯一特性是词法或是被识别的记号的串值 变量t o k e n S t r i n g B 扫描程序使用3个全
  • 设计模式:观察者模式

    观察者模式 又被称为发布 订阅 Publish Subscribe 模式 属于行为型模式的一种 它定义了一种一对多的依赖关系 让多个观察者对象同时监听某一个主题对象 这个主题对象在状态变化时 会通知所有的观察者对象 使他们能够自动更新自己
  • github-render.s3.amazonaws.com 报错 The specified key does not exist.

    GitHub网站在浏览 ipynb 类型的文件的时候 需要调用 https github render s3 amazonaws com 下面的接口 结果一直报404错误 返回的 xml 里面信息是 The specified key do
  • 数据结构——排序算法——基数排序

    基数排序有两种实现方式 本例属于最高位优先法 思路是从最高位开始 依次对基数进行排序 与之对应的是 最低位优先法 思路是从最低位开始 依次对基数进行排序 基数排序可以分为以下三个步骤 1 找到数组中的最大值 确定最大数字的位数 2 从最低位
  • 单片机设计_超声波测距仿真(AT89C51)

    超声波测距仿真 一 电路设计 超声波模块介绍 由于超声波指向性强 能量消耗缓慢 在介质中传播的距离较远 因而超声波经常用于距离的测量 利用超声波检测往往比较迅速 方便 计算简单 易于做到实时控制 并且在测量精度方面能达到工业实用的要求 因此