欧洲精品久久久av无码电影,日日噜噜夜夜爽爽,精品无码国产自产拍在线观看蜜,人妻少妇被粗大爽9797pw,羞国产在线拍揄自揄视频,国产白嫩漂亮美女在线观看,天码欧美日本一道免费,av大片在线无码免费

      歡迎來(lái)到同城快修-附近家電維修、家電清洗、家電安裝服務(wù)平臺(tái)

      24小時(shí)家電維修熱線:

      400—1558638

      當(dāng)前位置:主頁(yè) > 空調(diào) > 維修資訊 >

      蜂鳴器源代碼(蜂鳴器初始化代碼)

      發(fā)布日期:2023-02-11 11:42:53 瀏覽:
      蜂鳴器源代碼(蜂鳴器初始化代碼)

      前沿拓展:


      最近幾天總是下雨,搞的人心情也很差,昨天看到有粉絲留言說(shuō),導(dǎo)師讓他們組做一個(gè)關(guān)于超聲波控制液體水位的項(xiàng)目,但是無(wú)從下手,希望我?guī)蛶退梢杂袃敗K俏业蔫F粉,下面我就把我前段時(shí)間幫人家設(shè)計(jì)的一個(gè)超聲波水位自動(dòng)控制系統(tǒng) 分享出來(lái),希望可以幫到他們。

      51單片機(jī)超聲波水位控制器設(shè)計(jì)

      設(shè)計(jì)說(shuō)明:

      本設(shè)計(jì)中液晶顯示有4個(gè)字母,分別為

      H容器的最高水位設(shè)定值(不能高于實(shí)際高度) L容器的最低水位設(shè)定值

      D容器實(shí)際高度(可以設(shè)置)

      C容器內(nèi)液體的高度(在實(shí)際演示中,障礙物離探頭越近,液晶C顯示越大,因?yàn)檎系K物好比液面,離探頭近了說(shuō)明水位高了)

      特別提醒:如果容器實(shí)際高度D你設(shè)置為1米,那么C液體的高度最高能測(cè)到98cm,因?yàn)樘筋^的盲區(qū)在2cm左右。如果D設(shè)為2米,那么最高能測(cè)到1.98m.

      按鍵功能分別為:設(shè)置鍵 增加鍵 減小鍵 復(fù)位鍵

      三個(gè)指示燈的分別功能為:紅色超過(guò)設(shè)定的最高水位H 黃色低于設(shè)定的最低水位L

      綠色最高H和最低L中間

      本文采用AT89C52單片機(jī)系統(tǒng)實(shí)現(xiàn)了水塔水位的自動(dòng)控制,設(shè)計(jì)出一種低成本、高實(shí)用價(jià)值的水塔水位控制器。該系統(tǒng)具有水位檢測(cè)、水位高度LCD顯示、低水位高水位報(bào)警以及自動(dòng)加水等功能。

      本設(shè)計(jì)過(guò)程中主要采用了傳感技術(shù)、單片機(jī)技術(shù)、光報(bào)警技術(shù)以及弱電控制強(qiáng)電的技術(shù)。本設(shè)計(jì)傳感器使用了超聲波模塊,并且詳細(xì)闡述了超聲波測(cè)距測(cè)的原理,給出了系統(tǒng)構(gòu)成框圖。此系統(tǒng)具有易控制、工作可靠、測(cè)量精度高的優(yōu)點(diǎn),可實(shí)時(shí)監(jiān)控液位。并采用52單片機(jī)系統(tǒng)控制整個(gè)電路的信號(hào)處理以及采用光電耦合和繼電器來(lái)實(shí)現(xiàn)弱電控制強(qiáng)電來(lái)實(shí)現(xiàn)加水系統(tǒng)的自動(dòng)控制。它能自動(dòng)完成水位檢測(cè)、光報(bào)警、上水停水的全部工作循環(huán),保證液面高度始終處于較理想的范圍內(nèi),它結(jié)構(gòu)簡(jiǎn)單,制造成本低,靈敏度高,節(jié)約能源顯著,是用于各種高層液體儲(chǔ)存的理想設(shè)備。

      為了大家更好地理解,請(qǐng)如下看示意圖

      制作出來(lái)的實(shí)物圖如下:

      AD的設(shè)計(jì)圖如下:

      超聲波水位控制器元件清單

      1) 915萬(wàn)用板 1

      2) AT89C51單片機(jī) 1

      3) 超聲波探頭 0

      4) 40腳IC座 1

      5) 4腳排針 0

      6) 杜邦線4根 0

      7) 繼電器2 0

      8) LCD1602液晶 1

      9) 103電位器 0

      10) 16腳IC座 0

      11) 16腳排針 1

      12) 蜂鳴器 0

      13) 8550三極管3 0

      14) 1k電阻8 0

      15) 10k電阻 0

      16) 10uf電容 0

      17) 30pf電容2 0

      18) 12M晶振 1

      19) 3mmLED(紅、綠各2個(gè),黃1個(gè)) 0

      20) 輕觸按鍵4 1

      21) 自鎖開(kāi)關(guān) 1

      22) DC電源插口 1

      23) USB電源線(電池盒)

      24) 直流水泵2(根據(jù)客戶自選)

      單片機(jī)程序源碼如下:

      /

      名稱:基于51單片機(jī)的超聲波水位監(jiān)測(cè)報(bào)警系統(tǒng)

      單片機(jī)型號(hào):AT89C51

      單片機(jī)設(shè)置:時(shí)鐘12T,晶體12MHZ

      作者:從零開(kāi)始學(xué)單片機(jī)

      注:修改增加水泵控制和排水控制,即雙繼電器

      /

      include <reg51.h>

      include <intrins.h> // 包含循環(huán)移位:_cror_

      include &34;main.h&34;

      //

      uchar code TabNumASCII[10] = {&39;0&39;,&39;1&39;,&39;2&39;,&39;3&39;,&39;4&39;,&39;5&39;,&39;6&39;,&39;7&39;,&39;8&39;,&39;9&39;};

      bool g_flag = isNo; //用于標(biāo)記超時(shí)(65.536ms)

      bool g_flag05s = isNo; //用于標(biāo)記0.52秒

      uchar ucCount = 0; //用于計(jì)數(shù)0.52秒

      uint uiH = 80; //設(shè)定的最高報(bào)警水位 H

      uint uiL = 30; //設(shè)定的最低報(bào)警水位 L

      uint uiD = 100; //檢測(cè)探頭到水庫(kù)底部的距離 D

      bool g_flagSwitch = isNo; //控制閥門(mén)連續(xù)開(kāi)啟間隔延時(shí)(保護(hù))標(biāo)志

      bool g_flagBeepTimer = isNo; //定時(shí)提醒標(biāo)志

      //

      // 延時(shí)10us

      void delay10us(void) //@12MHz

      {

      unsigned char i;

      _nop_();

      i = 2;

      while (i);

      }

      // 延時(shí)100us

      void delay100us(void) //@12MHz

      {

      uchar i;

      _nop_();

      i = 47;

      while (i);

      }

      // 延時(shí)125us

      void delay125us(void) //@12MHz

      {

      unsigned char i;

      i = 60;

      while (i);

      }

      // 延時(shí)5ms

      void delay5ms(void) //@12.000MHz

      {

      unsigned char i, j;

      i = 10;

      j = 183;

      do

      {

      while (j);

      } while (i);

      }

      // 延時(shí)500ms

      void delay500ms(void) //@12MHz

      {

      unsigned char i, j, k;

      _nop_();

      i = 4;

      j = 205;

      k = 187;

      do

      {

      do

      {

      while (k);

      } while (j);

      } while (i);

      }

      //

      //初始化IO端口

      void initIO(void)

      {

      P0 = 0xff;

      P1 = 0xff;

      P2 = 0xff;

      P3 = 0xff;

      }

      // 初始化定時(shí)器0,定時(shí)器時(shí)鐘12T模式 模式1,16位 @12.000MHz

      void initTimer0(void)

      {

      TMOD &= 0xF0; //設(shè)置定時(shí)器模式

      TMOD |= 0x01; //設(shè)置定時(shí)器模式

      TL0 = 0; //定時(shí)器初值清零

      TH0 = 0; //定時(shí)器初值清零

      //TR0 = 1; //開(kāi)定時(shí)器0

      ET0 = 1; //開(kāi)定時(shí)器0中斷

      EA = 1; //開(kāi)總中斷

      }

      // 初始化定時(shí)器1,定時(shí)器時(shí)鐘12T模式 模式1,16位 @12.000MHz

      void initTimer1(void) //50毫秒@12.000MHz

      {

      TMOD &= 0x0F; //設(shè)置定時(shí)器模式

      TMOD |= 0x10; //設(shè)置定時(shí)器模式

      TL1 = 0xB0; //設(shè)置定時(shí)初值

      TH1 = 0x3C; //設(shè)置定時(shí)初值

      TR1 = 1; //定時(shí)器1開(kāi)始計(jì)時(shí)

      ET1 = 1; //開(kāi)定時(shí)器0中斷

      }

      //

      //定時(shí)器0中斷

      void zd0(void) interrupt 1

      {

      g_flag = isYes; //中斷溢出標(biāo)志,g_flag = isYes超過(guò)測(cè)距范圍

      if(++ucCount >= 8)

      {

      ucCount = 0;

      g_flag05s = isYes; //g_flag05s = isYes定時(shí)0.52秒到,用于測(cè)量周期延時(shí)

      }

      TL0 = 0; //設(shè)置定時(shí)初值

      TH0 = 0; //設(shè)置定時(shí)初值

      }

      //定時(shí)器1中斷 定時(shí)50ms

      void tm1_isr() interrupt 3 using 1

      {

      static uchar count = DATA_switchTime; //50ms的200倍 = 10S

      static uchar uiCount = 1200; // = 1分鐘

      static uint uiCount_BeepTimer = DATA_BeepTimer;

      TL1 = 0xB0; //設(shè)置定時(shí)初值

      TH1 = 0x3C; //設(shè)置定時(shí)初值

      if (g_flagSwitch == isNo)

      {

      if (count == 0) //50ms 200 > 10s

      {

      count = DATA_switchTime;

      g_flagSwitch = isYes;

      // TR1 = 0;

      }

      }

      if(g_flagBeepTimer == isNo)

      {

      if (uiCount == 0) //= 1分鐘

      {

      uiCount = 1200;

      if(uiCount_BeepTimer == 0)

      {

      uiCount_BeepTimer = DATA_BeepTimer;

      g_flagBeepTimer = isYes;

      // TR1 = 0;

      }

      }

      }

      }

      //

      //外部中斷1

      void exint1() interrupt 2

      {

      EX1 = 0; //關(guān)閉當(dāng)前中斷

      TR0 = 0; //關(guān)閉時(shí)器0

      }

      //

      //讀LCD忙狀態(tài)并等待忙狀態(tài)結(jié)束

      void LCD_waitNotBusy(void)

      {

      IO_LCD_Data = 0xFF;

      io_LCD_RS = 0;

      io_LCD_RW = 1;

      io_LCD_E = 0;

      _nop_();

      _nop_();

      io_LCD_E = 1;

      while(IO_LCD_Data & 0x80); //檢測(cè)如果是忙信號(hào),一直等到不忙

      }

      //給LCD寫(xiě)指令

      void LCDWriteCommand(uchar command,bool ifReadBusy) //ifReadBusy = 1 時(shí)先進(jìn)行忙檢測(cè)

      {

      if (ifReadBusy == isReadBusy) LCD_waitNotBusy(); //根據(jù)需要檢測(cè)忙

      IO_LCD_Data = command;

      io_LCD_RS = 0;

      io_LCD_RW = 0;

      io_LCD_E = 0;

      _nop_();

      _nop_();

      io_LCD_E = 1;

      }

      //給LCD寫(xiě)數(shù)據(jù)

      void LCDWriteData(uchar dat)

      {

      LCD_waitNotBusy(); //等到不忙

      IO_LCD_Data = dat;

      io_LCD_RS = 1;

      io_LCD_RW = 0;

      io_LCD_E = 0;

      _nop_();

      _nop_();

      io_LCD_E = 1;

      }

      // 初始化LCD1602液晶顯示屏

      void initLCD1602(void)

      {

      uchar i;

      IO_LCD_Data = 0; // 數(shù)據(jù)端口清零

      for(i = 0; i < 3; i++) // 設(shè)置三次顯示模式

      {

      LCDWriteCommand(0x38,isNotReadBusy); // 不檢測(cè)忙信號(hào)

      delay5ms();

      }

      LCDWriteCommand(0x38,isReadBusy); // 設(shè)置顯示模式,檢測(cè)忙信號(hào)

      LCDWriteCommand(0x08,isReadBusy); // 關(guān)閉顯示

      LCDWriteCommand(0x01,isReadBusy); // 顯示清屏

      LCDWriteCommand(0x06,isReadBusy); // 顯示光標(biāo)移動(dòng)設(shè)置

      LCDWriteCommand(0x0F,isReadBusy); // 顯示開(kāi)及光標(biāo)設(shè)置

      }

      //按指定位置顯示一個(gè)字符

      void putOneCharToLCD1602(uchar line, uchar position, uchar ucData)

      {

      line &= DATA_LineMax;

      position &= DATA_PositionMax;

      if (line == DATA_LineTow) position |= 0x40; //當(dāng)要顯示第二行時(shí)地址碼+0x40;

      position |= 0x80; //設(shè)置兩行顯示格式 D7 = 1;

      LCDWriteCommand(position, isReadBusy); //發(fā)送命令 設(shè)置字符地址

      LCDWriteData(ucData); //寫(xiě)入字符的數(shù)據(jù)

      }

      //按指定位置顯示一串字符

      void putLineCharsToLCD1602(uchar line, uchar position, uchar count, uchar code ucData)

      {

      uchar i;

      for(i = 0; i < count; i++) //連續(xù)顯示單個(gè)字符

      {

      putOneCharToLCD1602(line, position + i, ucData[i]);

      }

      }

      //按指定位置連續(xù)顯示三個(gè)字符(三位數(shù)字)

      void putThreeCharToLCD1602(uchar line, uchar position, uint uiNumber)

      {

      uiNumber %= 1000;

      putOneCharToLCD1602(line, position, TabNumASCII[uiNumber / 100]);

      putOneCharToLCD1602(line, ++position, TabNumASCII[uiNumber % 100 / 10]);

      putOneCharToLCD1602(line, ++position, TabNumASCII[uiNumber % 100 % 10]);

      }

      // 按鍵檢測(cè)子程序,有鍵按下返回鍵端口數(shù)據(jù),無(wú)鍵返回0

      uchar GetKey(void)

      {

      uchar KeyTemp = (IO_KEY | DATA_KEY_ORL); //獲取按鍵端口數(shù)據(jù)

      if( KeyTemp != DATA_KEY_Null ) // 如果不為空

      {

      uchar CountTemp = 0;

      do

      {

      delay125us();

      if(KeyTemp != (IO_KEY | DATA_KEY_ORL)) return 0; //在延時(shí)期間檢測(cè)鍵,如果不穩(wěn)定保持則退出

      } while(++CountTemp > Data_Key20msCountMax); // 延時(shí)20ms去抖動(dòng)

      while((IO_KEY | DATA_KEY_ORL) != DATA_KEY_Null); //等鍵釋放

      return KeyTemp; // 有鍵按下返回鍵端口數(shù)據(jù)

      }

      return 0; // 無(wú)有效鍵返回0

      }

      //加一

      uchar INC_Number(uchar Number, uchar Min, uchar Max)

      {

      if(Number >= Max) return Min; else return (++ Number);

      }

      //減一

      uchar DEC_Number(uchar Number, uchar Min, uchar Max)

      {

      if(Number <= Min) return Max; else return ( Number);

      }

      // 檢測(cè)到有按鍵后 這里執(zhí)行按鍵任務(wù)

      void execute_key_task(uchar ucKeyValue)

      {

      uchar state = 0; //定義調(diào)整數(shù)據(jù)的狀態(tài)變量

      uchar keyValue = 0; //定義鍵值得臨時(shí)變量

      if(ucKeyValue != DATA_KEY_Set) return; //不是設(shè)置鍵退出

      //是設(shè)置鍵繼續(xù)

      putLineCharsToLCD1602(lineTow, 8, 8, &34;C:000cm &34;); //清零顯示當(dāng)前距離CURRENT

      putThreeCharToLCD1602(lineOne, 8 + 2, uiD); //光標(biāo)調(diào)整到調(diào)整總距離(檢測(cè)探頭到水庫(kù)底部的距離“D:000cm”)

      while(1)

      {

      keyValue = GetKey();

      if(keyValue == 0) continue;

      switch(keyValue)

      {

      case DATA_KEY_Set:

      {

      // 如果按的是設(shè)置鍵,順序設(shè)置總距離D——高水位H——低水位L——退出

      switch(state)

      {

      case 0: // 如果是設(shè)置總距離狀態(tài),改變?yōu)樵O(shè)置高水位狀態(tài),并顯示高水位,實(shí)現(xiàn)移動(dòng)光標(biāo)到高水位后面

      {

      state = 1;

      putThreeCharToLCD1602(lineOne, 0 + 2, uiH);

      }

      break;

      case 1:

      {

      uchar tempMax = uiD DATA_uiD_Min;

      if(tempMax < 2 + 2) tempMax = 2 + 2;

      if(uiH > tempMax)

      {

      uiH = tempMax;

      putThreeCharToLCD1602(lineOne, 0 + 2, uiH);

      }

      else if(uiH < 2 + 2)

      {

      uiH = 2 + 2;

      putThreeCharToLCD1602(lineOne, 0 + 2, uiH);

      }

      state = 2;

      putThreeCharToLCD1602(lineTow, 0 + 2, uiL);

      }

      break;

      case 2:

      {

      if(uiL > uiH 2)

      {

      uiL = uiH 2;

      putThreeCharToLCD1602(lineTow, 0 + 2, uiL);

      }

      return;

      }

      break;

      }

      }

      break;

      // 如果按的是增加鍵,改變相應(yīng)數(shù)據(jù)并顯示

      case DATA_KEY_INC:

      {

      switch(state)

      {

      case 0:

      {

      uiD = INC_Number(uiD, DATA_uiD_Min, DATA_uiD_Max);

      putThreeCharToLCD1602(lineOne, 8 + 2, uiD);

      }

      break;

      case 1:

      {

      uchar tempMax = uiD DATA_uiD_Min;

      if(tempMax < 2 + 2) tempMax = 2 + 2;

      uiH = INC_Number(uiH, 2, tempMax);

      putThreeCharToLCD1602(lineOne, 0 + 2, uiH);

      }

      break;

      case 2:

      {

      uiL = INC_Number(uiL, 0, uiH 2);

      putThreeCharToLCD1602(lineTow, 0 + 2, uiL);

      }

      break;

      }

      }

      break;

      // 如果按的是減少鍵,改變相應(yīng)數(shù)據(jù)并顯示

      case DATA_KEY_DEC:

      {

      switch(state)

      {

      case 0:

      {

      uiD = DEC_Number(uiD, DATA_uiD_Min, DATA_uiD_Max);

      putThreeCharToLCD1602(lineOne, 8 + 2, uiD);

      }

      break;

      case 1:

      {

      uchar tempMax = uiD DATA_uiD_Min;

      if(tempMax < 2 + 2) tempMax = 2 + 2;

      uiH = DEC_Number(uiH, 2, tempMax);

      putThreeCharToLCD1602(lineOne, 0 + 2, uiH);

      }

      break;

      case 2:

      {

      uiL = DEC_Number(uiL, 0, uiH 2);

      putThreeCharToLCD1602(lineTow, 0 + 2, uiL);

      }

      break;

      }

      }

      break;

      }

      }

      }

      // 蜂鳴器

      void buzzerCall(void)

      {

      uchar i;

      for(i = 0; i < 90; i++)

      {

      io_Buzzer = 0;

      delay100us();

      io_Buzzer = 1;

      delay100us();

      delay100us();

      }

      delay100us();

      delay100us();

      }

      //計(jì)算水位

      bool CalculatedWaterLevel(void)

      {

      uchar i = 8 + 2; //當(dāng)前水位的數(shù)字在LCD屏顯示的起點(diǎn)位置

      uint uiTime; //聲波傳播時(shí)間

      ulong ulDis; //實(shí)時(shí)測(cè)量到距離

      uiTime = TH0 << 8 | TL0;

      ulDis = (uiTime 3.40) / 200; //計(jì)算當(dāng)前測(cè)量的距離,單位cm

      TH0 = 0;

      TL0 = 0;

      if((ulDis > uiD) || (g_flag == isYes )) // ulDis > uiD 超出測(cè)量范圍;g_flag == isYes超時(shí);

      {

      g_flag = isNo;

      TR0 = 0;

      putLineCharsToLCD1602(lineTow, i, 3, &34;Err&34;); // 顯示Err

      //閥門(mén)動(dòng)作:

      // if(g_flagSwitch == isYes)

      // {

      // io_Control_Inlet = isio_Control_Inlet_OFF;

      // io_Control_Outlet = isio_Control_Outlet_ON;

      // g_flagSwitch = isNo;

      // }

      //指示燈:

      ioLed_Red = ! ioLed_Red; // 三個(gè)燈同時(shí)快速閃亮

      ioLed_Green = ! ioLed_Green;

      ioLed_Yellow = ! ioLed_Yellow;

      // 蜂鳴器叫:

      if(buzzerCallFlag == isCall)

      {

      buzzerCall(); // 蜂鳴器叫

      }

      return isNo; // 返回錯(cuò)誤信息

      }

      else

      {

      ulDis = uiD ulDis; // 當(dāng)前水位C = 總距離 當(dāng)前檢測(cè)到的距離

      if(ulDis > uiH) // 如果水位超高

      {

      //閥門(mén)動(dòng)作:

      io_Control_Inlet = isio_Control_Inlet_OFF;

      io_Control_Outlet = isio_Control_Outlet_ON;

      g_flagSwitch = isNo;

      //指示燈:

      ioLed_Red = ! ioLed_Red; // 紅燈閃

      ioLed_Green = isLedOFF;

      ioLed_Yellow = isLedOFF;

      // 蜂鳴器叫:

      if(ulDis uiH > (uiD uiH) / DATA_alarmCoefficient) //當(dāng)“當(dāng)前水位”超出最高水位“ ((“總高度減高水位)除以2的值”)時(shí)報(bào)警

      {

      buzzerCall(); // 蜂鳴器叫

      }

      }

      else if(ulDis < uiL) // 如果水位超低

      {

      //閥門(mén)動(dòng)作:

      if(g_flagSwitch == isYes)

      {

      io_Control_Outlet = isio_Control_Outlet_OFF;

      io_Control_Inlet = isio_Control_Inlet_ON;

      g_flagSwitch = isNo;

      }

      //指示燈:

      ioLed_Red = isLedOFF;

      ioLed_Green = isLedOFF;

      ioLed_Yellow = ! ioLed_Yellow; //黃燈閃

      // 蜂鳴器叫:

      if( uiL ulDis > uiL / DATA_alarmCoefficient)//uiL / 2 當(dāng)“當(dāng)前水位”低于“低水位” “低水位除以2的值”時(shí)報(bào)警

      {

      buzzerCall(); // 蜂鳴器叫

      }

      }

      else // 水位在正常范圍

      {

      ioLed_Red = isLedOFF;

      ioLed_Green = ! ioLed_Green;

      ioLed_Yellow = isLedOFF;

      }

      putThreeCharToLCD1602(lineTow, i, ulDis);

      return isYes;

      }

      return isYes;

      }

      void main(void)

      {

      initIO(); //初始化IO端口

      delay500ms(); //啟動(dòng)延時(shí),給器件進(jìn)入正常工作狀態(tài)留夠時(shí)間

      initLCD1602(); //LCD初始化

      putLineCharsToLCD1602(lineOne, 8, 8, &34;D:000cm &34;); //顯示distance (總)距離(檢測(cè)探頭到水庫(kù)底部的距離)D

      putThreeCharToLCD1602(lineOne, 8 + 2, uiD); //顯示三位數(shù)值

      putLineCharsToLCD1602(lineOne, 0, 8, &34;H:000cm &34;); //顯示設(shè)定的最高報(bào)警水位H

      putThreeCharToLCD1602(lineOne, 0 + 2, uiH); //顯示三位數(shù)值

      putLineCharsToLCD1602(lineTow, 0, 8, &34;L:000cm &34;); //顯示設(shè)定的最低報(bào)警水位L

      putThreeCharToLCD1602(lineTow, 0 + 2, uiL); //顯示三位數(shù)值

      putLineCharsToLCD1602(lineTow, 8, 8, &34;C:000cm &34;); //顯示當(dāng)前CURRENT水位C

      initTimer0(); //初始化定時(shí)器0

      initTimer1();

      //閥門(mén)動(dòng)作:初始先排水

      io_Control_Inlet = isio_Control_Inlet_OFF;

      io_Control_Outlet = isio_Control_Outlet_ON;

      g_flagSwitch = isNo;

      while(1)

      {

      io_US_TX = 1; //啟動(dòng)超聲波模塊信號(hào)

      delay10us();

      io_US_TX = 0;

      while(io_US_RX == 0); //等待計(jì)時(shí)開(kāi)始

      TR0 = 1; //開(kāi)啟定時(shí)器0,計(jì)時(shí)開(kāi)始

      IT1 = 1; //設(shè)置外中斷INT1輸入信號(hào)模式(1:Falling only僅下降沿有效 0:Low level低電平有效)

      EX1 = 1; //使能外中斷INT1

      while(EX1 == 1 && g_flag == isNo)//等待中斷或超時(shí)退出

      {

      uchar ucKeyValue = GetKey(); //在等待中檢測(cè)按鍵

      if(ucKeyValue) execute_key_task(ucKeyValue); //如果有鍵按下則執(zhí)行按鍵任務(wù)

      }

      if(CalculatedWaterLevel() == isNo) continue; //計(jì)算水位,如果超出范圍返回isNo并重新循環(huán)

      TR0 = 0; //暫時(shí)關(guān)閉定時(shí)器0

      //清零定時(shí)器和計(jì)數(shù)變量以及標(biāo)志

      TL0 = 0;

      TH0 = 0;

      g_flag = isNo;

      ucCount = 0;

      g_flag05s = isNo;

      TR0 = 1; //打開(kāi)定時(shí)器0

      鑒于篇幅限制,只能寫(xiě)部分代碼

      最后,如果有什么意見(jiàn)或者建議歡迎您留言給我,讓我們共同學(xué)習(xí)一起進(jìn)步,

      如果需要 完整代碼或設(shè)計(jì)文件,請(qǐng)?jiān)谙路搅粞曰蛘咚叫盼遥吹胶髸?huì)第一時(shí)間回復(fù)。

      謝謝!

      感謝你的閱讀,希望您有所收獲,喜歡請(qǐng)點(diǎn)贊評(píng)論加關(guān)注!

      拓展知識(shí):

      主站蜘蛛池模板: 无套内谢少妇毛片aaaa片免费| 97影院理论午夜伦不卡| 成年在线视频| 精品国产免费一区二区三区香蕉| 国产熟睡乱子伦视频观看软件| 日韩av大片| 国产吃瓜在线| 日韩中文人妻无码不卡| 国产成人亚洲综合无码8| 麻豆www| 国产精品午夜影院| 水蜜桃av导航| 亚瑟av亚洲精品一区二区| 日韩成人在线免费观看| 日韩伦理大全| 亚洲中文字幕久久精品蜜桃| 国产成人免费永久在线平台| 鬼眼| 久久久免费av| 玩弄人妻少妇500系列视频| 熟女人妻大叫粗大受不了| 毛片导航| 在线成人免费电影| 国产精品美女久久久网av| 国产成人av无码永久免费| 毛片网站免费| 亚洲欧美另类国产| 99精品久久毛片a片| 欧美潮喷少妇100| a√天堂在线| 怡红院国产| 久久不见久久见免费影院www日本 亚洲综合精品一区二区三区 | 国产激情无码一区二区| 99re6在线观看国产精品| 日韩一级黄色大片| 成人精品免费在线观看| 99国产欧美久久久精品| 久久九九国产精品怡红院| 四虎永久网址| 国产91在线观看丝袜| 无码任你躁久久久久久老妇|