【www.hy-hk.com--毕业祝福语】

摘 要

在日常生活及工农业生产中,对温度的检测及控制时常显得极其重要。因此,对

数字显示温度计的设计有着实际意义和广泛的应用。本文介绍一种利用单片机实

现对温度只能控制及显示方案。本毕业设计主要研究的是对高精度的数字温度计

的设计,继而实现对对象的测温。测温系数主要包括供电电源,数字温度传感器

的数据采集电路,LED显示电路,蜂鸣报警电路,继电器控制,按键电路,单片

机主板电路。高精度数字温度计的测温过程,由数字温度传感器采集所测对象的

温度,并将温度传输到单片机,最终由液晶显示器显示温度值。该数字温度计测

温范围在-55℃~+125℃,精度误差在±0.5℃以内,然后通过LED数码管直接显

示出温度值。数字温度计完全可代替传统的水银温度计,可以在家庭以及工业中

都可以应用,实用价值很高。

关键词:单片机:ds18b20:LED显示:数字温度.

Abstract

In our daily life and industrial and agricultural production, the detection and control of

the temperature, the digital thermometer has practical significance and a wide range

of applications .This article describes a programmer which use a microcontroller to

achieve and display the right temperature by intelligent control .This programmer

mainly consists by temperature control sensors, MCU, LED display modules circuit.

The main aim of this thesis is to design high-precision digital thermometer and then

realize the object temperature measurement. Temperature measurement system

includes power supply, data acquisition circuit, buzzer alarm circuit, keypad circuit,

board with a microcontroller circuit is the key to the whole system. The temperature

process of high-precision digital thermometer, from collecting the temperature of the

object by the digital temperature sensor and the temperature transmit ted to the

microcontroller, and ultimately display temperature by the LED. The digital

thermometer requires the high degree is positive 125and the low degree is negative 55,

the error is less than 0.5, LED can read the number. This digital thermometer could

replace the traditional mercurial thermometer, can be used in family or industrial and

production, it has a great value.

Key words: MCU: DS18B20 : LED display: Digital thermometer。

1.绪 论 ····························· 4

1.1课题背景·························· 4

1.2立题的目的和意义······················ 4

1.3温度控制系统的预期功能和基本原理·············· 5

1.4本系统主要研究内容····················· 6

2.多功温度控制系统总体分析与设计 ················· 7

2.1 温度控制系统的组成和工作原理 ··············· 7

2.2 温度采集转换系统 ····················· 8

2.3 升降温控制系统 ······················ 10

2.4键盘显示系统························ 11

2.5报警系统·························· 12

2.6电源系统·························· 13

2.7 硬件电路设计 ······················· 14

2.7.1 系统硬件配置····················· 14

2.7.2 主要元件简介····················· 14

3.软件系统设计 ·························· 28

3.1软件总体设计························ 28

3.2系统初始化函数······················· 29

3.3 控制函数 ························· 30

3.4键盘显示函数························ 31

3.5降温函数·························· 31

3.6曲线算法·························· 32

3.7采样···························· 33

结 论 ······························ 35

致 谢 ······························ 36

参考文献 ····························· 37

系统源程序 ···························· 38

基于8051单片机的温度采集器

1绪 论

1.1课题背景

温度控制是自动控制经常讨论的课题之一,它代表了一类自动控制的方法。

而且其应用十分广泛,可以说在生产生活中无处不在,例如锅炉、电冰箱等。而

由温度控制带来的时滞效应难题始终困扰着实际应用。随着科学技术的高速发

展,温度控制技术得到了很大的进步,其应用的领域也不断的扩大。

本文将使用8051型单片机对温度控制的基本原理实例化,设计一个带有多

功能的、能够减小时滞效应的温度采集控制系统。目的是利用毕业设计的这段时

间学习一种利用8051型单片机进行温度采集控制的方法。

1.2立题的目的和意义

8051型单片机是常用的控制芯片,在智能仪器仪、工业检测控制、机电一

体化等方面取得了令人瞩目的成果,用其作为温度采集控制系统的实例也很多。

使用8051单片机能够实现温度全程的自动控制,而且8051单片机易于学习、掌

握,性能价格比高。

使用8051型单片机设计温度采集控制系统,可以即时、精确的反映温度变

化。完成诸如升温到特定温度、降温到特定温度、在温度点保持恒温等多种控制

方式,可以应用到空调、锅炉、电热器一类的设备上。

1.3温度控制系统的预期功能和基本原理

多功能温度控制系统的设计初衷是满足实际生产中温度控制的需要。为此本

系统针对实际应用开发了两种温度控制的模式。

第一种控制模式类似于空调,锅炉等需要保持在一定区间内恒温的设备,他

们都需要有加温或降温功能,有的当温度超过一定上限时会报警。本系统中把这

种工作模式命名为Control模式,简写为C模式。系统工作在这种模式下时,首

先系统会提示用户输入温度的上限与下限的温度值。然后根据实际温度的情况决

定采取那些方案。如下图1—3—1所示:

用户设定的下限温度当前实际温度用户设定的下限温度

图1—3—1 第一种控制模式示意图

该时刻的实际温度低于用户设定的下限温度,所以此时刻系统正处于升温状

态,直到实际温度到达上限温度值,系统才停止升温。反之,如果实际温度高于

用户设定的下限值时,系统处于降温状态。当实际温度超过用户设定的上、下限

温度时,系统还会通过声音、警报灯来报警,同时启动相应的降升温措施。

第二种模式在日常生产中是十分普遍的,例如铸造模具、热时效处理等都需

要完成“升温-恒温-降温”反复的过程。本系统模拟了热时效的处理过程,采

用“升温-恒温-升温-恒温-降温-恒温-降温”的梯形曲线过程,如下图1

—3—2所示的:

温度

图1—3—2图1—3—1 第二种控制模式示意图

这种模式对温度控制的要求比较高,技术指标也很多,例如必须保持采样时

间有单位并且均匀、升温降温的过程要稳定、迅速等。

常用的温度控制算法都采用PID算法。本设计从成本、设计复杂度、实用性

及开发时间诸多因素的考虑采用了DDC算法,主要体现在升降温过程中。系统为

典型的反馈式温度控制系统,组成部分见图1—3—3。其中数字控制器的功能由

8051单片机实现。

图1—3—3温度控制系统组成框图

1.4本系统主要研究内容

本系统所要完成的任务是:

(1)能够实时、准确的采样温度值。

(2)能够以DDC控制方式,进行升温、降温过程。

(3)完成温度梯形曲线的变化过程。

(4)更加人性化的设计。上、下界限温度能够用户输入并显示,声音、警

报灯的报警功能等。

2.多功温度控制系统总体分析与设计

2.1 温度控制系统的组成和工作原理

多功能温度控制系统能是以8051单片机作为核心,周边设备使用DS18B20

型单线智能温度传感器、液晶显示芯片74HC00、继电器及其驱动电路、红、蓝

色发光二极管、蜂鸣器、电加热器、直流电机风扇等。经DS18B20采集到的数字

量与用户设定的温度值进行比较,即可得到现场温度和设定温度的偏差。用户设

定值由键盘输入。由8051单片机构成的数字控制器按最小拍进行运算,计算出

所需要的控制量。数字控制器的输出经标度变换后送给8051内部定时计数器转

变为高低电平的不同持续时间,送至继电器及其驱动电路,触发晶闸管并改变其

导通角大小,从而控制电加热器的加热电压,起到控温的作用。

系统基本硬件结构框图如图2—1—1所示。其功能和原理如下:

(1)8051:负责中心运算和控制,协调系统各个模块的工作。

(2)温度温度传感器DS18B20:负责温度与数字量的转化。其精度可精确

到小数点后四位。

(3)功率模块:采用随机型固态继电器控制加热设备的方式。随机型固态

继电器采用低电压输入方式,一般为DC3~10V,用可控硅做输出器件。这样控

制部分与大功率部分实现隔离,可抑制干扰。

图2—1—1系统基本硬件结构框图

(4)人机交互模块:用4X1键盘和液晶显示器构成友善的人机交互界面。

(5)抗干扰模块:使用看门狗芯片X25045,其看门狗功能将对系统起到有

效的监视作用,内含512B串行E2PROM,具有掉电非易失特性,在本系统中做数

据备份用。

(6)红、蓝色LED,蜂鸣器:负责系统的报警功能。当温度超过用户设定

的上、下限值时系统将报警。LED灯在单片机的控制下点亮,同时蜂鸣器发出报

警声,通知用户采取相应的措施。

2.2 温度采集转换系统

在设计此类系统时,传统的方法是通过热敏电阻或模拟集成温度传感器采集

温度的模拟量,再用A/D器将转换后的数字量送给单片机,这些方案的主要缺点

是精度差,(例如典型的模拟集成温度传感器AD590的精度仅为0.5℃)并且因

为采用了A/D转换器使电路过于复杂。基于简化电路,提高性价比的考虑,本设

计采用集成化智能型温度传感器DS18B20完成现场温度的采集。系统电路图如图

2—2—1所示

图2—2—1温度转换采集系统电路图

DS18B20是美国DALLAS公司生产单线智能温度传感器,其采用DALLAS公司

独特的“单线(1—Wire)总线”专有技术,通过串行通信接口(I/O)直接输出

被测温度值(9~12位二进制数据,含符号位)。其工作在在12位模式下时,所

对应的温度分辨力高达0.0625℃。温度/数字转换时间的典型值为93.75ms。

根据定义,单线总线只有一根线,这意味着总线上每个器件只能分时驱动单

线总线,并要求每个器件必须有漏极开路输出或三态输出的特性。 DS18B20的单线接口I/O就属于漏极开路输出。在单线总线上必须接上拉电阻,

其电阻值约为5KΩ(标称值可取5.1 KΩ或4.7 KΩ)。当单线总线上挂有多个

从属器件时,也称之为多点总线。

单线总线杂空闲状态下呈高电平。操作单线总线时,必须从空闲状态开始。

单线总线加低电平的转换时间超过480us时,总线上所有的器件均被复位。在主

CPU发出复位脉冲后,从属器件就发出应答脉冲(PRESENCE PULSE),来通知主

CPU它已经作好了接收数据和命令的准备工作。

DS18B20与微处理器的电路接法如图2—2—2所示:

寄生电源接法

外部电源接法

图2—2—2 DS18B20与微处理器连接图

而传统温度采集转换系统则通过温度传感器集成芯片将温度变化量转换成

电流值变化量,输入放大电路转换为电流变化量,再输入ADC0809将模拟信号转换为数字信号。利用单片机采集并存储采集到的数据。系统电路图如下图2—2—3所示。

图2—2—3传统温度采集转换系统电路图

2.3 升降温控制系统

本系统使用DDC控制技术。DDC控制是当现场温度在用户设定的上、下限温度范围内时,加热器或降温器的工作随着温度接近临界值而相应调整的一种控制方式,通常所说的DDC段一般定为±5℃,当温度变化超出这个范围时,加热器或降温器被控制为DDC控制,一般有下面二种控制方式:时间DDC型、电流DDC型,DDC控制能消除"开关"型控制产生的锯齿波形,减少对电网的冲击,如图2—3—1的DDC

控制一般不用在负载变化范围较大而控制精度又较高的场合。

图2—3—1 DDC控制下的现场温度曲线

此系统由继电器及其驱动电路,直流电机风扇,散热片及电加热器组成,完成温度的升降。利用继电器及其驱动电路,直流电机风扇相组合可实现风扇的转速控制,驱动电路实际上是一个复杂的放大电路,如图2—3—2所示:

图2—3—2继电器及其驱动电路电路图

连接到直流电机风扇后,转动方向是由电压来控制的,电压为正则正转,电压为负则反转。转速大小则是由输出脉冲的占空比来决定的,正向占空比越大则转速越快,反向转则占空比越小转速越快。见下面图2—3—

3:

图2—3—3直流电机风扇控制脉冲图

在程序设计中用P1.4控制送出脉冲。P1.4为“1”时,输出12V;P1.4为“0”时,输出0V。用输出脉冲后的延时时间来决定输出电压值,具体的情况将在第三章中说明。

2.4键盘显示系统

本系统的用户界面利用人机工程学原理,运用系统科学理论和系统科学方法进行设计,使其能够适合操作者的应用需求。LCD的应用使操作者能够用容易理解的方式显示控制系统的当前状态和操作者关心的信息,例如当前时间、当前温

度、上限温度、下限温度。系统给操作者提供容易理解和充分的信息提示,以方便操作者的正确使用。同时,还考虑了用户操作界面有较好的容错能力,提高了系统的整体综合能力。系统的连接图如图2—4—1所示。

图2—4—1键盘显示系统电路图

本设计由74HC00芯片控制的4键键盘和液晶显示器组成,以实现用户的输入与数据输出。第一个键的作用是配合第三个键(加1)和第四个键(减1)对进行时间设定,第二个键的作用是配合第三个键(加1)和第四个键(减1)对上、下限温度进行设定。

2.5报警系统

报警系统由声报警和光报警组成。声报警通过P1.6接控制爱迪克系统的音效模块发声,用单片机控制P1.6产生一定频率的方波就可以实现音效模块的发声。音效模块是一个带有扬声器的放大电路。其电路图如图2—5—1所示。

图2—5—1报警系统(声报警)电路图

光报警由1个红色发光二极管和1个蓝色发光二极管组成,一共需要2根数据线,使用单片机直接控制。要实现的功能是在第一种工作模式下时,当现场温度高于用户设定的上限温度时,红色发光二极管点亮;当现场温度低于用户设定的下限温度时,蓝色发光二极管点亮。在第二种工作模式下,保持恒久熄灭状态。其电路图如图2—5—2所示。

图2—5—2报警系统(光报警)电路图

2.6电源系统

电源的滤波、保护电路对电源有重要的意义,系统能否安全使用,很大程度上取决于电源的稳定和保护。本设计使用4个二极管构成的桥式整流电路为其整流电路,如图2—6—1所示。滤波电路选用电容滤波,稳压选用三稳压块7805和7812,此电路简单适用。继电器和直流电机风扇用到12V电源,单片机等使用+5V电源。

本电源系统由U1(7805)、U2(7812)和发光二极管LED及相关阻容元件构成,其中U1输出稳定的5V电压,U1输出稳定的12V电压。发光二极管在这里作为电源指示,R3为LED的限流电阻。C8,C9,C10,C11为电源滤波电容。

图2—6—1电源系统电路图

2.7 硬件电路设计

2.7.1 系统硬件配置

采用总线型结构的设计。由P0口作数据线,P0口和P2口共同作地址线。

2.7.2 主要元件简介

8051单片机

8051是Intel公司于80年代初推出的8位嵌入式微控制器(内部数据总线为8位,外部数据总线为8位),它与MCS-96系统中的其它芯片相比,具有性能高、功能全、售价低廉、使用方便(48PINDIP)等优点。8051在工业应用方面有许多明显的特点,它具有灵活方便的8位总线外围支援器扩展功能,而在数据处理方面又有8位微机的快速功能。由于大的高度集成化已把许多常驻用的输入检测输出控制通道都制作在同一块硅片上,大大地灵活了外部连线,增强了系统的稳定性并且速度快(时钟12MHz),非常适合于工业环境下安装使用。因此本系统CPU选用8051芯片。

8051单片机引脚采用40双列直插式封装结构。其引脚图如图2—7—1所示。8051CPU中的主要元件有:高速寄存器阵列、特殊功能寄存器(SFR)、寄存器控制器和算术逻辑单元(RALU)。它与外部通讯是通过特殊功能寄存器SFR或存储器控制器进行的。8051CPU的主要特色是体积小,重量轻,抗干扰能力强,售价低,使用方便。此外,通过SFR还可以直接控制I/O、A/D、PWM、串行口等部件的有效运行。

CPU内部的一个控制单元和两条总线寄存器阵列和EALU连接起来。这两条总线是:16位地址总线(A-BUS)和8位数据总线(D-BUS)。数据总线仅在RALU与寄存器阵列或SFR之间传送数据,地址总线用作上述数据传送的地址总线或用

作与寄存器控制器连接的多路复用地址/数据总线。CPU对片内RAM访问是直接访问和通过寄存器R0,R1间接访问的。

8051工作时所需的时钟可通过其XTALL输入引脚由外部输入,也可采用芯片内部的振荡器。8051的工作频率为6~12MHz。在本系统中采用11.0592MHz频率。

图2—7—1 8051单片机引脚图

8051每次上电时必须复位。所谓复位,就是让单片机应用系统在正式工作之前处于一种特定状态,即正式工作前的起点,这个任务就是由复位电路来完成。8051单片机在引脚RESET/Vpp出现高电平时实现复位和初始化。RESET由高电平变低电平后,单片机从0000h地址开始执行程序,其初始复位不影响内部RAM的状态,包括工作寄存器R7~R0。在正常运行的情况下,要实现复位操作,必须使RESET引脚至少保持两个机器周期的高电平。CPU在第二个机器周期内执行内部复位操作,以后每一个机器周期重复一次,直至RESET端电平变低。复位期间不产生ALE及PSEN信号。8051的内部结构框图如图2—7—2所示。

图2—7—2 8051单片机内部结构框图 2. 1602液晶显示器

液晶显示器以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,在袖珍式仪表和低功耗应用系统中得到越来越广泛的应用。

本设计使用的字符型液晶模块是一种用5x7点阵图形来显示字符的液晶显示器,容量为1行2行16个字。

1602采用标准的16脚接口,其中VSS为地电源,VDD接5V正电源,V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,可通过一10KΩ的电位器调整对比度。RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。D0~D7为8位双向数据线。

1602液晶模块内部的字符发生存储器(CGROM)存储了160个点阵字符图形,

如图2-7-1所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。

1602液晶模块内部的控制器共有11条控制指令,如表2—7—1所示: 表2—7—1 1602液晶模块指令表

*

B * 1 * S

1602液晶模块的读写操作、屏幕和光标的操作都可以通过指令编程来实现。(说明:1为高电平、0为低电平) 指令1:清显示,指令码01H,光标复位到地址00H位置 指令2:光标复位,光标返回到地址00H 指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效 指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪

烁,低电平不闪烁 指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标 指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符 指令7:字符发生器RAM地址设置 指令8:DDRAM地址设置 指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。 指令10:写数据 指令11:读数据

1602液晶显示模块可以和单片机8051直接连接,电路如图2—7—3

所示。

图2—7—31602液晶模块与8051单片机连接图

液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符。

1602的内部显示地址。

表2—7—2 1602液晶模块内部显示地址图

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 比如第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H)

以下是在液晶模块的第二行第一个字符的位置显示字母“A”的程序: RS EQU P3.0 RW EQU P3.1 E EQU P3.5 ORG 0000H

MOV P1,#00000001B ;清屏 ACALL ENABLE

MOV P1,#00111000B ;8位2行5x7点阵 ACALL ENABLE

MOV P1,#00001111B ;显示器开、光标开、闪烁开 ACALL ENABLE

MOV P1,#00000110B ;文字不动,光标自动右移 ACALL ENABLE

MOV P1,#0C0H ;写入显示起始地址(第二行第一个位置) ACALL ENABLE

MOV P1,#01000001B ;字母A的代码 SETB RS ;RS=1 CLR RW ;RW=0

CLR E ;E=0 ACALL DELAY SETB E ;E=1 AJMP $

ENABLE: CLR RS ;写入控制命令的子程序 CLR RW CLR E ACALL DELAY SETB E RET

DELAY: MOV P1,#0FFH ;判断液晶显示器是否忙的子程序 CLR RS SETB RW CLR E NOP SETB E

JB P1.7,DELAY ;如果P1.7为高电平表示忙就循环等待 RET

程序在开始时对液晶模块功能进行了初始化设置,约定了显示格式。注意显示字符时光标是自动右移的,无需人工干预,每次输入指令都先调用判断液晶模块是否忙的子程序DELAY,然后输入显示位置的地址0O0H,最后输入要显示的字符A的代码41H。

3. DS18B20数字温度传感器

DS18B20数字温度计是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。

一、DS18B20的性能特点

(1)DS18B20采用DALLAS公司独特的“单线(1-Wire)总线”专有技术,通过串行通信接口(I/O)直接输出被测温度值(9位二进制数,含符号位)。

(2)测温范围是—55~+125℃。其分辩力为0.5℃,但若采用高分辨力模式,分辩力可达0.1℃。温度/数字量转换时间的典型值为200ms,最大值为500 ms。

(3)内含64位经过激光修正的只读存储器ROM,扣除8位产品系列号和8位循环冗余校验码CRC之后,产品序号占48位。出厂前就作为DS18B20唯一的产品序号,存入其ROM中,在构成大型温控系统时,允许在单线总线上挂接多片DS18B20。

(4)适配各种单片机或系统机。

(5)用户可分别设定各路温度的上、下限并写入随机存储器RAM中。利用报警搜索命令和寻址功能,可迅速识别出发生了温度越限报警的器件。

(6)内含寄生电源。该器件既可以由单线总线供电,也可选用外部+5V电源(允许电压范围是3.4~5.5V),进行温度/数字转换时的工作电流约为1.5 mA,待机电流仅为25uA,典型功耗为5mW。

二、DS18B20的引脚介绍

PR—35封装的DS18B20的引脚排列图2—7—4,其引脚功能描述见表2-7-1。

图2—7—4 DS18B20的引脚排列图

DS18B20详细引脚功能描述 表2—7—3 DS18B20引脚功能描述图

三、DS1820的工作原理

DS1820的内部结构如图2—7—5所示。由图2—7—5可知,DS1820由三个主要数字器件组成:① 64bit闪速ROM;②温度传感器;③非易失性温度报警触发器TH和TL。64bit闪速ROM的结构如图2—7—6所

图2—7—5 DS1820内部结构图

图2—7—6 DS1820内部的64bit闪速ROM结构图

它既可寄生供电也可由外部5V电源供电。在寄生供电情况下,当总线为高电平时,DS1820从总线上获得能量并储存在内部电容上 当总线为低电平时,由电容向DS1820供电。

DS1820的测温原理:内部计数器对一个受温度影响的振荡器的脉冲计数,低温时振荡器的脉冲可以通过门电路,而当到达某一设置高温时振荡器的脉冲无法通过门电路。计数器设置为-55℃时的值,如果计数器到达0之前,门电路未关闭,则温度寄存器的值将增加,这表示当前温度高于-55℃。同时,计数器复位在当前温度值上,电路对振荡器的温度系数进行补偿,计数器重新开始计数直到回零。如果门电路仍然未关闭,则重复以上过程。温度表示值为9bit,高位为符号位,其结构如下:

对DS1820的使用,多采用单片机实现数据采集。处理时,将DS1820信号线与单片机一位口线相连,单片机可挂接多片DS1820,从而实现多点温度检测系统。

系统对DS1820的操作以ROM命令和存储器命令形式出现。 (1)ROM命令代码及其含义

?READROM命令代码[33H]:如果只有一片DS1820,可用此命令读出其序列号,若在线DS1820多于一个,将发生冲突。

?MATCHROM命令代码[55H]:多个DS1820在线时,可用此命令匹配一个给定序列号的DS1820,此后的命令就针对该DS1820。

?SKIPROM命令代码[CCH]:此命令执行后的存储器操作将针对在线的所有DS1820。

?SEARCHRDH命令代码[F0H]:用以读出在线的DS1820的序列号。 ?ALARMSEARCH命令代码[ECH]:当温度值高于TH或低于TL中的数值时,此命令可以读出报警的DS1820。

(2)存储器操作命令代码及其含义

?WRITESCRATCHPAD命令代码[4EH]:写两个字节的数据到温度寄存器。 ?READSCRATCHPAD命令代码[BEH]:读取温度寄存器的温度值。 ?COPYSCRATCHPAD命令代码[48H]:将温度寄存器的数值拷贝到EERAM中,保证温度值不丢失。

?CONVERT命令代码[44H]:启动在线DS1280做温度A/D转换。 ?RECALL EE命令代码[B8H]:将EERAM中的数值拷贝到温度寄存器中。 ?READPOWERSUPPLY命令代码[B4H]:在本命令送到DS1280之后的每一个读数据间隙,指出电源模式:“0”为寄生电源;“1”为外部电源

四、DS18B20的使用方法

由于DS18B20采用的是1-Wire总线协议方式,即在一根数据线实现数据的双向传输,而对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时序时,单总线被拉低之后,在15us之内就得释放单总线。

X25045看门狗芯片

在微机智能测控系统的设计中,断电数据保存功能、看门狗功能、上电掉电复位功能、电源电压监控功能等对系 统是非常重要的。美国Xicro公司生产的

X25045芯片集上述功能于一身,这种组合大大简化了硬件设计,提高了系统的 可靠性,减少了对印制电路板的空间要求,降低了成本和系统功耗。

X25045芯片的引脚排列如图2—7—7所示。

图2—7—7看门狗芯片X25045引脚图

CS(①脚)为片选输入端,CS电平变化将复位看门狗定时器。 SO(②脚)为串行输出端,数据由此脚输出,串行时钟SCK(⑤脚)的下降沿同步输出数据。

WP(③脚)为写保护输入端,当WP为低电平时,X25045的非易失性写操作被禁止,其它功能正常,WP为高电平时所有功能正常。

SI(⑥脚)为串行输入端,所有写入的数据、操作码、字节地址在此脚上输入,数据由串行时钟的上升沿锁存。

RESET(⑦脚)为复位输出端,高电平有效,漏极开路输出方式。用于电源检测和看门狗定时器。

Vss(④脚)为接地端。

Vcc(⑧脚)为电源正端,X25045芯片的电源电压有两种规格,一种是4.5V至5.5V,另一种是2.7V至5.5V。

X25045芯片有4K位串行E2PROM;可编程的看门狗定时器;低电压Vcc检测;直至Vcc=1V复位输出有效;SPI接口方式;低功耗,待机电流为10μA,工作电流为3mA,工作电压为2.7V至5V;具有块锁定保护功能,可以保护1/4,1/2,或所有E2PROM阵列;片内异常事件写保护:上电、掉电保护电路,写锁存,写保护引脚;1MHz时钟频率;可擦写次数为 100000次,数据保存期为100年;ESD静电放电保护;有8引脚DIP和SOIC或14引脚TSSOP封装三种形式;高电平复位信号 输出。

X25045共有6条指令,如表2—7—4所示。所有指令都以MSB(最高有效位)

2在前方式传送。读写指令中3位的A8是高位地址,此位用于选择器件的上半部或下半部。

表2—7—4 X25045指令表

X25045内部的状态寄存器格式、

表2—7—5 X25045内部状态寄存器格式表

WIP位表示X25045是否忙于向E2PROM写数据。该位是只读位,WIP为0表示没有写操作在进行,可向E2PROM写数据;WIP为1时表示正在进行写操作,此时不能向E2PROM写数据。

WEL位表示写使能锁存器的状态。该位是只读位,由 WRDI指令复位,写使能锁存器被复位时向E2PROM写操作被禁止。

WRSR指令可以对状态寄存器中非易失性位BL1、BL0、WD1、WD0进行设置。BL1和BL0位确定E2PROM的块保护地址范围,被保护地址范围与这两位的关系如表2—7—6所示。

表2—7—6 BL1和BL0位与被保护地址范围关系表

WD1和WD0位是看门狗定时器超时选择的设定位,超时选择如表2—7—7所示。

表2—7—7 WD1和WD0位与看门狗定时值关系表

三软件系统设计

3.1软件总体设计

软件设计是为了满足系统功能的需要。其总体流程图如图3—1—1所示:

图3—1—1软件总体流程图

本系统的软件设计采用了模块化设计方法,对每一个功能编写了一个或几个功能函数,下表3—1—1说明了功能所对应的函数。

表3—1—1本设计各项功能所对应的功能函数

3.2系统初始化函数

系统初始化函数主要完成系统的初始化和设定系统的工作状态。它的工作步骤是:

(1)系统启动时,液晶显示器的时间显示为“00—00—00”,当前温度显示为当前的环境温度值,用户设定的上、下限温度默认为30℃和10℃。表示系统已经正常启动,可以工作。

(2)等待用户设定工作模式。用户可通过第一个键选择设定时间,然后配合使用第三个键(加1)和第四个键(减1)对进行时间设定;也可通过第二个键选择设定上、下限温度,然后配合第三个键(加1)和第四个键(减1)对上、下限温度进行设定。当设定的上、下限温度为同一值时进入第一种工作模式,当设定的上、下限温度为不同值时进入第二种工作模式。

程序的流程图如下图3—2—1所示:

图3—2—1系统初始化程序流程图

3.3 控制函数

控制函数是决定系统将要进行什么工作的。如温度高于上限时需要降温,低于下限时需要升温,温度过高时启动报警等等。在系统的1模式下专有一个控制函数,名为void control(short i,short j)。实际上主函数也算的上一个控制函数,其C模式的控制方式和control()函数类似,只不过比control()函数更加完善些。控制函数的流程采用分支结构设计,程序流程如图3—3—1所示。

图3—3—1控制程序流程图

3.4键盘显示函数

第一个键的作用是选择设定时间,可配合使用第三个键(加1)和第四个键(减1)对进行时间设定;第二个键的作用是选择设定上、下限温度,可配合第三个键(加1)和第四个键(减1)对上、下限温度进行设定。

程序的流程图如下图3—4—1所示:

图3—4—1 按键处理子程序流程图

3.5降温函数

降温函数是实现温度控制比例控制方式的重要环节,体现了整个系统的先进性。函数名为void cool(short i),其中i为主函数中给定的参数,参数值等于实际温度与上限温度的差。当(实际温度-上限温度)>0时,cool()函数将启用控制直流电机风扇,根据差值的大小决定风扇的转速。根据2.3小节中说明的那样,驱动电路的输出电压和输入脉冲的占空比有关,可根据参数i的值来决定占空比。cool()函数使用脉冲信号在正方向的延时时间和在负方向的延时时间的比值来决定占空比。另外说明以下本系统使用的风扇占空比越小转速越快,也就是反转。

如下程序:

j=10000;//保持一个加到匀速的时间 while(j>0)

{//比值大,转速小

P1_1=1;

delay(21-3*i);//电压关系 P1_1=0; delay(1); j--;}

占空比=delay(21-3*i):delay(1)

21-3×i这个公式是经过反复实验得出的。首先这个公式满足参数i越大占空比越小,并且实际测量的电压区间也满足风扇电压的需要。

i由1到7的参数占空比和电压的关系表

3—5—1占空比和电压关系表

实际上在参数i为1、2时风扇的转速不理想,所以使用了3及其之后的参数值,当0

3.6曲线算法

此部分功能是为了满足图3—6—1中的曲线要求。从图中可以看出曲线共有“升温-恒温-升温-恒温-降温-恒温-降温”7个过程,如采用顺序结构代码的重复率将会很高,可以设计使用循环完成。

温度℃

图3—6—1 温度控制曲线图

可将7个过程分成图中的4段,每段都包括一个升温或降温过程和一个恒温过程。恒温过程使温度保持恒定,高于恒定温度启动降温设备,低于恒定温度启动升温设备,同时使用计时器计时,本系统恒温时间为60秒。

编写一段4次的循环完成该功能,代码如下:

for (i=0;i<4;i++)//4个过程:温度变化+恒温.i case 0,1升.2,3降 3.7采样

为了满足曲线的技术指标,对系统的采样方式进行了改进。一般的温度控制程序采样是根据系统的速度采样或是延时采样,前者会使系统反复振荡。例如温度升高时由27度到28度,系统会由27度到28度来回振荡,从液晶显示器上根本看清显示的是什么。如果使用打印机将十分可怕,系统将始终打印而不做其它工作。虽然使用采样延时可以缓解这种情况,但延时的时间过长会影响控制,因为延时时间是占用CPU的,延时时间内什么工作也做不了。通常看到的现象是系

{numstart; //开始计时 if (i<2)

{do 升温 while(温度<界限[i]);}

else

{do 降温while(温度>界限[i]);}

if (i<3) do 恒温 while(60秒以内); numend; //结束计时}

统不连续工作,例如系统处于降温过程,但风扇不连续旋转,而是一会停一会转。并且采样的时间没有单位,满足不了温度曲线的要求。

解决这个问题的根本方法是采用定时采样的方法。具体方法是使用计时器计时,每到特定的时间采样一次,例如本系统是每隔2秒采样一次。采样后根据采样结果再采取方案,采样以外的时间来实施方案。由于采样的时间非常短,用户是感觉不到系统停顿的。更为重要的是采样时间有了单位,这样曲线的纵轴(温度)、横轴(时间)都有了单位,满足了曲线的技术指标。

采样的代码如下:

if (sec%2==0&&k==0) {

t_last=t; t=adc0809(); control(tt[i],t); print(t_last,t); k=1; }

变量k的作用是每到2的倍数秒时保证只取样一次,否则在这一秒之内将连续采样。

时间函数

时钟的基本显示原理:时钟开始显示为0时0分0秒,也就是液晶显示器显示000000,然后每秒秒位加1,到9后,10秒位加1,秒位回0。10秒位到5后,即59秒 ,分钟加1,10秒位回0。依次类推,时钟最大的显示值为23小时59分59秒。这里只要确定了1秒的定时时间, 其他位均以此为基准往上累加。开始程序定义了秒, 十秒, 分, 十分,小时, 十小时,共6位的寄存器, 分别存在30h,31h,32h,33h,34h,35h单元,便于程序以后调用和理解。

结 论

本次毕业设计使我受益匪浅,不但了解了8051型单片机及其相关芯片的系统结构、工作原理,还学会了单片机C语言的设计方法。对今后走上工作岗位打下了良好的基础。

本系统采用了符合温度控制需要的DDC控制方法,有效的减小了所控温度的振荡。对数据的每一次转化过程都保持了科学严谨的态度。其两种工作模式能够满足多数设备温度控制的需要,尤其是温度曲线的设计采用了循环算法、改进了采样原理。还增加了液晶显示功能,将系统的实用型大大提高。人性化的设计理念始终贯穿系统设计的全过程,对用户的每一步操作都有相应的提示。

由于时间的仓促,系统还有许多不完善之处。个人还有不少想法没有应用到系统设计中去。例如:提高数据的精度,将数据精度提高到小数点后五位;可更好的解决温度保持在绝对恒定温度值。

总体来说这次所设计的温度测控系统符合技术指标,能够达到预期的目标。

致 谢

此次毕业设计是在朱爱军导师的精心指导及全力支持下完成的。本系统的设计成功全赖朱老师毫不吝惜的把所有的相关知识教授于我。朱老师对新知识、新事物有独到的理解,这也影响了我对知识的学习态度,将使我一生受益匪浅。同时还要感谢在很多模块设计上指导过我的黄新导师。朱老师对单片机有着非常独到的见解和想法,黄老师对单片机的知识十分全面,他们一丝不苟的态度和认真负责的教导同样给了巨大的收益和鼓舞。这些将使我毕生受用!

最后,再次感谢本次毕业设计的所有导师,是你们用辛勤的劳动、无私的奉献换来了我们巨大的进步。感谢各位同学对我的帮助,只有我们不断的学习,明天才会更加美好

参考文献

1.翟生辉, 冯毛官.单片计算机原理与应用[M].西安交通大学出版社,1995 2.何立民.单片机应用技术选编1-7[M].北京航天航空大学出版社,1992 3.窦振中.单片机外围器件实用手册[M].北京航天航空大学出版社,2003 4.公茂法.单片机人机接口实例集[M]. 北京航天航空大学出版社,1998 5.赵佩华.单片机接口技术及应用[M].机械工业出版社,2003

6.高海生,杨文焕.单片机应用技术大全[M].西南交通大学出版社,1996.10 7.郁有文,常健.传感器原理及工程应用[M].西安电子科技大学出版社,2003 8.苏铁力.传感器及其接口技术[M].中国石化出版社,1998

9.Hafted, M.M,Roberts, G.W.Techniques for high-frequency integrated test and measurement[J].Instrumentation and Measurement,2003,52(6):1780—1786

系统源程序

#include #include

#define wlcdcom XBYTE[0xf8ff] #define rlcdcom XBYTE[0xfcff] #define wlcddata XBYTE[0xfaff] #define rlcddata XBYTE[0xfeff]

typedef unsigned char byte; typedef unsigned int word;

unsigned char code tab0[]={0,0,1,1,2,3,3,4,5,5,6,6,7,8,8,9}; unsigned

char

code

tab1[]={"T","h","e","

","p","r","o","g","r","a","m","m","e"," ","i","s",0x00};

unsigned char code tab2[]={"d","e","s","i","g","n","e","d"," ","b","y"," ","h","i","f","i",0x00};

unsigned

char

code

tab3[]={"0","1","2","3","4","5","6","7","8","9"};

unsigned

char

code

tab4[16][4]={{"0","0","0","0"},{"0","6","2","5"},{"1","2","5","0"},{"1","8","7","5"},

{"2","5","0","0"},{"3","1","2","5"},{"3","7","5","0"},{"4","3","7","5

"},

{"5","0","0","0"},{"5","6","2","5"},{"6","2","5","0"},{"6","8","7","5"},

{"7","5","0","0"},{"8","1","2","5"},{"8","7","5","0"},{"9","3","7","5"}};

Unsigned

char

temp[9],time[9],high[7]={"H","T","0","0",".","0",0x00},low[7]={"L","T","0","0",".","0",0x00};

unsigned char h[3],l[3],nonce_t[3]; sbit busy=ACC^7; sbit DQ=P3^2;

sbit time_set=P1^0; sbit temp_set=P1^1; sbit inc=P1^2; sbit dec=P1^3; sbit bell=P1^6; sbit fan=P1^4; sbit heater=P1^5; sbit l_led=P2^6; sbit h_led=P2^7;

unsigned int b,c;

unsigned char t,tf,set_coun,temp_coun; unsigned char hour,minute,second; bit time_flag,set_flag,temp_flag; bit t_c,bell_flag,ring_flag; bit flag1;flag2;

//查询忙标志位// void wait(void) { do

ACC=rlcdcom;

while(busy); }

//LCD初始化//

void lcd_init(void) { wlcdcom=0x38; wait();

wlcdcom=0x06; wait();

wlcdcom=0x0c; wait();

wlcdcom=0x01; wait(); }

//LCD驱动

void lcd_display(c_a,pos) unsigned char pos; unsigned char *c_a; { wlcdcom=pos; wait();

while(*c_a!=0x00) { wlcddata=*c_a; wait();

c_a++;

}

}

//延时

void delay(word useconds)

{

for(;useconds>0;useconds--);

}

//复位

byte ow_reset(void)

{

byte presence;

DQ = 0;

delay(29);

DQ = 1;

delay(3);

presence = DQ;

delay(25);

return(presence);

}

//从 1-wire 总线上读取一个字节

byte read_byte(void)

{

byte i;

byte v_alue = 0;

for (i=8;i>0;i--)

//报警子程序

void warm(void)

{ unsigned int a;

a=nonce_t[0]*100+nonce_t[1]*10+nonce_t[2]; if(b==c)

{ bell_flag=1;

}

else

bell_flag=0;

if(a=b)

{ heater=0;

l_led=1;

bell=1;

fan=0;

h_led=1;

ring_flag=1;

flag1=1;

flag2=1;

}

else if(a>=c&&flag1)

{ fan=1;

h_led=0;

ring_flag=bell_flag;

flag2=0;

}

else if(a

{ heater=1;

l_led=0;

bell=bell_flag;

flag1=0;

}

}

//主程序

main(void)

{

TMOD=0x01;

EA=1;

ET0=1;

TH0=0x3c;

TL0=0xa8;

TR0=1;

fan=0;

heater=0;

lcd_init();

ring_flag=1;

while(1)

{ keyboad();

lcd_display(temp,0xc0); 温度控制系统毕业设计 lcd_display(time,0x80);

lcd_display(low,0xca); lcd_display(high,0x8a); ASC(); warm() ;

}

}

本文来源:https://www.hy-hk.com/333831.html