⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds18b20.c

📁 多功能数字钟,内含I2C驱动
💻 C
字号:
#include  <Reg52.h>
#include <intrins.h>
#include <DS18B20.H>

sbit DQ= P2 ^ 1;//ds1820data

void Delay18B20(int num)//延时函数
{
    while(num--) ;
}


void Init_DS18B20(void)//初始化ds1820
{
    unsigned char x=0;
    DQ = 1;    //DQ复位
    Delay18B20(8);  //稍做延时
    DQ = 0;    //单片机将DQ拉低
    Delay18B20(80); //精确延时 大于 480us
    DQ = 1;    //拉高总线
    Delay18B20(14);
    x=DQ;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
    Delay18B20(20);
}

/******************************************************************************/
unsigned char 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;
        Delay18B20(4);
    }
    return(dat);
}

/******************************************************************************/
void WriteOneChar(unsigned char dat)//写一个字节
{
    unsigned char i=0;
    for (i=8; i>0; i--)
    {
        DQ = 0;
        DQ = dat&0x01;
        Delay18B20(5);
        DQ = 1;
        dat>>=1;
    }
}

/******************************************************************************/
unsigned int 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); //读取温度寄存器
    a=ReadOneChar();  //读低8位
    b=ReadOneChar(); //读高8位
    t=b;
    t<<=8;
    t=t|a;
    tt=t*0.0625;
    t= tt*10+0.5; //放大10倍输出并四舍五入
    return(t);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -