温度检测Word下载.docx
《温度检测Word下载.docx》由会员分享,可在线阅读,更多相关《温度检测Word下载.docx(14页珍藏版)》请在冰点文库上搜索。
10位时的转换时间为187.5ms;
11位时为375ms;
12位时为750ms;
●电源电压范围为3.0V~5.5V;
●内含程序设置寄存器,可用来设置分辨率位数,该寄存器是DS1820所没有的。
其格式
为:
TM
R1
R0
1
其中,TM为测试模式位,为1表示测试模式,为0表示工作模式,出厂时该位设为0,且不可改变。
R1和R0的设置组合与温度分辨率有关,具体关系见表1。
表1温度分辨率的设置
R2
分辨率的设置组合
9位
10位
11位
12位
●片内带有64位激光ROM:
从高位算起,该ROM有一个字节的CRC校验码,6个字节的产品序号和一个字节的家庭代码。
对于家庭代码,DS1820是10H,DS18B20是28H。
●内含温度数据寄存器:
该寄存器由两个字节组成,实际上DS18B20中寄存器的字节定义或温度值与DS1820不一样,DS1820的分辨率为0.5℃,而DS18B20的12位分辨率为2~4℃。
3DS18B20的应用
DS18B20采用3脚TO-92封装或8脚SOIC封装。
图1是其采用8脚SOIC封装的引脚排列图。
其中GND接地;
VDD为电源端;
DQ是数据输入/输出端;
其余为空脚。
DS18B20的供电方式有两种:
一种为寄生电源,另一种为外加电源。
同DS1820一样,用户也可通过1线端口对DS18B20进行操作,其步骤为:
复位→ROM功能命令→存储器功能命令→执行/数据→DSB1820的ROM命令有5个,存储器命令有6个,这些命令字和功能同DS1820完全一样。
命令的执行都是由复位、多个读时隙或/和写时隙基本时序单元组成。
因此,只要将复位、读时隙、写时隙的时序了解清楚,使用DS18B20就比较容易了。
3.1复位
使用DS18B20时,首先需将其复位,然后才能执行其它命令。
复位时,主机将数据线激发为低电平并保持480μs~960μs,然后释放数据线,再由上拉电阻将数据线拉升15~60μs。
然后再由DS18B20发出响应信号,以将数据线激发成低电平60~240μs,这样,就完成了复位操作。
其复位时序如图2所示。
3.2写时隙
在主机对DS18B20写数据(主机对DS18B20发送各种命令)时,先将数据线激发为低电平,该低电闰应大于1μs。
然后根据写“1”或写“0”来使数据线变高或继续为低。
DS18B20将在数据线变成低电平后15μs~60μs对数据线进行采样。
要求写入DS18B20的数据持续时间应大于60μs而小于120μs,两次写数据之间的时间间隔应大于1μs。
写时隙的时序如图3所示。
3.3读时隙
当主机从DS18B20读数据时,主机先数据线激发出低电平,然后释放,以使数据线再升为高电平。
DS18B20在数据线从高电平变为低电平的15μs内将数据送到数据线上。
主机可在15μs后读取数据线以获得数据。
其时序图如图4所示。
4基于DS18B20的温度检测系统
以DS18B20为传感器,AT89C51单片机为控制核心组成的温度巡回检测系统的电路框图
如图5所示。
图中,DS18B20的供电方式为外部电源,其I/O数据线与P1.0相连。
在
DS18B20接入系统之前,应分别从激光ROM中读出其序号,然后分别赋予在系统中的编号
1~n。
该系统需要用键盘来设置温度报警的门限值,并用七段LED显示器显示DS18B20的编
号和测量的温度值。
可用8279键盘/显示控制芯片和译码电路74LS154以及驱动电路74LS245
来完成该功能。
当测量温度超出报警门限时,系统将从P1.2~P1.3输出光声报警信号。
其主要
的温度巡回检测流程图如图6所示。
第二章
实验过程
本次试验是使用温度传感器18b20在单片机开发板实现周围温度的检测,并能在1604显示器上显示所检测的温度。
试验步骤:
1、阅读相关文档,了解温度传感器的工作原理
2、在proteus上搭建电路
3、在leil编程软件上编写程序了,并在proteus上仿真
4、将编写成功的程序烧录到单片机开发板上,装上1604显示器和温度传感器18b20,观察
实验仪器与环境
温度传感器18b20单片机开发板keil编程软件
实验代码:
(1)/********************1602显示器模块****************************/
#include"
config.h"
sbitRS=P2^5;
sbitRW=P2^6;
sbitEN=P2^7;
voidDelay(uint16i)
{
while(i--);
}
/****************************************************************************
*名称:
Write_Com()
*功能:
写指令
****************************************************************************/
voidWrite_Com(uint8dat)
RS=0;
RW=0;
P0=dat;
EN=1;
Delay(20);
EN=0;
Write_Data()
写数据
voidWrite_Data(uint8dat)
RS=1;
Lcd_Init()
lcd初始化函数
voidLcd_Init(void)
Write_Com(0x38);
//显示模式设置
Write_Com(0x06);
//显示光标移动
Write_Com(0x0c);
//显示开及光标设置
Delay(100);
Lcd_Clr()
voidLcd_Clr(void)
Write_Com(0x01);
Disp_Text()
显示文本函数
voidDisp_Text(uint8addr,char*p)
Write_Com(addr);
while(*p!
='
\0'
)
Write_Data(*(p++));
#include<
stdio.h>
stdlib.h>
intrins.h>
sbitDQ=P3^2;
(2)/*************DS18B20温度读取模块*************/
voidtmpDelay(intu)//延时函数
while(u--);
voidInit_DS18B20()//初始化ds1820
unsignedcharx=0;
DQ=1;
//DQ复位
tmpDelay(8);
//稍做延时
DQ=0;
//单片机将DQ拉低
tmpDelay(80);
//精确延时大于480us
//拉高总线
tmpDelay(14);
x=DQ;
//稍做延时后,如果x=0则初始化成功x=1则初始化失败
tmpDelay(20);
unsignedcharReadOneChar()//读一个字节
unsignedchari=0;
unsignedchardat=0;
for(i=8;
i>
0;
i--)
{
DQ=0;
//给脉冲信号
dat>
>
=1;
DQ=1;
if(DQ)
dat|=0x80;
tmpDelay(4);
}
return(dat);
voidWriteOneChar(unsignedchardat)//写一个字节
i>
i--)
DQ=dat&
0x01;
tmpDelay(5);
floatReadtemp()//读取温度
unsignedchara=0;
unsignedcharb=0;
unsignedintt=0;
floattt=0;
Init_DS18B20();
WriteOneChar(0xCC);
//跳过读序号列号的操作
WriteOneChar(0x44);
//启动温度转换
//跳过读序号列号的操作
WriteOneChar(0xBE);
//读取温度寄存器
a=ReadOneChar();
//连续读两个字节数据
b=ReadOneChar();
t=b;
t<
<
=8;
t=t|a;
//两字节合成一个整型变量
tt=t*0.0625;
//得到真实十进制温度值,因为DS18B20可以精确到0.0625度,所以读回数据的最低位代表的是0.0625度
t=tt*10+0.5;
//放大十倍,这样做的目的将小数点后第一位也转换为可显示数字,同时进行一个四舍五入操作。
return(tt);
(3)主函数与18b20温度传感器模块
voidmain()
charbuf[16];
Lcd_Init();
//1602初始化
while
(1)//温度显示
{
Disp_Text(0x80,"
temperatureis:
"
);
sprintf(buf,"
%3.2f"
Readtemp());
Disp_Text(0x80+0x40,buf);
Disp_Text(0x80+0x45,"
C"
实验结果展示:
这是检测的室内温度
当手触摸到温度传感器时,温度上升
五、实验总结
1、通过传感器的实验,使我对单片机与18b20的使用有了进一步的了解。
2、通过此次实验体高了我的编程能力,并且能够更熟练地使用c52的中断与计时器.
3、编写程序的时候一定要有耐心,程序需要不断地调试才能达到预期的效果。