欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 單片機超聲波測距介紹與程序源碼分享 [打印本頁]

作者: 孔言88    時間: 2018-11-2 11:05
標題: 單片機超聲波測距介紹與程序源碼分享
超聲波是指頻率在20kHz以上的聲波,它屬于機械波的范疇。超聲波也遵循一般機械波在彈性介質中的傳播規律,如在介質的分界面處發生反射和折射現象,在進入介質后被介質吸收而發生衰減等。正是因為具有這些性質,使得超聲波可以用于距離的測量中。隨著科技水平的不斷提高,超聲波測距技術被廣泛應用于人們日常工作和生活之中。
系統的設計主要包括兩部分,即硬件電路和軟件程序。硬件電路主要包括單片機電路、發射電路、接收電路、顯示電路和電源電路,另外還有復位電路和LED控制電路等。我采用以AT89C51單片機為核心的低成本、高精度、微型化數字顯示超聲波測距儀的硬件電路。整個電路采用模塊化設計,由信號發射和接收、供電、溫度測量、顯示等模塊組成。發射探頭的信號經放大和檢波后發射出去,單片機的計時器開始計時,超聲波被發射后按原路返回,在經過放大帶通濾波整形等環節,然后被單片機接收,計數器停止工作并得到時間。溫度測量后送到單片機,通過程序對速度進行校正, 結合兩者實現超聲波測距的功能。軟件程序主要由主程序、預置子程序、發射子程序、接收子程序、顯示子程序等模塊組成。它控制單片機進行數據發送與接收,在一定溫度下對超聲波速度的校正,還有實現數據正確顯示在LED上。另外程序控制單片機消除各探頭對發射和接收超聲波的影響。相關部分附有硬件電路圖、程序流程圖。

單片機源程序如下:
  1. #include "wave.h"
  2. #include "reg52.h"
  3. #include "intrins.h"
  4. #include "12864.h"
  5. #include "delay.h"

  6. sbit Trig  = P2^0;
  7. sbit Echo  = P3^2;
  8. extern uchar dis2[];
  9. extern uchar dis6[];
  10. float distance;
  11. uint succeed_flag,time,timeH,timeL,numble=0;
  12. uchar bai,shi,ge,xiaoge;
  13. void send()
  14. {
  15.         EA=0;
  16.         Trig=1;         //超聲波輸入端
  17.   delay_20us();   //延時20us
  18.   Trig=0;         //產生一個20us的脈沖
  19. }

  20. void receive()
  21. {
  22.            while(Echo==0); //等待Echo回波引腳變高電平
  23.                         succeed_flag=0; //清測量成功標志
  24.                         EA=1;
  25.                         EX0=1;          //打開外部中斷0
  26.                         TH1=0;          //定時器1清零
  27.                         TL1=0;          //定時器1清零
  28.                         TF1=0;          //計數溢出標志
  29.                         TR1=1;          //啟動定時器1
  30.                         delay(140);      //等待測量的結果
  31.                         TR1=0;          //關閉定時器1
  32.                         EX0=0;          //關閉外部中斷0
  33.        
  34.                  if(succeed_flag==1)
  35.                  {   
  36.                     display3();
  37.                                 time=timeH*256+timeL+numble*65536;
  38.                                 distance=(time*1.85)/100;  //厘米
  39.                           TH1=0;
  40.               TL1=0;
  41.                     bai=(uint)distance/100;
  42.                           shi=(uint)(distance)%100/10;
  43.                           ge=(uint)(distance)%10;
  44.                           xiaoge=(uint)((distance-(uint) (distance))*100)%100/10;
  45.                          
  46.                
  47.                          
  48.                           lcd_pos(2,0);
  49.                                 lcd_wdat(' ');
  50.                           delay(5);
  51.                     lcd_wdat(0x30+bai);
  52.                           delay(5);
  53.                           lcd_wdat(0x30+shi);
  54.                           delay(5);
  55.                           lcd_wdat(0x30+ge);
  56.                           delay(5);
  57.                           lcd_wdat('.');
  58.                           delay(5);
  59.                           lcd_wdat(0x30+xiaoge);
  60.                           delay(5);
  61.                           lcd_wdat('c');
  62.                           delay(5);
  63.                           lcd_wdat('m');
  64.                           delay(300);
  65.                
  66.                  }                        
  67.                 if(succeed_flag==0)
  68.                  {  
  69.                           display();
  70.                          // display3();               //沒有回波則清零
  71.                                 P1=0;                //測試燈變化
  72.                         }
  73. }

  74. //外部中斷0,用做判斷回波電平
  75. void exter()  interrupt 0   // 外部中斷0是0號
  76. {   
  77.            timeH =TH1;    //取出定時器的值
  78.      timeL =TL1;    //取出定時器的值
  79.      succeed_flag=1;//至成功測量的標志
  80.      EX0=0;         //關閉外部中斷
  81. }
  82. //****************************************************************
  83. //定時器1中斷,用做超聲波測距計時
  84. void timer1() interrupt 3  //
  85.     {
  86.          TH1=0;
  87.          TL1=0;
  88.                            numble++;
  89.      }
復制代碼

所有資料51hei提供下載:
超聲波測距.zip (58.08 KB, 下載次數: 13)








歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1