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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

超聲波測試距離程序,判斷設置的范圍值做一個抽水檢測部分

[復制鏈接]
跳轉到指定樓層
樓主
ID:389070 發表于 2019-7-29 15:19 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
基于AT89C52,和超聲波模塊編輯的抽水檢測系統。LCD1602做顯示部分,通過超聲波數據判斷是否符合條件要求 可以判斷水面距離檢測,通過判斷識別1水位是否有水,有水就檢測2水位,無就繼續循環。判斷識別2水位是否有水,如果有水則進行循環,無水則再執行上水命令。有效避免只能測試一個位而反復上水,本文有效的拉開了上水距離。避免反復不停抽水燒機器問題。

單片機源程序如下:
  1. /******************************************************************************/
  2. /* 項目名稱  : 超聲波測距并且判斷條件距離                                     */
  3. /* 主控芯片  : STC89C52                                                       */
  4. /* 文件名稱  : 超聲波判斷距離并報警                                           */
  5. /* 文件功能1 : 通過超聲波數據判斷是否符合條件要求 可以判斷水面距離檢測        */
  6. /* 文件功能2 : 通過判斷識別1水位是否有水,有水就檢測2水位,無就繼續循環       */
  7. /* 文件功能  : 判斷識別2水位是否有水,檢測2水位是否有水。再執行上水命令       */
  8. /* 文件功能  : 有效避免只能測試一個位而反復上水,拉開上水距離避免燒機器       */
  9. /******************************************************************************/
  10. /**********************************包含頭文件**********************************/
  11. #include <reg52.h>
  12. #include "1602.h"


  13. /************************************宏定義************************************/
  14. #define VELOCITY_30C        3495       //30攝氏度時的聲速,聲速V= 331.5 + 0.6*溫度;
  15. #define VELOCITY_23C        3453       //23攝氏度時的聲速,聲速V= 331.5 + 0.6*溫度;

  16. /************************************位定義************************************/
  17. sbit INPUT  = P1^6;                //回聲接收端口
  18. sbit OUTPUT = P1^7;                //超聲觸發端口
  19. sbit Beep   = P2^3;                     // 蜂鳴器 
  20. sbit D1     = P1^0;                     //LED燈
  21. /********************************定義變量和數組********************************/
  22. long int distance=0;               //距離變量
  23. uchar table[]="    Welcome to use   ";        //開機顯示1          "歡迎使用"
  24. uchar table0[]="  ZHANGHAO  ";                //開機顯示2
  25. uchar table1[]="There's no echo.";
  26. uchar table2[]="  QQ:2638831886  ";          //固定在液晶顯示屏上,一段字體
  27. uchar table3[]="Distance:";                 //固定在液晶顯示屏上,"測試距離"
  28. uchar count;

  29. unsigned int dz,k,s,j,bgz,k,bian,bianb;

  30. /***********************************函數聲明***********************************/
  31. extern void initLCD();
  32. extern void write_date(uchar date);
  33. extern void write_com(uchar com);
  34. extern void delay(uint x);

  35. /******************************************************************************/
  36. /* 函數名稱  : Delay_xMs                                                      */
  37. /* 函數描述  : 延時函數                                                       */
  38. /* 輸入參數  : x                                                              */
  39. /* 參數描述  : 延時時間                                                       */
  40. /* 返回值    : 無                                                             */
  41. /******************************************************************************/
  42. void Delay_xMs(unsigned int x)
  43. {
  44.     unsigned int i,j;
  45.     for(i = 0;i < x;i++ )
  46.     {
  47.         for(j = 0;j < 3;j++ )
  48.         {
  49.             ;
  50.         }
  51.     }
  52. }

  53. /******************************************************************************/
  54. /* 函數名稱  : Alarm                                                          */
  55. /* 函數描述  : 蜂鳴器發聲函數                                                 */
  56. /* 輸入參數  : t                                                              */
  57. /* 參數描述  : 發聲的次數                                                     */
  58. /* 返回值    : 無                                                             */
  59. /******************************************************************************/
  60. void Alarm(uchar t)
  61. {
  62.         uchar i;
  63.         for(i = 0;i < t;i++)
  64.         {
  65.                 Beep = 0;
  66.                 Delay_xMs(1000);
  67.                 Beep = 1;
  68.                 Delay_xMs(1000);
  69.         }
  70. }
  71.        
  72. /******************************************************************************/
  73. /* 函數名稱  : delayt                                                         */
  74. /* 函數描述  : 延時函數                                                       */
  75. /* 輸入參數  : x                                                              */
  76. /* 參數描述  : 延時時間數據                                                   */
  77. /* 返回值    : 無                                                             */
  78. /******************************************************************************/       
  79. void delayt(uint x)
  80. {
  81.     uchar j;
  82.     while(x-- > 0)
  83.     {
  84.               for(j = 0;j < 125;j++)
  85.         {
  86.             ;
  87.         }
  88.     }
  89. }

  90. /******************************************************************************/
  91. /* 函數名稱  : Init_MCU                                                       */
  92. /* 函數描述  : 初始化單片機函數                                               */
  93. /* 輸入參數  : 無                                                             */
  94. /* 參數描述  : 無                                                             */
  95. /* 返回值    : 無                                                             */
  96. /******************************************************************************/
  97. void Init_MCU(void)
  98. {
  99.         TMOD = 0x01;          //定時器2初始化,設置為16位自動重裝模式
  100.         TL0 = 0x66;
  101.         TH0 = 0xfc;              //1ms
  102.     ET0 = 1;              //開定時器2
  103.         EA = 1;                //總中斷使能
  104. }

  105. /******************************************************************************/
  106. /* 函數名稱  : Init_Parameter                                                 */
  107. /* 函數描述  : 初始化參數和IO口函數                                           */
  108. /* 輸入參數  : 無                                                             */
  109. /* 參數描述  : 無                                                             */
  110. /* 返回值    : 無                                                             */
  111. /******************************************************************************/
  112. void Init_Parameter(void)
  113. {
  114.          OUTPUT =1;
  115.          INPUT = 1;
  116.          count = 0;
  117.          distance = 0;
  118. }

  119. /******************************************************************************/
  120. /* 函數名稱  : display_char                                                   */
  121. /* 函數描述  : 顯示字符串函數                                                 */
  122. /* 輸入參數  : point,address                                                  */
  123. /* 參數描述  : 寫入的字符串的地址指針 1602顯示對應的地址                      */
  124. /* 返回值    : 無                                                             */
  125. /******************************************************************************/
  126. void display_char(uchar *point,uchar address)
  127. {
  128.         uchar i;
  129.         write_com(0x80 + address);
  130.         for(i = 0;i < 16; i++)
  131.         {
  132.                 write_date(*point);
  133.                 point++;
  134.         }
  135. }

  136. /******************************************************************************/
  137. /* 函數名稱  : display                                                        */
  138. /* 函數描述  : 顯示數字                                                       */
  139. /* 輸入參數  : number,address                                                */
  140. /* 參數描述  : number寫入的數據,address地址                                  */
  141. /* 返回值    : 無                                                             */
  142. /******************************************************************************/       
  143. void display(int number,uchar address)
  144. {
  145.         uchar b,c,d,e;
  146.         b= (number / 1000);
  147.         c= (number / 100) % 10;
  148.         d = (number / 10) % 10;
  149.         e = number % 10;


  150.         write_com(0x80 + address);
  151.       write_date(b + 48);        //米
  152.         write_date(c + 48);        //分米
  153.         write_date(d + 48);        //厘米
  154.         write_date(46);            //小數點的ASCII
  155.         write_date(e + 48);        //毫米
  156.       write_date(99);            //"c"的ASCII
  157.         write_date(109);           //"m"的ASCII
  158.                
  159.         bianb=b;   //可以復制米的數據

  160. }

  161. /******************************************************************************/
  162. /* 函數名稱  : Trig_SuperSonic                                                */
  163. /* 函數描述  : 發出聲波函數                                                   */
  164. /* 輸入參數  : 無                                                             */
  165. /* 參數描述  : 無                                                             */
  166. /* 返回值    : 無                                                             */
  167. /******************************************************************************/
  168. void Trig_SuperSonic(void)//出發聲波
  169. {
  170.          OUTPUT = 1;
  171.          delayt(1);
  172.          OUTPUT = 0;
  173. }

  174. /******************************************************************************/
  175. /* 函數名稱  : Measure_Distance                                               */
  176. /* 函數描述  : 計算距離函數                                                   */
  177. /* 輸入參數  : 無                                                             */
  178. /* 參數描述  : 無                                                             */
  179. /* 返回值    : 無                                                             */
  180. /******************************************************************************/
  181. void Measure_Distance(void)
  182. {
  183.         uchar l;
  184.         uint h,y;
  185.         TR0 = 1;
  186.         while(INPUT)
  187.     {
  188.         ;
  189.     }       
  190.         TR0 = 0;
  191.         l = TL0;
  192.         h = TH0;
  193.         y = (h << 8) + l;
  194.         y = y - 0xfc66;//us部分
  195.         distance = y + 1000 * count;//計算總時間
  196.         TL0 = 0x66;
  197.         TH0 = 0xfc;
  198.         delayt(30);
  199.         distance = VELOCITY_30C * distance / 20000;
  200. //        distance =3000;                //這樣寫顯示為300.0cm不變
  201. }

  202. /******************************************************************************/
  203. /* 函數名稱  : Distance_panduan                                               */
  204. /* 函數描述  : 計算距離判斷函數                                               */
  205. /* 輸入參數  : 無                                                             */
  206. /* 參數描述  : 無                                                             */
  207. /* 返回值    : 無                                                             */
  208. /******************************************************************************/
  209. void Distance_panduan(void)
  210. {  
  211.      if(distance>=70)           //2000為m以此類推
  212.           {
  213.                   D1=0;
  214.           }
  215.   
  216.    else
  217.    D1=1;
  218. }

  219. /******************************************************************************/
  220. /* 函數名稱  : main                                                           */
  221. /* 函數描述  : 主函數                                                         */
  222. /* 輸入參數  : 無                                                             */
  223. /* 參數描述  : 無                                                             */
  224. /* 返回值    : 無                                                             */
  225. /******************************************************************************/                                       
  226. void main(void)
  227. {
  228.         initLCD();
  229.         Init_MCU();
  230.         Init_Parameter();
  231.         Alarm(2);
  232.         display_char(table,0x00);
  233.         display_char(table0,0x40);
  234.         Delay_xMs(30000);
  235.         display_char(table2,0x00);
  236.         display_char(table1,0x40);

  237.         while(1)
  238.         {
  239.                  Trig_SuperSonic();         //觸發超聲波發射
  240.                  while(INPUT == 0)          //等待回聲
  241.          {
  242.              ;
  243.          }
  244.                  Measure_Distance();        //計算脈寬并轉換為距離
  245.                  display_char(table3,0x40);
  246.                 display(distance,0x49);    //顯示距離
  247.                  Distance_panduan();            //測試距離判斷是否滿足設置條件

  248.                  Init_Parameter();          // 參數重新初始化
  249.                  delayt(100);               //延時,兩次發射之間要至少有10ms間隔
  250.          }       
  251. }

  252. /******************************************************************************/
  253. /* 函數名稱  : timer0                                                         */
  254. /* 函數描述  : T0中斷處理函數                                                 */
  255. /* 輸入參數  : 無                                                             */
  256. /* 參數描述  : 無                                                             */
  257. /* 返回值    : 無                                                             */
  258. /******************************************************************************/
  259. void timer0 (void) interrupt 1
  260. {
  261.         TF0 = 0;
  262.         TL0 = 0x66;
  263.         TH0 = 0xfc;
  264.         count++;
  265.         if(count == 18)//超聲波回聲脈寬最多18ms
  266.         {
  267.                 TR0 =0;
  268.                 TL0 = 0x66;
  269.                 TH0 = 0xfc;
  270.                 count = 0;
  271.         }
  272. }
  273. /******************************************************************************/
復制代碼

所有資料51hei提供下載:
超聲波判斷距離并報警.zip (8.81 KB, 下載次數: 21)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品91视频 | 国产欧美一级 | 亚洲欧美综合 | 久久久久久久久99精品 | 男女激情网| 日韩综合在线播放 | 久久久亚洲精品视频 | 亚洲国产精品一区 | 国产一区二区三区色淫影院 | 国产激情第一页 | 欧美精品一区三区 | 国产精品久久av | 日韩中文在线 | 在线中文字幕国产 | 91av免费看 | 日本免费小视频 | 亚洲精品视频在线观看视频 | 91大神在线资源观看无广告 | 天堂资源最新在线 | 一级毛片免费看 | 国产日韩欧美一区 | 断背山在线观看 | 国产精久久久久久久妇剪断 | 特一级黄色毛片 | 亚洲视频免费在线 | 久草在线| 精品久久久一区 | 99国产精品视频免费观看一公开 | 欧美视频在线看 | 毛片免费在线 | 99久热在线精品视频观看 | 国产午夜精品一区二区三区在线观看 | 99视频免费在线观看 | 日韩精品一区二区三区视频播放 | 日本一区二区三区精品视频 | 91福利在线观看视频 | 免费在线观看黄视频 | 91传媒在线观看 | 国产精品毛片一区二区在线看 | 国产性色视频 | 九色 在线|