基于数字温度传感器的数字温度计Word格式文档下载.docx
《基于数字温度传感器的数字温度计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于数字温度传感器的数字温度计Word格式文档下载.docx(18页珍藏版)》请在冰豆网上搜索。
单片机温度测量DS18B20数字温度传感器AT89C51
绪论.......................................................................................3
1.原理介绍............................................................................4
1.1总体设计方案............................................................4
1.2主控制部分................................................................4
1.3总体设计框图............................................................4
2.硬件电路...........................................................................5
2.1硬件电路预览...........................................................5
2.2DS18B20介绍............................................................5
2.3AT89C51介绍............................................................8
2.4数码管介绍.............................................................10
3.程序设计..........................................................................11
3.1程序流程图.............................................................11
3.2程序清单.................................................................12
4.仿真效果图......................................................................16
5.结论与总结......................................................................18
绪论
随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便一是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,腰围现代人工作、科研、生活提供更好更方便的设施就需要从单片机技术入手,一切向着数字化控制,智能化控制方向发展。
随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研等各个领域,已经成为一种比较成熟的技术,在工、农业生产和日常生活中,对温度的测量及控制占据着极其重要的地位。
首先了解一下多点温度检测系统在各个方面的应用领域:
消防电气的非破坏性温度检测,电力、电讯设备之过热故障预知检测,空调系统的温度检测,各类运输工具之组件的过热检测,保全与监视系统之应用,医疗与健诊的温度测试,化工、机械等设备温度过热检测。
由此可见,温度检测系统应用十分广阔。
本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示,该设计控制器使用单片机AT89C51,测温传感器使用DS18B20,用3位共阳极LED数码管以串口传送数据,实现温度显示,能准确达到以上要求。
本温度计属于多功能温度计,可以设置上下报警温度,当温度不在设置范围内报警。
1.原理介绍
1.1总体设计方案
总体设计方案采用AT89C51单片机作控制器,温度传感器选用DS18B20来设计数字温度计,系统由3个模块组成:
主控制器、测温电路及显示电路。
主控制器由单片机AT89C51实现,测温电路由温度传感器DS18B20实现,显示电路由4位LED数码管直读显示。
本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确其输出温度采用数字显示,主要用于对测温比较准确的场所,或科研实验室使用,该设计控制器使用单片机AT89C51,测温传感器使用DS18B20,用4位共阳极LED数码管以串口传送数据,实现温度显示,能准确达到以上要求。
1.2主控制部分
本设计采用AT89C51八位单片机实现。
单片机软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制。
而且体积小,硬件实现简单,安装方便。
既可以单独对多DS18B20控制工作,还可以与PC机通信.运用主从分布式思想,由一台上位机(PC微型计算机),下位机(单片机)多点温度数据采集,组成两级分布式多点温度测量的巡回检测系统,实现远程控制。
另外AT89C51在工业控制上也有着广泛的应用,编程技术及外围功能电路的配合使用都很成熟。
系统采用针对传统温度测温系统测温点少,系统兼容性及扩展性较差的特点,运用分布式通讯的思想。
设计一种可以用于大规模多点温度测量的巡回检测系统。
该系统采用的是RS-232串行通讯的标准,通过下位机(单片机)进行现场的温度采集,温度数据既可以由下位机模块实时显示,也可以送回上位机进行数据处理,具有巡检速度快,扩展性好,成本低的特点。
1.3总体设计框图
控制器采用单片机AT89C51,温度传感器采用DS18B20,用4位LED数码管显示温度。
总体设计框图如图1-1所示。
图1.1总设计框图
2.硬件电路
2.1硬件电路预览
图2.1总电路
2.2DS18B20介绍
DS18B20是由美国DALLAS半导体公司研制的一款数字温度传感器,与一般的热敏电阻相比,它能够直接检测出被测温度并且可根据实际的要求通过简单的编程实现9~12位的数字读取方式。
DS18B20采用独特的单总线接口方式,只需一根线与单片机直接连接便可实现数据的读写操作,简化了分布式温度传感网络的应用。
DS18B20数字温度传感器的优点是结构简单,耐磨耐碰,体积较小,使用方便,与传统温度传感器相比测量精度较高,其抗干扰能力强,封装形式也有很多种,可以根据不同的应用场合而选择不同形式的封装。
因此,本系统选择DS18B20作为系统温度传感器,可以简化系统结构,使测量方便、可靠,同时DS18B20的价格也比较便宜。
DS18B20有以下优点:
(1)单总线接口方式:
DS18B20与单片机联接只需一根数据总线便能完成数据的全双工通信。
(2)在使用时不需要外围元器件。
(3)DS18B20工作电压范围宽,可工作于3.0V~5.5V,可以由数据线直接供电,不需要外部电源。
(4)测温范围为:
-55℃~+125℃,可以满足一般的生产生活需要,测温分辨率0.5℃
(5)可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃、0.0625℃,可实现高精度测温。
(6)DS18B20支持多传感器组成测温网功能,可以由单片机引出的一条总线上并联多个温度传感器以实现多点组网测温。
DS18B20的封装有很多种,最常见的是TO-92封装,它的管脚说明如图所示。
其封装结构共有三个引脚,分别为电源引脚(VCC),数据线引脚(DQ)和接地引脚(GND)。
图2.2DS18B20的TO-92封装
DS18B20的内部结构如图所示。
图2.3DS18B20的内部结构图
从图中我们可以看出,DS18B20数字温度传感器主要由四部分组成:
64位ROM只读存储器、温度传感器、高低温度触发器TH和TL、配置寄存器。
DS18B20的管脚排列如图2.3所示,其中DQ为数字信号I/O口;
GND为电源地,需要与单片机共地;
VDD为外接电源输入端。
每个DS18B20的ROM都有不同64位序列号,其序列号是出厂前被光刻好的,不可更改,它可以看作是该DS18B20的地址序列码。
64位ROM的排循环冗余校验码是CRC=X8+X5+X4+1。
ROM序列号的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上并联多个DS18B20实现多点组网测温的目的。
温度的测量由DS18B20中的温度传感器完成,并将检测到的温度用16位带符号扩展的二进制补码读数形式由数据总线传出,以0.0625℃/LSB形式表达,其中S为符号位。
例如+125℃的数字输出为07D0H,+25.0625℃的数字输出为0191H,-25.0625℃的数字输出为FF6FH,-55℃的数字输出为FC90H。
高速暂存器是一个9字节的随机存储器。
开始低位两个字节包含被测温度的数字量信息;
第3、4、5字节分别是TH、TL、配置寄存器的临时拷贝,每一次上电复位时被重置;
第6、7、8字节未用,默认为全逻辑1;
第9字节读出的是前面所有8个字节的CRC码,可用来保证通信正确。
DS18B20在使用中的注意事项。
DS18B20虽然具有测温电路简单、测温精度较高、连接方便、占用I/O端口线少等优点,在实际应用中应注意以下几个问题:
(1)简单的硬件电路需要相对复杂的软件进行编辑,DS18B20与单片机间采用串行数据传送,因此,在对DS18B20进行读取和写入编程时,必须严格保证读写时序,否则将无法读取测温结果。
(2)在实际应用中,当单总线上所挂DS18B20最好不要超过8个,否则,就需要解决单片机的总线驱动问题。
(3)连接DS18B20的总线电路是有长度限制的。
当采用普通信号电缆传输数据,且电缆长度超过50M时,读取的测温数据会因为有外界的干扰而发生错误。
而将总线电缆改为双绞线带屏蔽电缆时,正常通信距离最远可达150M。
因此,在用DS18B20进行长距离测温系统设计时,需要解决总线分布电容的阻抗匹配问题。
(4)在DS18B20测温程序设计中,向DS18B20发出温度转换命令后,程序需要等待DS18B20的返回信号。
实际应用中难免出现某个DS18B20断线问题,当程序需要读该DS18B20时,将没有返回信号,程序将进入死循环。
测温电缆最好采用带屏蔽4芯双绞线,其中一对线接地线与信号线,另一组接电源线和地线,屏蔽层在源端单点接地。
2.3AT89C51介绍
MCS-51单片机是指由美国英特尔公司生产的一系列单片机的总称,这一系列单片机包括很多种,如8031、8032、8051、8052、8752等。
其中8051是最早研制的且最具典型性的产品,而该系列其他单片机都是以8051为基础发展起来的,与8051的基本结构和软件特征相似。
8051单片机包含微型计算机所必须具备的基本功能部件,各部件相互独立地集成在同一块芯片上。
8051基本功能特性如下:
(1)8位CPU;
(2)四个8位并行I/O端口;
(3)4KB程序存储器(ROM),外部可扩充至64KB;
(4)128B数据存储器(RAM),外部可扩充至64KB;
(5)两个16位定时/计数器;
(6)5个中断源;
(7)全双工的串行通信口;
(8)具有布尔运算能力;
标准的8051单片机有几种不同的封装形式。
最常见,也是最廉价的是PDIP40封装的塑料双列直插40引脚8051单片机,其引脚排列如图所示。
图2.4单片机的管脚排列图
40个引脚功能如下:
(1)主电源引脚VSS和VCC。
VSS:
地线。
VCC:
5V电源。
(2)外界晶振引脚XTAL1和XTAL2。
XTAL1:
外接晶体的引线端。
当使用芯片内部时钟时,此端用于外接石英晶体和微调电容;
当使用外部时钟时,对于HMOS单片机,此引脚接地;
对于CHMOS单片机,此引脚作为外部振荡信号的输入端。
XTAL2:
外接晶体引线端。
当使用外部时钟时,对于HMOS单片机,此引脚接外部振荡源;
对于CHMOS单片机,此引脚悬空不接。
(3)控制或与其他电源复用引脚RST,ALE/
和
。
RST:
复位信号。
当输入的复位信号延续2个机器周期以上高电平即为有效,用以完成单片机的复位初始化操作。
在VCC发生故障、降低到低电平规定值掉电期间,此引脚可接上备用电源VPD,由VPD向内部RAM供电,以保持内部RAM中的数据。
ALE/
:
地址锁存控制信号。
在系统扩展时,ALE用于控制把P0口输出的低8位地址锁存器锁存起来,以实现低位地址和数据的隔离。
此外由于ALE是以晶振六分之一的固定频率输出的正脉冲,因此可作为外部时钟或外部定时脉冲使用。
外部程序存储器读选通信号。
在读外部ROM时有效(低电平),以实现外部ROM单元的读操作。
访问程序存储控制信号。
当
信号为低电平时,对ROM的读操作先低昂在外部程序存储器;
而当
信号为高电平时,则对ROM的读操作是从内部程序存储器开始,并可延至外部程序存储器。
(4)输入/输出引脚,P0口~P3口。
P0口(P0.0-P0.7):
8位双向并行I/O口。
扩展片外存储器或I/O口时,作为低8位地址总线和8位数据总线的分时复用接口,它为双向三态。
P0口能以吸收电流的方式驱动8个LSTTL负载。
P1口(P1.0-P1.7):
8位准双向并行I/O接口。
P1口每一位都可以独立设置成输入输出位。
P1口能驱动4个LSTTL负载。
P2口(P2.0-P2.7):
8位准双向并行I/O口。
扩展外部数据、程序存储器时,作为高八位地址输出端口。
P2口能驱动4个LSTTL负载。
P3口(P3.0-P3.7):
P3口除了作为一般的准双向口使用外,每个引脚还有特殊功能.P3口能驱动4个LSTTL负载。
2.4数码管介绍
LED数码管(LEDSegmentDisplays)由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只需引出它们的各个笔划,公共电极。
数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个。
这些段分别由字母a,b,c,d,e,f,g,dp来表示。
LED数码管常用段数一般为7段有的另加一个小数点,还有一种是类似于3位“+1”型。
位数有半位,1,2,3,4,5,6,8,10位等等....,led数码管根据LED的接法不同分为共阴和共阳两类,了解LED的这些特性,对编程是很重要的,因为不同类型的数码管,除了它们的硬件电路有差异外,编程方法也是不同的。
图2是共阴和共阳极数码管的内部电路,它们的发光原理是一样的,只是它们的电源极性不同而已。
颜色有红,绿,蓝,黄等几种。
led数码管广泛用于仪表,时钟,车站,家电等场合。
选用时要注意产品尺寸颜色,功耗,亮度,波长等。
下面将介绍常用LED数码管内部引脚图片。
图2.5数码管
3.程序设计
3.1程序流程图
图3.1主程序流程图
图3.2DS18B20程序流程图
3.2程序清单
#include<
reg52.h>
stdio.h>
#defineucharunsignedchar
#defineuintunsignedint
sbitds=P1^0;
//温度传感器信号线
uinttemp;
//定义整形的温度数据
floatf_temp;
//定义浮点型的温度数据
bitflag;
//正负温度标志位
ucharcodetable[]={0xc0,0xf9,0xa4,0xb0,//共阳极数码管显示0-9
0x99,0x92,0x82,0xf8,
0x80,0x90,
0x40,0x79,0x24,0x30,//带小数点的0-9
0x19,0x12,0x02,0x78,
0x00,0x10,
0xbf,0xff};
//正负号
voiddelay(uintz)//延时函数,约1ms
{
uintx,y;
for(x=z;
x>
0;
x--)
for(y=110;
y>
y--);
}
voiddsreset(void)//DS18B20复位,初始化函数
uinti;
ds=0;
i=103;
while(i>
0)
i--;
ds=1;
i=4;
bittempreadbit(void)//读一位数据函数
bitdat;
i++;
dat=ds;
i=8;
while(i>
0)i--;
return(dat);
uchartempread(void)//读一个字节数据函数
uchari,j,dat;
dat=0;
for(i=1;
i<
=8;
i++)
{
j=tempreadbit();
dat=(j<
<
7)|(dat>
>
1);
}
voidtempwritebyte(uchardat)//向DS18B20写一个字节数据函数
ucharj;
bittestb;
for(j=1;
j<
j++)
testb=dat&
0x01;
dat=dat>
1;
if(testb)
{
ds=0;
i++;
ds=1;
i=8;
}
else
voidtempchange(void)//DS18B20开始获取温度并转换
dsreset();
delay
(1);
tempwritebyte(0xcc);
//跳过读ROM指令
tempwritebyte(0x44);
//写温度转换指令
uintget_temp()//读取寄存器中存储的温度数据
uchara,b;
tempwritebyte(0xbe);
a=tempread();
//读低八位
b=tempread();
//读高八位
temp=b;
temp<
//两个字节组合为一个字
temp=temp|a;
if(temp<
0x800)flag=0;
//判断正负温度
elseif(temp>
=0x800)
flag=1;
temp=~temp+1;
f_temp=temp*0.0625;
//温度在寄存器中为12位,分辨率为0.0625°
temp=f_temp*10+0.5;
//乘以10表示小数点后取一位,加0.5是四舍五入
f_temp=f_temp+0.05;
returntemp;
//temp是整型
voiddis_temp(intt)//显示温度数值函数,t传递的是整型的温度值
ucharb,s,g;
b=t/100;
//除100得到商,为温度的十位
s=t%100/10;
//100取余除以10,为温度的各位
g=t%100%10;
//100取余再用10取余,为温度的小数位
if(flag==1)//温度的正负号
P2=0x01;
P0=table[20];
delay
(1);
elseif(flag==0)
P2=0x01;
P0=table[21];
delay
(1);
P2=0x02;
//温度显示
P0=table[b];
P2=0x04;
P0=table[s+10];
P2=0x08;
P0=table[g];
voidinit(void)//I/O口初始化
P0=0X00;
P2=0X00;
P1=0X00;
voidmain()//主函数
uchari;
init();
while
(1)
tempchange();
//温度转换函数
for(i=10;
i>
i--)
dis_temp(get_temp());
//获取温度并显示
4.仿真效果图
图4.1正温度显示
图4.2负温度显示
5.结论与总结
结论:
AT89C51的时钟为12M,I/O口可达32个,高的时钟频率和丰富的I/O,都为实现电路功能提供了非常有利的条件。
同时AT89C51内含4KB
FLASH
ROM,开发环境友好,易用,方便,大大加快本系统设计开发。
所使用的DS18B20数字温度传感器,CPU只需一根端口线就能与诸多DS18B20通信。
占用微处理器的端口少,可节省大量的引线和逻辑电路。
实