温度传感器型号

可以使用DS18B20数字温度传感器。

1.ds18B20基础知识

DS18B20数字温度计是DALLAS公司生产的1线器件,具有电路简单,体积小的特点。所以用它来组成测温系统是非常方便的,电路简单,可以在一条通讯线上挂很多这样的数字温度计。

1和DS18B20产品的特性

(1),通信只需要一个端口。

(2)ds 18b 20中的每个设备都有一个唯一的序列号。

(3)在实际应用中,无需任何外部元件即可实现温度测量。

(4)测量温度范围为-55℃。c到+125。c之间。

(5)用户可以在9位到12位之间选择数字温度计的分辨率。

(6)、内部温度上下限报警设置。

2.DS18B20引脚介绍

TO-92封装中DS18B20的引脚排列如图1所示,引脚功能描述见表1。

(仰视图)图1

表1 DS18B20详细引脚功能描述

序列号

名字

引脚功能描述

1

GND

矮型信号

2

冰雪皇后(Dairy Queen)

数据输入/输出引脚。开漏单总线接口引脚。当用于寄生电源时,它也可以为器件供电。

VDD

可选VDD引脚。在寄生电源下工作时,此引脚必须接地。

3.如何使用DS 18B20

由于DS18B20采用1线总线协议,即在一条数据线上实现数据的双向传输,但对于AT89S51单片机,硬件不支持单总线协议。因此,我们必须用软件的方法模拟单总线的协议序列来完成对DS18B20芯片的访问。

因为DS18B20在I/O线上读写数据,所以它对读写数据位有严格的时序要求。DS18B20有严格的通信协议,保证数据传输的正确性和完整性。该协议定义了几个信号的时序:初始化时序、读取时序和写入时序。所有时序都以主机作为主设备,单总线设备作为从设备。每个命令和数据传输都从主机主动启动写序列开始。如果要求单总线器件发送回数据,在写命令之后,主机需要启动读序列来完成数据接收。数据和命令的传输是低位优先。

DS18B20的复位时序

DS18B20的读取时序

DS18B20的读取时序分为读取0时序和读取1时序两个过程。

对于DS18B20,从主机上拉下单总线后,必须在15秒内释放单总线,这样DS18B20才能向单总线传输数据。DS18B20至少需要60us来完成一个读取序列。

DS18B20的写时序

DS18B20的写时序仍然分为写0时序和写1时序两个过程。

DS18B20写0序列和1序列有不同的要求。写入0序列时,单总线应至少下拉60us,以确保DS18B20能够在15us和45us之间正确采样IO总线上的“0”电平。当写入1序列时,单总线应为

4.实验任务

温度测量系统由一片DS18B20组成。测量温度精度达到0.1度,测量温度范围为-20度至+100度,由8位数码管显示。

5.电路原理图

6.系统板上的硬件连接

(1).用8芯电缆将“单片机系统”区的P0.0-P0.7连接到“动态数字显示”区的ABCDEFGH端子上。

(2)用一根8芯电缆将“单片机系统”区的P2.0-P2.7连接到“动态数字显示”区的S1S2S3S4S5S6S7S8端子上。

(3)将DS18B20芯片插入“四路单总线”区域的任意插座,注意不要将电源和接地信号接反。

(4)将“四路单总线”区域对应的DQ端子连接到“单片机系统”区域的P3.7/RD端子。

7.c语言源程序

#i包括& ltAT89X52。H & gt

#i包括& ltINTRINS.h & gt

无符号字符代码displaybit[]={0xfe,0xfd,0xfb,0xf7,

0xef,0xdf,0xbf,0x7f };

无符号字符代码displaycode[]={0x3f,0x06,0x5b,0x4f,

0x66、0x6d、0x7d、0x07、

0x7f、0x6f、0x77、0x7c、

0x39,0x5e,0x79,0x71,0x00,0x 40 };

无符号字符码dotcode[32]={0,3,6,9,12,16,19,22,

25,28,31,34,38,41,44,48,

50,53,56,59,63,66,69,72,

75,78,81,84,88,91,94,97};

无符号字符显示计数;

无符号char displaybuf[8]={16,16,16,16,16,16,16 };

无符号字符时间计数;

无符号字符read data[8];

sbit dq=p3^7;

位sflag

位复位脉冲(无效)

{

无符号字符I;

DQ = 0;

for(I = 255;我& gt0;我-);

DQ = 1;

for(I = 60;我& gt0;我-);

返回(DQ);

for(I = 200;我& gt0;我-);

}

void writecommandtods 18b 20(无符号字符命令)

{

无符号字符I;

无符号字符j;

for(I = 0;我& lt8;i++)

{

if((命令& amp0x01)==0)

{

DQ = 0;

for(j = 35;j & gt0;j-);

DQ = 1;

}

其他

{

DQ = 0;

for(j = 2;j & gt0;j-);

DQ = 1;

for(j = 33;j & gt0;j-);

}

command=_cror_(command,1);

}

}

无符号字符readdatafromds18b20(void)

{

无符号字符I;

无符号字符j;

无符号字符温度;

temp = 0;

for(I = 0;我& lt8;i++)

{

temp=_cror_(temp,1);

DQ = 0;

_ nop _();

_ nop _();

DQ = 1;

for(j = 10;j & gt0;j-);

如果(DQ==1)

{

temp = temp | 0x80

}

其他

{

temp = temp | 0x00

}

for(j = 200;j & gt0;j-);

}

返回(临时);

}

无效总管(无效)

{

TMOD = 0x 01;

TH0 =(65536-4000)/256;

TL0 =(65536-4000)% 256;

ET0 = 1;

EA = 1;

while(resetpulse())。

writecommandtods 18b 20(0x cc);

writecommandtods 18b 20(0x 44);

TR0 = 1;

while(1)

{

}

}

void t0(void)使用0中断1

{

无符号字符x;

无符号整数结果;

TH0 =(65536-4000)/256;

TL0 =(65536-4000)% 256;

if(displaycount==2)

{

P0 = display code[display buf[display count]]| 0x 80;

}

其他

{

P0 =显示代码[display buf[display count]];

}

P2 = display bit[显示计数];

display count++;

if(displaycount==8)

{

display count = 0;

}

time count++;

if(timecount==150)

{

time count = 0;

while(resetpulse())。

writecommandtods 18b 20(0x cc);

writecommandtods 18b 20(0x be);

read data[0]= readdatafromds 18b 20();

read data[1]= readdatafromds 18b 20();

for(x = 0;x & lt8;x++)

{

display buf[x]= 16;

}

sflag = 0;

if((read data[1]& amp;0xf8)!=0x00)

{

sflag = 1;

read data[1]= ~ read data[1];

read data[0]= ~ read data[0];

结果= read data[0]+1;

read data[0]=结果;

if(结果& gt255)

{

read data[1]++;

}

}

read data[1]= read data[1]& lt;& lt4;

readdata[1]= readdata[1]& amp;0x70

x = read data[0];

x = x & gt& gt4;

x = x & amp0x0f

read data[1]= read data[1]| x;

x = 2;

result = readdata[1];

while(结果/10)

{

display buf[x]=结果% 10;

结果=结果/10;

x++;

}

display buf[x]=结果;

if(sflag==1)

{

display buf[x+1]= 17;

}

x = read data[0]& amp;0x0f

x = x & lt& lt1;

display buf[0]=(dot code[x])% 10;

display buf[1]=(dot code[x])/10;

while(resetpulse())。

writecommandtods 18b 20(0x cc);

writecommandtods 18b 20(0x 44);

}

}