非常簡潔!可直接調用!!!
QX]]2A~KZX8S[}TNR1YG{JP.png (50.11 KB, 下載次數(shù): 32)
下載附件
2019-7-7 16:30 上傳
3`RY9SXS8CUO4`L5`V38}XR.png (93.22 KB, 下載次數(shù): 32)
下載附件
2019-7-7 16:30 上傳
單片機源程序如下:
- #include "STC15Fxxxx.H"
- #include "hc_sr04.h"
- u16 time=0;
- u16 timer=0;
- bit flag =0;
- void Delay45us() //@11.0592MHz
- {
- unsigned char i;
- i = 122;
- while (--i);
- }
- //========================================================================
- // 函數(shù): HC_SR04_Init()
- // 描述: 初始化HC_SR04所需硬件。
- // 參數(shù):
- // 返回: none.
- //========================================================================
- void HC_SR04_Init()
- {
- TMOD |= 0x01; //定時器0 16位不可重裝模式
- TH0 = 0x00; // 設置定時初值
- TL0 = 0x00; //設置定時初值
- TR0=1;
- ET0=1;
- EA=1;
- }
- //========================================================================
- // 函數(shù): HC_SR04_Start()
- // 描述: 開始發(fā)送聲波。
- // 參數(shù):
- // 返回: none.
- //========================================================================
- void HC_SR04_Start()
- {
- Trig_Pin = 0;
- Delay45us();
- Trig_Pin = 1;
- }
- //========================================================================
- // 函數(shù): int HC_SR04_Loop()
- // 描述: 返回距離。
- // 參數(shù):
- // 返回: distance:距離(單位:厘米).
- //========================================================================
- int HC_SR04_Loop()
- {
- int distance;//distance|距離
- HC_SR04_Start();
- while(!Echo_Pin); //Wait when RX is zero|當RX為零時等待
- TR0=1; //Opening count|開啟計數(shù)
- while(Echo_Pin); //When RX counts to 1 and waits|當RX為1計數(shù)并等待
- TR0=0; //Closing count|關閉計數(shù)
- time=TH0*256+TL0;
- TH0=0;
- TL0=0;
- distance=(time*1.87)/100; //算出來是CM
- if(flag==1) //超出測量
- {
- flag=0;
- distance=0;
- }
- return distance;
- }
- void zd0() interrupt 1 //T0中斷用來計數(shù)器溢出,超過測距范圍
- {
- flag=1; //中斷溢出標志
- }
復制代碼
所有資料51hei提供下載:
HC_SR04.zip
(60.9 KB, 下載次數(shù): 75)
2019-7-7 16:30 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|