新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機中使用DS18B20溫度傳感器C語言程序(參考2)

        單片機中使用DS18B20溫度傳感器C語言程序(參考2)

        作者: 時間:2016-11-18 來源:網絡 收藏
        /*---------------------------------------------------------------------------------------------------

        功能:實現對DS18B20的讀取

        本文引用地址:http://www.104case.com/article/201611/315668.htm

        原理:單總線協議

        注意:單總線協議對延時要求比較嚴格,此程序中采用的是11.0592M的晶振,如果使用其他的晶振請跟據DS18B20的資料修改延時參數

        版本:1.4b

        最后修改時間:2004年11月8號

        開發人:鞠春陽

        版權:哈爾濱眾邦龍開發有限公司www.hitzbl.com 單片機坐標網:www.mcuzb.com

        ====================================================================================================*/

        //#include"reg51.h"

        sbit DQ =P1^4; //定義通信端口

        //延時函數

        /*

        void delay(unsigned int i)

        {

        while(i--);

        }

        */

        //初始化函數

        Init_DS18B20(void)

        {

        unsigned char x=0;

        DQ = 1; //DQ復位

        delay(8); //稍做延時

        DQ = 0; //單片機將DQ拉低

        delay(80); //精確延時 大于 480us

        DQ = 1; //拉高總線

        delay(14);

        x=DQ; //稍做延時后 如果x=0則初始化成功 x=1則初始化失敗

        delay(20);

        }

        //讀一個字節

        ReadOneChar(void)

        {

        unsigned char i=0;

        unsigned char dat = 0;

        for (i=8;i>0;i--)

        {

        DQ = 0; // 給脈沖信號

        dat>>=1;

        DQ = 1; // 給脈沖信號

        if(DQ)

        dat|=0x80;

        delay(4);

        }

        return(dat);

        }

        //寫一個字節

        WriteOneChar(unsigned char dat)

        {

        unsigned char i=0;

        for (i=8; i>0; i--)

        {

        DQ = 0;

        DQ = dat&0x01;

        delay(5);

        DQ = 1;

        dat>>=1;

        }

        //delay(4);

        }

        //讀取溫度

        ReadTemperature(void)

        {

        unsigned char a=0;

        unsigned char b=0;

        unsigned int t=0;

        float tt=0;

        Init_DS18B20();

        WriteOneChar(0xCC); // 跳過讀序號列號的操作

        WriteOneChar(0x44); // 啟動溫度轉換

        Init_DS18B20();

        WriteOneChar(0xCC); //跳過讀序號列號的操作

        WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度

        a=ReadOneChar();

        b=ReadOneChar();

        t=b;

        t<<=8;

        t=t|a;

        tt=t*0.0625;

        //t= tt*10+0.5; //放大10倍輸出并四舍五入---此行沒用

        return(t);

        }

        main()

        {

        unsigned char i=0;

        while(1)

        {

        i=ReadTemperature();//讀溫度

        }

        }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 泗洪县| 建始县| 德昌县| 临潭县| 吉水县| 琼结县| 缙云县| 永平县| 黑山县| 阿城市| 延寿县| 瑞金市| 通山县| 南木林县| 隆尧县| 巩义市| 湖口县| 红安县| 庆安县| 晋州市| 清镇市| 巢湖市| 卢湾区| 大同县| 凤翔县| 长寿区| 巴林右旗| 交城县| 那曲县| 盐山县| 兖州市| 闻喜县| 闸北区| 义马市| 临潭县| 和政县| 凤山市| 鹿泉市| 石嘴山市| 收藏| 成安县|