非常簡潔!可直接調用!!!
單片機源程序如下:
- #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);
- }
- //========================================================================
- // 函數: HC_SR04_Init()
- // 描述: 初始化HC_SR04所需硬件。
- // 參數:
- // 返回: none.
- //========================================================================
- void HC_SR04_Init()
- {
- TMOD |= 0x01; //定時器0 16位不可重裝模式
- TH0 = 0x00; // 設置定時初值
- TL0 = 0x00; //設置定時初值
- TR0=1;
- ET0=1;
- EA=1;
- }
- //========================================================================
- // 函數: HC_SR04_Start()
- // 描述: 開始發送聲波。
- // 參數:
- // 返回: none.
- //========================================================================
- void HC_SR04_Start()
- {
- Trig_Pin = 0;
- Delay45us();
- Trig_Pin = 1;
- }
- //========================================================================
- // 函數: int HC_SR04_Loop()
- // 描述: 返回距離。
- // 參數:
- // 返回: distance:距離(單位:厘米).
- //========================================================================
- int HC_SR04_Loop()
- {
- int distance;//distance|距離
- HC_SR04_Start();
- while(!Echo_Pin); //Wait when RX is zero|當RX為零時等待
- TR0=1; //Opening count|開啟計數
- while(Echo_Pin); //When RX counts to 1 and waits|當RX為1計數并等待
- TR0=0; //Closing count|關閉計數
- 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中斷用來計數器溢出,超過測距范圍
- {
- flag=1; //中斷溢出標志
- }
復制代碼
所有資料51hei提供下載:
HC_SR04.zip
(60.9 KB, 下載次數: 75)
2019-7-7 16:30 上傳
點擊文件名下載附件
|