基于DS18B20--+89C52单片机的数字温度计设计)
摘 要
Design of Digital Thermomer Based on SCM
In daily life and industrial production process, often used in the detection and control of temperature, temperature is the production process and scientific experiments in general and one of the important physical parameter. Traditional thermocouple and temperature components are the second resistor. The thermocouple and thermal resistance are generally measured voltage, and then replaced by the corresponding temperature, these methods are relatively complex, requiring a relatively large number of external hardware support. We use a relatively simple way to measure.
We use the United States following DALLAS Semiconductor DS1820 improved after the introduction of a smart temperature sensor DS18B20 as the detection element, a temperature range of -55 º C ~ 125 º C, up to a maximum resolution of 0.0625 º C. DS18B20 can be directly read out the temperature on the north side, and three-wire system with single-chip connected to a decrease of the external hardware circuit, with low-cost and easy use.
The introduction of a cost-based AT89C52 MCU a temperature measurement circuits, the circuits used DS18B20 high-precision temperature sensor, measuring scope 0 º C~+100 º C, can set the warning limitation, the use of seven segments LED that can be display the current temperature. The paper focuses on providing a software and hardware system components circuit, introduced the theory of DS18B20, the functions and applications of AT89C52 .This circuit design innovative, powerful, can be expansionary strong.
Keywords:Temperature measurement DS18B20 AT89C52
- I -
摘 要
目 录
第1章 引言 .......................................................1 1.1课题背景及研究意义 ..............................................1 1.2课题的设计目的 ..................................................1 1.3课题设计主要工作 ................................................2 1.4本文研究内容 ....................................................2 第2章 开发工具Proteus与Keil ......................................3 2.1 Proteus软件简介 ................................................3 2.2 Keil软件简介 ...................................................3 第3章 系统概述 ....................................................5 3.1设计方案 ........................................................5 3.2系统设计原理 ....................................................5 3.3系统组成 ........................................................6 3.4 DS18B20温度传感器与单片机的接口电路 ............................7 第4章 系统硬件设计 ................................................8 4.1 89C52单片机的介绍 ..............................................8 单片机主要特性 .....................................................9 单片机管脚图 ......................................................10 4.2液晶模块简介 ...................................................13 4.3 DS18B20介绍 ...................................................16 温度传感器工作原理 ................................................17 相关介绍 ..........................................................19 第5章 系统软件设计 ...............................................21 5.1主程序设计 .....................................................21 5.2 DS18B20初始化 .................................................22 5.3仿真结果 .......................................................23 结论 ..............................................................26 致谢 ..............................................................27 参考文献 ..........................................................28 附录A 系统整体电路 ...............................................29 附录B 全部程序清单 ................................................30
- II -
第1章 引言
1.1课题背景及研究意义
随着新技术的不断开发与应用,近年来单片机发展十分迅速,一个以微机应用为主的新技术革命浪潮正在蓬勃兴起,单片机的应用已经渗透到电力、冶金、化工、建材、机械、食品、石油等各个行业。传统的温度采集方法不仅费时费力,而且精度差,单片机的出现使得温度的采集和数据处理问题能够得到很好的解决。温度是工业对象中的一个重要的被控参数。然而所采用的测温元件和测量方法也不相同;产品的工艺不同,控制温度的精度也不相同。因此对数据采集的精度和采用的控制方法也不相同。
温度控制系统在国内各行各业的应用虽然已经十分广泛,但从国内生产的温度控制器来讲,总体发展水平仍然不高,同日本、美国、德国等先进国家相比,仍然有着较大的差距。
本设计使用单片机作为核心进行控制。单片机具有集成度高,通用性好,功能强,特别是体积小,重量轻,耗能低,可靠性高,抗干扰能力强和使用方便等
独特优点,在数字、智能化方面有广泛的用途。
1.2课题设计目的
1. 巩固、加深和扩大单片机应用的知识面,提高综合及灵活运用所学知识解决工业控制的能力。
2. 培养针对课题需要,选择和查阅有关手册、图表及文献资料的自学能力,提高组成系统、编程、调试的动手能力。
3. 通过对课题设计方案的分析、选择、比较、熟悉单片机用系统开发、研制的过程,软硬件设计的方法、内容及步骤
电子科技大学成都学院课程设计
1.3课题设计主要工作
本课题的研究重点是设计一种基于单片机的数字温度计控制系统。利用数字温度传感器DS18B20,此传感器课读取被测量温度值,进行转换。
主要工作如下:
1. 温度测试基本范围0℃—100℃。 2. 精度误差小于1℃。 3. LED液晶显示。
4. 可以设定温度的上下限报警功能。 5. 实现报警提示。
1.4本文研究内容
数字温度计采用温度敏感元件也就是温度传感器(如铂电阻,热电偶,半导体,热敏电阻等),将温度的变化转换成电信号的变化,如电压和电流的变化,温度变化和电信号的变化有一定的关系,如线性关系,一定的曲线关系等,这个电信号可以使用模数转换的电路即A/D转换电路将模拟信号转换为数字信号,数字信号再送给处理单元,如单片机或者PC机等,处理单元经过内部的软件计算将这个数字信号和温度联系起来,成为可以显示出来的温度数值,如25.0摄氏度,然后通过显示单元,如LED,LCD或者电脑屏幕等显示出来给人观察。这样就完成了数字温度计的基本测温功能。
本文是基于AT89C52单片机,采用数字温度传感器DS18B20,利用DS18B20不需要A/D转换,课直接进行温度采集显示,报警的数字温度计设计。包括传感器数据采集电路,温度显示电路,上下限报警调整电路,单片机主板电路等组成。
- 2 -
第2章 开发工具Proteus与Keil
第2章 开发工具Proteus与Keil
2.1 Proteus软件简介
Proteus软件是英国Labcenter electronics公司出版的EDA工具软件(该软件中国总代理为广州风标电子技术有限公司)。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。
该软件的特点是:
1. 实现了单片机仿真和SPICE电路仿真相结合,具有模拟电路仿真、数字电路仿真、各种单片机(51系列、AVR、PIG等常用的MCU)及其外围电路(如LCD、RAM、ROM、键盘、LED、A/D、D/A……)组成的系统仿真。
2. 提供了多种虚拟仪器。如示波器、逻辑分析仪、信号发生器等,调试非常方便。
3. 提供软件调试功能,同时支持第三方的软件编译和调试环境,如Keil等软件。
4. 具有强大的原理图绘制功能。Proteus与其它单片机仿真软件不同的是,它不仅能仿真单片机CPU的工作情况,也能仿真单片机外围电路或没有单片机参与的其它电路的工作情况。因此在仿真和程序调试时,关心的不再是某些语句执行时单片机寄存器和存储器内容的改变,而是从工程的角度直接看程序运行和电路工作的过程和结果。对于这样的仿真实验.从某种意义上讲,是弥补了.实验和工程应用阉脱节的矛盾和现象。
2.2 Keil软件简介
Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。
- 3 -
电子科技大学成都学院课程设计
另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。Keil C51软件是一个基于32位Windows环境的应用程序,支持C语言和汇编语言编程,其6.0以上的版本将编译和仿真软件统一为μVision(通常称为μV2)。Keil提供包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,由以下几部分组成:μVision IDE集成开发环境C51编译器、A51汇编器、LIB51库管理器、BL51连接/定位器、OH51目标文件生成器以及 Monitor-51、RTX51实时操作系统。
- 4 -
第3章 系统概述
第3章 系统概述
3.1设计方案
采用数字温度芯片DS18B20 测量温度,输出信号全数字化。便于单片机处理及控制,省去传统的测温方法的很多外围电路。且该芯片的物理化学性很稳定,它能用做工业测温元件,此元件线形较好。在0—100 摄氏度时,最大线形偏差小于1 摄氏度。DS18B20 的最大特点之一采用了单总线的数据传输,由数字温度计DS18B20和微控制器AT89C52构成的温度测量装置,它直接输出温度的数字信号,可直接与计算机连接。这样,测温系统的结构就比较简单,体积也不大。采用51 单片机控制,软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制,而且体积小,硬件实现简单,安装方便。既可以单独对多DS18B20控制工作,还可以与PC 机通信上传数据,另外AT89C52 在工业控制上也有着广泛的应用,编程技术及外围功能电路的配合使用都很成熟。
该系统利用AT89C52芯片控制温度传感器DS18B20进行实时温度检测并显示,能够实现快速测量环境温度,并可以根据需要设定上下限报警温度。该系统扩展性非常强,它可以在设计中加入时钟芯片DS1302以获取时间数据,在数据处理同时显示时间,并可以利用AT24C16芯片作为存储器件,以此来对某些时间点的温度数据进行存储,利用键盘来进行调时和温度查询,获得的数据可以通过MAX232芯片与计算机的RS232接口进行串口通信,方便的采集和整理时间温度数据。
3.2系统设计原理
利用温度传感器DS18B20可以直接读取被测温度值,进行转换的特性,模拟温度值经过DS18B20处理后转换为数字值,然后送到单片机中进行数据处理,并与设置的温度报警限比较,超过限度后通过扬声器报警。同时处理后的数据送到LED中显示。
- 5 -
电子科技大学成都学院课程设计
3.3系统组成
本课题以是89C52单片机为核心设计的一种数字温度控制系统,系统整体硬件电路包括,传感器数据采集电路,温度显示电路,上下限报警调整电路,单片机主板电路等组成。
系统框图主要由主控制器、单片机复位、报警按键设置、时钟振荡、LED显示、温度传感器组成。
系统框图如图3-1所示。
单片机复位LED显示报警按键设置主控制器时钟振荡温度传感器
图3-1 系统基本方框图
1. 主控制器
单片机AT89C52具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。
2. 显示电路
显示电路采用LED液晶显示数码管,从P3口RXD,TXD串口输出段码。显示电路是使用的串口显示,这种显示最大的优点就是使用口资源比较少,只用p3口的RXD,和TXD,串口的发送和接收,四只数码管采用74LS164右移寄存器驱动,显示比较清晰。
3. 温度传感器
- 6 -
第3章 系统概述
温度传感器采用美国DALLAS半导体公司生产的DS18B20温度传感器。DS18B20输出信号全数字化。便于单片机处理及控制,在0—100 摄氏度时,最大线形偏差小于1 摄氏度,采用单总线的数据传输,可直接与计算机连接。
用AT89C52芯片控制温度传感器DS18B20进行实时温度检测并显示,能够实现快速测量环境温度,并可以根据需要设定上下限报警温度。获得的数据可以通过MAX232芯片与计算机的RS232接口进行串口通信,方便的采集和整理时间温度数据。
3.4 DS18B20温度传感器与单片机的接口电路
DS18B20可以采用两种方式供电,一种是采用电源供电方式,此时DS18B20的1脚接地,2脚作为信号线,3脚接电源。另一种是寄生电源供电方式,如图3-2 所示单片机端口接单线总线,为保证在有效的DS18B20时钟周期内提供足够的电流,可用一个MOSFET管来完成对总线的上拉。
当DS18B20处于写存储器操作和温度A/D转换操作时,总线上必须有强的上拉,上拉开启时间最大为10us。采用寄生电源供电方式时VDD端接地。由于单线制只有一根线,因此发送接口必须是三态的。
图3-2 DS18B20与单片机的接口电路
- 7 -
电子科技大学成都学院课程设计
第4章 系统硬件设计
4.1 89C52单片机的介绍
89C52单片机最初是由Intel 公司开发设计的,但后来Intel 公司把51 核的设计方案卖给了几家大的电子设计生产商,譬如 SST、Philip、Atmel 等大公司。如是市面上出现了各式各样的但均以51 为内核的单片机,倒是Intel 公司自己的单片机却显得逊色了。这些各大电子生产商推出的单片机都兼容51 指令、并在51 的基础上扩展一些功能而内部结构是与51 一致的。
89C52有40个引脚,4个8位并行I/O口,1个全双工异步串行口,同时内含5个中断源,2个优先级,2个16位定时/计数器。89C52的存储器系统由4K的程序存储器(掩膜ROM),和128B的数据存储器(RAM)组成。
89C52单片机的基本组成框图见图4-1。
XTAL2时钟电路XTAL1RAM128BSFR 21个定时个/计数器2VccCPUROM/EPROM/Flash 4KB总线控制中断系统5个中断源2个优先级串行口全双工1个4个并行口VssRSTEAPSENALEP0P1P2P3
图4-1 89C52单片机结构
由图4-1可见,8051单片机主要由以下几部分组成: 1. cpu系统
- 8 -
第4章 系统硬件设计
8位cpu,含布尔处理器; 时钟电路; 总线控制逻辑。 2. 存储器系统
4K字节的程序存储器(ROM/EPROM/Flash,可外扩至64KB); 128字节的数据存储器(RAM,可再外扩64KB); 特殊功能寄存器SFR。 3. I/O口和其他功能单元 4个并行I/O口; 2个16位定时计数器; 1个全双工异步串行口;
中断系统(5个中断源,2个优先级)。 89C52单片机主要特性
1. 一个8 位的微处理器(CPU)。
2. 片内数据存储器RAM(128B),用以存放可以读/写的数据,如运算的中间结果、最终结果以及欲显示的数据等,SST89 系列单片机最多提供1K 的RAM。
3. 片内程序存储器ROM(4KB),用以存放程序、一些原始数据和表格。但也有一些单片机内部不带ROM/EPROM,如8031,8032,80C31 等。目前单片机的发展趋势是将RAM 和ROM 都集成在单片机里面,这样既方便了用户进行设计又提高了系统的抗干扰性。SST 公司推出的89 系列单片机分别集成了16K、32K、64K Flash 存储器,可供用户根据需要选用。
4. 四个8 位并行I/O 接口P0~P3,每个口既可以用作输入,也可以用作输出。
5. 两个定时器/计数器,每个定时器/计数器都可以设置成计数方式,用
- 9 -
电子科技大学成都学院课程设计
以对外部事件进行计数,也可以设置成定时方式,并可以根据计数或定时的结果实现计算机控制。为方便设计串行通信,目前的52 系列单片机都会提供3 个16 位定时器/计数器。
6. 五个中断源的中断控制系统。现在新推出的单片机都不只5 个中断源,例如SST89E58RD 就有9 个中断源。
7. 一个全双工UART(通用异步接收发送器)的串行I/O 口,用于实现单片机之间或单机与微机之间的串行通信。
8. 片内振荡器和时钟产生电路,但石英晶体和微调电容需要外接。最高允许振荡频率为12MHz。SST89V58RD 最高允许振荡频率达40MHz,因而大大的提高了指令的执行速度。 89C52单片机管脚图
图4-2 89C52单片机管脚图
部分引脚说明:
- 10 -
第4章 系统硬件设计
1. 时钟电路引脚XTAL1 和XTAL2:
XTAL2(18 脚):接外部晶体和微调电容的一端;在8051 片内它是振荡电路反相放大器的输出端,振荡电路的频率就是晶体固有频率。若需采用外部时钟电路时,该引脚输入外部时钟脉冲。
要检查8051/8031 的振荡电路是否正常工作,可用示波器查看XTAL2 端是否有脉冲信号输出。
XTAL1(19 脚):接外部晶体和微调电容的另一端;在片内它是振荡电路反相放大器的输入端。在采用外部时钟时,该引脚必须接地。
1. 控制信号引脚RST,ALE,PSEN 和EA:
RST/VPD(9 脚):RST是复位信号输入端,高电平有效。当此输入端保持备用电源的输入端。当主电源Vcc 发生故障,降低到低电平规定值时,将+5V 电源自动两个机器周期(24个时钟振荡周期)的高电平时,就可以完成复位操作。RST 引脚的第二功能是VPD,即接入RST 端,为RAM 提供备用电源,以保证存储在RAM 中的信息不丢失,从而合复位后能继续正常运行。
ALE/PROG(30 脚):地址锁存允许信号端。当8051 上电正常工作后,ALE 引脚不断向外输出正脉冲信号,此频率为振荡器频率fOSC 的1/6。CPU 访问片外存储器时,ALE 输出信号作为锁存低8 位地址的控制信号。
平时不访问片外存储器时,ALE 端也以振荡频率的1/6 固定输出正脉冲,因而ALE 信号可以用作对外输出时钟或定时信号。如果想确定8051/8031 芯片的好坏,可用示波器查看ALE端是否有脉冲信号输出。如有脉冲信号输出,则8051/8031 基本上是好的。
ALE 端的负载驱动能力为8 个LS 型TTL(低功耗甚高速TTL)负载。 此引脚的第二功能PROG 在对片内带有4KB EPROM 的8751 编程写入(固化程序)时,作为编程脉冲输入端。
PSEN(29 脚):程序存储允许输出信号端。在访问片外程序存储器时,此端定时输出负脉冲作为读片外存储器的选通信号。此引肢接EPROM 的OE 端(见后面几章任何一个小系统硬件图)。PSEN 端有效,即允许读出EPROM/ROM 中的
- 11 -
第4章 系统硬件设计
指
- 11 -
电子科技大学成都学院课程设计
令码。PSEN 端同样可驱动8 个LS 型TTL 负载。要检查一个8051/8031 小系统上电后CPU 能否正常到EPROM/ROM 中读取指令码,也可用示波器看PSEN 端有无脉冲输出。如有则说明基本上工作正常。
EA/Vpp(31 脚):外部程序存储器地址允许输入端/固化编程电压输入端。当EA 引脚接高电平时,CPU只访问片内EPROM/ROM并执行内部程序存储器中的指令,但当PC(程序计数器)的值超过0FFFH(对8751/8051 为4K)时,将自动转去执行片外程序存储器内的程序。当输入信号EA 引脚接低电平(接地)时,CPU 只访问外部EPROM/ROM 并执行外部程序存储器中的指令,而不管是否有片内程序存储器。对于无片内ROM 的8031 或8032,需外扩EPROM,此时必须将EA 引脚接地。此引脚的第二功能是Vpp 是对8751 片内EPROM固化编程时,作为施加较高编程电压(一般12V~21V)的输入端。
3. 输入/输出端口P0/P1/P2/P3:
P0口(P0.0~P0.7,39~32 脚):P0口是一个漏极开路的8 位准双向I/O口。作为漏极开路的输出端口,每位能驱动8 个LS 型TTL 负载。当P0 口作为输入口使用时,应先向口锁存器(地址80H)写入全1,此时P0 口的全部引脚浮空,可作为高阻抗输入。作输入口使用时要先写1,这就是准双向口的含义。在CPU 访问片外存储器时,P0口分时提供低8 位地址和8 位数据的复用总线。在此期间,P0口内部上拉电阻有效。
P1口(P1.0~P1.7,1~8 脚):P1口是一个带内部上拉电阻的8 位准双向I/O口。P1口每位能驱动4 个LS 型TTL 负载。在P1口作为输入口使用时,应先向P1口锁存地址(90H)写入全1,此时P1口引脚由内部上拉电阻拉成高电平。
P2口(P2.0~P2.7,21~28 脚):P2口是一个带内部上拉电阻的8 位准双向I/O口。P口每位能驱动4个LS 型TTL 负载。在访问片外EPROM/RAM 时,它输出高8 位地址。
P3口(P3.0~P3.7,10~17 脚):P3口是一个带内部上拉电阻的8 位准双向I/O口。P3口每位能驱动4个LS型TTL负载。P3口与其它I/O 端口有很大的区别,它的每个引脚都有第二功能,如下:
P3.0:(RXD)串行数据接收。
- 12 -
第4章 系统硬件设计
P3.1:(RXD)串行数据发送。 P3.2:(INT0#)外部中断0输入。 P3.3:(INT1#)外部中断1输入。
P3.4:(T0)定时/计数器0的外部计数输入。 P3.5:(T1)定时/计数器1的外部计数输入。 P3.6:(WR#)外部数据存储器写选通。 P3.7:(RD#)外部数据存储器读选通。
4.2液晶模块简介
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液晶模块的引脚图如图4-3所示。
- 13 -
电子科技大学成都学院课程设计
图4-3 1601引脚图
LM016L引脚介绍: Vss(1脚):一般接地。 Vdd(2脚):接电源。
Vee(3脚):液晶显示器对比度调整端,接电源时对比度最弱,接地时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。
RS(4脚):RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。
R/W(5脚):R/W为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。
E(6脚):E(或EN)端为使能(enable)端,下降沿使能。 DB0(7脚):底4位三态、 双向数据总线 0位(最低位)。 DB1(8脚):底4位三态、 双向数据总线 1位。 DB2(9脚):底4位三态、 双向数据总线 2位。 DB3(10脚):底4位三态、 双向数据总线 3位。 DB4(11脚):高4位三态、 双向数据总线 4位。 DB5(12脚):高4位三态、 双向数据总线 5位。
- 14 -
第4章 系统硬件设计
DB6(13脚):高4位三态、 双向数据总线 6位。
DB7(14脚):高4位三态、 双向数据总线 7位(最高位)(也是busy flang)。 寄存器选择控制如表4-1。
RS 0 0 1 1 表4-1寄存器选择控制 R/W 操作说明 0 写入指令寄存器(清除屏等) 1 读busy flag(DB7),以及读取位址计数器(DB0~DB6)值 0 写入数据寄存器(显示各字型等) 1 从数据寄存器读取数据 如图4-4所示。用89C51的P2口作为数据线,用P3.2、P3.1、P3.0分别作为LCD的E、R/W、RS。其中E是下降沿触发的片选信号,R/W是读写信号,RS是寄存器选择信号本模块设计要点如下:显示模块初始化:首先清屏,再设置接口数据位为8位,显示行数为1行,字型为5×7点阵,然后设置为整体显示,取消光标和字体闪烁,最后设置为正向增量方式且不移位。向LCD的显示缓冲区中送字符,程序中采用2个字符数组,一个显示字符,另一个显示电压数据,要显示的字符或数据被送到相应的数组中,完成后再统一显示.首先取一个要显示的字符或数据送到LCD的显示缓冲区,程序延时2.5ms,判断是否够显示的个数,不够则地址加一取下一个要显示的字符或数据。
- 15 -
电子科技大学成都学院课程设计
图4-4 液晶与89C52的接口
4.3 DS18B20介绍
DS18B20引脚如图4-6所示。
图4-6 DS18B20引脚图
DALLAS 最新单线数字温度传感器DS18B20是一种新型的“一线器件”,其体积更小、更适用于多种场合、且适用电压更宽、更经济。DALLAS 半导体公司的数字化温度传感器DS18B20是世界上第一片支持“一线总线”接口的温度传
- 16 -
第4章 系统硬件设计
感器。温度测量范围为-55~+125 摄氏度,可编程为9位~12 位转换精度,测温分辨率可达0.0625摄氏度,分辨率设定参数以及用户设定的报警温度存储在EEPROM 中,掉电后依然保存。被测温度用符号扩展的16位数字量方式串行输出;其工作电源既可以在远端引入,也可以采用寄生电源方式产生;多个DS18B20可以并联到3 根或2 根线上,CPU只需一根端口线就能与诸多DS18B20 通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。
温度传感器工作原理
DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s 减为750ms。 DS18B20测温原理:低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振 随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在-55℃所对应的一个基数值。计数器1对 低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重 新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即 为所测温度。DS18B20功能特点:
1. 采用单总线技术,与单片机通信只需要一根I/O线,在一根线上可以挂接多个DS18B20。
2. 每只DS18B20具有一个独有的,不可修改的64位序列号,根据序列号访问地应的器件。
3. 低压供电,电源范围从3~5V,可以本地供电,也可以直接从数据线上窃取电源(寄生电源方式)。
4. 测温范围为-55℃~+125℃,在-10℃~85℃范围内误差为±0.5℃。 5. 可编辑数据为9~12位,转换12位温度时间为750ms(最大)。
- 17 -
电子科技大学成都学院课程设计
6. 用户可自设定报警上下限温度。
7. 报警搜索命令可识别和寻址哪个器件的温度超出预定值。 8. DS18B20的分辩率由用户通过EEPROM设置为9~12位。
9. DS18B20可将检测到温度值直接转化为数字量,并通过串行通信的方式与主控制器进行数据通信。
DS18B20有4个主要的数据部件:
1. 光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。64位光刻ROM的排列是:开始8位 (28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。光刻ROM的作用 是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。
2. DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以 0.0625℃/LSB形式表达,其中S为符号位。
3. DS18B20温度传感器的存储器 DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的EEPRAM,后者存放高温度和低温度触发器 TH、TL和结构寄存器。
4. 配置寄存器。
DS18B20内部结构及功能:
DS18B20的内部结构如图4-7所示。主要包括:寄生电源,温度传感器,64位ROM和单总线接口,存放中间数据的高速暂存器RAM,用于存储用户设定温度上下限值的TH和TL触发器,存储与控制逻辑,8位循环冗余校验码(CRC)发生器等7部分
- 18 -
第4章 系统硬件设计
存储器与控制逻辑64位ROM和单线接口Vdd温度传感器高温触发器TH高速缓存低温触发器TL配置寄存器8位CRC发生器 图4-7 DS18B20内部结构 DS18B20相关介绍
温度的读取:
DS18B20在出厂时以配置为12位,读取温度时共读取16位,所以把后11位的2进制转化为10进制后在乘以0.0625便为所测的温度,还需要判断正负。前5个数字为符号位,当前5位为1时,读取的温度为负数;当前5位为0时,读取的温度为正数。
DS18B20的初始化:
1. 先将数据线置高电平“1”。
2. 延时(该时间要求的不是很严格,但是尽可能的短一点)。 3. 数据线拉到低电平“0”。
4. 延时750微秒(该时间的时间范围可以从480到960微秒)。 5.数据线拉到高电平“1”。
6. 延时等待(如果初始化成功则在15到60毫秒时间之内产生一个由DS18B20所返回的低电平“0”。据该状态可以来确定它的存在,但是应注意不
- 19 -
电子科技大学成都学院课程设计
能无限的进行等待,不然会使程序进入死循环,所以要进行超时控制
7. 若CPU读到了数据线上的低电平“0”后,还要做延时,其延时的时间从发出的高电平算起(第(5)步的时间算起)最少要480微秒。
8.将数据线再次拉高到高电平“1”后结束。 DS18B20的写操作: 1. 数据线先置低电平“0”。 2. 延时确定的时间为15微秒。
3. 按从低位到高位的顺序发送字节(一次只发送一位)。 4. 延时时间为45微秒。 5. 将数据线拉到高电平。
6. 重复上(1)到(6)的操作直到所有的字节全部发送完为止。 7. 最后将数据线拉高。 DS18B20的读操作: 1. 将数据线拉高“1”。 2. 延时2微秒。 3. 将数据线拉低“0”。 4. 延时15微秒。 5. 将数据线拉高“1”。 6. 延时15微秒。
7. 读数据线的状态得到1个状态位,并进行数据处理。 8. 延时30微秒。
- 20 -
第5章 系统软件设计
第5章 系统软件设计
5.1主程序设计
整个系统的功能是由硬件电路配合软件来实现的,当硬件基本定型后,软件的功能也就基本定下来了。从软件的功能不同可分为两大类:一是监控软件(主程序),它是整个控制系统的核心,专门用来协调各执行模块和操作者的关系。二是执行软件(子程序),它是用来完成各种实质性的功能如测量、计算、显示、通讯等。每一个执行软件也就是一个小的功能执行模块。这里将各执行模块一一列出,并为每一个执行模块进行功能定义和接口定义。各执行模块规划好后,就可以规划监控程序了。首先要根据系统的总体功能选择一种最合适的监控程序结构,然后根据实时性的要求,合理地安排监控软件和各执行模块之间地调度关系。主程序流程见图5-1。
- 21 -
电子科技大学成都学院课程设计
开始MCU初始化DS18B20初始化小于某一值大于某一值判定温度是否在设定范围内黄灯亮灯灭绿灯亮显示温度结束
图 5-1 主程序流程图
5.2 DS18B20初始化
18B20初始化流程图见图5-2。
- 22 -
第5章 系统软件设计
开始C51寄存器初始化N18B20存在?Y温度转换命令读取温度温度数据处理温度显示N温度比较超出范围?Y报警
图 5-2 DS18B20初始化流程图
5.3仿真结果
设置温度上限为37度,温度下限为10度。
- 23 -
电子科技大学成都学院课程设计
1.如图5-3所示。此时温度时38度,超出上限温度,黄灯亮,实现报警。
图5-3 仿真1
2.如图5-4所示。此时温度为9度,低于下限温度,绿灯亮,实现报警。
图5-4 仿真2
- 24 -
第5章 系统软件设计
3.如图5-5所示。此时温度为20度,在所设范围内,两灯都没亮,说明温度正常。
图5-5 仿真3
- 25 -
电子科技大学成都学院课程设计
结论
本文介绍了基于89C52单片机的数字温度计控制系统的设计,对整个硬件电路和软件程序设计做了分析,文中介绍了数字温度计的现状及发展,介绍了仿真软件proteus及keil的基本知识,学习了proteus的仿真方法和步骤,介绍了数字温度计的设计方案及原理介绍,加深了52单片机的知识了解,介绍52单片机的结构、特点等。并学习了数字温度传感器DS18B20,设计软件仿真,更直观的反应设计的正确性。本文对其中的一些基本原理也做了简要的概述。其实写完了本篇论文,也仅仅是对数字温度计控制系统做出了一个简单的设计方案,数字温度计科利用在很多领域,在一些人不能直接进入的场所,利用单片机控制的数字温度计,可以设置并控制其中的温度,数字温度计还可以利用在温室中,这样就可以方便的控制温室中的温度,当温度超过所要求的温度时,可发生报警。总之数字温度计利用在很多领域。本课题只是单片机控制数字温度计系统得一种设计方法。
- 26 -
致 谢
致谢
通过这一阶段的努力,我的毕业论文《基于单片机的数字温度计》终于完成了,这意味着大学生活即将结束。在大学阶段,我在学习上和思想上都受益非浅,这除了自身的努力外,与各位老师、同学和朋友的关心、支持和鼓励是分不开的。
在我写本论文的过程中,老师们给我提供了许多资料,并对实践中出现的问题给予耐心的解答,完稿之后在百忙之中仔细阅读,给出修改意见,在此对他们表示感谢。
- 27 -
电子科技大学成都学院课程设计
参考文献
1 杨素行著.模拟电子技术基础(第三版) .北京:
高等教育出版社,2006.
2 康华光著.数字电子技术基础(第五版) .北京:
高等教育出版社,2006.
3 李全利,仲伟峰,徐军著.单片机原理及应用.
北京:清华大学社,2006.
4 何立民著.单片机高级教程.北京:北京航空
航天大学出版社,2000. 5 谭浩强著.C语言程序设计教程(第三版) .北
京:清华大学出版社,2005.
6 马忠梅,籍顺心,张凯等著.单片机的C语言应
用程序设计(第4版) .北京:北京航天航空大学出版社,2007.
7 白驹珩,雷晓平著.单片计算机及其应用.成
都:电子科技大学出版社,1997.
8 谭浩强著.程序设计与开发技术.北京:清华
大学出版社,1991.
9 钟富昭著.8051单片机典型模块设计与应用.
北京:人民邮电出版,2007.
10 于永,戴佳,常江著.51单片机C语言常用模
块与综合系统设计实例精讲.北京:电子工业出版社,2007.
- 28 -
附录A 系统整体电路
附录A 系统整体电路
- 29 -
电子科技大学成都学院课程设计
附录B 全部程序清单
#include #define uchar unsigned char #define uint unsigned int uchar i; sbit lcdrs=P3^0; sbit lcdrw=P3^1; sbit lcden=P3^2; sbit d1=P1^0; sbit d2=P1^1; uchar code t0[]=\"the temperature \"; uchar code t1[]=\" is \"; uchar code wendu[]=\"0123456789\"; //利用一个温度表解决温度显示乱码 sbit DQ = P3^7;//定义ds18B20总线IO //液晶显示模块 void delay(uint z) { uint x,y; for(x=100;x>1;x--) } - 30 - for(y=z;y>1;y--); 附录B 全部程序清单 void write_com(uchar com) { lcdrs=0; P2=com; delay(5); lcden=1; delay(5); lcden=0; } void write_date(uchar date) { lcdrs=1; P2=date; delay(5); lcden=1; delay(5); lcden=0; } void init_lcd() { lcden=0; lcdrw=0; write_com(0x38); - 31 - 电子科技大学成都学院课程设计 write_com(0x01); write_com(0x0c); write_com(0x06); write_com(0x80); for(i=0;i<16;i++) { } write_date(t0[i]); delay(0); write_com(0x80+0x40); for(i=0;i<16;i++) } //温度采集模块 void tmpDelay(int num)//延时函数 { while(num--) ; } void Init_DS18B20()//初始化ds1820 - 32 - { } write_date(t1[i]); delay(0); 附录B 全部程序清单 { unsigned char x=0; DQ = 1; //DQ复位 tmpDelay(8); //稍做延时 DQ = 0; //单片机将DQ拉低 tmpDelay(80); //精确延时 大于 480us DQ = 1; //拉高总线 tmpDelay(14); x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败 tmpDelay(20); } unsigned char ReadOneChar()//读一个字节 { unsigned char i=0; unsigned char dat = 0; for (i=8;i>0;i--) { DQ = 0; // 给脉冲信号 dat>>=1; DQ = 1; // 给脉冲信号 if(DQ) dat|=0x80; tmpDelay(4); - 33 - 电子科技大学成都学院课程设计 } return(dat); } void WriteOneChar(unsigned char dat)//写一个字节 { unsigned char i=0; for (i=8; i>0; i--) { } } unsigned int Readtemp()//读取温度 { unsigned char a=0; unsigned char b=0; unsigned int t=0; float tt=0; Init_DS18B20(); - 34 - DQ = 0; DQ = dat&0x01; tmpDelay(5); DQ = 1; dat>>=1; 附录B 全部程序清单 WriteOneChar(0xCC); // 跳过读序号列号的操作 WriteOneChar(0x44); // 启动温度转换 Init_DS18B20(); WriteOneChar(0xCC); //跳过读序号列号的操作 WriteOneChar(0xBE); //读取温度寄存器 a=ReadOneChar(); //连续读两个字节数据 //读低8位 b=ReadOneChar(); //读高8位 t=b; t<<=8; t=t|a; //两字节合成一个整型变量。 tt=t*0.0625; //得到真实十进制温度值,因为DS18B20可以精确到0.0625度,所以读回数据的最低位代表的是0.0625度 t= tt*10+0.5; //放大十倍,这样做的目的将小数点后第一位也转换为可显示数字,同时进行一个四舍五入操作。 return(t); } void display() { unsigned int num,num1; unsigned int shi,ge,xiaoshu; num=Readtemp(); num1=num/10; if(num1>37) - 35 - 电子科技大学成都学院课程设计 {d1=0;d2=1;delay(500);} if(num1<10) {d1=1;d2=0;delay(500);} else {d1=1;d2=1;} shi=num/100; ge=num/10%10; xiaoshu=num%10; write_com(0x80+0x40+5); write_date(wendu[shi]); write_com(0x80+0x40+6); write_date(wendu[ge]); write_com(0x80+0x40+7); write_date(0x2e); write_com(0x80+0x40+8); write_date(wendu[xiaoshu]); } void main() { - 36 - 附录B 全部程序清单 init_lcd(); while(1) { display(); delay(10); } } - 37 - 因篇幅问题不能全部显示,请点此查看更多更全内容