在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<abbr id="27omo"></abbr>

<menu id="27omo"><dl id="27omo"></dl></menu>
    • <label id="27omo"><tt id="27omo"></tt></label>

      新聞中心

      EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 一款液晶顯示的超聲波測(cè)距板

      一款液晶顯示的超聲波測(cè)距板

      作者: 時(shí)間:2016-11-30 來(lái)源:網(wǎng)絡(luò) 收藏

      ////////////////////////主函數(shù)////////////////////////////////

      void main()

      {

      unsigned long Sum;

      uchar i;

      uchar num;

      bit bOK;

      uchar

      TCON=B00000000; //INT0電平觸發(fā)

      TMOD=0X01; //T0作為計(jì)數(shù)輸入

      IP=B00000001; //置INT0優(yōu)先級(jí)最高

      LCD_init(); //液晶初始化

      LCD_clear(); //清屏顯示

      DisplayChinese(0,0,13,16,3,0,0,WORD); //在LCD上顯示“溫度:”

      DisplayChinese(72,0,13,16,1,3,0,WORD); //在LCD上顯示“℃”

      DisplayChinese(0,2,13,16,3,4,0,WORD); //在LCD上顯示"聲速:”

      while(1) //測(cè)量系統(tǒng)主循環(huán)

      {

      bOK=0;

      num=0;

      Sum=0;

      ReadTemperature(); //檢測(cè)當(dāng)前環(huán)境溫度

      for(i=1; i<=3; ++i) //循環(huán)測(cè)量,求平均值

      {

      StartInit(); //測(cè)量初始化

      StartMeasure(); //開(kāi)始測(cè)量第1次,確定大概范圍

      if(Success==1)

      {

      bOK=1; //有1次成功,則測(cè)距成功

      Sum=(nCount>Sum)?nCount:Sum; //取測(cè)量最大值

      }

      Delay_ms(80); //延時(shí)10ms后繼續(xù)測(cè)量

      }

      nCount=Sum;

      Success=bOK;

      DisplayResult();

      }

      }

      /***************所用到的相關(guān)函數(shù)功能實(shí)現(xiàn)*****************/

      void INT_0() interrupt 0 using 0 //運(yùn)行到此處說(shuō)明測(cè)距成功

      {

      TR0=0; //關(guān)計(jì)數(shù)

      ET0=0; //關(guān)定時(shí)器中斷

      EX0=0; //關(guān)INT0中斷

      while(!P3_2); //等待CX20106輸出電平變高

      //將計(jì)數(shù)器數(shù)據(jù)放進(jìn)nCount,用來(lái)進(jìn)行數(shù)據(jù)處理

      nCount=TH0;

      nCount=nCount<<8;

      nCount|=TL0;

      Success=1;

      Done=1;

      return;

      }

      void INT_T0() interrupt 1 using 1

      {

      //運(yùn)行到此處說(shuō)明測(cè)距失敗

      TR0=0;

      EX0=0;

      Success=0;

      Done=1;

      return ;

      }

      void StartInit()

      {

      TH0=0;

      TL0=0; //計(jì)數(shù)器置0

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

      ET0=0; //關(guān)T0中斷

      EX0=0; //關(guān)INT0中斷

      Success=0; //測(cè)量成功標(biāo)志位

      Done=0; //測(cè)量一次標(biāo)志位

      }

      void StartMeasure()

      {

      //產(chǎn)生脈沖波

      uchar LOOP;

      ET0=1;

      for (LOOP = 0;LOOP < 4; )

      {

      P3 = P3 ^ 0x80;

      _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();

      _nop_();_nop_();_nop_();_nop_();//_nop_();_nop_();

      LOOP++;

      }

      VOUT = 1;

      TR0 = 1; //啟動(dòng)計(jì)數(shù)器

      if(Mode==0) //近距離測(cè)量模式

      {

      Delay_us(41); //50us延時(shí)測(cè)量,防止回波干擾

      }

      else //遠(yuǎn)距離測(cè)量模式

      {

      Delay_us(300); //50us延時(shí)測(cè)量,防止回波干擾

      }

      EX0=1; //開(kāi)INT0中斷

      while(Done==0); //等待測(cè)量結(jié)束

      }

      void DisplayResult()

      {

      float temp=0;

      char String[10];

      //算出當(dāng)前溫度

      temp=TempInt+TempDot/10000.0;

      //顯示當(dāng)前溫度

      sprintf(String,"%0.2f",temp);

      DisplayEnglish(33,0,String);

      //算出當(dāng)前聲速

      temp=332+0.607*temp;

      //顯示當(dāng)前聲速

      sprintf(String,"%0.1fm",temp);

      DisplayEnglish(33,2,String);

      if(Success==1) //測(cè)距成功,顯示“成功”,并顯示距離

      {

      temp=nCount*temp/2000+0.5; // 算出距離

      //顯示遠(yuǎn)、近距離測(cè)量的結(jié)果

      if(Mode==0)

      {

      nResult=(0.9723*temp-14.803)+0.5; //此式由擬合得到

      DisplayEnglish(0,4,"N");

      }

      else

      {

      nResult=0.9648*temp-5.7716+0.5; //此式由擬合得到

      DisplayEnglish(0,4,"F");

      }

      sprintf(String,"%5u cm",nResult); //將整數(shù)轉(zhuǎn)換為字符串

      //拼湊顯示最終結(jié)果“xxx.xcm”

      DisplayEnglish(8,4,String);

      DisplayEnglish(40,4,".");

      String[5]=