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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > DS18B20測溫顯示程序

          DS18B20測溫顯示程序

          作者: 時間:2016-12-03 來源:網(wǎng)絡 收藏
          #include

          #include
          sbit TSOR=P2^0;
          #define Busy 0x80;
          #define uchar unsigned char
          #define uint unsigned int
          #define reset() {WDT=0x1e;WDT=0xe1;}
          sfr WDT=0xa6;
          bit ON_OFF;
          bit outflag;
          sbit en =P1^7;/*DTLED-6顯示芯片使能端*/
          sbit dout=P1^6;/*DTLED-6顯示芯片數(shù)據(jù)讀入端*/
          sbit clk=P1^3;/*DTLED-6顯示芯片/時鐘芯片DS1302時鐘輸入端*/
          //============================================
          uchar dispbuf[9];/*顯示值存放陣列*/
          uchar temp1,temp2;
          uchar cnt;
          char set,T;
          //===========================================
          void gettempTS(void);
          void initTS(void);
          uchar readBTS(void);
          void writeBTS(uchar byte);
          void resetTS(void);
          bit readTS(void);
          void write1TS(void);
          void write0TS(void);
          void delay15us(void);
          void delay60us(void);
          //*************延時K×1ms,12.000MHz***********
          void delay(uint k)
          {
          uint i,j; //定義i,j為無符號整形變量
          for(i=0;i{
          for(j=0;j<60;j++)
          {;}
          reset()}
          }
          //*******************************************
          void delay15us(void)
          {
          uint i; //定義i為無符號整形變量
          for(i=0;i<4;i++);
          }
          //***************************************
          void delay60us(void)
          {
          uint i; //定義i為無符號整形變量
          for(i=0;i<15;i++);
          }
          //**********************************************
          void write0TS(void)
          {
          TSOR=1;TSOR=0;
          delay15us();delay15us();delay15us();delay15us();
          TSOR=1;
          _nop_();_nop_();
          }
          //**************************************************
          void write1TS(void)
          {
          TSOR=1;TSOR=0;
          _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
          TSOR=1;
          _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
          delay15us();delay15us();delay15us();
          }
          //********************************************
          bit readTS(void)
          {
          bit b;
          TSOR=1;
          TSOR=0;
          _nop_();_nop_();_nop_();_nop_();
          TSOR=1;
          _nop_();_nop_();_nop_();_nop_();_nop_();
          b=TSOR;
          _nop_();_nop_();_nop_();_nop_();
          _nop_();_nop_();
          return b;
          }
          //***************************************************
          void resetTS(void)
          {uchar i;
          TSOR=1;TSOR=0;
          for(i=0;i<8;i++)delay60us();
          TSOR=1;
          while(TSOR);
          for(i=0;i<8;i++)delay60us();
          }
          //***********************************************
          void writeBTS(uchar byte)
          {uchar i;
          for(i=0;i<8;i++)
          {
          if(byte&0x01)
          write1TS();
          else
          write0TS();
          byte=byte>>1;
          }
          }
          //**********************************************
          uchar readBTS(void)
          {uchar i,j;
          bit b;
          j=0;
          for(i=0;i<8;i++)
          {
          b=readTS();
          if(b) j+=1;
          j=_cror_(j,1);
          }
          return j;
          }
          //*****************************************8
          void initTS(void)
          {
          resetTS();
          writeBTS(0xcc);
          writeBTS(0x4e);
          writeBTS(0x64);
          writeBTS(0x8a);
          writeBTS(0x1f);
          }
          //******************************************
          void gettempTS(void)
          {
          resetTS();
          writeBTS(0xcc);
          writeBTS(0x44);
          delay(200);
          resetTS();
          writeBTS(0xcc);
          writeBTS(0xbe);
          temp2=readBTS();
          temp1=readBTS();
          readBTS();readBTS();readBTS();readBTS();
          readBTS();readBTS();readBTS();
          temp1=temp1<<4;
          temp1+=(temp2&0xf0)>>4;
          temp2=(temp2&0x0f)?5:0;
          }
          //********************************************
          void delayus (uint value)/*延時副程式*/
          {
          while (value!=0) value--;/*10US延時*/
          }

          本文引用地址:http://www.ex-cimer.com/article/201612/325266.htm

          /*********************************************************************/

          //串行發(fā)送DTLED-6顯示
          //dispbuf0-dispbuf1-dispbuf2-dispbuf3-dispbuf4-dispbuf5-dispbuf6-dispbuf7-dispbuf8
          // 小數(shù)點 - 數(shù)碼管1- 數(shù)碼管2- 數(shù)碼管3- 數(shù)碼管4- 數(shù)碼管5- 數(shù)碼管6-ID識別碼-BZ識別碼
          //00000xxx-0000xxxx-0000xxxx-0000xxxx-0000xxxx-0000xxxx-0000xxxx-0000xxxx-0000xxxx
          //小數(shù)點=1~6,其它為不顯示
          //數(shù)碼管1-6=0~15,
          //ID識別碼=0~15
          //BZ識別碼=BZ.3為蜂鳴輸出控制位,0=關(guān)閉,1=打開
          // BZ0~2為蜂鳴頻率輸出設定為,000=不分頻, 最高頻率輸出=4800Hz;
          // 001=一次分頻,頻率輸出=4800/ 2 =2400Hz;
          // 010=二次分頻,頻率輸出=4800/ 4 =1200Hz;
          // 011=三次分頻,頻率輸出=4800/ 8 =600Hz;
          // 100=四次分頻,頻率輸出=4800/ 16=300Hz;
          // 101=五次分頻,頻率輸出=4800/ 32=150Hz;
          // 110=六次分頻,頻率輸出=4800/ 64=75Hz;
          // 111=七次分頻,頻率輸出=4800/128=38Hz;
          //======================================================================
          void tsled(void)/*串行發(fā)送DTLED-6顯示副程式*/
          { char ts0,i,j;
          clk=0;
          en=0;
          delayus(10);
          for(j=0;j<9;j++)
          {ts0=dispbuf[j];
          for(i=0;i<4;i++)/*發(fā)小數(shù)點碼8,4,2,1*/
          {
          clk=1;
          ts0=ts0<<1;
          if(AC==1)
          dout=1;
          else dout=0;
          clk=0;
          _nop_();
          delayus(3);
          }
          }
          en=1;
          }/*返回主程式*/

          void main(void)
          {
          uchar T=28;
          initTS();
          reset()
          dispbuf[7]=0x01;/*ID號碼*/
          dispbuf[8]=0x00;/*蜂鳴器關(guān)閉*/
          while(1)
          {
          gettempTS();
          dispbuf[0]=2; //關(guān)閉小數(shù)點位顯示//數(shù)據(jù)顯示
          dispbuf[1]=(temp2/10+0x30);
          dispbuf[2]=((temp1-2)%10+0x30);
          dispbuf[3]=((temp1-2)/10+0x30);
          dispbuf[4]=0;
          dispbuf[5]=(T%10+0x30);
          dispbuf[6]=(T/10+0x30);
          tsled();
          delayus(50000);
          }
          }



          關(guān)鍵詞: DS18B20測溫顯示程

          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁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); })();