1. 程式人生 > 其它 >超聲波模組與C51微控制器進行測距

超聲波模組與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; } }