当前位置: 首页 > article >正文

C51--超声波测距

超声波测距

1、简介
超声波模块是用来测距的一种产品,利用时间差和声音传播速度,计算出模块到前方障碍物的距离。
型号:HC-SR04
可测距离:2cm——400cm非接触距离感测
测距精度:3mm
接线参考:模块除了两个电源引脚外,还有TRIG,ECHO引脚,这两个分别接开发板的P1.5和P1.6端口

VCC - 5v
GND - 接地
TRIG - P1.5口(发送波)
ECHO -P1.6口(接收波)

2、发送波返回波
给TRIG一个10us的高电平就可以触发发波
ECHO由低电平跳转到高电平表示开始发送波,
ECHO由高电平跳转到低电平表示波返回

3、计算时间
(ECHO高电平持续的时间)
波发出去,开始计算时间,启动定时器;
波返回时,停止计时器,计算出中间经过的时间。

4、计算距离
距离=(时间)*波的速度(340m/s)/ 2

5、代码实现
十进制左移一位相当于乘以10。例:2左移一位为20
二进制左移一位相当于乘以2. 例:1左移一位为10(十进制的2)
左移8位,相当于乘以2的8次方 = 256

/*
1、给TRIG一个10us的高电平就可以触发发波 
2、ECHO由**低电平跳转到高电平**表示开始发送波,开始启动定时器
3、ECHO由**高电平跳转到低电平**表示波返回,停止定时器。
4、计算中间经过的时间
5、计算距离:距离=(时间)*波的速度(340m/s)/ 2
*/


#include "reg52.h"

//距离小于10cm,D5亮,D6灭,反之相反

sbit D5 = P3^7;
sbit D6 = P3^6;
sbit Trig = P1^5;
sbit Echo = P1^6;


void Delay10us()		//@11.0592MHz
{
	unsigned char i;

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

void startHC()
{
	Trig = 0;
	Trig = 1;
	Delay10us();
	Trig = 0;
}

void Time0Init()		
{
	TMOD &= 0xF0;		//设置定时器模式
	TMOD |= 0x01;
	TH0 = 0;
	TL0 = 0;
	//设置定时器0工作模式1,初值设定为0开始数数,不着急启动定时器
}

/*
十进制左移一位相当于乘以10。例:2左移一位为20
二进制左移一位相当于乘以2.  例:1左移一位为10(十进制的2)
左移8位,相当于乘以2的8次方 = 256
*/

void main()
{
	double time;//时间
	double dis;//距离
	
	Time0Init();//定时器
	
	while(1){
		startHC();					//给TRIG一个10us的高电平
		while(Echo == 0);		//ECHO由**低电平跳转到高电平**表示开始发送波
		TR0 = 1;						//波发送时启动定时器
		while(Echo == 1);		//ECHO由**高电平跳转到低电平**表示波返回
		TR0 = 0;						//波回来时关闭定时器
		time = (TH0 * 256 + TL0)*1.085;		//计算中间经过的时间,以 um 为单位
		dis = time * 0.017;
		//距离=(时间)*波的速度(340m/s)/ 2 ; 340m/s = 34cm/ms = 0.034cm/us
		if(dis < 10){
			D5 = 0;
			D6 = 1;
		}else{
				D5 = 1;
				D6 = 0;
			}
		//定时器数据清零,方便下一次测距
		TH0 = 0;
		TL0 = 0;
	}
	
} 

http://www.kler.cn/a/105170.html

相关文章:

  • Qt之自定义QStringListModel设置背景色和前景色
  • 1.2、Python基础-函数
  • Java设计模式大揭秘,细致剖析5种经典模式
  • 你真的了解CPU和GPU?
  • 低概率Bug,研发敷衍说复现不到
  • 【Java 进阶篇】Java HTTP 概述
  • 使用AOP切面实现日志记录功能
  • Codeforces Round 904 (Div. 2) C
  • Pytorch指定数据加载器使用子进程
  • 09. 主频和时钟配置
  • 本地存储 sessionStoragelocalStorage
  • Linux本地RStudio工具安装指南及远程访问配置安装RStudio Server
  • V3s 屏幕LCD驱动总结
  • Java基础-字符串
  • 使用字节流读取文件中的数据的几种方式
  • c#调用webservice 示例
  • 经典卷积神经网络 - LeNet
  • 将rul中所有的特殊符号进行转换的方法
  • 常用linux命令 linux_cmd_sheet
  • EPPlus库的安装和使用 C# 中 Excel的导入和导出