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

    
    
    <address id="vxupu"><td id="vxupu"></td></address>

      <pre id="vxupu"><small id="vxupu"></small></pre>
      <dfn id="vxupu"></dfn>
      <div id="vxupu"><small id="vxupu"></small></div>
    1. 新聞中心

      EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > MSP430與DS18B20之1602顯示

      MSP430與DS18B20之1602顯示

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

      /*******************************************
      函數(shù)名稱:Write_18B20
      功 能:向DS18B20寫入一個字節(jié)的數(shù)據(jù)
      參 數(shù):wdata--寫入的數(shù)據(jù)
      返回值 :無
      ********************************************/
      void Write_18B20(uchar wdata)
      {
      uchar i;

      _DINT();
      for(i = 0; i < 8;i++)
      {
      DQ0;
      DelayNus(6); //延時6us
      if(wdata & 0X01) DQ1;
      else DQ0;
      wdata>>= 1;
      DelayNus(50); //延時50us
      DQ1;
      DelayNus(10); //延時10us
      }
      _EINT();
      }
      /*******************************************
      函數(shù)名稱:Read_18B20
      功 能:從DS18B20讀取一個字節(jié)的數(shù)據(jù)
      參 數(shù):無
      返回值 :讀出的一個字節(jié)數(shù)據(jù)
      ********************************************/
      uchar Read_18B20(void)
      {
      uchar i;
      uchar temp = 0;

      _DINT();
      for(i = 0;i < 8;i++)
      {
      temp >>= 1;
      DQ0;
      DelayNus(6); //延時6us
      DQ1;
      DelayNus(8); //延時9us
      DQ_in;
      _NOP();
      if(DQ_val) temp |= 0x80;
      DelayNus(45); //延時45us
      DQ_out;
      DQ1;
      DelayNus(10); //延時10us
      }
      _EINT();

      return temp;
      }
      /*******************************************
      函數(shù)名稱:Skip
      功 能:發(fā)送跳過讀取產(chǎn)品ID號命令
      參 數(shù):無
      返回值 :無
      ********************************************/
      void Skip(void)
      {
      Write_18B20(0xcc);
      }
      /*******************************************
      函數(shù)名稱:Convert
      功 能:發(fā)送溫度轉換命令
      參 數(shù):無
      返回值 :無
      ********************************************/
      void Convert(void)
      {
      Write_18B20(0x44);
      }
      /*******************************************
      函數(shù)名稱:Read_SP
      功 能:發(fā)送讀ScratchPad命令
      參 數(shù):無
      返回值 :無
      ********************************************/
      void Read_SP(void)
      {
      Write_18B20(0xbe);
      }
      /*******************************************
      函數(shù)名稱:ReadTemp
      功 能:從DS18B20的ScratchPad讀取溫度轉換結果
      參 數(shù):無
      返回值 :讀取的溫度數(shù)值
      ********************************************/
      uint ReadTemp(void)
      {
      uchar temp_low;
      uint temp;

      temp_low = Read_18B20(); //讀低位
      temp = Read_18B20(); //讀高位
      temp = (temp<<8) | temp_low;

      return temp;
      }

      本文引用地址:http://www.biyoush.com/article/201612/324659.htm

      uint Do1Convert(void)
      {
      uchar i;
      uchar temp_low;
      uint temp;
      do
      {
      i = Init_18B20();
      }
      while(i);
      //此處的i就是等于前面的Error,Error = 1,就會出現(xiàn)死循環(huán),表示18B20可能壞了
      Write_18B20(0xcc);//送跳過讀取產(chǎn)品ID號命令

      Write_18B20(0x44);//發(fā)送溫度轉換命令
      for(i = 20;i > 0;i--)
      DelayNus(60000); //延時800ms以上
      do
      {
      i = Init_18B20();
      }
      while(i);
      //此處的i就是等于前面的Error,Error = 1,就會出現(xiàn)死循環(huán),表示18B20可能壞了

      Write_18B20(0xcc);//送跳過讀取產(chǎn)品ID號命令

      Write_18B20(0xbe);//發(fā)送讀ROM命令

      temp_low = Read_18B20(); //讀低位
      temp = Read_18B20(); //讀高位
      temp = (temp<<8) | temp_low;

      if(temp<0x0fff)
      tflag=0;
      else
      {temp=~temp+1;
      tflag=1;
      }
      tvalue=temp*(0.625);//溫度值擴大10倍,精確到1位小數(shù)
      return tvalue;
      }
      void display(int dat)
      {
      disdata[0]=dat/1000;
      disdata[1]=dat%1000/100;
      disdata[2]=dat%100/10;
      disdata[3]=dat%10;
      write_com(0x80+0x40);
      write_data(disdata[0]+0x30);
      write_data(disdata[1]+0x30);
      write_data(disdata[2]+0x30);
      write_com(0x80+0x43);
      write_data(0x2e);
      write_data(disdata[3]+0x30);
      write_data(0xdf);//寫入攝氏度的小圈
      write_data(C);
      }

      /*************************主函數(shù)*************************/
      void main( void )
      {
      /*下面六行程序關閉所有的IO口*/
      P1DIR = 0XFF;P1OUT = 0XFF;
      P2DIR = 0XFF;P2OUT = 0XFF;
      P3DIR = 0XFF;P3OUT = 0XFF;
      P4DIR = 0XFF;P4OUT = 0XFF;
      P5DIR = 0XFF;P5OUT = 0XFF;
      P6DIR = 0XFF;P6OUT = 0XFF;

      uchar i;

      WDTCTL = WDTPW + WDTHOLD; //關狗
      P6DIR |= BIT2;P6OUT |= BIT2; //關閉電平轉換
      /*------選擇系統(tǒng)主時鐘為8MHz-------*/
      BCSCTL1 &= ~XT2OFF; //打開XT2高頻晶體振蕩器
      do
      {
      IFG1 &= ~OFIFG; //清除晶振失敗標志
      for (i = 0xFF; i > 0; i--); //等待8MHz晶體起振
      }
      while ((IFG1 & OFIFG)); //晶振失效標志仍然存在?
      BCSCTL2 |= SELM_2 + SELS; //MCLK和SMCLK選擇高頻晶振

      //計數(shù)時鐘選擇SMLK=8MHz,1/8分頻后為1MHz
      TACTL |= TASSEL_2 + ID_3;
      //打開全局中斷
      _EINT();

      LcdReset();
      zifuchuan("Temperature is:");
      //循環(huán)讀數(shù)顯示
      while(1)
      {
      display(Do1Convert());
      }
      }


      上一頁 1 2 下一頁

      關鍵詞: MSP430DS18B201602顯

      評論


      技術專區(qū)

      關閉