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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)DS18B20溫度計(jì)C語(yǔ)言程序

          單片機(jī)DS18B20溫度計(jì)C語(yǔ)言程序

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

          1. //功能:有負(fù)溫度顯示,高精度格度可以顯示-9.99C到99.99C
            //帶有報(bào)警裝置
            //當(dāng)溫度為正時(shí),顯示十位 個(gè)位 十分位 百分位
            //當(dāng)溫度為負(fù)時(shí),顯示負(fù)號(hào) 十位 個(gè)位 十分位
            //缺點(diǎn)是上下限報(bào)警數(shù)值不能改變
            //注明:數(shù)碼管是CC—共陰型
            //讀取溫度
          2. sbit DQ = P3^0;//定義通信端口
            bit fg=1;
            //晶振12MHz
            void delay_18B20(unsigned int i)
            {
            while(i--);
            }
            //初始化函數(shù)
            bit Init_DS18B20(void)
            {
            unsigned char x=0;
            DQ = 1;//DQ復(fù)位
            delay_18B20(8);//稍做延時(shí)
            DQ = 0;//單片機(jī)將DQ拉低
            delay_18B20(80); //精確延時(shí) 大于 480us
            DQ = 1;//拉高總線
            delay_18B20(14);
            x=DQ;//稍做延時(shí)后 如果x=0則初始化成功 x=1則初始化失敗
            return(x); //Init_DS18B20(void) 被定義為bit則要有返回值
            delay_18B20(20);
            }
            //while(DQ);
            //while(~DQ);//檢測(cè)到應(yīng)答脈沖
            //
            //讀一個(gè)字節(jié)
            ReadOneChar(void)
            {
            unsigned char i=0;
            unsigned char dat = 0;
            for (i=8;i>0;i--)
            {
            DQ = 0; // 給脈沖信號(hào)
            dat>>=1;
            DQ = 1; // 給脈沖信號(hào)
            if(DQ)
            dat|=0x80;
            delay_18B20(4);
            }
            return(dat);
            }
            //寫一個(gè)字節(jié)
            WriteOneChar(unsigned char dat)
            {
            unsigned char i=0;
            for (i=8; i>0; i--)
            {
            DQ = 0;
            DQ = dat&0x01;
            delay_18B20(5);
            DQ = 1;
            dat>>=1;
            }
            }
            ReadTemperature(void)
            {
            unsigned char a=0;
            unsigned char b=0;
            unsigned intt=0;

            Init_DS18B20();
            WriteOneChar(0xCC); // 跳過(guò)讀序號(hào)列號(hào)的操作
            WriteOneChar(0x44); // 啟動(dòng)溫度轉(zhuǎn)換
            delay_18B20(100);//至少750ms
          3. Init_DS18B20();
            WriteOneChar(0xCC); //跳過(guò)讀序號(hào)列號(hào)的操作
            WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個(gè)寄存器) 前兩個(gè)就是溫度
            a=ReadOneChar();
            b=ReadOneChar();
            if((b&0xf8)==0xf8) //位為1 時(shí)溫度是負(fù)
            {
            b=~b;
            a=~a+1; //補(bǔ)碼轉(zhuǎn)換,取反加一
            (a==0)b++;
            fg=0; //讀取溫度為負(fù)時(shí)fg=0
            }
            //傳感器返回值除16得實(shí)際溫度值
            //技巧處理后先乘25,再除4,除4用右移實(shí)現(xiàn)
            t=((b*256+a)*25)>>2;
            //t=t+(t>0?0.5:-0.5); //四佘五入大于0加0.5, 小于0減0.5前面要把t定義為float型才可以
            return(t);
            }
          4. 顯示頭文件:display()

          5. char disp[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//數(shù)字0-9和‘-’的共陰段碼
            char disp_dot[11]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xc0};
            void display(int tmp)
            {
            if(fg==0)
            {
            P2 = 0xff;
            P1 = 0x40;//"-"
            P2 = 0xEF;
            delay_18B20(2000);
            }
            P2 = 0xff;
            P1 = 0x39;//"C"//若先位選再段選, 由于IO口默認(rèn)輸出高電平, 所以當(dāng)先位選會(huì)使數(shù)碼管出現(xiàn)亂碼
            P2 = 0xFE;
            delay_18B20(200);
          6. P2 = 0xff;
            P1 = disp[tmp/10];
            P2 = 0xFD;
            delay_18B20(200);
          7. P2 = 0xff;
            P1 =disp_dot[tmp/10];
            P2 = 0xFB;
            delay_18B20(200);
          8. if(fg==1)
          9. {
          10. P2 = 0xff;
            P1 = disp[tmp/100];
            P2 = 0xF7;
            delay_18B20(200);
            }
            }


          關(guān)鍵詞: 單片機(jī)DS18B20溫度

          評(píng)論


          技術(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); })();