当前位置:首页 > 技术学院 > 热搜器件
[导读]头文件部分:#ifndef __DS18B20_H__#define __DS18B20_H__#define uint8 unsigned char#define uint16 unsigned intsbit DQ=P3^7;uint16 get_temp();#endif程序部分:#include #include "DS18B20.h"#include /******

头文件部分:

#ifndef __DS18B20_H__

#define __DS18B20_H__

#define uint8 unsigned char

#define uint16 unsigned int

sbit DQ=P3^7;

uint16 get_temp();

#endif

程序部分:

#include

#include "DS18B20.h"

#include

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

* 函数名称:write_byte(uint8 num)

* 功 能:向18B20写数据

* 入口参数:要写的一个字节的数据

* 出口参数:无

* 返 回 值:无

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

void write_byte(uint8 num)

{

uint8 i;

uint16 tt;

bit m;

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

{

m=num&0x01;

num>>=1;

DQ=1;

DQ=0;

tt++;

DQ=m;

for(tt=0;tt<7;tt++);

DQ=1;

tt++;

}

}

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

* 函数名称:read_byte()

* 功 能:向18B20读数据

* 入口参数:无

* 出口参数:无

* 返 回 值:读出的一个字节数据

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

uint8 read_byte()

{

uint8 i,num;

uint16 tt;

bit m;

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

{

DQ=1;

DQ=0;

tt++;

DQ=1;

tt++;

m=DQ;

for(tt=0;tt<7;tt++);

DQ=1;

num>>=1;

if(m)

{

num|=0x80;

}

}

return(num);

}

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

* 函数名称:DS18b20_reset()

* 功 能:18B20复位

* 入口参数:无

* 出口参数:无

* 返 回 值:无

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

void DS18b20_reset()

{

bit m=1;

uint16 tt;

while(m)

{

while(m)

{

DQ=1;

DQ=0;

for(tt=0;tt<80;tt++);

DQ=1;

for(tt=0;tt<5;tt++);

m=DQ;

}

for(tt=0;tt<50;tt++);

m=~DQ;

}

DQ=1;

}

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

* 函数名称:start_temp()

* 功 能:启动温度转换

* 入口参数:无

* 出口参数:无

* 返 回 值:无

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

void start_temp()

{

DS18b20_reset();

write_byte(0xCC); // 发Skip ROM命令

write_byte(0x44); // 发转换命令

}

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

* 函数名称:get_temp()

* 功 能:获取温度值

* 入口参数:无

* 出口参数:无

* 返 回 值:18B20的双字节温度

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

uint16 get_temp()

{

uint8 a,b;

uint16 temp;

DS18b20_reset();

write_byte(0xCC); //发Skip ROM命令

write_byte(0xBE); //发read命令

a=read_byte(); //低8位

b=read_byte(); //高8位

temp=b<<8;

temp|=a;

start_temp();

return(temp);

}

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭