脚本宝典收集整理的这篇文章主要介绍了超声波模块与C51单片机进行测距,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
一.超声波传感器简介
1.型号:HC-SR04
2.外观:
3.管脚介绍:
针脚名称 | 针脚含义 |
Vcc | 模块供电的正极 |
Gnd | 模块供电的负极 |
trig | 超声波发出超声波的管脚 |
echo | 当由高电平转化成低电平之后表示接收到返回超声波 |
4.主要参数
二.超声波测距模块原理
1.时序图
2.基本原理
由上面的时序图可以看到,当给trig10us的高电平信号,之后超声波开始进行信号发送,同时echo信号开始由低电平转化成高电平信号,同时开始启动定时器,开始计时;当超声波被障碍物返回时,echo信号由高电平转化成低电平信号,同时停止定时器的计时,这样就可以通过定时器算出中间经过的时间,根据公式:距离=速度(340m/s)*时间可以进行计算
3.代码实现
#include <REGX52.H> /*当检测到距离大于15cm时,指示灯点亮,否则指示灯熄灭*/ sbit D1 = P1^0; sbit trig = P2^0; sbit echo = P2^1; /*将定时器的模式设定为0模式,并将初始值设定为0*/ void Timer0Init() { TMOD &= 0xF0; TMOD |= 0x01; TL0 = 0; TH0 = 0; } void Delay10us() { unsigned char i; i = 2; while (--i); } void HC_strat() { trig = 0; trig = 1; Delay10us(); trig = 0; } void main() { double time; double line; Timer0Init(); /* 1-当echo由低电平转化成高电平时,开始发送超声波,同时开始定时器计时 2-当echo由高电平转化成低电平时,停止发送超声波,同时停止定时器计时 */ HC_strat(); while(echo == 0); TR0 = 1; while(echo == 1); TR0 = 0; /* 1-340m/s = 34000cm/s = 34cm/ms = 0.034cm/us 2-time 的单位是us 3-由于声波是来回传输,因此需要将最后的结果除以二 4-对于将两个8位数据合并成一个16位数据,可以通过将高八位乘以2的八次方然后加上低八位即可 */ time = (TH0 * 256 + TL0)*1.085; line = (time * 0.034)/2; if(line>15) { D1 = 0; } else { D1 = 1; } }
以上是脚本宝典为你收集整理的超声波模块与C51单片机进行测距全部内容,希望文章能够帮你解决超声波模块与C51单片机进行测距所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。