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

<s id="cmphk"><label id="cmphk"></label></s>
    <span id="cmphk"><var id="cmphk"></var></span>
    <dfn id="cmphk"><var id="cmphk"></var></dfn>
    <menu id="cmphk"><thead id="cmphk"></thead></menu>

    <address id="cmphk"></address>

      <dfn id="cmphk"></dfn>
      
      
      <span id="cmphk"></span>

      <object id="cmphk"><tt id="cmphk"></tt></object>
      1. 新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 51單片機多路DS18B20溫度測量程序

        51單片機多路DS18B20溫度測量程序

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

        /***************************************************************************************/
        void delays(int us) //用于DS18B20的延時函數(shù)
        { int s;
        for ( s=0; s}
        void rst(void)//DS18B20初始化
        {
        DQ = 1;
        delays(2);
        DQ = 0;
        delays(30); //精確延時 480~960us
        DQ = 1;
        delays(8);
        }
        void write(unsigned char ku)//DS18B20寫函數(shù)
        {
        int i=0;
        for (i=0;i<8;i++)
        {
        DQ=0;
        DQ =ku&0x01;
        delays(3);
        DQ=1;
        ku>>=1;
        }
        }
        void match_rom(unsigned char *rom) //DS18B20匹配ROM函數(shù)
        {
        unsigned char i;
        rst(); //初始化
        write(0x55); //匹配ROM
        for(i=8;i>0;i--)
        {
        write(*(rom+i-1));
        }

        本文引用地址:http://www.biyoush.com/article/201611/323807.htm

        }
        unsigned int read(void) //DS18B20讀函數(shù),每次讀16位
        {
        int i=0;
        unsigned int u=0;
        for (i=0;i<16;i++)
        {
        DQ=0;
        u>>=1;
        DQ=1;
        if(DQ) u|=0x8000;
        delays(4);
        }
        return (u);
        }
        int read0(unsigned char *seria)//讀取對應溫度值并轉換函數(shù)
        {
        int temperature ;
        unsigned int tp;
        unsigned int lsb;
        rst(); //初始化
        write(0xCC); //跳過RAM
        write(0x44); //溫度轉換
        rst(); //再次初始化
        write(0xCC);
        match_rom(seria); //匹配ROM函數(shù)調用
        write(0xBE); //讀取存儲器指令
        tp=read(); //讀取溫度值
        if((tp&0xf800)==0xf800)//判斷正負數(shù)
        {
        fushu=1 ;
        tp=~tp+1 ;
        lsb=(unsigned int)(tp*6.25);
        dian=lsb%100; //取小數(shù)部分

        temperature=lsb/100;

        }
        else
        {
        fushu=0;
        lsb=(unsigned int)(tp*6.25);
        dian=lsb%100;

        temperature=lsb/100;

        }
        return(temperature);
        }
        /*****************************************************************************************/
        void main()
        {
        uint i ;
        LCD_INIT();
        EA=0 ; //使用DS18B20禁止任何中斷
        while(1)
        {
        for(i=0;i<2;i++)
        {
        Tm=read0(get_serial+i*8);
        if(i==0) //判斷是第幾個的數(shù)據(jù)
        {
        if(fushu==0) //判斷是否加負號
        sprintf(LCD_LINE_ONE+5," %d", Tm);
        if(fushu==1)
        sprintf(LCD_LINE_ONE+5,"-%d", Tm);
        sprintf(LCD_LINE_ONE+10,".%d",dian);//加入小數(shù)部分
        Display_LCD_String(0x00,LCD_LINE_ONE);
        }
        if(i==1)
        {
        if(fushu==0)
        sprintf(LCD_LINE_TWO+5," %d", Tm);
        if(fushu==1)
        sprintf(LCD_LINE_TWO+5,"-%d", Tm);
        sprintf(LCD_LINE_TWO+10,".%d",dian);
        Display_LCD_String(0x40,LCD_LINE_TWO);
        }

        }


        }
        }


        上一頁 1 2 下一頁

        評論


        技術專區(qū)

        關閉