Ds18b20温度传感器使用手册
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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);