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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2044|回復(fù): 0
收起左側(cè)

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

[復(fù)制鏈接]
ID:389070 發(fā)表于 2019-7-29 15:19 | 顯示全部樓層 |閱讀模式
基于AT89C52,和超聲波模塊編輯的抽水檢測系統(tǒng)。LCD1602做顯示部分,通過超聲波數(shù)據(jù)判斷是否符合條件要求 可以判斷水面距離檢測,通過判斷識別1水位是否有水,有水就檢測2水位,無就繼續(xù)循環(huán)。判斷識別2水位是否有水,如果有水則進行循環(huán),無水則再執(zhí)行上水命令。有效避免只能測試一個位而反復(fù)上水,本文有效的拉開了上水距離。避免反復(fù)不停抽水燒機器問題。

單片機源程序如下:
  1. /******************************************************************************/
  2. /* 項目名稱  : 超聲波測距并且判斷條件距離                                     */
  3. /* 主控芯片  : STC89C52                                                       */
  4. /* 文件名稱  : 超聲波判斷距離并報警                                           */
  5. /* 文件功能1 : 通過超聲波數(shù)據(jù)判斷是否符合條件要求 可以判斷水面距離檢測        */
  6. /* 文件功能2 : 通過判斷識別1水位是否有水,有水就檢測2水位,無就繼續(xù)循環(huán)       */
  7. /* 文件功能  : 判斷識別2水位是否有水,檢測2水位是否有水。再執(zhí)行上水命令       */
  8. /* 文件功能  : 有效避免只能測試一個位而反復(fù)上水,拉開上水距離避免燒機器       */
  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;                //超聲觸發(fā)端口
  19. sbit Beep   = P2^3;                     // 蜂鳴器 
  20. sbit D1     = P1^0;                     //LED燈
  21. /********************************定義變量和數(shù)組********************************/
  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. /***********************************函數(shù)聲明***********************************/
  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. /* 函數(shù)名稱  : Delay_xMs                                                      */
  37. /* 函數(shù)描述  : 延時函數(shù)                                                       */
  38. /* 輸入?yún)?shù)  : x                                                              */
  39. /* 參數(shù)描述  : 延時時間                                                       */
  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. /* 函數(shù)名稱  : Alarm                                                          */
  55. /* 函數(shù)描述  : 蜂鳴器發(fā)聲函數(shù)                                                 */
  56. /* 輸入?yún)?shù)  : t                                                              */
  57. /* 參數(shù)描述  : 發(fā)聲的次數(shù)                                                     */
  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. /* 函數(shù)名稱  : delayt                                                         */
  74. /* 函數(shù)描述  : 延時函數(shù)                                                       */
  75. /* 輸入?yún)?shù)  : x                                                              */
  76. /* 參數(shù)描述  : 延時時間數(shù)據(jù)                                                   */
  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. /* 函數(shù)名稱  : Init_MCU                                                       */
  92. /* 函數(shù)描述  : 初始化單片機函數(shù)                                               */
  93. /* 輸入?yún)?shù)  : 無                                                             */
  94. /* 參數(shù)描述  : 無                                                             */
  95. /* 返回值    : 無                                                             */
  96. /******************************************************************************/
  97. void Init_MCU(void)
  98. {
  99.         TMOD = 0x01;          //定時器2初始化,設(shè)置為16位自動重裝模式
  100.         TL0 = 0x66;
  101.         TH0 = 0xfc;              //1ms
  102.     ET0 = 1;              //開定時器2
  103.         EA = 1;                //總中斷使能
  104. }

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

  119. /******************************************************************************/
  120. /* 函數(shù)名稱  : display_char                                                   */
  121. /* 函數(shù)描述  : 顯示字符串函數(shù)                                                 */
  122. /* 輸入?yún)?shù)  : point,address                                                  */
  123. /* 參數(shù)描述  : 寫入的字符串的地址指針 1602顯示對應(yīng)的地址                      */
  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. /* 函數(shù)名稱  : display                                                        */
  138. /* 函數(shù)描述  : 顯示數(shù)字                                                       */
  139. /* 輸入?yún)?shù)  : number,address                                                */
  140. /* 參數(shù)描述  : number寫入的數(shù)據(jù),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);            //小數(shù)點的ASCII
  155.         write_date(e + 48);        //毫米
  156.       write_date(99);            //"c"的ASCII
  157.         write_date(109);           //"m"的ASCII
  158.                
  159.         bianb=b;   //可以復(fù)制米的數(shù)據(jù)

  160. }

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

  174. /******************************************************************************/
  175. /* 函數(shù)名稱  : Measure_Distance                                               */
  176. /* 函數(shù)描述  : 計算距離函數(shù)                                                   */
  177. /* 輸入?yún)?shù)  : 無                                                             */
  178. /* 參數(shù)描述  : 無                                                             */
  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. /* 函數(shù)名稱  : Distance_panduan                                               */
  204. /* 函數(shù)描述  : 計算距離判斷函數(shù)                                               */
  205. /* 輸入?yún)?shù)  : 無                                                             */
  206. /* 參數(shù)描述  : 無                                                             */
  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. /* 函數(shù)名稱  : main                                                           */
  221. /* 函數(shù)描述  : 主函數(shù)                                                         */
  222. /* 輸入?yún)?shù)  : 無                                                             */
  223. /* 參數(shù)描述  : 無                                                             */
  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();         //觸發(fā)超聲波發(fā)射
  240.                  while(INPUT == 0)          //等待回聲
  241.          {
  242.              ;
  243.          }
  244.                  Measure_Distance();        //計算脈寬并轉(zhuǎn)換為距離
  245.                  display_char(table3,0x40);
  246.                 display(distance,0x49);    //顯示距離
  247.                  Distance_panduan();            //測試距離判斷是否滿足設(shè)置條件

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

  252. /******************************************************************************/
  253. /* 函數(shù)名稱  : timer0                                                         */
  254. /* 函數(shù)描述  : T0中斷處理函數(shù)                                                 */
  255. /* 輸入?yún)?shù)  : 無                                                             */
  256. /* 參數(shù)描述  : 無                                                             */
  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. /******************************************************************************/
復(fù)制代碼

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

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50

查看全部評分

回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日本一区二区三区四区 | 国产小视频在线 | 中文字幕精品一区 | 草久久| www九色 | 99热精品国产 | 成人av激情 | 精品在线一区二区三区 | 精品视频在线观看 | 欧美一区二区在线观看视频 | 欧美亚洲国产日韩 | 国产精品久久久久久 | 久草日韩 | 日韩中文字幕 | 精品久久久久久国产 | 日产久久 | 中文字幕免费中文 | 国产做爰| 亚洲性综合网 | 性欧美xxxx | 91精品中文字幕一区二区三区 | 色婷婷av一区二区三区软件 | 干干天天| 久久精品a级毛片 | 中文久久| 黄色av免费 | 国产特黄一级 | 久久一区二区视频 | 国产一区二区欧美 | 国产黄色精品 | 国产精品一区久久久 | 国产精品久久久 | 国产视频中文字幕 | 国产女人第一次做爰毛片 | 三级av在线 | 欧美亚洲国产日韩 | 一区二区三区视频 | 不卡一区二区三区四区 | 日韩久久综合网 | 夜夜操天天干 | 日韩电影免费观看中文字幕 |