|
基于stc89c52單片機,采用HC-SR04模塊利用聲波反彈算出距離。- #include "reg52.h"
- //距離小于10cm,D5亮,D6滅,反之相反現象
- sbit D5 = P2^0;
- sbit D6 = P2^1;
- sbit Trig = P1^5;
- sbit Echo = P1^6;
- void Delay10us() //@11.0592MHz
- {
- unsigned char i;
- i = 2;
- while (--i);
- }
- void Time0Init()
- {
- TMOD &= 0xF0; //設置定時器模式
- TMOD |= 0x01;
- TH0 = 0;
- TL0 = 0;
- //設置定時器0工作模式1,初始值設定0開始數數,不著急啟動定時器
- }
- /*
- 十進制2左移1位,變成20。相當于乘以10
- 二禁止1左移1位,變成10(2)。相當于乘以2,左移8位,乘以2的8次方=256;*/
- void startHC()
- {
- Trig = 0;
- Trig = 1;
- Delay10us();
- Trig = 0;
- }
- void main()
- {
- double time;
- double dis;
-
- Time0Init();
-
- while(1){
- //1. Trig ,給Trig端口至少10us的高電平
- startHC();
- //2. echo由低電平跳轉到高電平,表示開始發送波
- while(Echo == 0);
- //波發出去的那一下,開始啟動定時器
- TR0 = 1;
- //3. 由高電平跳轉回低電平,表示波回來了
- while(Echo == 1);
- //波回來的那一下,我們開始停止定時器
- TR0 = 0;
- //4. 計算出中間經過多少時間
- time = (TH0 * 256 + TL0)*1.085;//us為單位
- //5. 距離 = 速度 (340m/s)* 時間/2
- dis = time * 0.017;
- if(dis < 10){
- D5 = 0;
- D6 = 1;
- }else{
- D5 = 1;
- D6 = 0;
- }
- //定時器數據清零,以便下一次測距
- TH0 = 0;
- TL0 = 0;
- }
- }
復制代碼
|
|