1、1基于单片机的数字温度计摘要:本文介绍一种基于 AT89C2051 单片机的一种温度测量及报警电路,该电路采用 DS18B20 作为温度监测元件,测量范围-55-+125,使用 4 位 LED 模块显示,能通过键盘设置温度报警上下限。正文着重给出了软硬件系统的各部分电路,介绍了集成温度传感器 DS18B20 的原理,AT89C2051 单片机功能和应用。该电路设计新颖、功能强大、结构简单。关键词:温度测量,DS18B20Abstract : The introduction of a cost-based AT89C2051 MCU a temperatur measurement circu
2、its, the circuits used DS18B20 high-precision temperatur sensor , measuring scope -55-+125,can use the keybord set the warning limitation, the use of four bits seven segments LED that can be display the current temperature. The paper focuses on providing a software and hardware system components cir
3、cuit, introduced the theory of DS18B20, the founctions and applications of AT89C2051 .This circuit design innovative, powerful, can be expansionary strong.Key Words : Temperatur measurement, DS18B201 前言数字温度计(Digital Thermometer)简称DTM,它是采用数字化测量技术,把连续的温度值转换成不连续、离散的数字形式并加以显示的仪表。传统的温度计功能单一、精度低,不能满足数字化时代
4、的需求,采用单片机的数字温度计,由于精度高、抗干扰能力强,可扩展性强、集成方便得到了广泛的应用。温度是许多监控系统中的一个重要参数。DS18B20直接把温度信息转换成相应的数字信号。数据采集、处理模块主要由AT89C2051单片机构成,完成温度数据的读取和显示。本章重点介绍 DS18B20 的工作原理,尤其是其编程原理,以及由它们构成的基于单片机的数字温度计的工作原理。2 系统功能描述2传感器部分AT89C2051 单片机LED 显示设置报警键盘报警扬声器3 系统原理及基本框图如图 3.1 所示,模拟温度值经过 DS18B20 处理后转换为数字值,然后送到单片机中进行数据处理,并与设置的温度报
5、警限比较,超过限度后通过扬声器报警。同时处理后的数据送到 LED 中显示。图 3.1 系统基本方框图3 硬件设计3.1 输入电路图 3.1.1 量程切换开关 图 3.1.2 衰减输入电路输入电路的作用是把不同量程的被测的电压规范到 A/D 转换器所要求的电压值。智能化数字温度计所采用的单片双积分型 ADC 芯片 ICL7135,它要求输入电压 0-2V。本仪表设计是 0-1000V 电压,灵敏度高所以可以不加前置放大器,只需衰减器,如图 3.1.2 所示 9M、900K、90K、和 10K 电阻构成1/10、1/100、1/1000 的衰减器。衰减输入电路可由开关来选择不同的衰减率,从而切换档
6、位。为了能让 CPU 自动识别档位,还要有图 3.1.1 的硬件连接。3.2 A/D 转换电路A/D 转换器的转换精度对测量电路极其重要,它的参数关系到测量电路性能。本设计采用双积 A/D 转换器,它的性能比较稳定,转换精度高,具有很高3的抗干扰能力,电路结构简单,其缺点是工作速度较低。在对转换精度要求较高,而对转换速度要求不高的场合如电压测量有广泛的应用。3.2.1 双积 A/D 转换器的工作原理图 3.2.1.1 双积 A/D 转换器如图所示:对输入模拟电压和基准电压进行两次积分,先对输入模拟电压进行积分,将其变换成与输入模拟电压成正比的时间间隔 T1,再利用计数器测出此时间间隔,则计数器
7、所计的数字量就正比于输入的模拟电压;接着对基准电压进行同样的处理。在常用的 A/D 转换芯片(如 ADC -0809、ICL7135、ICL7109 等)中,ICL7135 与其余几种有所不同,它是一种四位半的双积分A/D 转换器,具有精度高(精度相当于 14 位二进制数)、价格低廉、抗干扰能力强等优点。本文介绍用单片机并行方式采集 ICL7135 的数据以实现单片机温度计和小型智能仪表的设计方案。图 3.2.1.2 双积 A/D 转换器的波形图43.2.1 7135 的应用7135 是采用 CMOS 工艺制作的单片4 位半 A/D 转换器,其所转换的数字值以多工扫描的方式输出,只要附加译码器
8、,数码显示器,驱动器及电阻电容等元件,就可组成一个满量程为 2V 的数字温度计。7135 主要特点如下:双积型 A/D 转换器,转换速度慢。在每次 A/D 转换前,内部电 路都自动进行调零操作,可保证零点在常温下的长期稳定。在 20000 字(2V满量程)范围内,保证转换精度 1 字相当于 14bitA/D 转换器。具有自动极性转换功能。能在但极性参考电压下对双极性模拟输入电压进行 A/D 转换,模拟电压的范围为 01.9999V。模拟出入可以是差动信号,输入电阻极高,输入电流典型值 1PA。所有输出端和 TTL 电路相容。有过量程(OR)和欠量程(UR)标志信号输出,可用作自动量程转换的控制
9、信号。输出为动态扫描 BCD 码。对外提供六个输入,输出控制信号(R/H,BUSH,ST,POL,OR,UR),因此除用于数字温度计外,还能与异步接收 /发送器,微处理器或其它控制电路连接使用。采用 28 外引线双列直插式封装,外引线功能端排列如图所示。7135 数字部分数字部分主要由计数器、锁存器、多路开关及控制逻辑电路等组成。7135一次 A/D 转换周期分为四个阶段:1、自动调零(AZ);2、被测电压积分(INT);3、基准电压反积分(DE);4、积分回零(ZI)。具体内部转换过程这里不做祥细介绍,主要介绍引脚的使用。3.2.1.1 ICL7135 引脚图5R/H(25 脚)当 R/H=
10、“1”(该端悬空时为“1”)时,7135 处于连续转换状态,每 40002 个时钟周期完成一次 A/D 转换。若 R/H 由“1”变“0”,则7135 在完成本次 A/D 转换后进入保持状态,此时输出为最后一次转换结果,不受输入电压变化的影响。因此利用 R/H 端的功能可以使数据有保持功能。若把R/H 端用作启动功能时,只要在该端输入一个正脉冲(宽度300ns),转换器就从 AZ 阶段开始进行 A/D 转换。注意:第一次转换周期中的 AZ 阶段时间为9001-10001 个时钟脉冲,这是由于启动脉冲和内部计数器状态不同步造成的。/ST(26 脚)每次 A/D 转换周期结束后,ST 端都输出 5
11、 个负脉冲,其输出时间对应在每个周期开始时的 5 个位选信号正脉冲的中间,ST 负脉冲宽度等于 1/2 时钟周期。第一个 ST 负脉冲在上次转换周期结束后 101 个时钟周期产生。因为每个选信号(D5-D1)的正脉冲宽度为200 个时钟周期(只有 AZ 和DE 阶段开始时的第一个 D5 的脉冲宽度为 201 个 CLK 周期),所以 ST 负脉冲之间相隔也是200 个时钟周期。需要注意的是,若上一周期为保持状态(R/H=“0”)则 ST 无脉冲信号输出。ST 信号主要用来控制将转换结果向外部锁存器、UARTs 或微处理器进行传送。BUSY(21 脚)在双积分阶段(INT+DE),BUSY 为高
12、电平,其余时为低电平。因此利用 BUSY 功能,可以实现 A/D 转换结果的远距离双线传送,其还原方法是将 BUSY 和 CLK“与”后来计数器,再减去 10001 就可得到原来的转换结果。OR(27 脚)当输入电压超出量程范围(20000),OR 将会变高。该信号在 BUSY 信号结束时变高。在 DE 阶段开始时变低。UR(28 脚)当输入电压等于或低于满量程的 9%(读数为 1800),则一图 3.2.1.2 ICL7135 的波形图6当 BUST 信号结束,UR 将会变高。该信号在 INT 阶段开始时变低。POL(23 脚)该信号用来指示输入电压的极性。当输入电压为正,则 POL等于“1
13、”,反之则等于“0”。该信号 DE 阶段开始时变化,并维持一个 A/D 转换调期。位驱动信号 D5、D4、D3、D2、D1(12、17、18、19、20 脚)每一位驱动信号分别输出一个正脉冲信号,脉冲宽度为 200 个时钟周期,其中 D5 对应万位选通,以下依次为千、百、十、个位。在正常输入情况下,D5-D1 输出连续脉冲。当输入电压过量程时,D5-D1 在 AZ 阶段开始时只分别输出一个脉冲,然后都处于低电平,直至 DE 阶段开始时才输出连续脉冲。利用这个特性,可使得显示器件在过程时产生一亮一暗的直观现象。B8、B4、B2、B1(16、15、14、13 脚)该四端为转换结果 BCD 码输出,
14、采用动态扫描输出方式,即当位选信号 D5=“1”时,该四端的信号为万位数的内容,D4=“1”时为千位数内容,其余依次类推。在个、十、百、千四位数的内容输出时,BCD 码范围为 0000-1001,对于万位数只有 0 和 1 两种状态,所以其输出的 BCD 码为“0000”和“0001”。当输入电压过量程时,各位数输出全部为零,这一点在使用时应注意。最后还要说明一点,由于数字部分以 DGNG 端作为接地端,所以所有输出端输出电平以 DGNG 作为相对参考点。基准电压,基准电压的输入必须对于模拟公共端 COM 是正电压。与单片机系统的串行连接在 ICL7135 与单片机系统进行连接时,使用并行采集
15、方式,要连接 BCD 码数据输出线,可以将 ICL7135 的/STB 信号接至 AT89C52 的 P3.2(INT0)。 ICL7135 需要外部的时钟信号,本设计采用 CD4060 来对 4M 信号进行 32 分频得到 125KHz 的时钟信号。CD4060 计数为级进制计数器,在数字集成电路中可实现的分频次数最高,而且 CD4060 还包含振荡电路所需的非门,使用更为方便。7图 3.2.1.3 ICL7135 与系统的连接图 图 3.2.1.4 CD4060 时钟发生电路 3.3 单片机部分单片机选用的是 ATMEL 公司新推出的 AT89S52,如图 3.2.1.1 所示。该芯片具有
16、低功耗、高性能的特点,是采用 CMOS 工艺的 8 位单片机,与 AT89C51 完全兼容。AT89S52 还有以下主要特点:采用了 ATMEL 公司的高密度、非易失性存储器(NV-SRAM)技术;其片内具有 256 字节 RAM,8KB 的可在线编程(ISP)FLASH 存储器;有 2 种低功耗节电工作方式:空闲模式和掉电模式片内含有一个看门狗定时器(WDT),WDT 包含一个 14 位计数器和看门狗定时器复位寄存器(WDTRST),只要对 WDTRST 按顺序先写入 01EH,后写入 0E1H,WDT 便启动,当 CPU 由于扰动而使程序陷入死循环或“跑飞”状态时,WDT 即可有效地使系统
17、复位,提高了系统的抗干扰性能。3.4 液晶显示部分显示接口用来显示系统的状态,命令或采集的电压数据。本系统显示部分用的是 LCD 液晶模块,采用一个 161 的字符型液晶显示模块, 点阵图形式液晶由 M 行N 列个显示单元组成,假设 LCD 显示屏有 64 行,每行有 128 列,每 8 列对应 1 个字节的 8 个位,即每行由 16 字节,共 图 3.2.1.1 89S52 引脚图8168=128 个点组成,屏上 6416 个显示单元和显示 RAM 区 1024 个字节相对应,每一字节的内容和屏上相应位置的亮暗对应。一个字符由 68 或 88点阵组成,即要找到和屏上某几个位置对应的显示 RA
18、M 区的 8 个字节,并且要使每个字节的不同的位为1,其它的为0,为1的点亮,为0的点暗,这样一来就组成某个字符。但对于内带字符发生器的控制器来说,显示字符就比较简单了,可让控制器工作在文本方式,根据在 LCD 上开始显示的行列号及每行的列数找出显示 RAM 对应的地址,设立光标,在此送上该字符对应的代码即可。3.4.1 1601 使用说明图 3.4.1.1 1601 引脚图表 3.4.1.1 LCD1601 液晶模块的引脚引脚 符号 功能说明1 GND 接地2 Vcc 5V3 VL 驱动 LCD,一般将此脚接地4 RS寄存器选择 0:指令寄存器(WRITE)Busy flag,位址计数器(R
19、EAD) 1:数据寄存器(WRITE,READ)5 R/W READ/WRITE 选择 1:READ 0:WTITE6 E 读写使能(下降沿使能)7 DB0 低 4 位三态、双向数据总线9续表 3.4.1.1 LCD1601 液晶模块的引脚8 DB19 DB210 DB311 DB412 DB513 DB614 DB7高 4 位三态、双向数据总线另外 DB7 也是一个 Busy flag寄存器选择,如表所示:表 3.4.1.3 寄存器选择控制线操作RS R/W 操作说明0 0 写入指令寄存器(清除屏幕等)0 1 读 Busy flag(DB7),以及读取位址计数器(DB0DB6)值1 0 写入
20、数据寄存器(显示各字型等)1 1 从数据寄存器读取数据Busy flag(DB7):在此位未被清除为“0”时,LCD 将无法再处理其他指令要求。(1)显示地址:内部地址计数器的计数地址:SB7=0(DB0DB6)第一行00、01、02 等,第二行 40、41、42 等,可配合检测 DB7=1 (RS=0,R/W=1)读取目前显示字的地址,判断是否需要换行。表 3.4.1.4 LCD1601 161 显示字的地址1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1600 01 02 03 04 05 06 07 40 41 42 43 44 45 46 47(2)外部地址:
21、DB7=1,亦即 80H内部计数地址,可以用此方式将字显示在某一位置。LCD 各地址列举如下表:表 3.4.1.5 LCD1601 161 显示字的外部地址161 16 字 1 行 16011 2 3 4 5 6 7 8 9 10 11 12 13 14 15 161080 81 82 83 84 85 86 87 C0 C1 C2 C3 C4 C5 C6 C7表 3.4.1.6 LCD1601 的指令组设置码指 令说 明 RS R/W D7 D6 D5 D4 D3 D2 D1 D0清除显示幕 0 0 0 0 0 0 0 0 0 *光标回到原点 0 0 0 0 0 0 0 0 1 *进入模式设
22、定 0 0 0 0 0 0 0 1 I/D S显示幕 ON/OFF 0 0 0 0 0 0 1 D C B移位 0 0 0 0 0 1 S/C R/L * *功能设定 0 0 0 0 1 DL N F * *字发生器地址设定 0 0 0 1 AGC设置显示地址 0 0 0 1 ADD忙碌标志位 BF 0 0 1 BF显示数据 1 0 写入数据读取数据 1 1 读取数据I/D I/D=1 表示加 1, I/D=0 表示减 1S S=1 表示显示幕 ON S=0 表示 OFFD D=1 表示显示屏幕 ON D=0 表示显示屏幕 OFFC C=1 表示光标 ON C=0 表示光标 OFFB B=1 表示闪烁 ON B=0 表示显示闪烁 OFFS/C S/C=1 表示显示屏幕移位 S/C=0 光标移位R/L R/L=1 表示右移 R/L=0 表示左移DL DL=1 表示 8 位 DL=0 表示 4 位F F=1 表示 510 点矩阵 F=0 表示 57 点矩阵N N=1 表示 2 行显示行 N=0 表示 1 行显示行BF BF=1:内部正在动作 BF=0:可接收指令或数据码3.4.2 液晶显示部分与 89S52 的接口