基于单片机和DS18B20的数字温度计Word格式文档下载.docx
《基于单片机和DS18B20的数字温度计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于单片机和DS18B20的数字温度计Word格式文档下载.docx(20页珍藏版)》请在冰豆网上搜索。
![基于单片机和DS18B20的数字温度计Word格式文档下载.docx](https://file1.bdocx.com/fileroot1/2023-1/10/b3fbde17-9183-414c-b782-e44029fd3786/b3fbde17-9183-414c-b782-e44029fd37861.gif)
随着工业现代化的发展,对温度测量仪表的要求越来越高,而数字温度表具有结构简单,抗干扰能力强,功耗小,可靠性高,速度快等特点,更加适合于工业过程中以及科学试验中对温度进行在线测量的要求。
近年来,数字温度表广泛应用在各个领域,它与模拟式温度表相比较,归纳起来有如下特点。
⑴准确度高,⑵测量范围宽、灵敏度高,⑶测量速度快,⑷使用方便、操作简单,⑸抗干扰能力强,⑹自动化程度高,⑺读数清晰、直观方便。
数字温度计的高速发展,使它已成为实现测量自动化、提高工作效率不可缺少的仪表。
数字化是当前计量仪器仪表发展的主要方向之一。
而高准确度数字温度计的出现,又使温度计进入了精密标准测量领域。
与此相适应,测量的可靠性、准确性显得越来越重要。
1.2主要功能
①实时显示环境温度。
4位数码管显示,3位整数,1位小数。
②温度范围:
-55~125℃。
③上电运行,实时显示温度。
2总体方案设计
通过查阅大量相关技术资料,并在老师的指导下,使我对整个电路系统有了一个比较全面的了解。
本设计主要是实现模拟量温度的采集,然后使其转换为数字量,最后将其转化为直观的十进制示值。
2.1方案比较
对同一种目的的实现,可以用不同的方案,下面就着重介绍以下两种方案对同一目的的实现方法。
并比较两种方案的优劣。
方案一
原理框图如图1所示:
图1方案一的原理框图
方案一的原理简述:
该方案的各部分电源均由总电源供电,温度传感器为热电偶,热电偶的热端感受被测物体温度t,产生相应的热电势。
热电势与热端温度成单值函数关系,用模数转换器ADC将热电势转化为数字量,按照热电势与温度的函数关系将该数字量转换为对应温度值,经译码显示电路显示在数码管上,从而实现数字温度计的功能。
方案二
原理框图如图2所示:
图2方案二的原理框图
方案二的原理简述:
该方案的各部分电源均由总电源供电,51单片机作为中央处理器及控制核心,控制数字温度计采集温度,数字温度传感器在采集到温度后直接输出数字量,传给单片机进行处理,单片机将传回的二进制数据处理后转换为相应温度,由译码显示电路以十进制形式显示在数码管上。
方案三
原理框图如图3所示:
图3方案三的原理框图
该方案的各部分电源均由总电源供电,由模拟及数字元器件组成的控制电路作为核心,控制数字温度计采集温度,数字温度传感器在采集到温度后直接输出数字量,传给控制电路进行处理,控制电路将传回的二进制数据处理后转换为相应温度,由译码显示电路以十进制形式显示在数码管上。
2.2方案论证
以上三种方案都是可行的,第一种方案的优点是由纯硬件电路构成,不涉及软件编程,但是由于热电势与温度之间的函数关系较复杂,利用硬件电路完成其转化较复杂,设计该电路难度较大且电路将比较庞大。
第二种方案的难点主要是单片机程序编制,但其硬件电路相对简单,借助于微控制器的强大功能可使设计周期缩短,测量精度高,且易于扩展功能,增强了电路对各种工作要求的适应性。
第三种方案的优点是由纯硬件电路构成,不涉及软件编程,但是数字式温度传感器的工作涉及复杂的时序,用硬件电路实现将十分复杂,电路设计难度大且电路庞大。
2.3方案选择
考虑到自己先前自学过单片机知识,对单片机有一定了解以及电路的灵活性和适用性,经过上面三个方案的分析,第二个方案的可行性高,所以我选择第二个方案作为设计方案。
在第二个方案中,数字式温度传感器和单片机起着主导作用,单片机控制传感器测温并将其传回的数据进行处理,通过改变程序,可改变测量精度及电路的功能,可实现设计要求。
3硬件电路设计
3.1元器件的选择
在本设计中主要采取较为熟悉的AT89C51单片机和由美国DALLAS半导体公司研制的DS18B20温度传感器以及4位LED数码管。
3.2电路原理图
电路原理图如图4所示。
图4
3.3特殊元器件的介绍
3.3.1AT89C51介绍
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。
AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。
单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。
AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
1.主要特性:
a)与MCS-51兼容
b)4K字节可编程闪烁存储器
c)寿命:
1000写/擦循环
d)数据保留时间:
10年
e)全静态工作:
0Hz-24Hz
f)三级程序存储器锁定
g)128*8位内部RAM
h)32可编程I/O线
i)两个16位定时器/计数器
j)5个中断源
k)可编程串行通道
l)低功耗的闲置和掉电模式
m)片内振荡器和时钟电路
2.管脚说明:
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FLASH编程时,P0口作为原码输入口,当FLASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4个TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下所示:
图5AT89C51管脚图
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR区中的8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次PSEN有效。
但在访问外部数据存储器时,这两次有效的PSEN信号将不出现。
EA/VPP:
当EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,EA将内部锁定为RESET;
当EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
3.振荡器特性:
XTAL1和XTAL2分别为反向放大器的输入和输出。
该反向放大器可以配置为片内振荡器。
石晶振荡和陶瓷振荡均可采用。
如采用外部时钟源驱动器件,XTAL2应不接。
有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。
4.芯片擦除:
整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms来完成。
在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。
此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。
在闲置模式下,CPU停止工作。
但RAM,定时器,计数器,串口和中断系统仍在工作。
在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。
3.3.2DS18B20介绍
温度传感器DS18B20是一种新型数字温度传感器,它采用独特的单线接口方式,仅需一个端口引脚来发送或接收信息,在单片机和DS18B20之间仅需一条数据线和一条地线进行接口。
DS18B20采用TO-92或8脚SOIC封装,引脚排列如图6所示。
各引脚功能如下:
●GND:
地。
●DQ:
单线应用的数据输入/输出引脚。
●VDD:
可选的外部供电电源引脚。
DS18B20内部有三个主要数字部件:
64位激光ROM、温度传感器、非易失性温度报警触发器TH和TL。
DS18B20可以采用寄生电源方式工作,从单总线上汲取能量,在信号线处于高电平期间把能量储存在内部电容里,在信号线处于低电平期间消耗电容上的电能工作,直到高电平到来再给寄生电源(电容)充电。
DS18B20也可用外部3~5.5V电源供电,这两种供电方式的电路如图7所示。
图7
采用寄生电源方式时,VDD引脚必须接地,另外为了得到足够的工作电流,应给单片机的I/O口线提供一个强上拉,一般可以使用一个场效应管将I/O口线直接拉到电源上。
采用外部供电方式时可以不用强上拉,但外部电源要处于工作状态,GND引脚不得悬空。
温度高于100℃时,不推荐使用寄生电源,应采用外部电源供电。
DS18B20依靠一个单线端口通信,必须先建立ROM操作协议,才能进行存储器和控制操作。
因此,单片机必须先提供下面5个ROM操作命令之一:
⒈读出ROM,代码为33H,用于读出DS18B20的序列号,即64位激光ROM代码。
⒉匹配ROM,代码为55H,用于辨识(或选中)某一特定的DS18B20进行操作。
⒊搜索ROM,代码为F0H,用于确定总线上的节点数以及所有节点的序列号。
⒋跳过ROM,代码为CCH,命令发出后系统将对所有DS18B20进行操作,通常用于启动所有DS18B20转换之前,或系统中只有一个DS18B20时。
⒌报警搜索,代码为ECH,主要用于鉴别和定位系统中超出程序设定的报警温度界限的节点。
这些命令对每个器件的激光ROM部分进行操作,在单线总线上挂有多个器件时,可以区分出单个器件,同时指明有多少器件或是什么型号的器件。
DS18B20内部存储器映像如图4所示。
存储器由一个高速暂存器和一个存储高低温报警触发值TH和TL的非易失性电可擦除E²
RAM组成。
头2个字节为实测温度值,低字节在前,高字节在后,第3和第4字节是用户设定温度报警值TH和TL的拷贝,是易失的,每次上电时被刷新。
第5字节为配置寄存器,其内容用于确定温度值得数字转换分辨率,DS18B20工作时按此寄存器中的分辨率将温度转换为相应精度的数值。
配置寄存器各位的分布如下:
其中,TM为测试模式位,用于设定DS18B20为工作模式还是为测试模式,出厂时TM被设置为0,用户一般不要改动。
R1和R0用于设定温度转换的精度分辨率。
如表1所示。
其余低5位全为1。
DS18B20温度转换时间较长,而且设定的分辨率越高,所需转换时间越长,因此实际应用中要根据具体情况权衡考虑。
高速暂存器的第6、7、8字节保留未用,读出值为全1。
第9字节为前面8个字节的CRC校验码,用于保证数据通信的正确性。
DS18B20提供了如下存储器操作命令:
⒈温度转换,代码为44H,用于启动DS18B20进行温度测量,温度转换命令被后DS18B20保持等待状态。
如果主机在这条命令之后跟着发出读时间隙,而DS18B20又忙于进行温度转换的话,DS18B20将在总线上输出“0”,若温度转换完成,则输出“1”。
如果使用寄生电源,主机必须在发出这条命令后立即启动强上拉,并保持750ms,在这段时间内单总线上不允许进行任何其他操作。
⒉读暂存器,代码为BEH,用于读取暂存器中的内容,从字节0开始最多可以读取9个字节,如果不想读完所有字节,主机可以在任何时间发出复位命令来终止读取。
⒊写暂存器,代码为4EH,用于将数据写入到DS18B20暂存器的地址2和地址3(TH和TL字节)。
可以在任何时刻发出复位命令来终止写入。
⒋复制暂存器,代码为48H,用于将暂存器的内容复制到DS18B20的非易失性E²
RAM中,即把温度报警触发字节存入非易失性存储器里。
如果主机在这条命令之后跟着发出读时间隙,而DS18B20又正在忙于把暂存器的内容复制到E²
RAM存储器,DS18B20就会输出一个“0”,如果复制结束的话,DS18B20则输出“1”。
如果使用寄生电源,主机必须在这条命令发出后立即启动强上拉并最少保持10ms,在这段时间内单总线上不允许进行任何其他操作。
⒌重读E²
RAM,代码为B8H,用于将存储在非易失性E²
RAM中的内容重新读入到暂存器(温度触发器)中。
这种复制操作在DS18B20上电时自动执行,这样器件一上电,暂存器里马上就存在有效的数据了。
若在这条命令发出之后发出读时间隙,器件会输出温度转换忙的标志:
“0”代表忙,“1”代表完成。
⒍读电源,代码为B4H,用于将DS18B20的供电方式信号发送到主机。
若在这条命令发出之后发出读时间隙,DS18B20将返回它的供电模式:
“0”代表寄生电源,“1”代表外部电源。
一条温度转换命令启动DS18B20完成一次温度测量,测量结果以二进制补码形式存放在高速暂存器中,占用暂存器的字节1(LSB)和字节2(MSB)。
用一条读暂存器内容的存储器操作命令可以把暂存器中的数据读出。
温度报警触发器TH和TL各由一个E²
PROM字节构成,可以用一条写存储器操作命令对TH和TL进行写入,对这些寄存器的读出需要通过暂存器。
所有数据都以低位(LSB)在前的方式进行读写,数据格式以0.0625℃/LSB形式表示如下:
LSB字节
MSB字节
当符号位S=0时,表示测得的温度值为正,可以直接对测得的二进制数进行计算并转换为十进制数。
当符号位S=1时,表示测得的温度值为负,此时测得的二进制数为补码数,要先变成原码数再进行计算。
表2所示为部分温度值对应的二进制数据。
DS18B20完成温度转换后,就把测得的温度值t与暂存器中的TH、TL字节内容进行比较,若t>
TH或t<
TL,则将DS18B20内部报警标志位置1,并对主机发出的报警搜索命令做出响应,因此可用多只DS18B20进行多点温度循环检测。
4总结
此次课程设计是我大学生活重要的一步。
从最初的选题,开题到写论文直到完成论文。
其间,查找资料,老师指导,与同学交流,然后反复修改,每一个过程都是对自己能力的一次检验和充实。
通过这次实践,锻炼了设计实践能力,此次课程设计是对我专业知识和专业基础知识一次实际检验和巩固。
这次课程设计收获很多,比如学会了查找相关资料相关标准,分析数据,提高了自己的制作能力。
终于完成了我的单片机课程设计,虽然没有完全达到设计要求,但从心底里说,还是高兴的,毕竟这次设计花了我很多心血,高兴之余不得不深思呀!
在本次设计的过程中,我发现很多的问题,,比如缺乏综合应用专业知识的能力,对材料的不了解等等。
由于时间有限,未能完成全部安装与调试工作,对设计结果没有作出最后的检验,也感到遗憾。
这次实践是对自己大学三年所学的一次大检阅,使我明白自己知识还很不全面。
单片机课程设计重点就在于软件算法的设计,需要有很巧妙的程序算法,虽然以前写过几次程序,但我觉的写好一个程序并不是一件简单的事,只有我们去试着做了,才能真正的掌握,只学习理论有些东西是很难理解的,更谈不上掌握。
从这次的课程设计中,使我真正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。
在此感谢老师的悉心指导和同学们的大力帮助!
5参考文献
1.张靖武、周灵彬.单片机原理、应用与PROTEUS仿真.北京:
电子工业出版社,2008年8月
2.徐爱钧.单片机原理实用教程—基于Proteus虚拟仿真.北京:
电子工业出版社,2009年1月
3.李全利.单片机原理及接口技术.北京:
高等教育出版社,2009年1月
4.欧阳文.ATMEL89系列单片机的原理与开发实践.北京:
中国电力出版社.2007年6月
5.倪志莲.单片机应用技术.北京:
北京理工大学出版社.2007年6月
6.AT89单片机原理及应用.北京:
国防工业出版社.2008年2月
附录
本设计的应用程序
温度传感器DS18B20采用器件默认的12位转化。
晶振频率为12MHz,最大转化时间为750ms。
DS18B20的通信线与P3.7相接,程序设计如下。
ORG00H
TMPLEQU29H;
用于保存读出温度的低8位
TMPHEQU28H;
用于保存读出温度的高8位
FLAG1EQU38H;
是否检测到DS18B20标志位27H
DATAINBITP1.7
MAIN:
LCALLGET_TEMPER;
调用读温度子程序
LCALLCVTTMP
LCALLDISP1
AJMPMAIN
;
DS18B20复位初始化子程序
INIT_1820:
SETBDATAIN
NOP
CLRDATAIN
主机发出延时537ms的复位低脉冲
MOVR1,#3
TSR1:
MOVR0,#107
DJNZR0,$
DJNZR1,TSR1
SETBDATAIN;
然后拉高数据线
NOP
MOVR0,#25H
TSR2:
JNBDATAIN,TSR3;
等待DS18B20回应
DJNZR0,TSR2
CLRFLAG1;
清标志位,表示DS18B20不存在
SJMPTSR7
TSR3:
SETBFLAG1;
置标志位,表示DS18B20存在
CLRP1.7;
检查到DS18B20就点亮P1.7LED
MOVR0,#117
TSR6:
DJNZR0,$;
时序要求延时一段时间
TSR7:
RET
读出转换后的温度值
GET_TEMPER:
LCALLINIT_1802;
先复位DS18B20
JBFLAG1,TSS2
RET;
判断DS18B20是否存在?
若DS18B20不存在,则返回
TSS2:
MOVA,#0CCH;
跳过ROM匹配
LCALLWRITE_1820
MOVA,#44H;
发出温度转换命令
ACALLDISP1
LCALLINIT_1820;
准备读温度前复位
MOVA,#0BEH;
发出读温度命令
LCALLREAD_1820;
将读出的温度数据保存到35H/36H
写DS18B20的子程序(有具体的时序要求)
WRITE_1820:
MOVR2,#8;
一共8位数据
CLRC
WR1:
MOVR3,#6
DJNZR3,$
RRCA
MOVDATAIN,C
MOVR3,#23
DJNZR2,WR1
读DS18B20的程序,从DS18B20中读出两个字节的温度数据
READ_1820:
MOVR4,#2;
将温度高位和低位从DS18B20中读出
MOVR1,#29H;
低位存入