51超聲波測距簡易程式碼

未尋得的舊夢發表於2020-11-13

51超聲波測距簡易程式碼


一、基本思路

1、引腳:

Trig(控制端):控制發出的超聲波訊號
Echo(接收端):接收反射回來的超聲波訊號

2、計算公式:

測試距離 = ( 高電平時間 x 聲速 (340m/s) ) / 2

二、程式程式碼

  //大體程式碼
  #include<reg52.h> //按各自主控晶片而定
  #include<instrins.h> //_nop_()延時 1us 函式的標頭檔案
  
  #define Trig  P1^0	//控制端
  #define Echo  P1^1	//接收端

  typedef unsigned int u16;
  typedef unsigned long u32;

  u16 distance;  //距離     mm為單位
  u32 time;      //間隔時間 10us為單位
 
  //程式並不全,需要自己補全其他方面的程式碼,只給個核心程式碼

  //測量距離
  void measure() 
  {
    // 向控制端輸入一個大於10us的脈衝訊號  
    Trig = 1; 
    _nop_(); 
    //...省略10個,不要用迴圈執行10次,迴圈每條指令都是佔用時間的(us級別)!
    //或者可以自己設計一個執行起來長達10多us的迴圈    
    Trig = 0;
       
        
    //等待接收端產生高電平並開時計時
    while (!Echo);    
    time = 0;    
    while (Echo); //當接收到回傳訊號,接收端置低電平,退出迴圈    
        
    distance = (int)(1.7 * time); //(340 * 1000 (mm/s)) * (time * 10 / 1000000 (s)) / 2
  }
 
//定時器0中斷服務函式, 記得定時器模式為方式二
void Timer0_Task() interrupt 1
{   
    time++; //每自增1代表加10us
}                         

三、結語

  該篇文章並不全面,目的只在於將超聲波的原理轉為實實在在的程式碼實現。
  其實,原理固然重要,但是實現又是另一會事,要多培養實踐能力。

  (本文參考了 US-100超聲波 使用

相關文章