Ds18b20温度传感器使用手册

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Ds18b20温度传感器使用手册一、传感器实物图

二、引脚说明

(1)

1 VCC 3.0~5.5V/DC 3 GND

4

2 DQ 数字信号输入/输出

(2)

1 5 GND

2 6

3 VCC 3.0~5.5V/DC 7

4 DQ 数字信号输入/输出

8

三、软件设计

功能说明:ds18b20采集温度并显示在1602液晶上#include

#include

#define uchar unsigned char

#define uint unsigned int

sbit ds=P2^4; //温度传感器信号线

uint temp;

float f_temp;

sbit rs=P1^0; //

sbit lcden=P1^2; // 液晶

sbit wr=P1^1; //

void delay(uint z)//延时函数

{

uint x,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

/***********液晶**************/

void write_com(uchar com)

{//写液晶命令函数

rs=0;

lcden=0;

P0=com;

delay(3);

lcden=1;

delay(3);

lcden=0;

}

void write_date(uchar date)

{//写液晶数据函数

rs=1;

lcden=0;

P0=date;

delay(3);

lcden=1;

delay(3);

lcden=0;

}

void init() //液晶初始化

{

lcden=0;

write_com(0x38);

write_com(0x0e);

write_com(0x06);

write_com(0x01);

}

/***********ds18b20**********/

void dsreset(void) //18B20复位,初始化函数

{

uint i;

ds=0;

i=103;

while(i>0)i--;

ds=1;

i=4;

while(i>0)i--;

}

bit tempreadbit(void) //读1位函数

{

uint i;

bit dat;

ds=0;i++; //i++ 起延时作用

ds=1;i++;i++;

dat=ds;

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

return (dat);

}

uchar tempread(void) //读1个字节

{

uchar i,j,dat;

dat=0;

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

{

j=tempreadbit();

dat=(j<<7)|(dat>>1); //读出的数据最低位在最前面,这样刚好一个字节在DAT里

}

return(dat);

}

void tempwritebyte(uchar dat) //向18B20写一个字节数据{

uint i;

uchar j;

bit testb;

for(j=1;j<=8;j++)

{

testb=dat&0x01;

dat=dat>>1;

if(testb) //写1

{

ds=0;

i++;i++;

ds=1;

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

}

else

{

ds=0; //写0

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

ds=1;

i++;i++;

}

}

}

void tempchange(void) //DS18B20 开始获取温度并转换{

dsreset();

delay(1);

tempwritebyte(0xcc); // 写跳过读ROM指令tempwritebyte(0x44); // 写温度转换指令

}

uint get_temp() //读取寄存器中存储的温度数据{

uchar a,b;

dsreset();

delay(1);

tempwritebyte(0xcc);

tempwritebyte(0xbe);

a=tempread(); //读低8位

b=tempread(); //读高8位

temp=b;

temp<<=8; //两个字节组合为1个字

temp=temp|a;

f_temp=temp*0.0625; //温度在寄存器中为12位分辨率位0.0625°temp=f_temp*10+0.5; //乘以10表示小数点后面只取1位,加0.5是四舍五入

f_temp=f_temp+0.05;

return temp; //temp是整型

}

uchar change(uchar a) //将数字转换为字符

{

uchar b;

if(a==0) b='0';

if(a==1) b='1';

if(a==2) b='2';

if(a==3) b='3';

if(a==4) b='4';

if(a==5) b='5';

if(a==6) b='6';

if(a==7) b='7';

if(a==8) b='8';

if(a==9) b='9';

return b;

}

void dis_temp(uint t) //显示程序

{

uchar a,b;

write_com(0x80+0x40);

a=t/100;

b=change(a);

write_date(b); //十位数

delay(5);

a=t%100/10;

b=change(a); //个位数

write_date(b);

delay(5);

write_date(0x2e); //小数点

delay(5);

相关文档
最新文档