当前位置:首页 > 编程笔记 > 正文
已解决

C51--超声波测距

来自网友在路上 169869提问 提问时间:2023-10-27 02:01:18阅读次数: 69

最佳答案 问答题库698位专家为你答疑解惑

超声波测距

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/usif(dis < 10){D5 = 0;D6 = 1;}else{D5 = 1;D6 = 0;}//定时器数据清零,方便下一次测距TH0 = 0;TL0 = 0;}} 
查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"C51--超声波测距":http://eshow365.cn/6-25603-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!