用DS18B20测量温度

2019-07-15 14:34发布

Proteue中仿真时为什么LCD1602要过一会儿才会显示?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
1条回答
TOBENO
1楼-- · 2019-07-15 16:44
不知道为什么显示出来的温度和传感器上的值不一样。


下面是程序:

#include"ds18b20.h"

sbit Temp = P3^7;

uchar DS18B20Init(void)
{
        uint i;
        Temp = 0;

        i = 103;
        while(i>0) i--;

        Temp = 1;
       
        i=0;
        while(Temp)
        {
                i++;
                if(i>5000)
                        return 0;
        }
        return 1;
}

void DS18B20WriteByte(uchar date)
{       
        uint i=0,j;
        for(j = 0; j < 8; j++)
        {
                Temp = 0;
                i++;
                Temp = date&0x01;
                i = 6;
                while(i--);
                Temp = 1;

                date >>= 1;
        }
}

bit TempReadBit(void)
{
        bit get;
        uint i;

        Temp = 0;
        i++;

        Temp = 1;
        i++;i++;

        get = Temp;
        i=8;
        while(i>0)i--;
        return get;       
}

uchar DS18B20ReadByte()
{
        uchar i,j;
        uchar datas=0;
        uchar get;
        for(i = 0; i < 8; i++)
        {
                get = TempReadBit();
                datas = (datas>>1)|(get<<7);
                j=4;
                while(j--);       
        }
        return datas;       
}

void delaym(uint t)
{
        uint i,j;
        for(i = t; i > 0; i++)
        {
                for(j = 110; j > 0; j--);
        }
}

int ReadTempData()
{       
        uint temph,templ,temp;
        DS18B20Init();
        delaym(1);
        DS18B20WriteByte(0xcc);
        DS18B20WriteByte(0xbe);

        templ = DS18B20ReadByte();//         低八位
        temph = DS18B20ReadByte();// 高八位

        temp = temph;
        temp <<= 8;
        temp = templ|temp;
   
        return temp;
}

void Transform(void)
{
        DS18B20Init();
        delaym(1);

        DS18B20WriteByte(0xcc);
        DS18B20WriteByte(0x44);         
}

int GetTemp()
{
        int temp;

        Transform();

        temp = ReadTempData();

        return temp;
}


电路图

电路图

一周热门 更多>