微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 用DS18B20测量温度

用DS18B20测量温度

时间:10-02 整理:3721RD 点击:
Proteue中仿真时为什么LCD1602要过一会儿才会显示?

不知道为什么显示出来的温度和传感器上的值不一样。

下面是程序:
#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;
}

电路图


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top