江海职业技术学院毕业设计数字温度计Word下载.docx
《江海职业技术学院毕业设计数字温度计Word下载.docx》由会员分享,可在线阅读,更多相关《江海职业技术学院毕业设计数字温度计Word下载.docx(40页珍藏版)》请在冰豆网上搜索。
DS18B20最高分辨率可达0.0625℃,所以系统误差指标可以限制在+1℃以内。
按照系统设计功能的要求,确定系统由3个模块组成:
主控制器,测温电路和显示电路。
温度测量仪总体电路结构框图如图1.1所示。
图1.1温度测量仪电路结构框图
本温度测量仪设计采用美国DALLAS半导体公司的智能型传感器DS18B20作为检测元件,测温范围限制在-55-125℃。
DS18B20可以直接读出被测量温度值,而且采用三线制与单片机相连,减少了外部的硬件电路,具有低成本和易使用的特点。
系统硬件电路由单片机AT89C51、字符液晶显示器LM016L和1k×
8的排阻构成。
单片机实现对LCD命令和显示数据的读写控制功能。
1.3DS18B20工作原理
一、性能特点
DS18B20温度传感器与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9—12位的数字值读数方式。
DS18B20的性能特点如下:
a.独特的单线接口仅需要一个端口引脚进行通信;
b.多个DS18B20可以并联在唯一的三线上,实现多点组网功能;
c.不需要外部器件
d.可通过数据线供电,电压范围为3.0—5.5V;
e.零待机功耗;
f.温度以9—12位数字量读出;
g.用户可定义的非易失性温度报警设置;
h.报警搜索命令识别并标志超过程序限定温度的器件;
i.负电压特性,电源极性接反时,温度计不会因发热而烧毁,只是不能正常工作;
二、外部结构
DS18B20采用3脚PR-35封装或8脚SOIC封装。
引脚排列及说明如图1.2与表1.1所示。
图1.2DS18B20引脚排列
表1.1详细引脚说明
三、内部结构
内部结构框图如图1.3所示。
图1.3DS18B20内部结构框图
高速暂存RAM的结构为9字节的存储器,第5字节为配置寄存器,其内容用于确定温度值的数字转换分辨率,该字节的定义如图1.4所示,其中,低5位一直为1;
TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式,在DS18B20出厂时,该位被设置为0,用户不要去改动;
R1和R0决定温度转换的精度位数,即用来设置分辨率,其定义方法见表1.2。
表1.2DS18B20分辨率的定义和规定
R1
R0
分辨率/位
温度最大
转换时间/ms
9
93.75
1
10
187.5
11
375
12
750
TM
图1.4配置寄存器位定义
四DS18B20测温原理
DS18B20测温原理图如图1.5所示
图1.5DS18B20测温原理图
DS18B20是这样测温的:
用一个高温系数的振荡器确定一个门周期,内部计数器在这个门周期内对一个低温度系数的振荡器的脉冲进行计数来得到温度值。
计数器被预置到对应与-55℃的一个值。
如果计数器在门周期结束前到达0,则温度寄存器(同样被预置到-55℃)的值增加,表明所测温度大于-55℃。
同时,计数器被复位到一个值,这个值由斜坡式累加器电路确定,斜坡式累加
器电路用来补偿感温振荡器的抛物线特性。
然后计数器又开始计数直到0,如果门周期仍未结束,将重复这一过程。
斜坡式累加器用来补偿感温振荡器的非线性,以期在测温时获得比较高的分辨力。
这是通过改变计数器对温度每增加一度所需计数的值来实现的。
因此,要想获得所需的分辨力,必须同时知道在给定温度下计数器的值和每一度的计算值。
DS18B20内部对此计算的结果可提供0.5℃的分辨力。
温度以16bit带符号位扩展的二进制补码形式读出,DS18B20温度与表示值如表1.3所示。
表1.3DS18B20温度与表示值对应表
温度测量仪系统控制器使用单片机AT89C51,用三位共阴LED数码管以动态扫描法实现温度显示。
1.4AT89C51简介
AT89C51是1种低功耗、高性能的片内含有4KB闪烁可编程、可擦除只读存储器(FlashProgrammableandErasableReadOnlyMemory)的8位CMOS单片机,并且与MCS-51系列单片机引脚和指令系统完全兼容。
芯片上的FPEROM允许在线编程或采用通用的编程器对其重复编程,而且性能价格比高。
所以本控制系统选用它作为我们的控制器。
一、AT89C51的性能及片内闪烁存储器
1.AT89C51的主要性能包括:
(1)与MCS-51微控制器系列产品兼容。
(2)片内有4KB可在线重复编程的闪烁存储器(FlashMemory)。
(3)存储器可循环写入/擦除1万次。
(4)存储器数据保存时间为10年
(5)宽工作电压范围:
Vcc可为+2.7V---+6V.
(6)全静态工作:
可从0Hz—16MHz.
(7)程序存储器具有3级加密保护。
(8)空闲状态维持低功耗和掉电状态保存存储器内容。
2.片内闪烁存储器(FlashMemory)
由于E2PROM具有在线改写,并在掉电后仍能保存数据的特点,可为我们的特殊应用提供便利。
但是,擦除和写入对于要有数据高速吞吐的应用还显得时间过长,这是E2PROM的主要缺陷。
表产1.4列出了几种典型E2PROM芯片的主要性能数据。
表1.4几种典型E2PROM芯片的主性能
型号
性能参数
2816
2816A
2817
2817A
2864A
取数时间/ms
250
200/250
擦/写电压/V
21
5
字节擦除时间/ms
9-15
写入时间/ms
由表1.4可见,所列各种芯片的字节擦除时间和写入时间基本上均为10ms,这样长的时间对于许多实际应用是不能接受的。
因此,将存储器集成到单片机芯片内,设法缩短此类存储器的擦除和写入时间是1个首要的问题。
片内闪烁存储器(FlashMemory)的概念就是在这种背景下提出来的。
目前,美国ATMEL公司生产的带有片内闪烁存储器的AT89C51/89C52/89C55单片机,由于价格便宜,且与MCS-51系列兼容,受到了我国广大工程技术人员的欢迎,使用该系列单片机,省去了外扩存储器的工作,只需了解片内闪烁存储器的特性以及如何对其编程即可。
二、片内闪烁存储器的编程
AT89C51的I/O口P0、P1、P2和P3除具有与MCS-51相同的一些性能和用途外,在FPEROM编程时,P0口还可接收代码字节,但在程序校验时要外加上拉负载电阻。
在FPEROM编程和程序校验期间,P1口接收低地址字节,P2口接收高地址位和一些控制信号,P3口也接收FPEROM编程和校验用的控制信号。
此时,ALE/
引脚是编程脉冲输入(
)端。
对AT89C51片内的闪烁存储器编程,只需在市场上购买相应的编程器,按照编程器的说明进行操作。
如想对写入的内容加密,只需按照编程器的菜单,选择加密功能选项即可。
1.5显示部分
在电子系统设计中,一般都需要有显示器的存在。
作为当前主流的显示器件,液晶显示器(LCD)的应用越来越广泛。
从显示容量上划分,LCD可分为两种类型,一种是“AlphaNumericLCDs”,只能显示字符和数字;
另一种是“GraphicalLCDs”,既能显示字符和数字,还能显示图形。
汉字显示需要后一种点阵图形式LCD。
液晶显示器是由液晶显示屏及控制器两部分组成的,不同的液晶显示器所对应的控制器不尽相同,了解LCD控制器的控制功能是设计液晶显示的关键[3]
一、液晶模块简介
LM016L的结构及功能LM016L液晶模块采用HD44780控制器,hd44780具有简单而功能较强的指令集,可以实现字符移动,闪烁等功能,LM016L与单片机MCU通讯可采用8位或4位并行传输两种方式,hd44780控制器由两个8位寄存器,指令寄存器(IR)和数据寄存器(DR)忙标志(BF),显示数RAM(DDRAM),字符发生器ROMA(CGOROM)字符发生器RAM(CGRAM),地址计数器RAM(AC)。
IR用于寄存指令码,只能写入不能读出,DR用于寄存数据,数据由内部操作自动写入DDRAM和CGRAM,或者暂存从DDRAM和CGRAM读出的数据,BF为1时,液晶模块处于内部模式,不响应外部操作指令和接受数据,DDTAM用来存储显示的字符,能存储80个字符码,CGROM由8位字符码生成5*7点阵字符160中和5*10点阵字符32种.8位字符编码和字符的对应关系,可以查看参考文献(30)中的表4.CGRAM是为用户编写特殊字符留用的,它的容量仅64字节,可以自定义8个5*7点阵字符或者4个5*10点阵字符,AC可以存储DDRAM和CGRAM的地址,如果地址码随指令写入IR,则IR自动把地址码装入AC,同时选择DDRAM或CGRAM但愿,LM016L液晶模块的引脚功能如下表所示:
引脚说明引脚说明引脚说明引脚说明
1602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,其中:
引脚符号功能说明
1VSS一般接地
2VDD接电源(+5V)
3V0液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。
4RSRS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。
5R/WR/W为读写信号线,高电平
(1)时进行读操作,低电平(0)时进行写操作。
6EE(或EN)端为使能(enable)端,下降沿使能。
7DB0底4位三态、双向数据总线0位(最低位)
8DB1底4位三态、双向数据总线1位
9DB2底4位三态、双向数据总线2位
10DB3底4位三态、双向数据总线3位
11DB4高4位三态、双向数据总线4位
12DB5高4位三态、双向数据总线5位
13DB6高4位三态、双向数据总线6位
14DB7高4位三态、双向数据总线7位(最高位)(也是busyflang)
15BLA背光电源正极
16BLK背光
寄存器选择控制表
RSR/W操作说明
00写入指令寄存器(清除屏等)
01都busyflag(DB7),以及读取位址计数器(DB0~DB6)值
10写入数据寄存器(显示各字型等)
11从数据寄存器读取数
二、LM016L的工作原理
LM016L是16×
2数码液晶显示器,每行可显示16个字符,共2行。
LM016L的控制器为HD44780,与液晶屏集成在一起。
HD44780有3个存储器,分别是字符存储器CGROM、显示数据存储器DDRAM和字符产生器CGRAM。
在LM016L的CGROM中,共有192个可供显示的字符和数字,其中5×
7(宽×
高)字符150个,5×
10(宽×
高)字符42个。
LM016L分行显示时,只能显示5×
7字体的字符,想要显示5×
10字符,只能单行显示。
如果要显示除CGROM中192个字符以外的其它字符,可以自定义最多8个特殊字符写入CGRAM中以供显示调用。
DDRAM与液晶显示屏上的位置是映射关系,只要把CGROM或CGRAM中的字符成功写入对应的DDRAM地址,便可在LCD上显示出相应的字符。
单行显示时,DDRAM的显示地址自左至右分别为80H~87H,C1H~C7H;
双行显示时,显示地址首行自左至右为80H~8FH,第2行自左至右为C0H~CFH。
HD44780的控制端有3个,分别是RS、RW和E。
RS=0时,配合读写控制端RW实现命令读写;
RS=1时,配合读写控制端RW实现显示数据的读写。
RW是LCD的读写控制端,RW=0为写有效;
RW=1为读有效。
E为LCD的使能信号,每次读写都需要产生一个宽450ns周期为1000ns的脉冲信号[5,6]。
HD44780的写时序如图2所示。
从图2中可以看出,每次读写数据时,先使RS和RW有效,然后E(图中为EN)脉冲信号有效,E脉冲信号应先为高电平后为低电平。
最后通过D0~D7送出命令或数据,也可以把送出命令或数据放在第一步。
HD44780的控制命令共有11条,主要用来控制光标的显示方式、单行或双行显示方式、4线或8线数据传输方式、存储器地址指针增减方等,可以根据不同的设计需求选用不同的命令形式[4]
第二章系统硬件电路设计
2.1DS18B20温度传感器的连接
测温仪电路设计原理图如图2.1—2.3所示,控制器使用单片机AT89C51,温度传感器使用DS18B20,用字符液晶显示器LM016L和1k×
DS18B20温度传感器提供9位(二进制)温度读数。
信息经过单线接口送入DSB1820或从DS18B20送出,因此从单片机到DS18B20仅需一条线(和地线)。
DS18B20的电源可以由数据线本身提供而不需要外部电源。
如图2.1所示。
89C51对DS18B20的数字量输出读入,即读P2.5端口。
图2.1测温仪电路设计原理图(左)
2.2单片机端口连接
P0口作数据口,与LM016L的D0~D7相接,在P0口与D0~D7数据线之间分别接8个上拉电阻,以确保电路能够正常显示。
AT89C51的P2口作为LCD的控制线,P2.0~P2.2分别接LM016L的RS、RW和E端;
LM016L的其它3个控制端VDD和VSS、VEE分别接电源和地。
系统硬件电路组成如图1所示
89C51对读入的数据处理后先输出到P0端口,然后锁存器74LS373将P0口的输出字数据进行锁存。
锁存命令由89C51单片机发出,锁存地址为7FFFH。
如图2.2所示。
图2.2测温仪电路设计原理图
第三章系统软件设计
本控制系统软件设计基于软件工程[5]模块化思想,将它分割成若干子模块,每个模块完成不同的功能,采用模块化原理可以使软件结构清晰,不仅容易设计也容易阅读和理解,模块化使得软件容易测试和调试,易于扩展,有利于提高软件的可靠性,减少系统开发的工作量。
把一些具有独立功能的模块编成子程序,以便主程序调用,本控制系统模块子程序包括:
键值读入子程序、显示子程序、T0中断控制子程序、外部中断0子程序。
本系统程序主要包括主程序、读出温度子程序、温度转换命令子程序、计算温度子程序和显示数据刷新子程序等。
3.1主程序
主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量温度值。
温度测量每1s进行一次。
主程序流程图如图3.1所示。
图3.1主程序流程图
3.2读出温度子程序
读出温度子程序的主要功能是读出RAM中的9字节。
在读出时须进行CRC校验,校验有错时不进行温度数据的改写。
读出温度子程序流程图如图3.2所示
图3.2读出温度子程序流程图
3.3温度转换命令子程序
温度转换命令子程序主要是发温度转换开始命令。
当采用12位分辨率时,转换时间约为750ms.在本程序设计中,采用1s显示程序延时法等待转换的完成。
温度转换命令子程序流程图如图3.3所示。
图3.3温度转换命令子程序流程图
3.4计算温度子程序
计算温度子程序将RAM中读取值进行BCD码的转换运算,并进行温度值正负的判定。
计算温度子程序的流程图如图3.4所示。
图3.4计算温度子程序的流程图
3.5显示数据刷新子程序
显示刷新子程序主要是对显示缓冲区中的显示数据进行刷新操作,当最高数据显示位为0时,将符号显示位移入下一位。
显示数据刷新子程序流程图如图3.5所示。
图3.5显示数据刷新子程序流程图
3.6程序清单
TEMPHCEQU29H;
正、负温度值标记
TEMPLCEQU2AH
TEMPFCEQU2BH
K1EQUP1.4;
查询按键
K2EQUP1.5;
设置/调整键
K3EQUP1.6;
调整键
K4EQUP1.7;
确定键
BEEPEQUP3.7;
蜂鸣器
RELAYEQUP1.3;
指示灯
LCD_XEQU2FH;
LCD字符显示位置
LCD_RSEQUP2.0;
LCD寄存器选择信号
LCD_RWEQUP2.1;
LCD读写信号
LCD_ENEQUP2.2;
LCD允许信号
FLAG1EQU20H.0;
DS18B20是否存在标志
KEY_UDEQU20H.1;
设定按键的增、减标志
DQEQUP3.3;
DS18B20数据信号
ORG0000H
LJMPMAIN
ORG0030H
MAIN:
MOVSP,#60H
MOVA,#00H
MOVR0,#20H;
将20H~2FH单元清零
MOVR1,#10H
CLEAR:
MOV@R0,A
INCR0
DJNZR1,CLEAR
LCALLSET_LCD
LCALLRE_18B20
START:
LCALLRST;
调用18B20复位子程序
JNBFLAG1,START1;
DS1820不存在
LCALLMENU_OK;
DS1820存在,调用显示正确信息子程序
MOVTEMP_TH,#055H;
设置TH初值85度
MOVTEMP_TL,#019H;
设置TL初值25度
LCALLRE_18B20A;
调用暂存器操作子程序
LCALLWRITE_E2;
写入DS18B20
LCALLTEMP_BJ;
显示温度标记
JMPSTART2
START1:
LCALLMENU_ERROR;
调用显示出错信息子程序
SJMP$
START2:
LCALLRST;
调用DS18B20复位子程序
DS18B20不存在
MOVA,#0CCH;
跳过ROM匹配命令
LCALLWRITE
MOVA,#44H;
温度转换命令
LCALLRST
跳过ROM匹配
LCALLWRITE
MOVA,#0BEH;
读温度命令
LCALLREAD;
调用DS18B20数据读取操作子程序
LCALLCONVTEMP;
调用温度数据BCD码处理子程序
LCALLDISPBCD;
调用温度数据显示子程序
LCALLCONV;
调用LCD显示处理子程序
LCALLTEMP_COMP;
调用实测温度值与设定温度值比较子程序
LCALLPROC_KEY;
调用键扫描子程序
SJMPSTART2;
循环
;
***********************键扫描子程序*****************************
PROC_KEY:
JBK1,PROC_K1
LCALLBEEP_BL
JNBK1,$
MOVDPTR,#M_ALAX1
MOVA,#1
LCALLLCD_PRINT
LCALLLOOK_ALARM
JBK3,$
JMPPROC_K2
PROC_K1:
JBK2,PROC_END
JNBK2,$
MOVDPTR,#RST_A1
LCALLSET_ALARM
LCALLRE_18B20;
将设定的TH,TL值写入DS18B20
LCALLWRITE_E2
PROC_K2:
LCALLMENU_OK
LCALLTEMP_BJ
PROC_END:
RET
*******************设定温度报警值TH、TL************************
SET_ALARM:
LCALLLOOK_ALARM
AS0:
JBK1,AS00
CPL20H.1;
UP/DOWN标记
AS00:
JB20H.1,ASZ01;
20H.1=1,增加
JMPASJ01;
20H.1=0,减小