文档库 最新最全的文档下载
当前位置:文档库 › 电子温度计-电子系统课程设计

电子温度计-电子系统课程设计

成绩评定表

课程设计任务书

摘要

在这个信息化高速发展的时代,单片机作为一种最经典的微控制器,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为一种比较成熟的技术,作为自动化专业的学生,我们学习了单片机,就应该把它熟练应用到生活之中来。在日常生活及工业生产过程中,经常要用到温度的检测及控制,温度是生产过程和科学实验中普遍而且重要的物理参数之一。在生产过程中,为了高效地进行生产,必须对它的主要参数,如温度、压力、流量等进行有效的控制。温度控制在生产过程中占有相当大的比例。温度测量是温度控制的基础,技术已经比较成熟。传统的测温元件有热电偶和二电阻。而热电偶和热电阻测出的一般都是电压,再转换成对应的温度,这些方法相对比较复杂,需要比较多的外部硬件支持。我们用一种相对比较简单的方式来测量。

我们采用美国DALLAS半导体公司继DS18B20之后推出的一种改进型智能温度传感器DS18B20作为检测元件,温度范围为-55~125 oC,最高分辨率可达0.0625 oC。DS18B20可以直接读出北侧温度值,而且采用三线制与单片机相连,减少了外部的硬件电路,具有低成本和易使用的特点。

本报告所介绍的温度计与传统温度计相比,具有读数方便、测温范围广、测温准确,主要用于对测温准确的场所,或科研实验室使用,此外还将介绍种基于AT89C51单片机的一种温度测量及报警电路,该电路采用DS18B20作为温度监测元件,测量范围0℃-~+100℃,使用LED模块显示,能设置温度报警上下限。正文着重给出了软硬件系统的各部分电路,介绍了集成温度传感器DS18B20的原理,AT89C51单片机功能和应用。该电路设计新颖、功能强大、结构简单。该设计控制器使用单片机AT89C52,传感器MF58 ,用3位共阳极LED数码管以串口传送数据。实现温度显示,能达到以上要求。在查找资料完毕后,进行硬件部分的设计,设计电路和原理图,使用软件WA VE 进行编译,在进行软件部分的设计,使用汇编语言来编辑程序,经过调试后,与硬件部分连接,进行仿真并调试改正错误,使设计正常运行。完成剩余工作,完善课程设

关键词:单片机,数字控制,数码管显示,温度计,DS18B20,AT89S52。

目录

摘要 (1)

1.引言 (1)

2 .需求分析 (1)

3.系统设计 (1)

4.详细设计 (2)

4.1 硬件设计 (2)

4.1.1 硬件流程图 (2)

4.1.2 芯片介绍 (3)

4.1.3硬件电路图 (8)

4.2 软件设计 (8)

4.2.1 程序流程图 (8)

4.2.2 程序代码 (10)

5.实验结果 (16)

6. 结束语 (17)

7参考文献 (18)

1.引言

单片机以其高可靠性、高性价比、低电压、低功耗等一系列优点,近几年得到迅猛发展和大范围推广,广泛应用于工业控制系统,数据采集系统、智能化仪器仪表,及通讯设备、日常消费类产品、玩具等。并且已经深入到工业生产的各个环节以及人民生活的各层次中,如车间流水线控制、自动化系统等、智能型家用电器(冰箱、空调、彩电)等。

目前社会上运用的温度控制器分辨率差,精度低,满足不了更高级的生产要求。为了保证安全生产,提高生产效率,保证产品高质量,更好的节约能源,这就迫使我们需要加快对智能化仪器的研究。温度是自然界中最基本的物理量,是影响生产安全,生产设备能否正常运转的一项重要因素,为了满足各领域的需求,改善生活质量,提高生产力,研究一款智符合时代潮流的数字式温度控制系统是十分有意义的。

2 .需求分析

整个系统选用STC89C52单片机为核心,DS18B20作为温度传感器。使用DS18B20元件来作为测温模块,具有线路简单,体积小,使用方便等特点。

用AT89S52控制DS1820,读取数据,并对DS18B20转换后的数据进行处理,最后在数码管上显示DS18B20测出的温度。要求使用6位数码显示管,最高位为符号位,如果温度为正,不显示,如果温度为负则显示负号;第2~ 4位显示温度值的整数部分,并在第4位数据上显示小数点;第5位显示一位小数,最低为显示摄氏度符号位“℃”。

3.系统设计

本课题以是AT89C52单片机为核心设计的一种数字温度控制系统,系统整体硬件电路包括,传感器数据采集电路,温度显示电路,单片机主板电路等组成。系统框图主要由主控制器、单片机复位、时钟振荡、LED显示以及温度传感器组成。

系统框图如图所示。

4.详细设计

4.1 硬件设计

控制器采用单片机 AT89C52,温度传感器采用 DS18B20,用74LS245用来驱动, 用 6 位 共阴极LED 数码管以串口传送数据实现温度显示。

4.1.1 硬件流程图

4.1.2 芯片介绍

AT89C52概述

图2.1 AT89C52的引脚图

图4.1.1 AT89C52的引脚图

VCC:电源电压;

GND:地;

P0口:P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口。作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对端口写1可作为高阻抗输入端用。

在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。

在FLASH编程时,P0口接受指令字节,而在程序效验时,输出指令字节,效验时,要求外接上拉电阻。

P1口:P1口是一个带有内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写1,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉底时会输出一个电流。

P2口:P2口是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑们电路。对端口写1,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉底时会输出一个电流。

P3口:P3口是一个带有内部上拉电阻的8位双向I/O口,P3的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑们电路。对端口写1,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉底时会输出一个电流。

P3口还接收一些用于FLASH闪速存储器编程和程序效验的控制信号。

RST:复位输入。其引脚一旦变成两个机器周期以上的高电平,所有的I/O口都将复位到1状态,当振荡器正在工作时,持续两个机器周期以上高电平便可完成复位,每个机器周期为12个振荡时钟周期。

EA/VPP:外部访问允许,欲使CPU仅访问外部程序存储器(0000H—FFFFH),EA 端必须保持低电平接地,需注意的是:如果加密位LB1被编程,复位是内部会锁存EA 端状态。

XTAL1:振荡器反相放大器的及内部时钟发生器的输入端。

XTAL2:振荡器反相放大器输出端

◆DS18B20概述

DS18B20数字温度传感器是达拉斯半导体公司生产的1-Wire器件,即单总线器件,它与传统的热敏电阻有所不同的是,它可直接将被测温度转化成串行数字信号供微机处理,并且根据具体要求,通过简单的编程实现9位的温度读数。具有线路简单,体积小的特点。因此用它来组成一个测温系统,线路简单,在一根通信线上,可以挂很多这样的数字温度计,它们可以并接到多个地址线上与单片机实现通信。由于每一个DS18B20唯一的一个序列号并存入其ROM中,因此CPU可用简单的通信协议就可以识别,从而节省了大量的引线和逻辑电路,给设计者带来很多方便。

◆DS18B20的1-Wire技术

目前常用的微机与外设之间进行数据传输的串行总线主要有I2C总线、SPI总线

等。其中I2C总线以同步串行2线方式进行通信(一条时钟线、一条数据线),SPI总线则以同步串行3线方式进行通信(一条时钟线、一条数据输入线、一条数据输出线)。这些总线至少需要两条或两条以上的信号线。而达拉斯半导体公司推出了一项特有的1-wire Bus技术,该技术与上述总线不同,它采用单根信号线,即可传输时钟,又能传输数据,而且数据传输是双向的,因而这种单总线技术具有线路简单,硬件开销少,成本低廉,便于总线扩展和维护等优点。单总线是用于单主机系统,能够控制一个或多个从机设备。主机可以是微控制器,从机可以是单总线器件,它们之间的数据交换只通过一条信号线。当只有一个从机设备时,系统可按单节点系统操作;当有多个设备时,系统则按多节点系统操作。

DS18B20产品的特点如下:

(1)只要求一个端口即可实现通信;

(2)在DS18B20中的每一个器件上都有独一无二的序列号;

(3)实际应用中不需要任何外部元器件即可实现测温;

(4)测量的温度范围为-55度至+125度;

(5)数字温度计的分辨率可以从9 ~ 12位选择;

(6)内部有温度上、下限告警设置;

TO92封装的DS18B20的引脚排列,其引脚功能描述见表2.3.1。

2.3.1 DS18B20详细引脚功能描述

◆DS18B20的内部结构

DS18B20,64位ROM存储器件有独一无二的序列号。暂存器包含两字节(第0和

第1字节)的温度寄存器,用于存储温度传感器的数字输出。暂存器还提供一字节的上限警报触发(TH )和下限警报触发(TL )寄存器(第2和第3字节),以及一字节的配置寄存器(第4字节),使用者可以通过配置寄存器来设置温度转换的精度。暂存器的第 5、第6和第7字节,器件内部保留使用。第8字节含有循环冗余码(CRC).使用寄生电源时,DS18B20不需额外的供电电源;当总线为高电平时,功率由单总线上的上拉电阻通过DQ 引脚提供;高电平总线信号同时也向内部电容CPP 充电,CPP 在总线低电平时为器件供电。

DS18B20加电后,处在空闲状态。要启动温度测量和模拟到数字的转换,处理器须向其发出Convert T[44h]命令;转换完成后,DS18B20回到空闲状态。温度数据是以带符号位的16位补码存储在温度寄存器中的,如图2.4.1所示。

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 LS Byte

bit15 bit14 bit13 bit12 bit11 bit10 bit9 bit8 MS Byte

图2.4.1 温度寄存器格式

符号位说明温度是正值还是负值,正直时S=0,负值时S=1。表2.4.2给出了一些数字输出数据与对应的温度值的例子。

表2.4.2 温度/数据的关系

◆小数的显示方法

DS18B20转换后的数据有四位二进制小数,精度为0.0625,可连续表示一位十进制小数,因此在数码显示时,只显示1位小数。在对四位二进制小数进行处理时,可先计算出这四位二进制小数对应的四位十进制小数,然后对这四位十进制小数舍弃后三位,只保留一位。在编写程序时,可编制一个反映二进制小数与显示码对应关系的表格,根据四位二进制小数的16种不同情况查找对应的1一位十进制小数的段码,具体映射关系如表2.7.1所示。

4.1.3硬件电路图

4.2 软件设计4.2.1 程序流程图

读温度值子程序数据处理子程序

(f)

(e)

图3.2.1 程序设计流程框图

4.2.2 程序代码

主程序

;************************************************************************ ;变量定义

;************************************************************************ DQ BIT P2.4 ;DS18B20数据位

FLAG1 BIT 00H

SIGN BIT 01H ;符号位

MSB EQU 30H ;转换数据高位字节

LSB EQU 31H ;转换数据低位字节

INTEG EQU 32H ;转换数据整数部分

DECIM EQU 33H ;转换数据小数部分

SEG_S EQU 34H ;符号位段码

SEG_I3 EQU 35H

SEG_I2 EQU 36H

SEG_I1 EQU 37H ;3位整数段码

SEG_D1 EQU 38H ;1位小数段码

SEG_C EQU 39H ;符号“℃”段码

;************************************************************************ ;主程序

;************************************************************************ ORG 0000H

MAIN: LCALL INIT_1820 ;DS18B20初始化

LCALL GET_TEMPER ;读取转换数据

LCALL DA TA_LROC ;数据处理

LCALL SEG_GEN ;生成显示码

LCALL DISPLAY ;数码显示

SJMP MAIN

DS18B20复位子程序

;************************************************************************

;DS18B20复位初始化子程序

;************************************************************************ INIT_1820: SETB DQ

NOP

CLR DQ ;主机发出延时537μs的复位低脉冲

MOV R1,#3

TSR1: MOV R0,#107

DJNZ R0,$

DJNZ R1,TSR1

SETB DQ ;拉高数据线

NOP

NOP

NOP

MOV R0,#25H

TSR2: JNB DQ,TSR3 ;等待DS18B20回应

DJNZ R0,TSR2 ;延时并检测应答信号

LJMP TSR4

TSR3: SETB FLAG1 ;置标志位,表示DS18B20存在LJMP TSR5

TSR4: CLR FLAG1 ;清标志位,表示DS18B20不存在LJMP TSR6

TSR5: MOV R0,#117

DJNZ R0,$ ;时序要求延时一段时间

TSR6: SETB DQ

RET

读取温度值子程序

;***********************************************************************

;读出转换后的温度值

;***********************************************************************

GET_TEMPER: SETB DQ

LCALL INIT_1820 ;先复位DS18B20

JB FLAG1,TSS2

RET ;判断DS18B20是否存在

TSS2: MOV A,#0CCH ;跳过ROM匹配

LCALL WRITE_1820

MOV A,#44H ;发出温度转换命令

LCALL WRITE_1820

LCALL DELAY ;等A/D转换结束,12位转换需750μs

LCALL INIT_1820

MOV A,#0BEH ;发出读温度命令

LCALL WRITE_1820

LCALL READ_18200 ;将读出的温度数据保存到35H/36H

RET

写DS18B20命令子程序

;************************************************************************

;写DS18B20的子程序(有具体的时序要求)

;************************************************************************ WRITE_1820: MOV R2,#8 ;一共8位数据

CLR C

WR1: CLR DQ

MOV R3,#6

DJNZ R3,$

RRC A

MOV DQ,C

MOV R3,#23

DJNZ R3,$

SETB DQ

NOP

DJNZ R2,WR1

SETB DQ

RET

读温度值子程序

;**********************************************************************

;DS18B20的程序,从DS18B20中读出两个字节的温度数据

;********************************************************************** READ_18200: MOV R4,#2 ;将温度高位和低位从DS18B20中读出MOV R1,#31H ;低位存入31H,高位存入30H

RE00: MOV R2,#8 ;数据一共有8位

RE01: CLR C

SETB DQ

NOP

NOP

CLR DQ

NOP

NOP

NOP

SETB DQ

MOV R3,#9

RE10: DJNZ R3,RE10

MOV C,DQ

MOV R3,#23

DJNZ R3,$

RRC A

DJNZ R2,RE01

MOV @R1,A

DEC R1

DJNZ R4,RE00

RET

数据处理子程序

;************************************************************************ ;数据处理子程序,判断正负,并分离转换值的整数和小数部分

;符号位为SIGN,0为正,1为负

;整数部分存放在INTEG(32H)中,小数部分存放在DECIM(33H)中

;************************************************************************ DA TA_LROC: CLR C

CLR SIGN

MOV A,MSB

RLC A

JC NEG ;判断符号位

LJMP LROC

NEG: CLR C ;对负数取补码

SETB SIGN

MOV A,LSB

CPL A

ADD A,#1

MOV LSB,A

MOV A,MSB

LROC: MOV A,LSB ;分离转换值的整数和小数部分ANL A,#0FH

MOV DECIM,A ;存储小数部分

MOV A,MSB

SWAP A

ANL A,#0F0H

MOV INTEG,A

MOV A,LSB

SWAP A

ANL A,#0FH

MOV R0,INTEG

ORL A,R0

MOV INTEG,A ;存储整数部分

RET

;************************************************************************* ;生成显示码子程序

;符号位段码存放在SEG_S中,整数段码存放在SEG_I3到SEG_I1中

;小数部分断码存放在SEG_D1~SEG_D4中

;************************************************************************* SEG_GEN: MOV DPTR,#TABLE

JB SIGN,S_NEG

MOV SEG_S,#00H

SJMP S_INT

S_NEG: MOV SEG_S,#40H

S_INT: MOV A,INTEG

MOV B,#100H

DIV AB

MOVC A,@A+DPTR

MOV SEG_I3,A ;百位数段码

MOV A,B

MOV B,#10

DIV AB

MOVC A,@A+DPTR

MOV SEG_I2,A ;十位数断码

MOV A,B

MOVC A,@A+DPTR

ORL A,#80H ;加小数点

MOV SEG_I1,A ; 个位数段码

MOV DPTR,#SWITCH

MOV A,DECIM

MOV B,DECIM

ADD A,B

JMP @A+DPTR ;根据小数值查表,求段码SWITCH: AJMP K0

AJMP K1

AJMP K2

AJMP K3

AJMP K4

AJMP K5

AJMP K6

AJMP K7

AJMP K8

AJMP K9

AJMP K10

AJMP K11

AJMP K12

AJMP K13

AJMP K14

AJMP K15

K0: MOV SEG_D1,#3FH

AJMP RETURN

K1: MOV SEG_D1,#06H

AJMP RETURN

K2: MOV SEG_D1,#06H

AJMP RETURN

K3: MOV SEG_D1,#5BH

AJMP RETURN

K4: MOV SEG_D1,#4FH

AJMP RETURN

K5: MOV SEG_D1,#4FH

AJMP RETURN

K6: MOV SEG_D1,#66H

AJMP RETURN

K7: MOV SEG_D1,#66H

AJMP RETURN

K8: MOV SEG_D1,#6DH

AJMP RETURN

K9: MOV SEG_D1,#7DH

AJMP RETURN

K10: MOV SEG_D1,#7DH

AJMP RETURN

K11: MOV SEG_D1,#07H

AJMP RETURN

K12: MOV SEG_D1,#7FH

AJMP RETURN

K13: MOV SEG_D1,#7FH

AJMP RETURN

K14: MOV SEG_D1,#6FH

AJMP RETURN

K15: MOV SEG_D1,#6FH

AJMP RETURN

RETURN: MOV SEG_C,#39H ;符号“℃”的段码

RET

;********************************************************************** ;显示子程序,首位为符号位,三位整数,一位小数

;最后一位“℃”为摄氏度标志

;********************************************************************** DISPLAY: MOV P3,#0FFH

CLR P3.0

MOV P0,SEG_S

LCALL DELAY

SETB P3.0

CLR P3.1

MOV P0,SEG_I3

LCALL DELAY

SETB P3.1

CLR P3.2

MOV P0,SEG_I2

LCALL DELAY

SETB P3.2

CLR P3.3

MOV P0,SEG_I1

LCALL DELAY

SETB P3.3

CLR P3.4

MOV P0,SEG_D1

LCALL DELAY

SETB P3.4

CLR P3.5

MOV P0,SEG_C

LCALL DELAY

SETB P3.5

RET

;*********************************************************************** ;延时子程序,延时5ms

;*********************************************************************** DELAY: MOV R5,#5 ;延时5ms

D1: MOV R6,#248

DJNZ R6,$

DJNZ R5,D1

RET

;*********************************************************************** TABLE: DB 3FH,06H,5BH,4FH,66H ;段码表

DB 6DH,7DH,07H,7FH,6FH

END

5.实验结果

相关文档
相关文档 最新文档