|||||||||||
您现在的位置:&&
嵌入式温度控制与显示器的设计与实现
嵌入式温度控制与显示器摘& 要&本文主要是针对生产或生活需要的恒温系统而展开的一系列设计研究。该设计以嵌入式中的单片机STC89C52RC为控制核心,从DS18B20温度检测的数据采集、设定值调整、LED数码管显示电路、报警及输出控制电加热器和电制冷器等几个方面出发,详细研究和设计了基于单片机的温度控制的各个部分内容,设计了单片机及其外围电路,并结合一套经典的程序算法。给出了一套合理的基于单片机的温度控制器软硬件解决方案。关键字 :温度检测 温度显示 DS18B20 单片机 温度控制&&&&&&&&&&&&&&&&&&&&&&&&&Embedded temperature control and displayABSTRACT&This article mainly on production or living needs the system of thermostat and launched a series of design studies. The STC89C52RC single-chip design for the control of the core, from the temperature detection DS18B20 data acquisition, the adjustment settings, LED digital tube display circuit, alarm and output control several aspects, such as electric heater and electric cooler , the detailed study and design based on single the temperature control machine in all parts of the design of the single-chip microcomputer and its peripheral circuits, and procedures combined with a classic algorithm. Given a reasonable temperature controller based on single-chip hardware and software solutions.Key words: Single-chip Computer& Single-chip Displayer &Sensor& Temperature Measurement &&&&&&&&&&&&&&&&&&&&目& 录摘要&IABSTRACT&II1绪论&11.1课题设计背景及意义&11.2行业技术发展趋势&11.3课题设计的主要内容&12系统的总体设计&33系统的主要硬件介绍&43.1单片机介绍&43.1.1单片机概述&43.1.2单片机编程语言介绍&53.1.3系统选择&63.1.4 STC89C52RC引脚功能介绍&93.2温度传感器DS18B20&163.2.1 DS18B20&163.2.2 DS18B20的硬件连接&254温度监控系统的设计&264.1硬件设计&264.1.1温度检测部分&264.1.2 LED数码管显示电路&274.1.3单片机及按键电路设计&314.1.4报警电路模块&334.1.5电源模块&344.1.6加热及制冷处理模块&354.2 软件系统设计&424.2.1系统程序流程图&424.2.2单片机软件开发语言&434.2.3 DS18B20驱动程序&444.2.4系统的程序源代码&545温度监控系统设计的硬件成果及测试结果、分析&625.1模块硬件概论&625.1.1温度采集模块和报警电路模块&625.1.2温度显示模块&635.1.3键盘调整模块&635.1.4电源模块&645.1.5加热及制冷处理模块&655.1.6整体硬件系统&655.2系统测试结果、分析&666结论与展望&686.1结论&686.2展望&68参考文献&70附录&71谢辞&731& 绪论 1.1课题设计背景及意义嵌入式在电子产品中的应用已经越来越广泛,并且在很多电子产品中也将其用到温度控制和温度检测、显示。基于单片机的温度监控系统较传统的温度控制系统具有更高的智能性,并且系统的功能更加易于扩展和升级,是一种低成本的温度控制、检测方案。采用单片机来对温度进行控制,不仅具有控制方便、组态简单和灵活性大等优点,而且可以大幅度提高被控温度的技术指标,从而能够大大提高产品的质量和数量。因此单片机对温度的控制问题是一个工业生产中经常会遇到的问题。本次设计采用MCS-51系列单片机与各种外围电路构成单片机温度自动检测和控制系统,实现对温度的实时检测、控制和显示。通过本次设计掌握温度检测控制系统的硬件设计方法和软件编写方法。熟悉Protel软件的使用方法,熟悉PCB板的制作。通过课题的研究进一步巩固所学的知识,同时学习课程以外的相关知识,培养综合应用知识的能力。锻炼动手能力与实际工作能力,将所学的理论与实践结合起来。&1.2 行业技术发展趋势近年来,在温度检测技术领域中,多种新的检测原理与技术的开发应用己取得了具有实用性的重大进展。新一代温度检测元件正在不断出现和完善化,主要包括以下几种。(1)晶体管温度检测元件(2)集成电路温度检测元件(3)核磁共振温度检测器(4)热噪声温度检测器(5)石英晶体温度检测器(6)光纤温度检测器(7)激光温度检测器。目前国内外的温度控制方式越来越趋向于智能化,温度测量首先是由温度传感器来实现的。测温仪器由温度传感器和信号处理两部分组成。温度测量的过程就是通过温度传感器将被测对象的温度值转换成电的或其它形式的信号,传递给信号处理电路进行信号处理转换成温度值显示出来。温度传感器随着温度变化而引起变化的物理参数有: 膨胀、电阻、电容、热电动势,磁性能、频率、光学特性及热噪声等等。随着生产的发展,新型温度传感器还会不断出现,目前,国内外通用的温度传感器及测温仪大致有以下几种: 热膨胀式温度计、电阻温度计、热电偶、辐射式测温仪表、石英温度传感器测温仪。&1.3 课题设计的主要内容该设计是以单片机STC89C52RC为控制核心,从DS18B20温度检测的数据采集、设定值调整、LED数码管显示电路、报警及输出控制电加热器及制冷等几个方面出发,详细研究和设计了基于单片机的温度控制的各个部分内容,设计了单片机及其外围电路,并结合一套经典的程序算法。在一些温控系统电路中,广泛采用的是通过热电偶、热电阻或PN结测温电路经过相应的信号调理电路,转换成A/D转换器能接收的模拟量,再经过采样/保持电路进行A/D转换,最终送入单片机及其相应的外围电路,完成监控。但是由于传统的信号调理电路实现复杂、易受干扰、不易控制且精度不高。本文介绍单片机结合DS18B20环境温度控制器设计,本系统用一种新型的可编程温度传感器(DS18B20),不需复杂的信号调理电路和A/D转换电路能直接与单片机完成数据采集和处理,实现方便、精度高,可根据不同需要用于各种场合。&&& 本次设计主要是对加热和制冷设备的温度控制,其主要任务如下:用单片机对温度进行实时检测、显示和控制,以解决日常生活中及工业对温度的显示及控制问题。其温度显示为&-XXC&,精度为&0.50℃ ,测温范围-55℃~+125℃,采用LED显示,不单符合家庭使用更适合工业的使用。2& 系统的总体设计嵌入式单片机的温度控制系统需要完成温度的检测并可以通过按键设定调整最高温度和最低温度值、能够显示当前温度值、最高设定温度和最低设定温度值,同时要实现当温度超过设定上限温度时,启动制冷器件降温,温度超过设定最高温度时报警;当温度低于设定下限温度时,启动电热器件加热,温度低于设定最低温度时报警等功能。需要系统包括单片机最小系统电路和按键电路、LED显示电路、温度检测部分、报警和控制输出等主要部分,系统地总体设计如下图所示:&
&&&&&&&图2-1 &系统整体设计框图&3 &系统的主要硬件介绍 3.1 单片机介绍 3.1.1单片机概述单片微机(Single-Chip Microcomputer)简称单片机,通常统称微控制器(Micro-Controller 简写&C)或微型处理部件(Micro Controller Unit 简写MCU)。一般的说,单片机就是在一块硅片上集成CPU、RAM、ROM、定时器/计数器、和多种I/O的完整的数字处理系统。二十世纪,微电子、IC集成电路行业发展迅速,其中单片机行业的发展最引人注目。单片机功能强、价格便宜、使用灵活,在计算机应用领域中发挥着极其重要的作用。从INTEL公司于1971年生产第一颗单片机Intel-4004开始,开创了电子应用的&智能化&新时代。单片机以其高性价比和灵活性,牢固树立了其在嵌入式微控制系统中的&霸主&地位,在PC机以286、386、Pentium、PⅢ高速更新换代的同时,单片机却&始终如一&保持旺盛的生命力。例如,MCS-51系列单片机已有十多年的生命期,如今仍保持着上升的态势就充分证明了这一点。&1.单片机的结构与组成目前,单片机的系统结构有两种类型:一种是将程序和数据存储器分开使用,即哈佛(Harvard)结构,当前的单片机大都是这种结构。另一种是采用和PC机的冯.诺依曼(Von Neumann)类似的原理,对程序和数据存储器不作逻辑上的区分,用来存放用户程序,可分为EEPROM、OTP、ROM和FLASH等类。EEPROM型内存编程后其内容可用紫外线擦除,用户可反复使用,故特别适用于开发过程,但EEPROM型单片机价格很高。具有ROM型(掩膜型)内存的单片机价格最低,它适用于大批量生产。由于ROM型单片机的代码只能由生产厂商在制造芯片时写入,故用户要更改程序代码就十分不便,在产品未成熟时选用ROM型单片机风险较高。OTP型(一次可编程)单片机介于EEPROM和ROM型单片机之间,它允许用户自己对其编程,但只能写入一次。OTP型单片机生产多少完全可由用户自己掌握,不存在ROM型有最小起订量和掩膜费问题,另外,该类单片机价格已同掩膜型十分接近,故特别受中小批量客户的欢迎。Flash型(闪速型)单片机允许用户使用编程工具或在线快速修改程序代码,且可反复使用,故一推出就受到广大用户的欢迎。Flash型单片机,即可用于开发过程,也可用于批量生产,随着制造工艺的改进,Flash型单片机价格不断下降,使用越来越普遍,它已是现代单片机的发展趋势。 随机内存(RAM):用来存放程序运行时的工作变量和数据,由于RAM的制作工艺复杂,价格比ROM高得多,所以单片机的内部RAM非常宝贵,通常仅有几十到几百个字节。RAM的内容是易失性(也有的称易挥发性)的,掉电后会丢失。最近出现了EEPROM或FLASH型的数据存储器,方便用户存放不经常改变的数据及其它重要信息。单片机通常还有特殊寄存器和通用寄存器,它们是单片机中存取速度最快的内存,但通常存储空间很小。&2.中央处理器(CPU)是单片机的核心单元,通常由算术逻辑运算部件ALU和控制部件构成。CPU就像人的大脑一样,决定了单片机的运算能力和处理速度。 并行输入/输出(I/O)口:通常为独立的双向口,任何口既可以用作输入方式,又可以作输出方式,通过软件编程来设定。现代的单片机的I/O口也有不同的功能,有的内部具有上拉或下拉电阻,有的是漏极开路输出,有的能提供足够的电流可以直接驱动外部设备。I/O是单片机的重要资源,也是衡量单片机功能的重要指针之一。串口输入/输出口:用于单片机和串行设备或其它单片机的通信。串行通信有同步和异步之分,这可以用硬件或通用串行收发器件来实现。不同的单片机可能提供不同标准的串行通信接口,如UART、SPI、 、Micro Wire等。&3.定时器/计数器(T/C)单片机内部用于精确定时或对外部事件(输入信号如脉冲)进行计数,有的单片机内部有多个定时/计数器。&4.系统时钟通常需要外接石英晶体或其它振荡源来提供时钟信号输入,也有的使用内部RC振荡器。以上是单片机的基本构成,现代的单片机又加入了许多新的功能部件,如模拟/数字转换器(A/D)、数字/模拟转换器(D/A)、温度传感器、液晶(LCD)驱动电路、电压监控、看门狗(WDT)电路、低压检测(LVD)电路等等。&3.1.2 单片机编程语言介绍对于51系列单片机,现有四种语言支持,即汇编、PL/M,C和BASIC。BASIC通常附在PC机上,是初学编程的第一种语言。一个新变量名定义之后可在程序中作变量使用,非常易学,根据解释的行可以找到错误而不是当程序执行完才能显现出来。BASIC由于逐行解释自然很慢,每一行必须在执行时转换成机器代码,需要花费许多时间不能做到实时性。BASIC为简化使用变量,所有变量都用浮点值。BASIC是用于要求编程简单而对编程效率和运行速度要求不高的场合。PL/M是Intel从8080微处理器开始为其系列产品开发的编程语言。它很像PASCAL,是一种结构化语言,但它使用关键词去定义结构。PL/M编译器好像汇编器一样可产生紧凑代码。PL/M总的来说是&高级汇编语言&,可详细控制着代码的生成。但对51系列,PL/M不支持复杂的算术运算、浮点变量而无丰富的库函数支持。学习PL/M无异于学习一种新语言。C语言是一种源于编写UNIX操作系统的语言,它是一种结构化语言,可产生压缩代码。C语言结构是以括号{ }而不是子和特殊符号的语言。C可以进行许多机器级函数控制而不用汇编语言。与汇编相比,有如下优点:对单片机的指令系统不要求了解,仅要求对51的内存结构有初步了解寄存器分配、不同内存的寻址及数据类型等细节可由 编译器管理程序有规范的结构,可分为不同的函数。这种方式可使程序结构化将可变的选择与特殊操作组合在一起的能力,改善了程序的可读性编程及程序调试时间显著缩短,从而提高效率提供的库包含许多标准子程序,具有较强的数据处理能将已编好程序可容易的植入新程序,因为它具有方便的模块化编程技术 C语言作为一种非常方便的语言而得到广泛的支持,C语言程序本身并不依赖于机器硬件系统,基本上不做修改就可根据单片机不同较快地移植过来。51的汇编语言非常像其它汇编语言。指令系统比第一代微处理器要强一些。51的不同存储区域使得其复杂一些。尽管懂得汇编语言不是你的目的,看懂一些可帮助你了解影响任何语言效率的51特殊规定。例如,懂得汇编语言指令就可以使用在片内RAM作变量的优势,因为片外变量需要几条指令才能设置累加器和数据指针进行存取。要求使用浮点和启用函数时只有具备汇编编程经验才能避免生成庞大的、效率低的程序,这需要考虑简单的算术运算或先算好的查表法。最好的单片机编程者应是由汇编转用C而不是原来用过标准C语言的人。由此来看,单片机有着微处理器所不具备的功能,它可单独地完成现代工业控制所要求的智能化控制功能,这是单片机最大的特征。&3.1.3 系统选择本系统以MCS-51单片机成员中的STC89C52RC为控制核心。STC89C52RC单片机是宏晶科技推出的新一代超强干扰、高速、低功耗的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可选择。STC89C52RC 具有以下标准功能:8k 字节Flash,256 字节RAM,32 位I/O口线,看门狗定时器,2 个数据指针,三个16位定时器/计数器,一个6 向量2 级中断结构,全双工串行口,片内晶振及时钟电路。另外,STC89C52RC 可降至0Hz 静态逻辑操作,支持2 种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。&宏晶科技公司的STC89C52RC单片机,是功能强大、低价位产品,可为您提供许多高性价比的应用场合,它灵活应用于各种控制领域。STC89C52RC的优点:(1)&&& 超强抗干扰:1.&&&&& 高抗静电(ESD保护);2.&&&&& 轻松过2KV/4KV 快速脉冲干扰(EFT测试);3.&&&&& 宽电压,不怕电源抖动;4.&&&&& 宽温度范围, - 40℃~85℃。(2)&&& 三大降低单片机时钟对外部电磁辐射的措施:1.&&&&& 禁止ALE输出;2.&&&&& 如选6时钟/机器周期,外部时钟频率可降一半;3.&&&&& 单片机时钟振荡器增益可设为1/2 gain 。(3)&&& 超低功耗:1.&&&&& 掉电模式:典型功耗 &0.1&A&;2.&&&&& 正常工作模式:典型功耗 4mA-7mA;3.&&&&& 掉电模式可由外部中断唤醒,适用于电池供电系统,如水表、气表、便携设备等。(4)&&& 加密性强。(5)&&& 在系统可编程, 无需编程器, 无需仿真器。(6)&&& 可送STC-ISP下载编程器, 1万片/人/天。(7)&&& 可供应内部集成MAX810 专用复位电路的单片机,只有D 版本才有内部集成专用复位电路,原复位电路可以保留,也可以不用,不用时RESET 脚接1K电阻到地。其引脚结构如图3-1所示。STC89C52RC的特点:1.&&& 增强型6时钟/机器周期,12时钟/机器周期8051CPU。2.&&& 工作电压:5.5V-3.4V(5V单片机)/3.8V-2.0V(3V 单片机)。3.&&& 工作频率范围:0-40MHz,相当于普通MHz.实际工作频率可达48MHz。4.&&& 用户应用程序空间4K/8K/13K/16K/20K/32K/64K字节。5.&&& 片上集成1280字节/512字节RAM。6.&&& 通用I/O 口(32/36个),复位后为: P1/P2/P3/P4 是准双向口/ 弱上拉(普通8051传统I/O口)。a)&&&&& P0 口是开漏输出,作为总线扩展用时,不用加上拉电阻,作为I/O 口用时,需加上拉电阻;b)&&&&& ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器/ 仿真器;c)&&&&& 可通过串口(P3.0/P3.1)直接下载用户程序,8K程序3 秒即可完成一片。7.&&& EEPROM 功能。8.&&& 看门狗。9.&&& 内部集成MAX810专用复位电路(D 版本才有),外部晶体20M以下时,可省外部复位电路。10.共3个16位定时器/计数器,其中定时器0还可以当成2个8位定时器使用。11.外部中断4路,下降沿中断或低电平触发中断,Power Down模式可由外部中断低电平触发中断方式唤醒。12.通用异步串行口(UART),还可用定时器软件实现多个UART。13.工作温度范围:0--75℃/-40--+85℃。14.封装:LQFP-44,PDIP-40,PLCC-44,PQFP-44。其引脚结构如图3-1所示:图3-1& STC89C52RC 引脚结构&其内部结构如图3-2所示:图3-2 &STC89C52RC 内部结构&3.1.4 STC89C52RC引脚功能介绍1.电源引脚Vcc和GNDVcc:电源电压,GND(10脚):接地端。&2.时钟电路引脚XTALl和XTAL2XTAL2(18脚):接外部晶体和微调电容的一端。在内它是振荡电路反相放大器的输出端,振荡电路的频率就是晶体的固有频率。要检查单片机的振荡电路是否正确工作,可用示波器查看XTAL2端是否有脉冲信号输出。XTAL1(19脚):接外部晶体的微调电容的另一端。在片内它是振荡电路反相放大器的输入端。若需采用外部时钟电路时,该引脚输入外部时钟脉冲如图3-3,3-4所示。&&&&
图3-3& STC89C52RC单片机晶振接法&&&&&&&&&&&&&& 图3-4& 外部时钟电路
&&&&&&&&&&&3.控制信号引脚RSTRST(9脚)&RST&是复位信号输入端,高电平有效。当此输入端保持两个机器周期(24个时钟振荡周期)的高电平时,可以完成复位操作。&4.I/O(输入/输出)P0、P1、P2和P3标准51单片机,如、STC89C51RC、STC89C52RC等有4个I/O(输入/输出)口,分别为:&P0口:P0口是一个漏极开路的8位双向I/O口。作为漏极八路的输出端口,每次能驱动8个LS型TTL负载。当P0口作为输入口使用时,其先向锁存器(地址80H)写入全1,此时P0口的全部引脚悬空,叫做为高阻抗输入。当访问外部程序和数据存储器时,P0口也被作为低8位地址、数据复用。这种情模式下,P0具有内部上拉电阻。在Flash编程时,P0口也接受指令字节,在编程校验时输出指令字节,程序校验时,也需要外部上拉电阻。本设计利用P0口向数码管输出位和段的数据,使数码管显示温度当前值、最高设定值和最低设定值。&P1口:P1口是一个带上拉电阻的8位准双向I/O端口每一位能驱动(吸收成输出电流)4个LS型TTL负载。对P1端口写&1&时,内部上拉电阻端口拉高,此时可以作为输入口使用。在Flash编程和校验时,P1口接受低8位地址字节。如表3-1&表3-1
T2(定时器/计数器T2的外部计数输入),时钟输出
T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制)
MOSI(在系统编程用)
MISO(在系统编程用)
SCK(在系统编程用)
&本设计利用P1口控制3个发光二极管,当温度传感器检测到得温度高于最高设定值或低于最低设定值,系统就会光报警(P1.0口、P1.1口、P1.3口)。当温度传感器异常时,P1.0点亮LED1;当温度传感器检测到得温度高于最高设定值,P1.1点亮LED2;当温度传感器检测到得温度低于最低设定值,P1.2点亮LED3。P1口并根据采集来的温度高低对电机进行相应的控制(P1.4口控制加热电机、P1.5口控制制冷电机)。&P2口:P2口是一个带内部接上拉电阻的8位准双向埠。P2口的每一位能驱动4个LS型TTL负载。对P2口写&1&时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流在访问外部程序存储器时,P2口送出高八位地址。本设计利用P2.2口来控制和接收温度传感器传来的数据,并利用P2.3口控制蜂鸣器的开和关。&P3口:P3口是一个带内部接上拉电阻的8位准双向埠。P3口的每一位能驱动(吸收或输出电流)4个LS型TTL负载。P3口与其它的I/O埠有很大区别,它除作为&般准双向I/O口外,每个引脚还具有专门的功能,见表3-2。本设计利用P3口来扫描按键和它的第二功能。&表3-2& 端口引脚功能
RXD(串行口输入)
TXD(串行口输出)
INT0(外部中断0输入)
INT1(外部中断1输入)
T0(定时/计数器0的外部输入)
T1(定时/计数器1的外部输入)
WR(外部数据存储器写选通)
RD(外部数据存储器读选通)
&P1口也是一个准双向口,作通用I/O口使用。其电路结构见图3-5。
&&&&&&&&&&&&&5.特殊功能寄存器特殊功能寄存器(SFR)的地址空间如表3-3所示&表3-3 &STC89C52RC特殊寄存器映像及复位值
&&定时器2寄存器: 寄存器T2CON 和T2MOD包含定时器2的控制位和状态位(如表3-4)&表3-4
T2CON地址为0C8H&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 复位值:B
定时器2溢出标志位,必须软件清&0&。 RCLK=1或TCLK=1时,TF2不用置位。
定时器2外部标志位。EXEN2=1时,T2EX上的负跳变而出现捕捉或重载时,EXF2会被硬件置位。定时器2打开,EXF2=1时,将引导CPU执行定时器2中断程序。EXF2必须如见清&0&。在向下/向上技术模式(DCEN=1)下EXF2不能引起中断。
串行口接收数据时钟标志位。若RCLK=1,串行口将使用定时器2溢出脉冲作为串行口工作模式1或3的串口接收时钟:RCLK=0,将使用定时器1计数溢出作为串口接受时钟。
串行口发送数据时钟标志位。若TCLK=1,串行口将使用定时器2溢出脉冲作为串行口工作模式1或3的串口发送时钟:TCLK=0,将使用定时器1计数溢出作为串口发送时钟。
定时器2外部允许标志位。当EXEN2=1时,如果定时器2没有用作串行时钟,T2EX(P1.1)的负跳变见引起定时器2捕捉和重载,若EXEN2=0,定时器2将视T2EX端的信号无效。
开始/停止控制定时器2。TR2=1,定时器2开始工作。
定时器2定时/计数选择标志位。CT2=0时,定时CT2=1,外部事件计数(下降沿触发)
捕捉/重载选择标志位。当EXEN2=1时,CPRL2=1,T2EX出现负脉冲,会引起捕捉操作;当定时器2溢出或EXEN2=1时T2EX出现负跳变,都会出现自动重载操作。CPRL2=0将引起T2EX的负脉冲。当RCKL=1或TCKL=1时,此标志位无效,定时器2溢出时,强制做自动重载操作。
&中断寄存器:各中断允许位在IE寄存器中,六个中断源的两个优先级也可以在IE中设置。双数据指针寄存器:为了更有利于访问内部和外部数据存储器,系统提供了两路16位数据指针寄存器,位于SFR中82H--85H。掉电标志位:掉电标志位(P0F)位于特殊寄存器PCON的第四位,上电期间,POF置&1&。POF可以软件控制。看门狗定时器: WDT是一种需要软件控制的复位方式,WDT有13位计数器和特殊功能寄存器中的看门狗定时器复位存储器构成,WDT在默认情况下无法工作,位了激活WDT,用户必须往WDTRST寄存器中依次写入01EH 和 0E1H,当WDT激活后,晶振工作,WDT在美国机器周期都会增加,WDT计时周期依赖于外部晶振的时钟频率。当WDT溢出,它将驱动RSR引脚一个高个电平输出。定时器0和定时器1:在STC89C52RC中,定时器0和定时器1的操作于STC89C52RC和STC89C51RC一样。定时器2:定时器2是一个16位定时/计数器,它既可以做定时器,也可以做事件计数器,其工作方式由特殊寄存器T2CON中的C/T位选择,由三种工作方式,如表3-5所示。&&表3-5
16位自动重载
波特率发生器
&中断:STC89C52RC有6个中断源:两个外部中断(INT0 和INT1),三个定时中断(定时器0、1、2)和一个串行中断。每个中断源都可以通过置位或清除特殊寄存器IE中的相关中断允许控制位分别使得中断源有效或无效。IE还包括一个中断允许总控制位EA,它能一次禁止所有中断。IE.6位是不可用的。对于STC89C52RC,IE.5 位也是不能用的。用户软件不应 给这些位写1。它们为STC89系列新产品预留。定时器2 可以被寄存器T2CON 中的TF2 和EXF2 的或逻辑触发。程序进入中断服务后,这些标志位都可以由硬件清0。实际上,中断服务程序必须判定是否是TF2或EXF2激活中断,标志位也必须由软件清0。定时器0和定时器1标志位TF0和TF1在计数溢出的那个周期的S5P2被置位。它们的值一直到下一个周期被电路捕捉下来。然而,定时器2的标志位TF2在计数溢出的那个周期的S2P2被置位,在同一个周期被电路捕捉下来。如表3-6所示。&表3-6
(MSB)&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&(LSB)
中断允许控制位=1,允许中断
中断允许控制位=0,禁止中断
中断总允许控制位。EA=0,中断总禁止:EA=1,各中断由各自的控制位设定
定时器2中断允许控制位
串行口中断允许控制位
定时器1中断允许控制位
外部中断1允许控制位
定时器0中断允许控制位
外部中断1允许控制位
3.2 温度传感器DS18B20集成式数字温度传感器DS18B20的出现开辟了温度传感器技术的新领域,它利用单总线的特点可以方便的实现多点温度的测量。而可组网数字温度传感器DS18B20则是DS18B20的更新产品,它在电压、特性及封装方面都更具有优势,给了用户更多的选择,让用户可以更方便的构建适合自己的测温系统。DS18B20充分利用了单总线的独特特点,可以轻松的组建传感器网络,提供系统的抗干扰性,使系统设计更灵活、方便、而且适合于在恶劣的环境下进行现场温度测量。&3.2.1 DS18B201)DS18B20概述(1)&&&&&&&&& 一般说明DS18B20 数字温度计提供9 位温度读数,指示器件的温度。信息经过单线接口送入DS18B20 或从DS18B20 送出因此从中央处理器到DS18B20 仅需连接一条线(和地)。读、写和完成温度变换所需的电源可以由数据线本身提供,而不需要外部电源。因为每一个DS18B20 有唯一的系列号(silicon serial number ),因此多个DS18B20 可以存在于同一条单线总线上。这允许在许多不同的地方放置温度灵敏器件。此特性的应用范围包括HVAC环境控制,建筑物、设备或机械内的温度检测,以及过程监视和控制中的温度检测。(2)& 特性l&&&&&&& 特独特的单线接口,只需1个接口引脚即可通信l&&&&&&& 多点(multidrop)能力使分布式温度检测应用得以简化l&&&&&&& 不需要外部元件l&&&&&&& 可用数据线供电l&&&&&&& 不需备份电源l&&&&&&& 测量范围从-55℃至+125℃增量值为0.5℃等效的华氏温度范围是-67?至257?, 增量值为0.9?l&&&&&&& 以9位数字值方式读出温度l&&&&&&& 在1秒(典型值)内把温度变换为数字l&&&&&&& 用户可定义的,非易失性的温度告警设置l&&&&&&& 告警搜索命令识别和寻址温度在编定的极限之外的器件(温度告警情况)l&&&&&&& 应用范围包括恒温控制,工业系统,消费类产品,温度计或任何热敏系统(3)&&& 引脚排列图3-6 &DS18B20引脚排列&2)详细说明(1)&&& 综述图3-7的方框图表示DS18B20 的主要部。DS18B20 有三个主要的数据部件: = 1 \* GB3 ① 64位激光(lasered)ROM; = 2 \* GB3 ② 温度灵敏元件; = 3 \* GB3 ③ 非易失性温度告警触发器TH 和TL。器件从单线的通信线取得其电源,在信号线为高电平的时间周期内,把能量贮存在内部的电容器中,在单信号线为低电平的时间期内断开此电源,直到信号线变为高电平重新接上寄生(电容)电源为止。作为另一种可供选择的方法,DS18B20也可用外部5V电源供电。&&SHAPE& \* MERGEFORMAT 图3-7& DS18B20 方框图&与DS18B20 的通信经过一个单线接口。在单线接口情况下,在ROM 操作未定建立之前不能使用存贮器和控制操作。主机必须首先提供五种ROM 操作命令之一: = 1 \* GB3 ① Read ROM(读ROM), = 2 \* GB3 ② Match ROM(符合ROM), = 3 \* GB3 ③ Search ROM(搜索ROM), = 4 \* GB3 ④ Skip ROM(跳过ROM),或 = 5 \* GB3 ⑤Alarm Search(告警搜索) 这些命令对每一器件的64位激光ROM部分进行操作。如果在单线上有许多器件,那么可以挑选出一个特定的器件,并给总线上的主机指示存在多少器件及其类型。在成功地执行了ROM 操作序列之后,可使用存贮器和控制操作,然后主机可以提供六种存贮器和控制操作命令之一。一个控制操作命令指示DS18B20 完成温度测量。该测量的结果将放入DS18B20的高速暂存(便笺式)存贮器(Scratchpad memory),通过发出读暂存存储器内容的存储器操作命令可以读出此结果。每一温度告警触发器TH和TL 构成一个字节的EEPROM。如果不对DS18B20 施加告警搜索命令,这些寄存器可用作通用用户存储器。使用存储器操作命令可以写TH 和TL 。对这些寄存器的读访问通过便笺存储器。所有数据均以最低有效位在前的方式被读写。(2)&&& 寄生电源(parasite power)&&& 方框图(图3-7)示出寄生电源电路。当I/O或VDD引脚为高电平时,这个电路便&取&得电源。只要符合指定的定时和电压要求,I/O将提供足够的功率。寄生电源的优点是双重的: = 1 \* GB3 ① 利用此引脚远程温度检测无需本地电源, = 2 \* GB3 ② 缺少正常电源条件下也可以读ROM。为了使DS18B20 能完成准确的温度变换,当温度变换发生时,I/O线上必须提供足够的功率。因为DS18B20 的工作电流高达1mA,5K 的上拉电阻将使I/O线没有足够的驱动能力。如果几个DS18B20在同一条I/O 线上而且企图同时变换,那么这一问题将变得特别尖锐。有两种方法确保DS18B20 在其有效变换期内得到足够的电源电流。第一种方法是发生温度变换时,在I/O线上提供一强的上拉。如图3-8 所示,通过使用一个MOSFET 把I/O 线直接拉到电源可达到这一点。当使用寄生电源方式时VDD 引脚必须连接到地。向DS18B20 供电的另外一种方法是通过使用连接到VDD 引脚的外部电源,如图3-9所示。这种方法的优点是在I/O 线上不要求强的上拉。总线上主机不需向上连接便在温度变换期间使线保持高电平。这就允许在变换时间内其它数据在单线上传送。此外,在单线总线上可以放置任何数目的DS18B20,而且如果它们都使用外部电源,那么通过发出跳过(Skip)ROM命令和接着发出变换(Convert)T命令,可以同时完成温度变换。注意只要外部电源处于工作状态,GND引脚不可悬空。图3-8 &强上拉在温度变换期内向DS18B20供电&在总线上主机不知道总线上DS18B20 是寄生电源供电还是外部VDD供电的情况下,在DS18B20内采取了措施来通知采用的供电方案。总线上主机通过发出跳过(Skip)ROM 的操作约定,然后发出读电源命令,可以决定是否有需要强上拉的DS18B20 在总线上。在此命令发出后,主机接着发出读时间片。如果是寄生供电,DS18B20 将在单线总线上送回&0&:如果由VDD 引脚供电,它将送回&1&。如果主机接收到一个&0&它知道它必须在温度变换期间在I/O 线上供一个强的上拉。&图3-9& 使用VDD 提供温度变换所需电流&(3)&&& 运用--测量温度DS18B20 通过使用在(on-board)温度测量专利技术来测量温度。温度测量电路的方框图见图3-10所示。&&SHAPE& \* MERGEFORMAT 图3-10& 温度测量电路&DS18B20通过门开通期间内低温度系数振荡器经历的时钟周期个数计数来测量温度,而门开通期由高温度系数振荡器决定。计数器予置对应于-55℃的基数,如果在门开通期结束前计数器达到零,那么温度寄存器它也被予置到-55℃的数值将增量,指示温度高于-55℃。同时,计数器用钭率累加器电路所决定的值进行予置。为了对遵循抛物线规律的振荡器温度特性进行补偿,这种电路是必需的。时钟再次使计数器计值至它达到零。如果门开通时间仍未结束,那么此过程再次重复。钭率累加器用于补偿振荡器温度特性的非线性,以产生高分辩率的温度测量。通过改变温度每升高一度,计数器必须经历的计数个数来实行补偿。因此,为了获得所需的分辩率,计数器的数值以及在给定温度处每一摄氏度的计数个数(钭率累加器的值)二者都必须知道。此计算在DS18B20内部完成以提供0.5℃的分辩率。温度读数以16位、符号扩展的二进制补码读数形式提供。表3-7说明输出数据对测量温度的关系。数据在单线接口上串行发送。DS18B20可以以0.5℃的增量值,在0.5℃至+125℃的范围内测量温度对于应用华氏温度的场合必须使用查找表或变换系数。注意,在DS18B20 中,温度是以1/2℃LSB(最低有效位)形式表示时,产生以下9 位格式,如图3-11。图3-11& 温度是以1/2℃LSB形式表示图&最高有效(符号)位被复制到存储器内两字节的温度寄存器中较高MSB 的所有位,这种&符号扩展&产生了如表3-7所示的16位温度读数。以下的过程可以获得较高的分辩率首先读温度并从读得的值截去0.5℃位(最低有效位)。这个值便是TEMP_READ。然后可以读留在计数器内的值。此值是门开通期停止之后计数剩余,公式3-1:(3-1)(COUNT_REMAIN)。 所需的最后一个数值是在该温度处每一摄氏度的计数个数(COUNT_PER_C )于是用户可以使用下式计算实际温度,表3-7。&表3-7 &温度/数据关系
&& 温&& 度
数字输出/(二进制)
安息字输出(十六进制)
&(4)&&& 运用告警信号&&& 在DS18B20 完成温度变换之后,温度值与贮存在TH和TL内的触发值相比较因为这些寄存器仅仅是8位,所以0.5℃位在比较时被忽略。TH 或TL 的最高有较位直接对应于16 位温度寄存器的符号位。如果温度测量的结果高于TH 或低于TL,那么器件内告警标志将置位。每次温度测量更新此标志。只要告警标志置位DS18B20 将对告警搜索命令作出响应。这允许并联连接许多DS18B20,同时进行温度测量。如果某处温度超过极限,那么可以识别出正在告警的器件并立即将其读出而不必读出非告警的器件。(5)&&& 64 位激光ROM&&& 每一DS18B20 包括一个唯一的64 位长的ROM 编码。开始的8位是单线产品系列编码(DS18B20 编码是10h)。接着的48 位是唯一的系列号。最后的8位是开始56 位CRC (见图3-12)。64位ROM 和ROM 操作控制部分允许DS18B20 作为一个单线器件工作并遵循&单线总线系统&一节中所详述的单线协议。直到ROM 操作协议被满足,DS18B20 控制部分的功能是不可访问的。此协议在ROM操作协议流程图(图3-13)中叙述。单线总线主机必须首先操作五种ROM操作命令之一: = 1 \* GB3 ① Read ROM(读ROM), = 2 \* GB3 ② Match ROM(匹配ROM), = 3 \* GB3 ③ Search ROM(搜索ROM), = 4 \* GB3 ④ Skip ROM(跳过ROM),或 = 5 \* GB3 ⑤ Alarm Search(告警搜索)。在成功地执行了ROM 操作序列之后,DS18B20 特定的功能便可访问,然后总线上主机可提供六个存贮器和控制功能命令之一。&
8位CRC编号
48位序列号
8位产品系列编码
MSB&&&&&&&&& LSB&&& MSB&&&&&&&& LSE&&& MSB&&&&&& LSB
(最高有效位)(最低有效位)
图3-12& 64位激光ROM&&&&&&&&&&&&&&&&&&SHAPE& \* MERGEFORMAT 图3-13 &ROM操作流程图&(6)&&& CRC 产生&&& &&DS18B20 有一存贮在64 位ROM 的最高有效字节内的8 位CRC。总线上的主机可以根据64 位ROM 的前56 位计算机CRC 的值并把它与存贮在DS18B20 内的值进行比较以决定ROM 的数据是否已被主机正确地接收。CRC 的等效多项式函数为(公式3-2):& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&(3-2)DS18B20 也利用与上述相同的多项式函数产生一个8 位CRC 值并把此值提供给总线的主机以确认数据字节的传送。在使用CRC 来确认数据传送的每一种情况中,总线主机必须使用上面给出的多项式函数计算CRC 的值并把计算所得的值或者与存贮在DS18B20 的64 位ROM 部分中的8 位CRC值(ROM 读数)或者与DS18B20 中计算得到的8 位CRC值(在读暂存存贮器中时,它作为第九个字节被读出),进行比较。CRC 值的比较和是否继续操作都由总线主机来决定。当存贮在DS18B20 内或由DS18B20计算得到的CRC 值与总线主机产生的值不相符合时,在DS18B20 内没有电路来阻止命令序列的继续执行。总线CRC 可以使用如图3-14所示由一个移位寄存器和&异或&(XOR)门组成的多项式产生器来产生。其它有关Dallas 公司单线循环冗余校验的信息可参见标题为&理解和使用Dallas 半导体公司接触式存贮器产品&的应用注释。移位寄存器的所有位被初始化为零。然后从产品系列编码的最低有效位开始,每次移入一位。当产品系列编码的8 位移入以后,接着移入序列号。在序列号的第48 位进入之后,移位寄存器便包含了CRC 值。移入CRC 的8 位应该使移位寄存器返回至全零。&图3-14& 单线CRC编码&(7)&&& 存贮器DS18B20 的存贮器如图所示那样被组织。存贮器由一个高速暂存(便笺式)RAM 和一个非易失性,电可擦除EERAM 组成,后者存贮高温度和低温度和触发器TH 和TL。暂存存贮器有助于在单线通信时确保数据的完整性。数据首先写入暂存存贮器,在那里它可以被读回。当数据被校验之后,复制暂存存贮器的命令把数据传送到非易失性EERAM。这一过程确保了更改存贮器时数据的完整性。&&&
&&& SCRATCHPAD&&&&&&&&&&&&&& BYTE&&&&&&&&&&&&&&&&& &E2RAM
TEMPERATURE& LSB
TEMPERATURE& MSB
TH/USERBYTE1
& TH/USERBYTE1
& TL/USERBVTE2
& TL/USERBVTE2
& RESERVED
& RESERVED
& COUNT REMAIN
&COUNT PER℃
图3-15 &DS18B20存贮器映象图&暂存存贮器是按8 位字节存储器来组织的。头两个字节包含测得温度信息。第三和第四个字节是TH和TL的易失性拷贝,在每一次上电复位时被刷新。接着的两个字节没有使用,但是在读回时,它们呈现为逻辑全1。3.2.2 DS18B20的硬件连接DS18B20与单片机的接口极其简单,只需将DS18B20的信号线与单片机的一位双向端口相连即可。如图3-16(a)所示。此时应注意将VDD、DQ、GND三线焊接牢固。另外也可用两个端口,即接收口与发送口分开,这样读写操作就分开了,不会出现信号竞争的问题。如图3-16(b)所示。此图是采用寄生电源方式,将DS18B20的VDD和GND接在一起。如若VDD脱开未接好,传感器将只送+85.0℃的温度值。一般测温电缆线采用屏蔽4芯双绞线,其中一对接地线与信号线,另一对接VDD和地线,屏蔽层在源端单点接地。&
图3-16& DS18B20与单片机的接口
4 &温度监控系统的设计 4.1硬件设计基于单片机的温度监控主要有以下几部分:温度检测数据采集部分,LED数码管显示电路、报警及控制输出部分、单片机及按键电路设计等几个部分,下面分别加以介绍,硬件模块如图4-1所示。&&SHAPE \* MERGEFORMAT 图4-1 &硬件模块图&4.1.1 温度检测部分温度传感器有很多种,如热敏电阻,热电偶,PN结,半导体温度传感器等。这里选用单总线数字输出的集成半导体温度传感器DS18B20,其特点:独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯;测温范围-55℃~+125℃,固有测温分辨率0.5℃;支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现多点测温;工作电源:3~5V/DC。温度检测数据采集电路如图4-2所示,由温度传感器DS18B20采集被控对象的实时温度,提供给STC89C52RC的I/O口作为数据输入。在本次设计中我们所控的对象为环境监测的温度。图4-2 &温度传感器电路&4.1.2 LED数码管显示电路显示器分为数码管和液晶显示,我所采用是的数码管显示,其外形和引脚如下图4-3所示:&&&&
图4-3& 数码管外形和引脚图
&&LED数码有共阳和共阴两种,把这些LED发光二极管的正极接到一块(一般是拼成一个8字加一个小数点)而作为一个引脚,就叫共阳机极数码管;相反的,就叫共阴的(如下图4-4所示)那么应用时这个脚就分别的接VCC和GND。再把多个这样的8字装在一起就成了多位的数码管了。&&&&&&
图4-4& 共阴极和共阳极数码管内部电路
&&基于单片机的温度控制及检测系统采用7段数LED码管显示,这里采用2个4位数码管显示温度,三位显示热水的当前温度,第一位显示十位,第二位显示个位和小数点,第三位显示小数点后第一位。还有用四位显示两位设定温度的最高值和两位最低值。8位共阳极数码管采用扫描形式工作,其8个数据为接在单片机灌电流驱动能力最大的PO口,STC89C52RC单片机的P0口的每一个I/O都能能吸收8个TTL逻辑器件的输入漏电流,算下来能驱动约10mA。能驱动数码管的8个数据阴极。数码管驱动方式:数码管要正常显示,就要用驱动电路来驱动数码管的各个段码,从而显示出我们要的数字,因此根据数码管的驱动方式的不同,可以分为静态式和动态式两类。① 静态显示驱动:静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二或十进制译码器译码进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5&8=40根I/O端口来驱动,要知道一个C52单片机可用的I/O端口才32个,实际应用时必须增加译码驱动器进行驱动,增加了硬件电路的复杂性。② 动态显示驱动:数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示,这就是动态驱动。在轮流显示过程中,每位数码管的点亮时间为1~2ms,由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位数码管并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感,动态显示的效果和静态显示是一样的,能够节省大量的I/O端口,而且功耗更低。本系统采用第二种驱动,用74HC573锁存器来辅助控制,仅用一个P0口就能控制8个数码管显示。LED数码管显示电路如图4-5所示。图4-5& 数码管显示电路&74HC573为三态输出的八D 透明锁存器,573 的输出端O0--O7 可直接与总线相连。当三态允许控制端OE为低电平时,O0--O7为正常逻辑状态,可用来驱动负载或总线。当OE为高电平时,O0--O7呈高阻态,即不驱动总线,也不为总线的负载,但锁存器内部的逻辑操作不受影响。当锁存允许端 LE 为高电平时,O 随数据D而变。当LE为低电平时,O被锁存在已建立的数据电平。当 LE 端施密特触发器的输入滞后作用,使交流和直流噪声抗扰度被改善400mV。引出端符号:l&&&&&&& ?& D0~D7为数据输入端l&&&&&&& ?& OE为三态允许控制端(低电平有效)l&&&&&&& ?& LE为锁存允许端l&&&&&&& ?& O0--O7为输出端外部管腿图:&图4-6& 74HC573外部管脚图&逻辑图:&图4-7& 74HC573逻辑图&真值表:表4-1& 74HC573真值表
&& &&OUTPUT
OE &&&LE&&&& D
L&&&& H&&&&& H
L&&&& H &&&&&L
L&&&& L&&&&& X
H&&&& X&&&&& X
&单片机先对74HC573A进行位选:先锁存,然后发送数据,再开锁存,最后锁存。这样我们就可以对数码管的位进行选定。单片机再对74HC573B进行段选:先锁存,然后发送数据,再开锁存,最后锁存。这样我们就可以对数码管的段进行选定。接着我再采用动态显示驱动,间断的选位和选段。4.1.3单片机及按键电路设计&图4-8为单片机及按键、复位电路的电路图,单片机STC89C52RC的时钟引脚外接11.0592M晶振,作为单片机工作的时钟,EA端接高电平,表示使用片内程序存储器。RST引脚接了上电复位电路,当系统上电时,上电复位电路会产生一个高电平脉冲信号,使系统复位。&图4-8 &按键、复位电路图键盘是标准的输入设备,实现键盘有两种方案:一是采用现有的一些芯片实现键盘扫描,如8279, CH451, LMC9768等,还有就是用软件实现键盘扫描。使用现成的芯片可以节省CPU的开销,但增加了成本,而用软件实现具有较强的灵活性,也只需要很少的CPU开销,可以节省开发成本。本文便使用软件实现键盘的扫描。常见的键盘可分为独立按键式键盘和行列扫描式键盘。独立按键式键盘应用在需要少量按键的情况,按键和单片机的I/O口线直接连接。而行列扫描式键盘用在按键需求较多的情形下。考虑到环境的控制器需要高限加、高限减、低限加、低限减等按键 ,所以采用行列扫描式键盘。理论上当按键按下或弹起时,可以相应的产生低电平或高电平,但实际并非如此。键盘按键一般都采用触点式按键开关。当按键被按下或释放时,按键触点的弹性会产生抖动现象。即当按键按下时,触点不会迅速可靠地接通,当按键释放时,触点也不会立即断开,而是要经过一段时间的抖动才能稳定下来,按键材料不同,抖动时间也各不相同。&图4-9 &按键抖动示意图&一次完整的按键过程,包含以下几个阶段:如图4-9所示。1) 等待阶段:此时按键尚未按下,处于空闲阶段;2) 闭合抖动阶段:此时键刚刚按下,但信号处于抖动状态,系统在检测时应消抖延时,约5ms到20ms;3) 有效闭合阶段:此时抖动己经结束,一个有效按键动作己经产生,系统应该在此时执行按键功能,或将按键编码记录下来,待键弹起时再执行其功能;4) 释放抖动阶段:许多时候编程人员并不在此时消抖延时,但最好也执行一次消抖延时,以防止误操作;5) 有效释放阶段:若设计要求在按键抬起时才执行功能,则应当在此时进行按键功能的处理。软件上对闭合阶段的抖动一般采取延时再次确认按键是否按下的方式消除抖动。如上图4-8所示,完成系统的最高温度和最低温度的高低调整的按键分别接到单片机的P3.0--P3.7口上,供单片机来回扫描查询,当没有按键按下时,单片机I/O P3.4&P3.7口输入高电平,当有按键按下时,对应的单片机端口变为低电平,单片机通过检测这种电平的变化确定按键的状态。4.1.4报警电路模块报警电路主要是由蜂鸣器和发光二极管组成。当温度超过或者低于警戒温度时,都会有声光警报。报警电路如下图4-10:&图4-10 &报警电路图&蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。1.压电式蜂鸣器 压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。有的压电式蜂鸣器外壳上还装有发光二极管。多谐振荡器由晶体管或集成电路构成。当接通电源后(1.5--15V直流工作电压),多谐振荡器起振,输出1.5--2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。压电蜂鸣片由锆钛酸铅或铌镁酸铅压电陶瓷材料制成。在陶瓷片的两面镀上银电极,经极化和老化处理后,再与黄铜片或不锈钢片粘在一起。2.电磁式蜂鸣器 电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。从经济和易于控制的角度考虑,我选着了电磁式蜂鸣器的有源蜂鸣器。在单片机的输出口再加上一个PNP型的9012,起增大单片机的输出电流,使蜂鸣器发出的声音更响。9012如下图4-11:&图4-11 &9012属性图&4.1.5电源模块由于考虑整个模块能有更好的移动性,所以给系统配备专有电源,其由两个9V的干电池通过7805稳压到5V,电路图如下4-12:&图4-12 &电源模块图7805只有三条引脚输出,分别是输入端、接地端和输出端。它属于三端稳压集成电路,三端稳压IC来组成稳压电源所需的外围元件极少,电路内部还有过流、过热及调整管的保护电路,使用起来可靠、方便,而且价格便宜。它能为系统提供稳定的5V电源。7805管脚图如图4-13:&图4-13& 7805管脚图&4.1.6加热及制冷处理模块加热及制冷处理模块主要是由8050、光耦合器和继电器组成。当温度超过设定温度时启动电机制冷或当温度低于设定温度时启动电机加热,电路如下图4-14:&图4-14 &加热及制冷处理电路图U3接单片机的输出端,当单片机输出高电平时,经过8050的放大后,能驱动光耦合器的光发射,这样就导致继电器线圈通电,然后触点接合,电机开动。光耦合器(optical coupler,英文缩写为OC)亦称光电隔离器,简称光耦。光耦合器以光为媒介传输电信号。它对输入、输出电信号有良好的隔离作用,所以,它在各种电路中得到广泛的应用。目前它已成为种类最多、用途最广的光电器件之一。光耦合器一般由三部分组成:光的发射、光的接收及信号放大。输入的电信号驱动发光二极管(LED),使之发出一定波长的光,被光探测器接收而产生光电流,再经过进一步放大后输出。这就完成了电&光&电的转换,从而起到输入、输出、隔离的作用。由于光耦合器输入输出间互相隔离,电信号传输具有单向性等特点,因而具有良好的电绝缘能力和抗干扰能力。又由于光耦合器的输入端属于电流型工作的低阻元件,因而具有很强的共模抑制能力。所以,它在长线传输信息中作为终端隔离元件可以大大提高信噪比。在计算机数字通信及实时控制中作为信号隔离的接口器件,可以大大增加计算机工作的可靠性。光耦合器的主要优点是:信号单向传输,输入端与输出端完全实现了电气隔离隔离,输出信号对输入端无影响,抗干扰能力强,工作稳定,无触点,使用寿命长,传输效率高。光耦合器是70年代发展起来产新型器件,现已广泛用于电气绝缘、电平转换、级间耦合、驱动电路、开关电路、斩波器、多谐振荡器、信号隔离、级间隔离、脉冲放大电路、数字仪表、远距离信号传输、脉冲放大、固态继电器(SSR)、仪器仪表、通信设备及微机接口中。在单片开关电源中,利用线性光耦合器可构成光耦反馈电路,通过调节控制端电流来改变占空比,达到精密稳压目的。光电耦合器结构图如图4-15所示。&图4-15 &光电耦合器结构图&继电器:继电器是一种电子控制器件,线圈中就会流过一定的电流,从而产生电磁效应,衔铁就会在电磁力吸引的作用下克服返回弹簧的拉力吸向铁芯,从而带动衔铁的动触点与静触点(常开触点)吸合。它具有控制系统(又称输入回路)和被控制系统(又称输出回路),通常应用于自动控制电路中,它实际上是用较小的电流去控制较大电流的一种&自动开关&。故在电路中起着自动调节、安全保护、转换电路等作用。继电器结构图如下图,图4-16:&图4-16& 继电器结构图&&&&& 在继电器的4脚和5脚加上续流二极管,二极管的负极接在4管脚上,负极接在5管脚上,如图4-14所示。当线圈得电,这时继电器开关闭合,电路就处于工作状态。当线圈失电,开关断开电路不工作。但这时出现个问题,线圈可以储存能量的(线圈会阻止电流的突变,也就是电磁感应作用,即电流只能慢慢增大和减少),如果这时一下使线圈断电,它两端就会产生很大的电压,这样就可能使线圈损坏、相连接的元器件击穿。这时,我们只要在线圈两端接上二极管,便可以使它产生一个回路(断电时相当于在线圈两端接根短路线),使线圈储存的能量放完。这个二极管在这里起到续流的作用,我们通常称它为续流二极管。二极管又称晶体二极管,简称二极管(diode);它只往一个方向传送电流的电子零件。它是一种具有1个零件号接合的2个端子的器件,具有按照外加电压的方向,使电流流动或不流动的性质。晶体二极管为一个由p型半导体和n型半导体形成的p-n结,在其界面处两侧形成空间电荷层,并建有自建电场。当不存在外加电压时,由于p-n 结两边载流子浓度差引起的扩散电流和自建电场引起的漂移电流相等而处于电平衡状态。二极管的伏安特性如下图4-17。&图4-17& 二极管的伏安特性图&本系统采用二极管IN4007,它的额定正向工作电流为1A,IN4007反向耐压为1000V,结构图如图4-18。&图4-18& IN4007结构图&&& 直流电机(D.C.machine):定义输出或输入为直流电能的旋转电机,称为直流电机,它是能实现直流电能和机械能互相转换的电机。当它作电动机运行时是直流电动机,将电能转换为机械能;作发电机运行时是直流发电机,将机械能转换为电能。1.&&&&& 直流电机的结构由直流电动机和发电机工作原理示意图可以看到,直流电机的结构应由定子和转子两大部分组成。直流电机运行时静止不动的部分称为定子,定子的主要作用是产生磁场,由机座、主磁极、换向极、端盖、轴承和电刷装置等组成。运行时转动的部分称为转子,其主要作用是产生电磁转矩和感应电动势,是直流电机进行能量转换的枢纽,所以通常又称为电枢,由转轴、电枢铁心、电枢绕组、换向器和风扇等组成,如下图4-19。&&图4-19& 直流电机的结构&2.&&&&& 直流电动机的工作原理导体受力的方向用左手定则确定。这一对电磁力形成了作用于电枢一个力矩,这个力矩在旋转电机里称为电磁转矩,转矩的方向是逆时针方向,企图使电枢逆时针方向转动。如果此电磁转矩能够克服电枢上的阻转矩(例如由摩擦引起的阻转矩以及其它负载转矩),电枢就能按逆时针方向旋转起来。当电枢转了180&后,导体 cd转到 N极下,导体ab转到S极下时,由于直流电源供给的电流方向不变,仍从电刷 A流入,经导体cd 、ab 后,从电刷B流出。这时导体cd 受力方向变为从右向左,导体ab 受力方向是从左向右,产生的电磁转矩的方向仍为逆时针方向。因此,电枢一经转动,由于换向器配合电刷对电流的换向作用,直流电流交替地由导体 ab和cd 流入,使线圈边只要处于N 极下,其中通过电流的方向总是由电刷A 流入的方向,而在S 极下时,总是从电刷 B流出的方向。这就保证了每个极下线圈边中的电流始终是一个方向,从而形成一种方向不变的转矩,使电动机能连续地旋转。这就是直流电动机的工作原理。直流电动机原理图和线圈受力方向图4-20,如下:&&&&&&&&&&图4-20& 直流电动机原理图和线圈受力方向图&因为单片机上电后引脚的电压默认的是高电平,所以P1.3和P1.4经过8050的放大后,能驱动光耦合器的光发射,这样就导致继电器线圈通电,然后触点接合,电机开动。为了避免单片机一上电,电机就启动的问题,我就在单片机与加热及制冷处理模块之间加入反向器74LS04。加入反向器74LS04后,当单片机输出是低电平时,通过74LS04后得到高电平,然后导致继电器线圈通电,然后触点接合,电机开动。电路图如图 4-21。&图4-21& 单片机与加热及制冷处理模块之间加入反向器74LS04图&74LS04是6非门IC,工作电压为5V。内部结构图如下,图4-22。&图4-22 &74LS04内部结构图&&&4.2 软件系统设计 4.2.1 系统程序流程图系统程序流程图如图4-23所示。
&&&&&&&&&&&&&&&&&&&&&&图4-23& 系统程序流程图&&&&&独立按键程序流程图如图4-24所示。&SHAPE \* MERGEFORMAT 图4-24 &独立按键程序流程图&4.2.2 单片机软件开发语言对于8051单片机,现有四种语言支持,即汇编、FI/M、C和BASIC。C是一种源于编写UNIX操作系统的语言,它是一种结构化语言,可产生紧凑代码。C可以进行许多机器级函数控制而不用汇编语言。与汇编相比,有如下优点:(1)对单片机的指令系统不要求了解,仅要求对8051的存贮器结构有初步了解;(2)寄存器分配、不同存贮器的寻址及数据类型等细节可由编译器管理;(3)程序有规范的结构,可分为不同的函数,这种方式可使程序结构化;(4)具有将可变的选择与特殊操作组合在一起的能力,改善了程序的可读性;(5)关键字及运算函数可用近似人的思维过程方式使用;(6)编程及程序调试时间显著缩短,从而提高效率;(7)提供的库包含许多标准子程序,具有较强的数据处理能力;(8)已编好程序可容易地植入新程序,因为它具有方便的模块化编程技术。&4.2.3 DS18B20驱动程序根据DS18B20的通讯协议,主机(单片机)控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位操作,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求主CPU将数据线下拉500微秒,然后释放,当DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S为符号位。&表4-2 &DS18B20温度值格式表
&bit7&&&& bit6&&&& bit5&&&& bit4&&& bit3&&&& bit2&&&& bit1&&&& bit0
&bit15&&& bit14&&& bit13&&& bit12&& bit11&&& bit10&&& bit9&&&& bit8
&这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。DSl820工作过程包括;初始化、ROM操作命令、存储器操作、命令处理数据。1、初始化:单线总线上的所有处理均从初始化序列开始。初始化序列包括总线主机发出一复位脉冲,接着由从属器件送出存在脉冲。&&2、ROM操作指令:总线主机检测到DSl820的存在,便可以发出ROM操作命令之一,所有ROM 操作命令均为8 位长,这些命令如下:l&&&&&&& Read ROM(读ROM)[33H]此命令允许总线主机读DS18B20的8位产品系列编码,唯一的48位序列号,以及8位的CRC。此命令只能在总线上仅有一个DS18B20的情况下可以使用。如果总线上存在多于一个的从属器件,那么当所有从片企图同时发送时将发生数据冲突的现象(漏极开路会产生&线与&的结果)。l&&&&&&& Match ROM(匹配ROM)[55H]&符合&ROM 命令。后继以64 位的ROM 数据序列,允许总线主机对多点总线上特定的DS18B20寻址。只有与64 位ROM 序列严格相符的DS18B20 才能对后继的存贮器操作命令作出响应。所有与64位ROM序列不符的从片将等待复位脉冲。此命令在总线上有单个或多个器件的情况下均可使用。l&&&&&&& Skip ROM(跳过ROM)[CCH]在单点总线系统中,此命令通过允许总线主机不提供64位ROM编码而访问存储器操作来节省时间。如果在总线上存在多于一个的从属器件而且在Skip ROM 命令之后发出读命令,那么由于多个从片同时发送数据,会在总线上发生数据冲突(漏极开路下拉会产生&线与&的效果)。l&&&&&&& Search ROM(搜索ROM)[F0H]当系统开始工作时,总线主机可能不知道单线总线上的器件个数或者不知道其64位ROM 编码。搜索ROM 命令允许总线主机使用一种&消去&(elimination )处理来识别总线上所有从片的64 位ROM 编码。l&&&&&&& Alarm search(告警搜索)[ECH]此命令的流程与搜索ROM 命令相同。但是,仅在最近一次温度测量出现告警的情况下,DS18B20才对此命令作出响应。告警的条件定义为温度高于TH 或低于TL。只要DS18B20 一上电,告警条件就保持在设置状态,直到另一次温度测量显示出非告警值,或者改变TH 或TL 的设置使得测量值再一次位于允许的范围之内。贮存在EEPROM 内的触发器值用于告警。&3、存储器操作命令:表4-3给出下述命令约定的摘要,如下:&&&&&表4-3 &DS18B20 命令集
发出约定代码后单总线的操作
温&&& 度&&& 变&&& 换&&& 命&& 令
启动温度变换
读温度&忙&状态
存&&& 储&&& 器&&&& 命&& 令
读暂存存储器
从暂存存储器读字节
&读9字节数据&
写暂存存储器
写字节至暂存存储器地址2和3处(TH和TL温度触发器)
&写数据至地址2和地址3的2个字节&
复制暂存存储器
把暂存存储器复制入非易性存储器(仅地址2和地址3)
&读复制状态&
重新调出E2
把贮存在非易失性存储器内的数值重新调入暂存存储器(温度触发器)
&读温度&忙&状态&
发DS1820电源方式的信号至主机
&读电源状态&
&注:&&& 1.温度变换需要2 秒钟。在接收到温度变换命令之后,如果器件未从VDD 引脚取得电源,那么DS18B20 的I/O 引线必须至少保持2 秒的高电平以提供变换过程所需的电源。这样在温度变换命令发出之后,至少在此期间内单线总线上不允许发生任何其他的动作。&&& 2.在接收到复制暂存存储器的命令以后,如果器件没有从VDD 引脚取得电源,那么DS18B20 的I/O引脚必须至少维持10ms 的高电平,以便提供复制过程中所需的电源。这样,在复制暂存存储器命令发出之后,至少在这一期间之内单线总线上不允许发生任何其他的动作。&&& 此命令写至DS18B20 的暂存存储器,以地址2 开始。接着写的两个字节将被保存在暂存存储器地址2 和3 之间中。发出一个复位便可在任何处终止写操作。l&&&&&&& 读暂存存储器(Read Scratchpad)[BEh]&&& 此命令读暂存存储器的内容。读开始于字节0 ,并继续经过暂存存储器,直至第九个字节(字节8 CRC)被读出为止。如果不是所有位置均可读,那么主机可以在任何时候发出一复位以中止读操作。l&&&&&&& 复制暂存存储器(Copy Scratchpad)[48h]&&& 此命令把暂存存储器复制入DS18B20的E ROM存储器,把温度触发器字节存贮入非易失性存储器,如果总线主机在此命令之后发出读时间片,那么只要DS18B20 正忙于把暂存存储器复制入E ROM,它就会在总线上输出&0 &;当复制过程完成之后,它将返回&1 &。如果由寄生电源供电,总线主机在发出此命令之后必须能立即强制上拉至少10ms。l&&&&&&& 温度变换(Convert T)[44h]此命令开始温度变换。不需要另外的数据。温度变换将被执行,接着DS18B20便保持在空闲状态。如果总线主机在此命令之后发出读时间片,那么只要DS18B20 正忙于进行温度变换,它将在总线上输出&0 &;当温度变换完成时,它便返回&1& 如果由寄生电源供电,那么总线主机在发出此命令之后必须立即强制上拉至少2 秒。l&&&&&&& 重新调出(E2 Recall E2)[B8h]&&& 此命令把贮存在E ROM中温度触发器的值重新调至暂存存储器,这种重新调出的操作在对DS18B20上电时也自动发生,因此只要器件一接电,暂存存储器内就有有效的数据可供使用。在此命令发出之后,对于所发出的第一个读数据时间片,器件都将输出其忙的标志&0& =忙,&1& =准备就绪。l&&&&&&& 读电源(Read Power Supply)[B4h]对于在此命令送至DS18B20 之后所发出的第一读出数据的时间片,器件都会给出其电源方式的信号:&0&=寄生电源供电,&1& =外部电源供电。&4、时序主机使用时间隙(time slots)来读写DSl820的数据位和写命令字的位(1)初始化&&& 开始与DS18B20 的任何通信所需的初始化序列和图4-25 所示。后继以存在脉冲的复位脉冲表示DS18B20 已经准备好发送或接收给出正确的ROM命令和存贮器操作命令的数据。总线主机发送(TX) 一复位脉冲(最短为480us 的低电平信号)。接着总线主机便释放此线并进入接收方式(Rx)。单线总线经过5k的上拉电阻被拉至高电平状态。在检测到I/O 引脚上的上升沿之后,DS18B20 等待15-60us 并且接着发送存在脉冲(60-240us 的低电平信号)。&图4-25 &初始化过程&复位和存在脉冲&&&& (2) 读时间片(Write Tim Slots)&& 当主机把数据线从高逻辑电平拉至低逻辑电平时,产生写时间片。有两种类型的写时间片:写1时间片和写0时间片。所有时间片必须有最短为60微秒的持续期在各写周期之间必须有最短为1微秒的恢复时间。在I/O 线由高电平变为低电平之后,DS18B20在15us至60us的窗口之间对I/O 线采样。如果线为高电平,写1就发生。如果线为低电平,便发生写0(见图4-26)。&图4-26 &写时序&&& 对于主机产生写1时间片的情况,数据线必须先被拉至逻辑低电平,然后就被释放,使数据线在写时间片开始之后的15 微秒之内拉至高电平。对于主机产生写0 时间片的情况,数据线必须被拉至逻辑低电平且至少保持低电平60 us。(3) 读时间片&&& 当从DS18B20读数据时,主机产生读时间片。当主机把数据线从逻辑高电平拉至低电平时,产生读时间片。数据线必须保持在低逻辑电平至少1微秒;来自 DS18B20 的输出数据在读时间片下降沿之后15 微秒有效。因此,为了读出从读时间片开始算起15 微秒的状态主机必须停止把I/O 引脚驱动至低电平(见图4-26)。在读时间片结束时,I/O 引脚经过外部的上拉电阻拉回至高电平。所有读时间片的最短持续期限为60 微秒各个读时间片之间必须有最短为1 微秒的恢复时间。图4-27 指出T ,T &和T &之和必须小于15us 图4-28 说明通过使T &和T &尽可能小,且把主机采样时间定在15us 期间的末尾,系统时序关系就有最大的余地。&图4-27 &详细的主机读&1&时序&图4-28 &推荐的主机读&1&时序&根据数字温度传感器的工作时序及原理进行软件的设计,DS18B20的C51程序代码如下:sbit DS=P2^2;&&&&&&&&&& &&//DS18B20端口void delay(uint count)&&&&& //delay{&& while(count)& {&&& i=200;&&& while(i&0)&&& i--;&&& count--;& }}void dsreset(void)&&&&&& //send reset and initialization command{&& DS=0;& i=103;& while(i&0)i--;& DS=1;& i=4;& while(i&0)i--;}&bit tmpreadbit(void)&&&&&& //read a bit{&&&&&& DS=0;i++;&&&&&&&&& //i++ for delay&& DS=1;i++;i++;&& dat=DS;&& i=8;while(i&0)i--;&& return (dat);}&uchar tmpread(void)&& //read a byte date{& uchar i,j,& dat=0;& for(i=1;i&=8;i++)& {&&& j=tmpreadbit();&&& dat=(j&&7)|(dat&&1);&& //读出的数据最低位在最前面,这样刚好一个字节在DAT里& }& return(dat);}&void tmpwritebyte(uchar dat)&& //write a byte to ds18b20{&&&& for(j=1;j&=8;j++)& {&&& testb=dat&0x01;&&& dat=dat&&1;&&& if(testb)&&&& //write 1&&& {&&&&& DS=0;&&&&& i++;i++;&&&&& DS=1;&&&&& i=8;while(i&0)i--;&&& }&&& else&&& {&&&&& DS=0;&&&&&& //write 0&&&&& i=8;while(i&0)i--;&&&&& DS=1;&&&&& i++;i++;&&& }&& }}&void tmpchange(void)& //DS18B20 begin change{& dsreset();& delay(1);& tmpwritebyte(0xcc);& // address all drivers on bus& tmpwritebyte(0x44);& //& initiates a single temperature conversion}&uint tmp()&&&&&&&&&&&&&& //get the temperature{&& uchar a,b;& dsreset();& delay(1);& tmpwritebyte(0xcc);& tmpwritebyte(0xbe);& a=tmpread();& b=tmpread();& temp=b;& temp&&=8;&&&&&&&&&&&& //two byte& compose a int variable& temp=temp|a;& tt=temp*0.0625;& temp=tt*10+0.5;&}&void readrom()&&&&&&&&& //read the serial{& uchar sn1,sn2;& dsreset();& delay(1);& tmpwritebyte(0x33);& sn1=tmpread();& sn2=tmpread();}&&延时子程序:&void delay10ms()&&&&&&&&&&& //delay& {&&& uchar a,b;&&& for(a=10;a&0;a--)&&&&& for(b=60;b&0;b--);&& }&&4.2.4 系统的程序源代码系统的C52 源程序如下:Include ®52.hdefine uchar unsigned char#define uint unsigned intsbit DS=P2^2;&&&&&&&&&& //define interfacesbit& Sign_Port& =P1^0;//发光二极管1&&&&&&&&&&&& // variable of temperatureuchar flag1;&&&&&&&&&&& // sign of the result positive or negativesbit dula=P2^6;sbit wela=P2^7;sbit beep=P2^3;sbit LED1=P1^1;//发光二极管2sbit LED2=P1^2;//发光二极管3sbit motor1=P1^3;//电机1sbit motor2=P1^4;//电机2sbit K1= P3^2;uchar code table[]={&&&&&&&&&& &&& //0-9的共阳极代码 &&&&&& 0xc0,0xf9,0xa4,0xb0,&&&&& 0x99,0x92,0x82,0xf8,&&&&& 0x80,0x90,0x88,0x83,&&&&& 0xc6,0xa1,0x86,0x8e&&&&&&&&&& };&unsigned char code table1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,&&&&&&&&&&&&&&&&&&&&&&& 0x78,0x00,0x10};&void delay(uint count)&&&&& //delay{&& while(count)& {&&& i=200;&&& while(i&0)&&& i--;&&& count--;& }}&&void dsreset(void)&&&&&& //send reset and initialization command{&& DS=0;& i=103;& while(i&0)i--;& DS=1;& i=4;& while(i&0)i--;}&bit tmpreadbit(void)&&&&&& //read a bit{&&&&&& DS=0;i++;&&&&&&&&& //i++ for delay&& DS=1;i++;i++;&& dat=DS;&& i=8;while(i&0)i--;&& return (dat);}&uchar tmpread(void)&& //read a byte date{& uchar i,j,& dat=0;& for(i=1;i&=8;i++)& {&&& j=tmpreadbit();&&& dat=(j&&7)|(dat&&1);&& //读出的数据最低位在最前面,这样刚好一个字节在DAT里& }& return(dat);}&void tmpwritebyte(uchar dat)&& //write a byte to ds18b20{&&&& for(j=1;j&=8;j++)& {&&& testb=dat&0x01;&&& dat=dat&&1;&&& if(testb)&&&& //write 1&&& {&&&&& DS=0;&&&&& i++;i++;&&&&& DS=1;&&&&& i=8;while(i&0)i--;&&& }&&& else&&& {&&&&& DS=0;&&&&&& //write 0&&& &&i=8;while(i&0)i--;&&&&& DS=1;&&&&& i++;i++;&&& }&& }}void tmpchange(void)& //DS18B20 begin change{& dsreset();& delay(1);& tmpwritebyte(0xcc);& // address all drivers on bus& tmpwritebyte(0x44);& //& initiates a single temperature conversion}&uint tmp()&&&&&&&&&&&&&& //get the temperature{&& uchar a,b;& dsreset();& delay(1);& tmpwritebyte(0xcc);//跳过 ROM& tmpwritebyte(0xbe);//读暂存存储器& a=tmpread();& b=tmpread();& temp=b;& temp&&=8;&&&&&&&&&&&& //two byte& compose a int variable& temp=temp|a;& tt=temp*0.0625;& temp=tt*10+0.5;&}&void readrom()&&&&&&&&& //read the serial{& uchar sn1,sn2;& dsreset();& delay(1);& tmpwritebyte(0x33);//读ROM& sn1=tmpread();& sn2=tmpread();}&void delay10ms()&&&&&&&&&&& //delay& {&&& uchar a,b;&&& for(a=10;a&0;a--)&&&&& for(b=60;b&0;b--);&& }&void display(uint temp)&&&&&&& //显示程序{&& uchar A1,A2,A2t,A3,&& ser=temp/10;&& SBUF=&& A1=temp/100;&& A2t=temp%100;&& A2=A2t/10;&& A3=A2t%10;&& dula=0;&& P0=table[A1]; &&& //显示百位&& dula=1;&& dula=0;&&& wela=0;&& P0=0x01;&& wela=1;&& wela=0;&& delay(1);&&& dula=0;&& P0=table1[A2];&&&&&& //显示十位&& dula=1;&& dula=0;&&& wela=0;&& P0=0x02;&& wela=1;&& wela=0;&& delay(1);&&& P0=table[A3];&&& //显示个位&& dula=1;&& dula=0;&&& P0=0x04;&& wela=1;&& wela=0;&& delay(1);&&& P0=table[1];&&&& //显示低限位十位,为1&& dula=1;&& dula=0;&&& P0=0x10;&& wela=1;&& wela=0;&& delay(1);&&& P0=table[5];&&&&& //显示低限位个位,为5&& dula=1;&& dula=0;&&& P0=0x20;&& wela=1;&& wela=0;&& delay(1);&&& P0=table[3];&&&&& //显示高限位十位,为3&& dula=1;&& dula=0;&&& P0=0x40;&& wela=1;&& wela=0;&& delay(1);&&& P0=table[0];&&&&& //显示高限位个位,为0&& dula=1;&& dula=0;&&& P0=0x80;&& wela=1;&& wela=0;&& delay(1);}&void main(){&& LED1=1;& LED2=1;& beep=1;& motor1=1;& motor2=1;&&& while(1)& {&&&& tmpchange();&&&&& temp=tmp();&&&&& sign=(uchar)((temp&&8)&0xf0);&&& //如果温度值高字节的高八位为全1,表示超过可测量范围&&&&& if(sign==0xf0)&&&&&&&&&&&&&&&&&&&&&&&&&& {&&&&&&&&&&&& temp=(--temp)+1;&&&& //温度超标,取温度的补码&&&&&&&&&&&& Sign_Port=0;&&&&&&&&&&&&&&&&& }&&&&& else&& Sign_Port=1;&&&& //报警指示灯灭&&&&&&& display(temp);&&&&&&&&&& if(temp&=280&&temp&700)//当温度大于30度时,声光报警,驱动电机1&&&&&&&&& {&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& LED1=0;&&& //在中断里点亮LED&&&&&&&&&&&& beep=0;&&& //启动蜂鸣器&&&&&&&&&&&& motor1=0;& //启动加热电机&&&&&&&&&&& &&&&&& }&&&&&&&&& else if(temp&150)&&&&&&&&& {&&&&&&&&&&&& LED1=0;&&& //在中断里点亮LED&&&&&&&&&&&& beep=0;&&& //启动蜂鸣器&&&&&&&&&&&& motor2=0;& //启动制冷电机&&&&&&&&& }&&&&&&&&& else&&&&& && {&&&&&&&&&&&& LED1=1;&&&& //关LED&&&&&&&&&&&& beep=1;&&&& //关蜂鸣器&&&&&&&&&&&& motor1=1;&& //关加热电机&&&&&&&&&&&& motor2=1;&& //关制冷电机&&&&&&&&& }&& }&}&//************************主程序结束********************************5& 温度监控系统设计的硬件成果及测试结果、分析 5.1模块硬件概论基于单片机的温度实时监控系统设计综合前面的理论论证,证明了这套系统的可行性,同时也证实了这套系统低成本,高性能的优越性,因此做出了这套系统的实物硬件,以供参考。本系统由温度采集模块和报警电路模块,温度显示模块,键盘调整模块,电源模块,加热及制冷处理模块等组合而成,以下是各个模块实物图。&5.1.1温度采集模块和报警电路模块本系统的温度采集模块主要是由数字温度传感器DS18B20构成,该温度传感器能够直接输出数字量到微处理器。光报警模块是由8个发光二极管组成,而声音报警电路由有源蜂鸣器和PNP型的9012放大三极管组成。如图5-1和图5-2所示。&图5-1& 温度采集模块和光报警电路模块&图5-2 &声报警电路模块&5.1.2温度显示模块该系统的显示模块主要是由数码管构成,温度值设定模块的现实采用7段四位共阳极数码管。正常温度显示模块由7段四位共阳极数码管、74HC573译码管,如图5-3所示。&图5-3 &温度显示模块图&5.1.3键盘调整模块按键调整模块由16个6*6*6的按键组成,用来设定最高温度和最低温度或调整温度值等。如图5-4所示。图5-4& 键盘调整模块&5.1.4电源模块本系统的电源模块主要是由三端稳压集成电路L7805构成,该器件能够直接输出5V到系统。如图5-5所示。图5-5 &电源模块5.1.5加热及制冷处理模块加热及制冷处理模块主要是由8050、光耦合器、继电器和反向器74LS04组成。当温度超过设定温度时启动电机制冷或当温度低于设定温度时启动电机加热,如图5-6所示。&图5-6& 加热及制冷处理模块&5.1.6整体硬件系统由以上各个模块组合成一个完成的智能温度监控系统。如图5-7所示。&图5-7 &整体实物图5.2系统测试结果、分析1、测试条件:在-55℃~+125℃的物体或环境。2、测试仪器:温度计 加热设备 制冷设备3、系统测试结果及分析(1)&&& 系统测试结果及实物展示&= 1 \* GB3 ①实际温度与系统所测温度对比图:&表5-1& 实际温度与系统所测温度对比图
实际测量温度
系统测量温度
&&= 2 \* GB3 ②把温度传感器插到开发板上进行温度检测,室内温度测试如图5-8所示:&图5-8& 室内温度测试图&&&&= 3 \* GB3 ③温度变化测试如图5-9所示:&图5-9& 温度变化测试图&当手靠近温度传感器时,温度开始变化,数码管显示也跟着变化。当温度超过设定的31度时,发出声光显示,启动制冷电机,如图5-9所示。&(2)&&& 系统测试分析由数字温度传感器DS18B20检测温度带来的误差和系统的每个器件之间所存在的误差,导致系统测量温度与实际测量温度存在差值,是属于误差。多次测试表明系统测量的温度值很准确。&&&&&&&6& 结论与展望 6.1& 结论毕业设计是本科学习阶段一次非常难得的理论与实际相结合的机会,通过这次比较完整的系统设计,我摆脱了单纯的理论知识学习状态,和实际设计的结合锻炼了我的综合运用所学的专业基础知识,解决实际问题的能力,同时也提高我查阅文献资料、设计规范以及电脑制图等其他专业能力水平,而且通过对整体的掌控,对局部的取舍,以及对细节的斟酌处理,都使我的能力得到了锻炼,经验得到了丰富,并且意志品质力,抗压能力及耐力也都得到了不同程度的提升。这是我们都希望看到的也正是我们进行毕业设计的目的所在。虽然我的毕业设计内容新颖、过程繁琐,但我的收获却更加丰富。该系统的适用条件,各种设备的选用标准,各种器件的***方式,我都是随着设计的不断深入而不断熟悉并学会应用。通过这次毕业设计让我更懂得了这些知识,这是非常珍贵的。在设计过程中一些控制的设计让我很头痛,但在导师和同学的无私帮助下,克服了一些问题。提高是有限的但提高也是全面的,正是这一次设计让我积累了无数实际经验,使我的头脑更好的被知识武装了起来,也必然会让我在未来的工作学习中表现出更高的应变能力,更强的沟通力和理解力。顺利如期完成本次毕业设计给了我很大的信心,因为我自己已经掌握一套分析问题和解决问题的方法。例如,在温度高于或者低于所设定相对温度时,加热或制冷电机启动时,电机消耗电流较大,导致数码管的显示不正常,后来通过采用独立电源给电机通电,就解决了该问题等等。要做出一个成功的作品,真的不容易,在做的其中会出现很多很多我们想不到的问题,会绞尽脑汁、心情烦躁,那时真正需要冷静分析问题和解决问题。只要我们坚持做,一定会完成的。有一种成功叫不放弃!6.2& 展望&&& 温度是一个基本的物理量,也是一个极其重要的物理量,它存在于人们日常生活及工业生产的各个方面,因此,能否准确的测量温度参数,对于改善人们的生活水品,提高工业产量,生产高性能的产品等等,都是尤为重要的。本设计采用单片机为主控模块,采用数字温度传感器DB18B20为传感器模块,它将采集到的温度数据送至单片机中进行处理,由LED数码管进行温度的实时显示。当温度超过或者低于一定的数值时,进行相应的控制。DS1820数字温度传感器是世界上第一片支持&一线总线&接口的温度传感器,用户可以轻松组建传感器网络。并且&一线总线&的数字传输方式,大大提高了系统的抗干扰能力,适合于恶劣环境的现场温度测试。DS18B20只有三根外引线:单线数据传输总线端口DQ ,外供电源线VDD ,共用地线GND。它的测量温度范围是-55℃~+125℃。DS18B20有两种供电方式:一种为数据线供电方式,另一种是外部供电方式。并且可以将测量温度与TH,TL作比较,并产生报警信号。运用DS18B20和STC89C52组建的数字温度测量系统,性能可靠、测温准确、结构简单、造价低廉,并且还可以进行多种功能的扩展,是一个比较经济、实用的设计。该系统必将会在以后的生活和生产中得到广泛应用。&&&&&&&&&&&&&&&&&&&&&&&&&&&参考文献[1] 沙占友:《智能化集成温度传感器原理及应用》 [M],机械工业出版社2002年版,第5-287页。[2] 宏晶科技:《STC89C51RC / RD+ 系列单片机器件手册》[EB/OL],2009年版,第11-34页。[3] 江晓安:《数字电路》[M],西安科技大学出版社2006年版,第90-103页。[4] 周树南、张伯颐:《电路与电子学基础》[M],科学出版社2006年版,第172-235页。[5] 冯建华:《单片机应用系统设计与产品开发》 [M],人民邮电出版社2004年版,第3-366页。[6] 杨文龙:《单片机原理及应用》[M],电子科技大学出版社2000年版,1-128页。[7] 马忠梅:《单片机的C语言应用程序设计》 [M], 北京航空航天大学出版社1997年版 ,第5-68页。[8] 黄俊钦:《新型传感器原理》[M], 航空工业出版社1991年版,第5-232页。[9] Dallas Semiconducotr,Programmable Resolution 1-Wire Digital Thermometer DS18B20 DATE SHEET,第1-26页。[10] 谈世哲:《电路设计基础与典型范例》[M],电子工业出版社2008年版,1-344页。[11] 何立民:《单片机高级教程-应用与设计》[M],北京航空航天大学出版社2000年版,135-178页。[12] 葛伟亮:《自动控制元件》[M],北京理工大学出版社2007年版,51-90页。附& 录附录1:系统整体硬件电路图附录2:系统整体PCB电路图谢& 辞本毕业论文是在教授的亲切关怀和悉心指导下完成的。从课题的选择到论文的最终完成,教授都始终给予我细心的指导和不懈的支持。在指导老师教授的精心指导和严格要求下,获得了丰富的理论知识,极大地提高了实践能力,并对当前电子领域的研究状况和发展方向有了一定的了解,单片机领域这对我今后进一步学习计算机方面的知识有极大的帮助,在此谨向教授致以诚挚的谢意和崇高的敬意。在此,我还要感谢我周围的同学们,你们给了我很多的建议和鼓励,正是由于你们的帮助和支持,我才能克服一个一个的困难和疑惑,直至本文的顺利完成。在论文即将完成之际,我的心情无法平静,从开始进入课题到论文的顺利完成,有多少可敬的师长、同学、朋友给了我无言的帮助,在这里请接受我诚挚的谢意!最后我还要感谢培养我长大含辛茹苦的父母,谢谢你们!&&& 衷心地感谢在白忙之中评阅论文和参加答辩的各位老师、专家和教授!武汉绘芯科技有限公司推荐& &
全年征稿 / 资讯合作联系邮箱:
凡本网注明"来源:中国智能制造网"的所有作品,版权均属于中国智能制造网,转载请必须注明中国智能制造网,。违反者本网将追究相关法律责任。
企业发布的公司新闻、技术文章、资料下载等内容,如涉及侵权、违规遭投诉的,一律由发布企业自行承担责任,本网有权删除内容并追溯责任。
本网转载并注明自其它来源的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品来源,并自负版权等法律责任。
如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。
周排行月排行
为鼓励中国智能制造网会员发布更多优质佳作,并获得更高关注
为鼓励我们的会员能发布更多优质原创佳作,中国智能制造
近年来全球半导体行业发展速度趋缓,唯独中国一枝独秀,多年
据统计,全球3D打印材料市场预测到2022年将达到15.2亿美金,
在国家振兴装备制造业和国际产业转移的带动下,中国设备工具
9月15日,即将迎来一年一度的中秋佳节,在这普国同庆的节日
回首美的集团战略布局之路,不难发现美的集团智能化升级之路
目前,全球高端教育机器人的主要产地仍在美国、欧洲和日韩等
BBC预测,2020年全球人工智能市场规模将达1190亿元人民币。
就在各大科技界巨头进行无人驾驶的研究,并且小有成果的时候
目前,全球高端教育机器人的主要产地仍在美国、欧洲和日韩等
目前,我国智能制造产业尚处于初级发展阶段,90%的中小企业
AWS在布局智能硬件服务云平台的道路上是先驱者,对于国内Iaa
回首美的集团战略布局之路,不难发现美的集团智能化升级之路
目前,智能家居已经结束了躁动期,开始进入一段以产品升级、
作为曾经BAT三巨头之首,百度始终执着地致力于“黑科技”方
云计算技术就是一个容器,大数据正是存放在这个容器中的水,
大佬们都喜欢分享心灵鸡汤,也喜欢分享成功的经验。近日,任
目前,通过浙江政务服务网杭州平台的网上政务服务建立了“五
由AI带动的云服务、大数据分析、物联网等产业的迭代与发展规
虚拟现实、增强现实它们之间相关,又各有特点,但核心都是以
根据上海市全市统一部署,上海市经济信息化委和市发展改革委
光学领域以其一系列崭新成就而为世人所瞩目,其中之一就是得
ApplePay、SamsungPay、HuaweiPay、小米支付等移动支付产品
中国是名副其实的&数据大国&、&网络大国&