<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

          作者: 時(shí)間:2016-11-30 來源:網(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(); //開始測(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)行到此處說明測(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,用來進(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)行到此處說明測(cè)距失敗

          TR0=0;

          EX0=0;

          Success=0;

          Done=1;

          return ;

          }

          void StartInit()

          {

          TH0=0;

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

          EA=1; //開總中斷

          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; //開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]=看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();