久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2988|回復: 0
打印 上一主題 下一主題
收起左側

單片機超聲波測距介紹與程序源碼分享

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

單片機源程序如下:
  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;          //計數(shù)溢出標志
  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, 下載次數(shù): 13)



評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩精品一区二区三区中文字幕 | 色播99 | 欧美日韩一二区 | 美女黄视频网站 | 久久久久久久久99精品 | 中文字幕二区 | 亚洲美女网站 | 精品一区二区三区在线视频 | 日韩福利在线观看 | 韩日视频在线观看 | 欧美美女一区二区 | av一区在线观看 | 欧美日韩在线观看一区二区三区 | 欧美中文字幕在线观看 | 人人精品| 亚洲第1页 | 欧美一级视频 | 亚洲精品成人在线 | 91麻豆精品国产91久久久久久久久 | 久久免费高清视频 | 国产亚洲网站 | 亚洲理论在线观看电影 | 一级欧美视频 | 亚洲一区中文字幕在线观看 | 99久久久99久久国产片鸭王 | 另类视频在线 | 精品视频在线观看 | 精品久久久久久久久久久久久 | 色999视频 | 国产观看| 日韩影音| 中文字幕在线不卡播放 | 国产欧美日韩综合精品一区二区 | 国产欧美日韩在线 | 国产精品视频一二三区 | 黄色欧美在线 | 国产精品久久久久久高潮 | 欧美xxxx色视频在线观看免费 | 青青草一区 | 精品视频一区二区三区在线观看 | 2021天天躁夜夜看 |