DS18B20温度读取函数

来源:本站
导读:目前正在解读《DS18B20温度读取函数》的相关信息,《DS18B20温度读取函数》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《DS18B20温度读取函数》的详细说明。
简介:本文章是关于DS18B20温度读取函数。

/***********************************

* DS18B20温度读取函数*

* 晶振12M*

* 返回double,精确到小数点后4位 *

* 只需调用read_temperature函数即可 *

***********************************/

sbit DQ =P2^7; //定义连接DS18B20的数据口

//延时函数

void delay(unsigned int i)

{

while(i--);

}

//初始化函数

void init_DS18B20(void)

{

bit flag=1;

while(flag==1)

{

DQ = 1; //DQ复位

DQ = 0; //DQ拉低

//delay(80); //延时约500us

delay(70);

DQ = 1; //释放DQ

delay(10); //DS18B20收到下拉信号后延时

flag=DQ; //读取DQ值(为0表示DS18B20复位成功)

delay(20);

}

//P3++;

}

//串行读取一个字节

unsigned char read_DS18B20(void)

{

unsigned char i = 0, dat = 0;

for (i=0; i<8; i++)

{

DQ = 0;

dat>>=1;

DQ = 1;

if(DQ)

dat|=0x80;

delay(4);

}

return dat;

}

//串行写入一个字节

void write_DS18B20(unsigned char dat)

{

unsigned char i=0;

for (i=0; i<8; i++)

{

DQ = 0;

DQ = dat&0x01;

delay(3);

DQ = 1;

dat>>=1;

}

delay(5);

}

//读取温度

double read_temperature(void)//返回double

{

unsigned int temp=0;

double d;

init_DS18B20();

write_DS18B20(0xCC); //忽略读序列号

write_DS18B20(0x44); //启动温度转换

init_DS18B20();

write_DS18B20(0xCC); //忽略读序列号

write_DS18B20(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度

temp=read_DS18B20(); //读取温度值低位

temp=temp+read_DS18B20()*0x100; //读取温度值高位

if(temp<0xf000)

{

d=temp*0.0625;

}

else //零下

{

temp=~temp+1;

d=-(temp*0.0625);

}

return d;

}

提醒:《DS18B20温度读取函数》最后刷新时间 2024-03-14 01:00:55,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《DS18B20温度读取函数》该内容的真实性请自行鉴别。