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

一.超声波传感器简介

1.型号:HC-SR04

2.外观:

 

 3.管脚介绍:

HC-SR04模块针脚含义
针脚名称 针脚含义
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;
    }
}

 

 

posted @ 2022-03-29 18:29  石头的哥哥  阅读(873)  评论(0)    收藏  举报