新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機的ds18b20驅動程序

        51單片機的ds18b20驅動程序

        作者: 時間:2016-12-01 來源:網絡 收藏
        /*************************************
        函數名:re1820b
        函數功能:讀數據
        參數:無
        返回:dat(數據)
        備注:無
        *************************************/
        uchar re1820b(void)
        {
        uchar i=0;
        uchar dat = 0;
        for (i=8;i>0;i--)
        {
        DQ = 0; // 給脈沖信號
        dat>>=1;
        DQ = 1; // 給脈沖信號
        if(DQ)
        dat|=0x80;
        delaydq(4);
        }
        return(dat);
        }
        /*************************************
        函數名:wr1820b
        函數功能:寫數據
        參數:dat(數據)
        返回:無
        備注:無
        *************************************/
        void wr1820b(uchar dat)
        {
        unsigned char i=0;
        for (i=8; i>0; i--)
        {
        DQ = 0;
        DQ = dat&0x01;
        delaydq(5);
        DQ = 1;
        dat>>=1;
        }
        }
        /*************************************
        函數名:ReadTemp
        函數功能:溫度轉換
        參數:無
        返回:無
        備注:無
        *************************************/
        void ReadTemp(void)
        {
        unsigned char a=0;
        unsigned char b=0;
        unsigned char t=0;
        dqinit();
        wr1820b(0xCC); // 跳過讀序號列號的操作
        wr1820b(0x44); // 啟動溫度轉換
        delaydq(100);
        dqinit();
        wr1820b(0xCC); //跳過讀序號列號的操作
        wr1820b(0xBE); //讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度
        delaydq(100);
        a=re1820b(); //讀取溫度值低位
        b=re1820b(); //讀取溫度值高位
        if(b>127)
        {
        b=(256-b);a=(256-a);fflag=1; //負溫度求補碼
        }
        temp_value=b<<4;
        temp_value+=(a&0xf0)>>4;
        temp2=a&0x0f; //小數的值
        xs=temp2*0.0625*10; //小數位,若為0.5則算為5來顯示 xs小數
        }
        /*************************************
        函數名:temp_to_str
        函數功能:溫度顯示
        參數:無
        返回:無
        備注:無
        *************************************/
        void temp_to_str() //溫度數據轉換成液晶字符顯示
        {
        if(fflag==1)
        { TempBuffer[0]=-;
        TempBuffer[1]=temp_value/10+0; //十位
        TempBuffer[2]=temp_value%10+0; //個位
        TempBuffer[3]=.;
        TempBuffer[4]=xs+0;
        TempBuffer[5]=0xdf; //溫度符號
        TempBuffer[6]=C;
        TempBuffer[7]= 主站蜘蛛池模板: 宣武区| 博白县| 西盟| 临安市| 三门县| 抚松县| 金门县| 贡山| 本溪市| 广州市| 绵竹市| 左贡县| 库尔勒市| 稷山县| 霞浦县| 通州市| 辛集市| 宁晋县| 临洮县| 上蔡县| 东山县| 南安市| 金平| 湛江市| 怀柔区| 泸溪县| 左权县| 浏阳市| 满城县| 鹿邑县| 嘉黎县| 通许县| 德江县| 鹿泉市| 于都县| 日照市| 新余市| 云龙县| 方山县| 肥城市| 临泉县|