超声波模块与C51单片机进行测距

发布时间:2022-06-20 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了超声波模块与C51单片机进行测距脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

一.超声波传感器简介

1.型号:HC-SR04

2.外观:

超声波模块与C51单片机进行测距

 

 3.管脚介绍:

HC-SR04模块针脚含义
针脚名称 针脚含义
Vcc 模块供电的正极
Gnd 模块供电的负极
trig 超声波发出超声波的管脚
echo 当由高电平转化成低电平之后表示接收到返回超声波

4.主要参数

超声波模块与C51单片机进行测距

 

 二.超声波测距模块原理

1.时序图

超声波模块与C51单片机进行测距

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单片机进行测距全部内容,希望文章能够帮你解决超声波模块与C51单片机进行测距所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: