基于单片机控制数字温度计

更新时间:2024-03-22 04:00:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

数字温度计

1 设计要求

■基本范围-50℃-110℃ ■精度误差小于0.5℃ ■LED数码直读显示

2 扩展功能

■实现语音报数

■可以任意设定温度的上下限报警功能

数字温度计

摘要:随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为一种比较成熟的技术,本文将介绍一种基于单片机控制的数字温度计,本温度计属于多功能温度计,可以设置上下报警温度,当温度不在设置范围内时,可以报警。 关键词:单片机,数字控制,温度计, DS18B20,AT89S51

1 引言

随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。 本设计所介绍的数字温度计与传统的温度计相比,具有读数方便,测温范围广,测温准确,其输出温度采用数字显示,主要用于对测温比较准确的场所,或科研实验室使用,该设计控制器使用单片机AT89S51,测温传感器使用DS18B20,用3位共阳极LED数码管以串口传送数据,实现温度显示,能准确达到以上要求。 2总体设计方案

2.1数字温度计设计方案论证

2.1.1方案一

因为本设计是测温电路,可以使用热敏电阻之类的器件利用其感温效应,在将随被测温度变化的电压或电流采集过来,进行A/D转换后,就可以用单片机进行数据的处理,在显示电路上,就可以将被测温度显示出来,这种设计需要用到A/D转换电路,感温电路比较麻烦。 2.1.2方案二

进而考虑到用温度传感器,在单片机电路设计中,大多都是使用传感器,所以这是非常容易想到的,所以可以采用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行转换,就可以满足设计要求。 从以上两种方案,很容易看出,采用方案二,电路比较简单,软件设计也比较简单,故采用了方案二。

2.2方案二的总体设计框图

温度计电路设计总体设计方框图如图1所示,控制器采用单片机AT89S51,温度传感器采用DS18B20,用3位LED数码管以串口传送数据实现温度显示。

LED单片机复位 主显示 图1 总体设计方框图

2.2.1主控制器

单片机AT89S51具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。 2.2.2 显示电路

显示电路采用3位共阳LED数码管,从P3口RXD,TXD串口输出段码。 2.2.3温度传感器

DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。DS18B20的性能特点如下: ●独特的单线接口仅需要一个端口引脚进行通信;

●多个DS18B20可以并联在惟一的三线上,实现多点组网功能; ●无须外部器件;

●可通过数据线供电,电压范围为3.0~5.5V; ●零待机功耗;

●温度以9或12位数字; ●用户可定义报警设置;

●报警搜索命令识别并标志超过程序限定温度<温度报警条件)的器件;

●负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作; DS18B20采用3脚PR-35封装或8脚SOIC封装,其内部结构框图如图2所示。

存储器与控制逻辑 I/O 图2 DS18B20内部结构 64位ROM的结构开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,

64 最后8位是前面56位的CRC检验码,这也是多个DS18B20可以采用一线进行通信的原因。温度温度传感器 位 报警触发器TH和TL,可通过软件写入户报警上下限。 RODS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的 高温触发器TH M EERAM。高速暂存RAM的结构为8字节的存储器,结构如图3所示。头2个字节包含测得的温度高C 和 信息,第3和第4字节TH和TL的拷贝,是易失的,每次上电复位时被刷新。第5个字节,为配速低温触发器TL 单 置寄存器,它的内容用于确定温度值的数字转换分辨率。DS18B20工作时寄存器中的分辨率转换为缓线 相应精度的温度数值。该字节各位的定义如图3所示。低5位一直为1,TM是工作模式位,用于存 接 设置DS18B20在工作模式还是在测试模式,DS18B20出厂时该位被设置为0,用户要去改动,R1配置寄存器 口 和R0决定温度转换的精度位数,来设置分辨率。 ..温度 LSB 8位CRC发生器 Vdd TMR1R011111温度 MSB .. TH用户字节1 图3 DS18B20字节定义 TL用户字节2 由表1可见,DS18B20温度转换的时间比较长,而且分辨率越高,所配置寄存器 需要的温度数据转换时间越长。因此,在实际应用中要将分辨率和转换保留 时间权衡考虑。 保留 高速暂存RAM的第6、7、8字节保留未用,表现为全逻辑1。第保留 9字节读出前面所有8字节的CRC码,可用来检验数据,从而保证通信CRC 数据的正确性。 当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节。单片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以0.0625℃/LSB形式表示。 当符号位S=0时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位

S=1时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数值。表2是一部分温度值对应的二进制温度数据。 表1 DS18B20温度转换时间表 ...R1R000011011分辨率/位温度最大转向时间/ms993.7510187.51137512750.

DS18B20完成温度转换后,就把测得的温度值与RAM中的TH、TL字节内容作比较。若T>TH

或T<TL,则将该器件内的报警标志位置位,并对主机发出的报警搜索命令作出响应。因此,可用多只DS18B20同时测量温度并进行报警搜索。 在64位ROM的最高有效字节中存储有循环冗余检验码

温度/℃ +125 +85 +25.0625 +10.125 +0.5 0 -0.5 -10.125 -25.0625 -55 二进制表示 0000 0111 1101 0000 0000 0101 0101 0000 0000 0001 1001 0000 0000 0000 1010 0001 0000 0000 0000 0010 0000 0000 0000 1000 1111 1111 1111 0000 1111 1111 0101 1110 1111 1110 0110 1111 1111 1100 1001 0000 十六进制表示 07D0H 0550H 0191H 00A2H 0008H 0000H FFF8H FF5EH FE6FH FC90H 另外,因为DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作按协议进行。操作协议为:初使化DS18B20<发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。 ..VCCDS18B20DS18B20DS18B20单片机.VCC4.7KGNDGNDGND.

图4 DS18B20与单片机的接口电路

2.3 DS18B20温度传感器与单片机的接口电路

DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。另一种是寄生电源供电方式,如图4 所示单片机端口接单线总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉。 当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us。采用寄生电源供电方式时VDD端接地。因为单线制只有一根线,因此发送接口必须是三态的。 2.4 系统整体硬件电路

2.4.1主板电路

系统整体硬件电路包括,传感器数据采集电路,温度显示电路,上下限报警调整电路,单片机主板电路等,如图5 所示。 图5中有三个独立式按键可以分别调整温度计的上下限报警设置,图中蜂鸣器可以在被测温度不在上下限范围内时,发出报警鸣叫声音,同时LED数码管将没有被测温度值显示,这时可以调整报警上下限,从而测出被测的温度值。 图5 中的按健复位电路是上电复位加手动复位,使用比较方便,在程序跑飞时,可以手动复位,这样就不用在重起单片机电源,就可以实现复位。 2.4.2显示电路

显示电路是使用的串口显示,这种显示最大的优点就是使用口资源比较少,只用p3口的RXD,和TXD,串口的发送和接收,四只数码管采用74LS164右移寄存器驱动,显示比较清晰。

图5 单片机主板电路

图6 温度显示电路

3系统软件算法分析

系统程序主要包括主程序,读出温度子程序,温度转换命令子程序,计算温度子程序,显示数据刷新子程序等。

3.1主程序

主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量的当前温度值,温度测量每1s进行一次。这样可以在一秒之内测量一次被测温度,其程序流程见图7所示。

初始化 图7 主程序流程图

发DS18B20复位命令 图8读温度流程图

3.2读出温度子程序 读出温度子程序的主要功能是读出RAM中的9字节,在读出时需进行CRC校验,校验有错时调用显示子程序 发跳过ROM命令 N 1S到? 发读取温度命令

DJNZ R4,RE00 RET

。***************************************** 。 将从DS18B20中读出的温度数据进行转换 。*****************************************

TEMPER_COV: MOV A,#0F0H

ANL A,36H 。 舍去温度低位中小数点 SWAP A MOV 37H,A MOV A,36H

JNB ACC.3,TEMPER_COV1 。 四舍五入去温度值 INC 37H

TEMPER_COV1:

MOV A,35H ANL A,#07H SWAP A ADD A,37H

MOV 37H,A 。 保存变换后的温度数据 LCALL BIN_BCD RET

。***************************************** 。 将16进制的温度数据转换成压缩BCD码 。 38H中放百位,37十位,36个位

。***************************************** BIN_BCD:

MOV 39H,37H MOV A,37H MOV B,#100 DIV AB MOV 38H,A MOV 37H,B XCH A,B MOV B,#10 DIV AB MOV 37H,A MOV 36H,B RET

DISP: SETB RS0 MOV R0, #36H MOV R7, #3

LOOPP:MOV A, @R0 MOV DPTR, #TAB MOVC A, @A+DPTR MOV SBUF, A JNB TI, $ CLR TI INC R0

DJNZ R7, LOOPP CLR RS0 RET

TAB: DB 11H, 0D7H, 32H, 92H, 0D4H, 98H, 18H, 0D1H, 10H, 90H ,0FFH, 070H, 0FEH 。 延时子程序 T12MS: SETB RS1 MOV R7, #18H TM: MOV R6, #0FFH TM6: DJNZ R6, TM6 DJNZ R7, TM CLR RS1 RET

。 开机延时程序 T1S: SETB RS1 MOV R6, #3 LSP:ACALL T12MS DJNZ R6, LSP CLR RS1 RET END

本文来源:https://www.bwwdw.com/article/3ia8.html

Top