基于PROTEUS的温湿度测量系统设计说明_第1页
基于PROTEUS的温湿度测量系统设计说明_第2页
基于PROTEUS的温湿度测量系统设计说明_第3页
基于PROTEUS的温湿度测量系统设计说明_第4页
基于PROTEUS的温湿度测量系统设计说明_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

./摘要温度和湿度是两个最基本的环境参数,与人们的生活息息相关。在工农业生产、气象、环保、国防、科研等部门,经常需要对环境温度和湿度进行测量和控制。准确测量温湿度在生物制药、食品加工、造纸等行业更是至关重要。因此研究温湿度的测量和控制方法具有重要的意义。本设计实现的是单片机温湿度测量和控制系统,通过LCD显示所测量的温湿度。系统采用集温湿度传感器与A/D转换器于一体的SHT11芯片,通过单片机进行处理显示,其它模块包括了实时时钟/日期产生电路和超限报警处理电路,对测量的值进行实时显示和报警处理。文章介绍了基于ATMEL公司的AT89C51系列单片机的温湿度实时测量与控制系统和显示系统的设计,包括介绍了硬件结构原理,并分析了相应的软件的设计及其要点,包括软件设计流程及其程序的实现。系统结构简单、实用,提高了测量精度和效率。关键词:AT89C51、SHT11、LCD、DS1302、温湿度控制ABSTRACTTemperatureandhumidityaretwobasicenvironmentalparameterswhicharecloselyrelatedtopeople’slives.Intheindustrialandagricultureproduction,meteorology,environmentalprotection,nationaldefense,scientificresearchandotherdepartments,weoftenneedtomeasureandcontrolthetemperatureandhumidityoftheenvironment.Accuratemeasurementoftemperatureandhumidityinthepharmaceutical,foodprocessing,papermakingandothersectorsisessential.Sothemethodoftemperatureandhumiditycontrolandmeasurementisofgreatsignificance.ThedesignimplementationofmeasurementandcontroltemperatureandhumidityisMCUsystem,throughwhichthetemperatureandhumiditymeasurementLCD.SystemadoptssettemperatureandhumiditysensorandA/DconverterforSHT11chipmicrocontrollerprocessing,throughthatothermodulesincludingreal-timedisplayandalarm.ThepaperintroducestheATMELcompanybasedonAT89C51single-chipseriesoftemperatureandhumiditymeasurementandcontrolsystemandreal-timedisplaysystemdesign,includingthehardwarestructureandprinciple,andthecorrespondingsoftwaredesign,includingthedesignofthesoftwareanditskeyprocessandprocedure.Systemstructureissimple,practical,andimprovethemeasuringprecisionandefficiency.Keywords:AT89c51,SHT11、LCD、DS1302、temperatureandhumiditycontrol..目录TOC\o"1-3"\h\u摘要IABSTRACTII第1章绪论11.1研究的目的及意义11.2国外研究情况11.3系统容的设计21.3.1系统的主要性能指标21.3.2主要工作任务21.4方案论证2第2章工具简介42.1C语言42.1.1C语言的优点42.1.2C语言的缺点42.2Proteus简介42.3KeilC51编译器简介52.3.18051开发工具5uVision2集成开发环境5第3章硬件设计73.1芯片介绍73.1.1单片机——AT89C5173.1.2LCD显示——LCD160493.1.3DS1302原理及应用11温湿度传感器SHT11153.2模块功能介绍183.2.1复位电路部分183.2.2DS1302时钟电路模块193.2.3SHT11传感器模块193.2.4显示电路模块203.2.5超限处理电路模块203.3整体电路图21第4章软件设计224.1程序框图224.1.1主程序框图224.1.2温湿度采集及处理框图234.1.3LCD显示框图234.2主函数解析24第5章仿真与调试26结论29致30参考文献31附录A系统源程序32附录B系统原理图55...第1章绪论1.1研究的目的及意义温度和湿度与人们的生活息息相关。在工农业生产、气象、环保、国防、科研等部门,经常需要对环境温度与湿度进行测量及控制。准确测量温湿度在生物制药、食品加工、造纸等行业都是至关重要的。传统的温度计是用水银柱来显示的,它的精确度不高,不易读数。而采用单片机对温湿度进行控制,不仅具有控制方便、简单和灵活等优点,而且可以大幅度提高温湿度控制的技术指标。用LCD来显示温湿度的数字看起来更加直观。采用SHT11数字温湿度传感器作为检测元件,能够同时测试温度和湿度。SHT11传感器可以直接读出被测的温湿度值。同时单片机可以把测量出的数据通过串口传到计算机上,来完成工业中的自动控制,给工业生产带来了极大的便利。用单片机控制的温湿度计不仅硬件电路简单,而且测量精度比较高。用液晶显示测量值看起来比较美观。无论在日常生活中还是在工业、农业方面都离不开对周围环境进行温湿度的测量。因此,研究温湿度的测量具有非常重要的意义。1.2国外研究情况测量温湿度的关键是温湿度传感器。过去测量温度与湿度是分开的。随着技术的进步和人们生活的需要出现了温湿度共测的传感器。温度传感器的发展经历了3个阶段:传统的分立式温度传感器、模拟集成温度传感器、智能集成温度传感器。目前,国际上新型温度传感器正从模拟式向数字式、从集成化向智能化、网络化的方向发展。温度传感器也是经历了这样一个阶段逐渐走向数字智能化。现今国外用的最多的温湿度传感器是SHTXX系列。SHT11温湿度传感器应用于专利的工业COMS过程微加工技术,确保产品具有极高的可靠性与卓越的长期稳定性。传感器包括一个电容式聚合体测湿元件和一个能隙式测温元件,并与一个14位的A/D转换器以及串行接口电路在同一芯片上实现无缝,从而具有超快响应,抗干扰能力强,性价比极高等优点。采用SHT11数字温湿度传感器与单片机AT89C51相连比较容易,而且电路比较简单,软件设计也比较简单。所以,本设计以SHT11数字温湿度传感器为例,介绍基于SHT11数字温湿度传感器的设计,该设计适用于人们的日常生活及工农业生产中用于温湿度的测量。1.3系统容的设计系统的主要性能指标根据生活和一般工业环境,设计本产品的主要技术指标为:·测温围:20—+80℃;湿度测量围为30—9·温度测量精度:±0.5ºC·湿度测量误差:≤4%Rh ·可设置上、下限报警值,当湿度温度超限时,发出报警信号·电源工作围:DC4.5~5.5V主要工作任务根据本毕业设计实际的任务要求,选择合适的温湿度传感器,完成温湿度的测量,并设计显示电路模块、时钟电路模块、超限处理模块、复位电路模块的程序。系统开始工作后,根据初始条件读取湿度值和温度值,测量数据经处理后,将其与设定的温湿度值比较,如果发现当前的温湿度超限,则发出报警信号,未超限时,系统显示正常的湿温度度值。1.4方案论证方案一:采用单总线的DS18B20的温度传感器和HS110X相对湿度传感器组成测量和控制系统。方案二:采用集温湿度传感器和A/D转换器于一体的SHT11芯片构成温湿度的测量和控制系统。由于传统的模拟式温湿度传感器一般不仅要设计信号调理电路,还要进行复杂的校准和标定过程,其测量精度难以保证,并且使用分立的温度传感器和湿度传感器测量电路比较麻烦。而SHT11是具有二线串行接口的单片全校准数字式新型相对湿度和温度传感器,集温湿度传感器和A/D转换器于一体,可用来测量相对湿度、温度和露点等参数,具有数字式输出、免调试、免标定、免外围电路及全互换的特点,使用起来比较方便,且电路简单。该传感器将CMOS芯片技术与传感器技术融合,为开发高集成度、高精度、高可靠性的温湿度测控系统提供了解决方案。因此本设计采用方案二。本设计核心部件为AT89C51,信号采集及处理部分由SHT11构成,进入单片机经处理后通过LCD1604显示温湿度,信号显示采用的液晶屏为5×7点阵,一行可显示16字,四行。其他组成部分为实时时钟发生电路,产生与现在相同的时间和具体日期,通过LCD1604液晶模块显示。在软件设计部分有对测量的温湿度进行上下值的设定,当测量超过限定值时,通过超限报警处理电路对其进行处理,分别显示不同的二极管灯亮,蜂鸣器产生长鸣。硬件中包括一个开关,为复位开关。开机后,所有器件初始化,DS1302产生实时时间和日期,温湿度传感器SHT11开始进行温湿度测量和计算,最后通过两个LCD液晶显示器显示结果。在测量结果中有超过设定的温湿度上下限的,通过超限模块做出反应。电路主要包括了AT89C51控制模块、SHT11温湿度测量模块、DS1302时间模块、LCD显示模块、超限处理模块。其他是一些附件,比如复位、晶振电路。ATAT89C51电源DS1302LCD1604信号显示SHT11晶振电路复位电路128*64液晶显示超限模块图1.1整体电路框图.第2章工具简介系统单片机代码采用C语言编写,并用Keil软件检查程序有无错误,在Proteus仿真软件上进行仿真。2.1C语言2.1.1CC语言的运算符丰富,它包括的围相当广泛,使得C语言的运算类型极其丰富,并且表达方式的类型多样化,能够实现在高级语言中不能实现的运算,它有32个关键字,9种控制语句。和汇编语言一样,它能够对位,字节和地址进行操作;数据类型很丰富,能实现各种复杂的数据类型,同时还加入了指针的概念,使得效率更高,同时支持图形编辑,以及多种显示器等;它所应用的结构式语言,这种方式会让程序有层次,一目了然,同时语法显示不严格,设计自由度高;C语言提供给用户的方式是一函数的形式,它们可以方便调用,使得程序完全结构化;地址的访问上,能够访问物理地址,对硬件进行直接操作;适用围广,能够适用于多种操作,例如:DOS、UNIX等,同时适用于多种机型。2.1.2C语言的缺点它的缺点主要是数据封装的安全性不高,因此这一点也成为了C语言和C++的最大的区别,另一方面由于语法以及变量的类型没有严格限制,也造成了较低的安全性,再者从应用角度来说,它比较其他的高级语言来说较为难以掌握。2.2Proteus简介Proteus软件是来自英国Labcenterelectronics公司的EDA工具软件,Proteus软件有十多年的历史,在全球广泛使用,除了其具有和其它EDA工具一样的原理布图、PCB自动或人工布线及电路仿真的功能外,其革命性的功能是,他的电路仿真是互动的,针对微处理器的应用,还可以直接在基于原理图的虚拟原型上编程,并实现软件源码级的实时调试,如有显示及输出,还能看到运行后输入输出的效果,配合系统配置的虚拟仪器如示波器、逻辑分析仪等。Proteus组合了高级原理布图、混合模式SPICE仿真,PCB设计以及自动布线来实现一个完整的电子设计系统。此系统受益于15年来的持续开发,被《电子世界》在其对PCB设计系统的比较文章中评为最好产品—"TheRoutetoPCBCAD"。Proteus产品系列也包含了革命性的VSM技术,用户可以对基于微控制器的设计连同所有的周围电子器件一起仿真。用户甚至可以实时采用诸如LED/LCD、键盘、RS232终端等动态外设模型来对设计进行交互仿真。其功能模块:一个易用而又功能强大的ISIS原理布图工具;PROSPICE混合模型SPICE仿真;ARESPCB设计。PROSPICE仿真器的一个扩展PROTEUSVSM:便于包括所有相关的器件的基于微处理器设计的协同仿真。此外,还可以结合微控制器软件使用动态的键盘,开关,按钮,LEDs甚至LCD显示CPU模型。·支持许多通用的微控制器,如PIC,AVR,HC11以及8051.最新支持ARM·交互的装置模型包括:LED和LCD显示,RS232终端,通用键盘,I2C,SPI器件·强大的调试工具,包括寄存器和存储器,断点和单步模式·IARC-SPY和KeiluVision2等开发工具的源层调试·应用特殊模型的DLL界面-提供有关元件库的全部文件最新版支持非常丰富仿真元件共7000多种,还有很多第三方模型。如MMC卡,以太网卡,ATA硬盘,麦克风,等等。2.3KeilC51编译器简介8051开发工具KEILC51标准C编译器为8051微控制器的软件开发提供了C语言环境,同时保留了汇编代码高效,快速的特点。C51编译器的功能不断增强,使你可以更加贴近CPU本身,及其它的衍生产品。C51已被完全集成到uVision2的集成开发环境中,这个集成开发环境包含:编译器,汇编器,实时操作系统,项目管理器,调试器。uVision2IDE可为它们提供单一而灵活的开发环境。uVision2集成开发环境=1\*GB3①项目管理工程<project>是由源文件、开发工具选项以及编程说明三部分组成的。一个单一的uVision2工程能够产生一个或多个目标程序。产生目标程序的源文件构成"组"。开发工具选项可以对应目标,组或单个文件。uVision2包含一个器件数据库<devicedatabase>,可以自动设置汇编器、编译器、连接定位器及调试器选项,来满足用户充分利用特定微控制器的要求。此数据库包含:片上存储器和外围设备的信息,扩展数据指针<extradatapointer>或者加速器<mathaccelerator>的特性。uVision2可以为片外存储器产生必要的连接选项:确定起始地址和规模。=2\*GB3②编辑器和调试器uVision2编辑器包含了所有用户熟悉的特性。彩色语法显像和文件辩识都对C源代码进行和优化。可以在编辑器调试程序,它能提供一种自然的调试环境,使得可以更快速地检查和修改程序。=3\*GB3③C51编译器KEILC51编译器在遵循ANSI标准的同时,为8051微控制器系列特别设计。语言上的扩展能让用户使用应用中的所有资源。存储器和特殊功能寄存器的存取C51编译器可以实现对8051系列所有资源的操作。SFR的存取由sfr和sbit两个关键字来提供。变量可旋转到任一个地址空间。用关键字-at-还能把变量放入固定的存储器存储模式〔大,中,小决定了变量的存储类型。连接定位器支持的代码区可达32个,这就允许用户在原有64KROM的8015基础上扩展程序。在V2的编译器和许多高性能仿真器中,可以支持应用程序的调试。2中断功能C51允许用户使用C语言编写中断服务程序,快速进、出代码和寄存器区的转换功能使C语言中断功能更加高效。可再入功能是用关键字来定义的。多任务,中断或非中断的代码要求必须具备可再入功能。3灵活的指针C51提供了灵活高效的指针。通用指针用3个字节来存储存储器类型及目标地址,可以在8051的任意存储区存取任何变量。特殊指针在声明的同时已指定了存储器类型,指向某一特定的存储区域。由于地址的存储只需1-2字节,因此,指针存取非常迅速。第3章硬件设计3.1芯片介绍单片机——AT89C51AT89C51是一种带4k字节可编程可擦除只读存储器〔FPEROM—FalshProgrammableandErasableReadOnlyMemory的低电压,高性能CMOS8位微处理器,俗称单片机。89C2051是一种带2K字节可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的89C51是一种高效微控制器,89C2051是它的一种精简版本。89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。=1\*GB3①主要特性:.·与MCS-51兼容·4K字节可编程闪烁存储器·寿命:1000写/擦循环·数据保留时间:10年·全静态工作:0Hz-24Hz·三级程序存储器锁定·128*8位部RAM·32可编程I/O线·两个16位定时器/计数器·5个中断源·可编程串行通道·低功耗的闲置和掉电模式·片振荡器和时钟电路.=2\*GB3②管脚说明:VCC:供电电压GND:接地P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FLASH编程时,P0口作为原码输入口,当FLASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1口:P1口是一个部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。P2口:P2口为一个部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写"1”为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址"1"时,它利用部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。P3口:P3口管脚是8个带部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入"1”后,它们被部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流〔ILL这是由于上拉的缘故。P3口也可作为AT89C表3.1.1P3口管脚备选功能P3.0RXD串行输入口P3.4T0计时器0外部输入P3.1TXD串行输出口P3.5T1计时器1外部输入P3.2/INT0外部中断0P3.6/WR外部数据存储器写选通P3.3/INT1外部中断1P3.7/RD外部数据存储器读选通P3口同时为闪烁编程和编程校验接收一些控制信号。RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器〔0000H-FFFFH,不管是否有部程序存储器。注意加密方式1时,/EA将部锁定为RESET;当/EA端保持高电平时,此间部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源〔VPP。XTAL1:反向振荡放大器的输入及部时钟工作电路的输入。XTAL2:来自反向振荡器的输出。=3\*GB3③振荡器特性:XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片振荡器。石晶振荡和瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。输入至部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。=4\*GB3④芯片擦除:整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms来完成。在芯片擦操作中,代码阵列全被写"1"且在任何非空存储字节被重复编程以前,该操作必须被执行。此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停止工作。但RAM,定时器,计数器、串口和中断系统仍在工作。在掉电模式下,保存RAM的容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。=5\*GB3⑤结构特点:.·8位CPU;·片振荡器和时钟电路;·32根I/O线;·布尔处理器;·外部存贮器寻址围ROM、RAM64K;·2个16位的定时器/计数器;·5个中断源,两个中断优先级;·全双工串行口;.LCD显示——LCD1604=1\*GB3①LCD1604原理1604采用标准的16脚接口,其中:1脚:VSS为地电源2脚:VDD接5V正电源3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生"鬼影",使用时可以通过一个10K的电位器调整对比度。4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令7~14脚:D0~D7为8位双向数据线15~16脚:空脚1604液晶模块部的控制器共有11条控制指令,如表所示,表3.1.21604液晶指令表指令RSR/WD7D6D5D4D3D2D1D0清显示0000000001光标返回000000001*置输入模式00000001I/DS显示开/关控制0000001DCB光标或字符移位000001S/CR/L**置功能00001DLNF**置字符发生存储器地址0001字符发生存储器地址〔AGG置数据存储器地址001显示数据存储器地址〔ADD读忙标志或地址01BF计数器地址〔AC写数到CGRAM或DDRAM10要写的数从CGRAM或DDRAM读数11读出的数据它的读写操作、屏幕和光标的操作都是通过指令编程来实现的。〔说明: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:读数据=2\*GB3②LCD1604初始化延时15mS写指令38H〔不检测忙信号、延时5mS写指令38H〔不检测忙信号、延时5mS写指令38H〔不检测忙信号;以后每次写指令、读/写数据操作均需要检测忙信号。写指令38H:显示模式设置写指令08H:显示关闭写指令01H:显示清屏写指令06H:显示光标移动设置写指令0CH:显示开及光标设置DS1302原理及应用DS1302是DALLAS公司推出的涓流充电时钟芯片,含有一个实时时钟/日历和31字节静态RAM,通过简单的串行接口与单片机进行通信。实时时钟/日历电路提供秒分时日、日期月年的信息。每月的天数和闰年的天数可自动调整,时钟操作可通过AM/PM指示决定采用24或12小时格式。DS1302与单片机之间能简单地采用同步串行的方式进行通信仅需用到三个口线:RES复位、I/O数据线、SCLK串行时钟。时钟/RAM的读/写数据以一个字节或多达31个字节的字符组方式通信,DS1302工作时功耗很低,保持数据和时钟信息时功率小于1mW。DS1302是由DS1202改进而来,增加了以下的特性:双电源管脚用于主电源和备份电源供应;Vcc1为可编程涓流充电电源;附加七个字节存储器;它广泛应用于传真便携式仪器以及电池供电的仪器仪表等产品领域。下面将主要的性能指标作一综合:·实时时钟具有能计算2100年之前的秒分时日日期星期月年的能力还有闰年调整的能力·31×8位暂存数据存储RAM·串行I/O口方式使得管脚数量最少·宽围工作电压2.0-5.5V·工作电流2.0V时,小于300nA·读/写时钟或RAM数据时有两种传送方式单字节传送和多字节传送字符组方式·8脚DIP封装或可选的8脚SOIC封装根据表面装配·简单3线接口·与TTL兼容<Vcc=5V>·可选工业级温度围-40~+85·与DS1202兼容·在DS1202基础上增加的特性--对Vcc1有可选的涓流充电能力--双电源管用于主电源和备份电源供应--备份电源管脚可由电池或大容量电容输入--附加的7字节暂存存储器=1\*GB3①DS1302的基本组成和工作原理DS1302的管脚排列〔图及描述如下:1管脚描述:.X1、X2:32.768KHz晶振管脚GND:地RST:复位脚I/O:数据输入/输出引脚SCLK:串行时钟Vcc1、Vcc2:电源供电管脚.112348765Vcc1SCLKI/ORSTVcc2X1X2GND图3.1.12>DS1302部寄存器CH:时钟停止位寄存器2的第7位12/24小时标志CH=0振荡器工作允许bit7=1,12小时模式CH=1振荡器停止bit7=0,24小时模式WP:写保护位寄存器2的第5位:AM/PM定义WP=0寄存器数据能够写入AP=1下午模式WP=1寄存器数据不能写入AP=0上午模式TCS:涓流充电选择DS:二极管选择位TCS=1010使能涓流充电DS=01选择一个二极管TCS=其它禁止涓流充电DS=10选择两个二极管DS=00或11,即使TCS=1010,充电功能也被禁止=2\*GB3②DS1302与微控制器的接口软件及功能应用举例下面首先给出基本的接口软件然后举例说明各种功能的应用1>写保护寄存器操作当写保护寄存器的最高位为0时,允许数据写入寄存器写保护,寄存器可以通过命令字节8E、8F来规定禁止写入/读出写保护位不能在多字节传送模式下写入。Write_Enable:MOVCommand,#8Eh;命令字节为8EMOVByteCnt,#1;单字节传送模式MOVR0,#XmtDat;数据地址覆给R0MOVXmtDat,#00h;数据容为0写入允许ACALLSend_Byte;调用写入数据子程序RET返回调用本子程序处当写保护寄存器的最高位为1时禁止数据写入寄存器Write_Disable:MOVCommand,#8Eh;命令字节为8EMOVByteCnt,#1;单字节传送模式MOVR0,#XmtDat;数据地址覆给R0MOVXmtDat,#80h;数据容为80h禁止写入ACALLSend_Byte;调用写入数据子程序RET返回调用本子程序处2>时钟停止位操作当把秒寄存器的第7位时钟停止位设置为0时起动时钟开始。Osc_Enable:MOVCommand,#80h;命令字节为80MOVByteCnt,#1;单字节传送模式MOVR0,#XmtDat;数据地址覆给R0MOVXmtDat,#00h;数据容为0振荡器工作允许ACALLSend_Byte;调用写入数据子程序RET返回调用本子程序处当把秒寄存器的第7位时钟停止位设置为1时,时钟振荡器停止HT1380进入低功耗方式。Osc_Disable:MOVCommand,#80h;命令字节为80MOVByteCnt,#1;单字节传送模式MOVR0,#XmtDat;数据地址覆给R0MOVXmtDat,#80h;数据容为80h振荡器停止ACALLSend_Byte;调用写入数据子程序RET返回调用本子程序处3>多字节传送方式当命令字节为BE或BF时,DS1302工作在多字节传送模式,8个时钟/日历寄存器从寄存器0地址开始连续读写从0位开始的数据。当命令字节为FE或FF时,DS1302工作在多字节RAM传送模式,31个RAM寄存器从0地址开始连续读写从0位开始的数据。例如写入00年6月21日星期三13时59分59秒程序,设置如下:Write_Multiplebyte:MOVCommand,#0Beh;命令字节为BEhMOVByteCnt,#8;多字节写入模式此模块为8个MOVR0,#XmtDat;数据地址覆给R0MOVXmtDat,#59h;秒单元容为59hMOVXmtDat+1,#59h;分单元容为59hMOVXmtDat+2,#13h;时单元容为13hMOVXmtDat+3,#21h;日期单元容为21hMOVXmtDat+4,#06h;月单元容为06hMOVXmtDat+5,#03h;星期单元容为03hMOVXmtDat+6,#0;年单元容为00hMOVXmtDat+7,#0;写保护单元容为00hACALLSend_Byte;调用写入数据子程序RET返回调用本子程序处读出寄存器0-7的容程序设置如下:Read_Multiplebyte;MOVCommand,#0BFh;命令字节为BFhMOVByteCnt,#8;多字节读出模式此模块为8个MOVR1,#RcvDat;数据地址覆给R1ACALLReceive_Byte;调用读出数据子程序RET返回调用本子程序处以上程序调用了基本数据接收<Receive_Byte>模块及一些存单元定义,其源程序清单在附录中给出下面的程序亦使用了这个模块。4>单字节传送方式例如写入8时12小时模式程序设置如下:Write_Singlebyte:MOVCommand,#84h;命令字节为84hMOVByteCnt,#1;单字节传送模式MOVR0,#XmtDat;数据地址覆给R0MOVXmtDat,#88h;数据容为88hACALLSend_Byte;调用写入数据子程序RET返回调用本子程序处上面所列出的程序模块Write_Enable、Write_Disable、Osc_Enable、Osc_Disable与单字节写入模块Write_Singlebyte的程序架构完全相同,仅只是几个入口参数不同。此介绍是为了强调功能使用的不同才将其分为不同模块,另外,与涓流充电相关的设定也是单字节操作方式,这里就不再单独列出,用户在使用中可灵活简略。下面模块举例说明如何单字节读出小时单元的容:Read_Singlebyte:MOVCommand,#85h;命令字节为85hMOVByteCnt,#1;单字节传送模式MOVR1,#RcvDat;数据地址覆给R1ACALLReceive_Byte;调用读出数据子程序RET返回调用本子程序处温湿度传感器SHT11=1\*GB3①SHT11简介SHT11是瑞士Scnsirion公司推出的一款数字温湿度传感器芯片。它集温度传感器和湿度传感器于一体,因此采用SHT11进行温湿度实时监测的系统具有精度高、成本低、体积小、接口简单等优点;另外SHT11芯片部集成了14位A/D转换器,且采用数字信号输出,因此抗干扰能力也比同类芯片高。该芯片在温湿度监测、自动控制等领域均已得到广泛应用。其主要特点如下:·高度集成,将温度感测、湿度感测、信号变换、A/D转换和加热器等功能集成到一个芯片上;·提供二线数字串行接口SCK和DATA,接口简单,支持CRC传输校验,传输可靠性高;·测量精度可编程调节,置A/D转换器<分辨率为8~12位,可以通过对芯片部寄存器编程选择>;·测量精确度高,由于同时集成温湿度传感器,可以提供温度补偿的湿度测量值和高质量的露点计算功能;·封装尺寸超小<7.62mm×5.08mm×2.5mm>,测量和通信结束后,自动转入低功耗模式;·高可靠性,采用CMOSens工艺,测量时可将感测头完全浸于水中。=2\*GB3②SHT11引脚功能SHT11温湿度传感器采用SMD<LCC>表面贴片封装形式,接口非常简单,引脚名称及排列顺序如图所示。112348765NCNCNCNCGNDDATASCKVDD图3.1.各引脚的功能如下:·脚1和4--信号地和电源,其工作电压围是2.4~5.5V;·脚2和脚3--二线串行数字接口,其中DA-TA为数据线,SCK为时钟线;·脚5~8--未连接。=3\*GB3③SHT11的部结构和工作原理温湿度传感器SHT11将温度感测、湿度感测、信号变换、A/D转换和加热器等功能集成到一个芯片上,其部结构如图所示。该芯片包括一个电容性聚合体湿度敏感元件和一个用能隙材料制成的温度敏感元件。这两个敏感元件分别将湿度和温度转换成电信号,该电信号首先进入微弱信号放大器进行放大;然后进入一个14位的A/D转换器;最后经过二线串行数字接口输出数字信号。SHT11在出厂前,都会在恒湿或恒温环境巾进行校准,校准系数存储在校准寄存器中;在测量过程中,校准系数会自动校准来自传感器的信号。此外,SHT11部还集成了一个加热元件,加热元件接通后可以将SHT11的温度升高5℃左右,同时功耗也会有所增加。此功能主要为了比较加热前后的温度和湿度值,可以综合验证两个传感器元件的性能。在高湿<>95%RH>环境中,加热传感器可预防传感器结露,同时缩短响应时间,提高精度。加热后SHT11温度升高、相对湿度降低,较加热前,测量值会略有差异。温度传感器温度传感器湿度传感器A/D转换器校准寄存器运算放大器二线串行数字接口和CRC校验SCKDATAVCCGND图3.1.微处理器是通过二线串行数字接口与SHT11进行通信的。微处理器对SHT11的控制是通过5个5位命令代码来实现的,命令代码的含义如表所列。表3.1.命令代码含义00011测量温度00101测量湿度00111读部状态寄存器00110写部状态寄存器11110复位命令,使部寄存器恢复默认值。下一次命令前至少等待11ms其他保留=4\*GB3④SHT11传输特性1湿度值输出SHT11可通过DATA数据总线直接输出数字量湿度值。该湿度值称为"相对湿度",需要进行线性补偿和温度补偿后才能得到较为准确的湿度值。由于相对湿度数字输出特性呈一定的非线性,因此为了补偿湿度传感器的非线性,可按下式修正湿度值:=+×+×式中:为经过线性补偿后的湿度值,为相对湿度测量值,C1、C2、C3为线性补偿系数,取值如表3.1.4所列。由于温度对湿度的影响十分明显,而实际温度和测试参考温度25℃=<T-25>×<+×>+式中:为经过线性补偿和温度补偿后的湿度值,为测试湿度值时的温度<℃>,和为温度补偿系数,取值如表3.1.5所列。表3.1.4湿度线性补偿系数表3.1.5湿度.C1C2C312位-40.0405-2.8×8位-40.648-7.2×2温度值输出12位0.010.000088位0.010.00128.由于SHT11是采用PTAT能隙材料制成的温度敏感元件,因而具有很好的线性输出。实际温度值可由下式算得:Temperature=d1+d2×SOT式中:d1和d2为特定系数,d1取值与SHT11工作电压有关,d2的取值则与SHT11部A/D转换器采用的分辨率有关,其对应关系分别如表和表3.1.7。表3.1.6.℃℉5-40.00-40.004-39.75-39.503.5-39.65-39.353-39.60-39.282.5-39.55-39.23表3.1.7S0℃℉14位0.010.01812位0.040.072.3露点计算露点是一个特殊的温度值,是空气保持某一定湿度必须达到的最低温度。当空气的温度低于露点时,空气容纳不了过多的水分,这些水分会变成雾、露水或霜。露点可以根据当前相对湿度值和温度值计算得出,具体的计算公式如下:LogEW=0.66077+7.5×T/<237.3+T>+log10<>-2Dp=<<0.66077-logEW>×237.3>/<logEW-8.16077>式中:T为当前温度值,SORH为相对湿度值,Dp为露点。3.2模块功能介绍复位电路部分这种复位电路的工作原理是:单片机的复位电路在刚接通电时,刚开始电容是没有电的,电容的电阻很低,通电后,5V的电通过电阻给电容进行充电,电容两端的电会由0V慢慢的升到4V左右〔此时间很短一般小于0.3秒,RC构成的微分电路在上电瞬间产生一个微分脉冲,其宽度大于两个机器周期,89C51将复位。正因为这样,复位脚的电由低电位升到高电位,引起了部电路的复位工作,RST端电压慢慢下降,降到一定电压值以后,即为低电平,单片机开始正常工作〔这是单片机的上电复位,也叫初始化复位;当按下复位键时,电容两端放电,电容又回到0V了,于是又进行了一次复位工作〔这是手动复位原理。图手动复位及晶振电路DS1302时钟电路模块此模块是系统时间的实时显示而设计的,主要由芯片DS1302构成,其中引脚RST、CLK、I/O分别接单片机P3.0、P3.1、P3.2口,属于控制引脚。此模块是产生实时的系统时间和日历,能对某个确定环境的实时温湿度控制起到一定的作用。芯片连接电路简单,时间日期准确。图DS1302时钟电路模块SHT11传感器模块此模块是整个电路设计的信号采集及初步处理的模块,由温湿度传感器芯片SHT11构成,主要的功能结构在前面的芯片介绍中已有,这里不重新介绍。图SHT11传感器模块显示电路模块此模块分为两个显示部分,一个部分是由LCD1604芯片组成的日期时间和实时温湿度显示的电路部分,另一部分是由LCD128×64液晶显示模块组成的电路部分。LCD1604是一个四行每行16字的液晶显示屏,D0-D7接P0口,RS、RW、E接P3.5、P3.6、P3.7起控制作用。LCD128×64组成部分是用来显示"温度和湿度的控制与测量"的,其作用是让人了解此实验的目的,作用不明显,这里不做重点介绍。图LCD1604<左>和LCD128×64〔右显示及其连接电路超限处理电路模块此部分电路是由5个发光二极管和一个蜂鸣报警器构成,分别是D1、D2、D3、D4和D5,蜂鸣器接单片机的P1.0口,发光二极管与单片机的连接部分如图所示。D1、D2、D3、D4、D5分别代表着发光、降温、加热、干燥和加湿,一旦传感器测定的温湿度超过设定的限额,就会产生不同的发光反应,起警示作用,同时蜂鸣报警器连续发出"滴"的声音。图超限处理电路模块3.3整体电路图图整体电路图.第4章软件设计编程软件采用的是Keiluvision3软件,程序采用C语言编程。软件部分在Keil上运行后,能正确显示结果。具体模块由一个C主函数文件和9个H文件构成。H文件如下所示:.reg51.h;<8051的相关参数初始化>absacc.h;intrins.h;<伪本征函数>math.h;〔数学公式函数12864.h;〔128×64液晶显示函数LCD1604.h;〔1604液晶显示函数DS1302.h;〔实时时间/日期产生函数SHT11.h;〔温湿度采集计算函数set_key.h;〔限额报警函数.4.1程序框图主程序框图:单片机开机初始化单片机开机初始化LCD/DS1302/SHT11初始化DS1302运行,确定时间/日期SHT11运行,进行温湿度采集与测量LCD显示实时温湿度检测温湿度是否改变等待NY开始图主程序框图温湿度采集及处理框图:SHT11初始化SHT11初始化启动SHT11等待主机发送指令测量温湿度温湿度计算浮点数转换并发送至主机复位开始图温湿度采集及处理框图LCD显示框图:LCDLCD初始化设置显示位置显示字符开始结束图LCD显示框图4.2主函数解析#include<reg51.h>#include<absacc.h>#include<intrins.h>#include<math.h>#include<12864.h>#include<LCD1604.h>#include<DS1302.h>#include<SHT11.h>#include<set_key.h>voidDelay1ms<unsignedintcount>//延时函数{unsignedinti,j;for<i=0;i<count;i++>for<j=0;j<120;j++>;}main<>{SYSTEMTIMECurrentTime;//定义时间日期结构体SHT_dataa;//定义温湿度测量处理结构体Init_12864<>;//12864的显示*/Initial_DS1302<>;//DS1302初始化*/LCD_Initial<>;//LCD初始化GotoXY<0,0>;//LCD显示函数Print<"Date:">;GotoXY<16,0>;Print<"Temper:">;GotoXY<0,1>;Print<"Time:">;GotoXY<16,1>;Print<"Humidi:">;while<1>{convert_SHT<&aa,TEMP>;//温度转换convert_SHT<&aa,HUMI>;//湿度转换caculation_SHT<&aa>;//温度和湿度的补偿float_convert<&aa>;//将浮点数转换成整型,各个位的数分别保存doing_temp<&aa>;//检测温度是否超限doing_humi<&aa>;//检测湿度是否超限DS1302_GetTime<&CurrentTime>;DateToStr<&CurrentTime>;TimeToStr<&CurrentTime>;GotoXY<5,0>;//第一行显示日期Print<CurrentTime.DateString>;GotoXY<23,0>;//第三行显示温度Print<aa.num_temp>;GotoXY<28,0>;Print<"">;GotoXY<5,1>;//第二行显示时间Print<CurrentTime.TimeString>;GotoXY<23,1>;//第四行显示湿度Print<aa.num_humi>;GotoXY<28,1>;Print<"">;Delay1ms<300>;//延时}}.第5章仿真与调试整个软件通过C语言编程,先在KeilC51集成开发环境下将编好的程序进行编译、调试,调试通过后会生成.HEX文件。具体过程如下:新建一个项目文件,然后新建一个C语言程序,并把新建的C语言程序加到项目中,然后编译项目。建立第一个C项目:=1\*GB3①点击Project菜单,选择弹出的下拉式菜单中的NewProject,如图。图5.1新建项目文件=2\*GB3②选择所要的单片机,本设计选择常用的Ateml公司的AT89C51。=3\*GB3③在项目中创建新的程序文件。执行File->New新建一个文件,然后在文件中进行程序的编写。=4\*GB3④执行File-->Save将编写的程序进行保存。将第一个程序命名为main.c,将文件保存在项目所在的目录中。选"AddFiletoGroup‘SourceGroup1’"弹出文件窗口,选择刚刚保存的文件,按ADD按钮,关闭文件窗,程序文件已加到项目中了。这时在SourceGroup1文件夹图标左边出现了一个小+号,说明文件组中有了文件,点击它可以展开查看。图5.2添加文件=5\*GB3⑤文件加载到项目之后,开始进行编译运行,生成.hex文件。编译结果如下图:图5.3生成.hex文件编译显示没有错误,说明编译顺利通过,已经生成了所需要的.hex文件。接下来在PROTEUS中进行仿真。打开已经绘制好的仿真电路原理图,选中单片机AT89C51,右键单击AT89C51,出现相应的对话框,找到编译好的"*.HEX"文件,然后单击"OK"就可以进行仿真。在下边的图形中,给出了不同的温湿度的显示值,实际温湿度与理论温湿度的差值在误差允许围之〔图5.4,温度和湿度分别为60℃和80﹪,显示为60.03℃和82.37﹪;图5.5,温度和湿度分别为68℃和70﹪,显示为68.06℃和74.35﹪;图5.6,温度和湿度分别为48℃和31﹪图5.4温湿度显示一图5.5温湿度显示二图5.6整体显示.结论单片机的应用如今已经在工业、电子等方方面面展示出了它的优越性,利用单片机在设计电路逐渐成了趋势,它与外围的简单电路再加上优化程序就可以构建任意的产品,使得本设计成为现实。随着单片机的日益发展,它必将在未来显示出更大的活力,为电子设计增加更多精彩。本次设计是基于PROTEUS的数字温湿度的设计,包括硬件电路和软件两部分。设计采用的是高效单片机作为核心,集温度传感器和湿度传感器于一体的SHT11作为主要的采集与测量系统,其中它自带的A/D转换器,使得温湿度测量具有精度高、成本低、体积小、接口简单等优点,还具有良好抗干扰能力。加上优化程序,使得本系统具有很高的实用性。由AT89C51单片机、晶振等组成的最小系统,可以使整个系统正常稳定的工作起来。由LCD为核心的显示电路可以直观的显示测量结果。报警电路的设计采用了声光并用的方式。为了实现系统的智能化,系统采用模块设计,在软件上设计了系统主程序,温湿度采集和处理电路子程序,报警电路子程序,液晶显示子程序,实时的时间日期子程序。由于学习的知识有限,加上时间的仓促和经验的缺乏,本设计整体上的性能还不是十分完善,设计中存在一些需要改进和优化的地方。测量精度有待进一步提高,软件设计也存在不合理之处。但从设计过程中,学到了几种芯片的使用,如:DS1302时钟芯片,LCD1604,SHT11等。对于单片机也有了更进一步的认识,对用于单片机仿真的软件操作能力也明显提高,通过此设计,本人受益颇丰。.致经过近两个多月的努力,在英老师的悉心指导下我顺利的完成了毕业设计。此次的毕业设计使我受益匪浅。做毕业设计不仅是对我所学知识的一次检验,更是对我能力的一个挑战。从接触到毕业设计题目的那一刻起,我就开始仔细认真的查找相关资料和文献,我一直都在尽自己最大的努力去完成它。完成毕业设计后,我发现自己不仅拓宽了专业理论知识,而且专业外的知识也丰富了不少,实际动手能力更是提高了很多。在做毕业设计的过程中,英老师不仅给我提了许多指导性的意见,还倾注了大量的心血。她兢兢业业的工作作风、科学严谨的治学态度和宽以待人、认真负责的优秀品质给我留下了非常深刻的印象。没有英老师方向性的指导和帮助,我是不可能按时完成毕业设计的。感英老师在百忙之中给予我的精心指导和帮助。在做毕业设计的过程中,英老师帮助我解决了许多新的疑点和难点,使我顺利的完成了毕业设计。除此之外从老师那里,我还学到了严谨的工作态度和科学的学习方法,也学会了如何做人的道理,所有这些对我今后的成长成才都将产生深远的影响。在此,我要向我的导师英老师表示最衷心的感!另外,本设计也得到了其他老师、同学的支持和帮助,谨在此一并感!.参考文献[1]文涛.单片机语言C51典型应用设计[M].:人民邮电,2001,12:25-29[2]周灵彬.基于Proteus的电路与PCB设计[M].:电子工业,2010.8[3]毅刚主编.单片机原理及应用[M].:高等教育,2009[4]光飞,楼然苗,胡佳文等.单片机课程设计实例指导[M].:航空航天大学,2004,105-125[5]凌玉华.单片机原理及应用系统设计[M].:中南大学,2006,222-228[6]钱显毅.传感器原理与应用[M].东南大学,2008.7[7]建华,亮.单片机应用系统设计与产品开发[M].:人民邮电,2004.11[8]谭浩强.C程序设计[M].:清华大学,2005.7[9]常喜茂,孔英会,付小宁.C51基础与应用实例[M].:电子工业2009.[10]余凯,吴鸣山,项绮明.传感器应用电路300例[M].:电子工业,2008.3[11]康华光,大钦.模拟电子电路[M].:高教育,2004:335-336.[12]茂泰.智能仪器原理及应用[M].:电子工业,2006:130-132.[13]光飞,楼然苗,胡佳文等.单片机课程设计实例指导[M].:航空航天大学,2004,105-125[14]佟玲,玉芬,本华.智能温湿度监控系统的组成与发展[J].农业大学工程学院学报.2006,23〔4;25-30[15]PualHorowitzandWinfield.TheArtofElectronics.2nded[M].CambridgeUniversityPress,1999:1-1125.[16]AllanR.Hambley.Electronics.2nded[M].PrenticeHallInc.2000:1-461.[17]hnsonDE,JohnsonJR.MooreHP.Ahandbookofactivefilters[M].NewJersry,1980:1-72...附录A系统源程序DS1302.h#ifndef_REAL_TIMER_DS1302#define_REAL_TIMER_DS1302sbitDS1302_CLK=P3^1;//实时时钟时钟线引脚sbitDS1302_IO=P3^2;//实时时钟数据线引脚sbitDS1302_RST=P3^0;//实时时钟复位线引脚sbitACC0=ACC^0;sbitACC7=ACC^7;typedefstruct__SYSTEMTIME__{unsignedcharSecond;unsignedcharMinute;unsignedcharHour;unsignedcharDay;unsignedcharMonth;unsignedcharYear;unsignedcharDateString[9];unsignedcharTimeString[9];}SYSTEMTIME;//定义的时间类型#defineAM<X>X#definePM<X><X+12>//转成24小时制#defineDS1302_SECOND0x80#defineDS1302_MINUTE0x82#defineDS1302_HOUR0x84#defineDS1302_DAY0x86#defineDS1302_MONTH0x88#defineDS1302_YEAR0x8C#defineDS1302_RAM<X><0xC0+<X>*2>//用于计算DS1302_RAM地址的宏voidDS1302InputByte<unsignedchard>//实时时钟写入一字节<部函数>{unsignedchari;ACC=d;for<i=8;i>0;i-->{DS1302_IO=ACC0;//相当于汇编中的RRCDS1302_CLK=1;DS1302_CLK=0;ACC=ACC>>1;}}unsignedcharDS1302OutputByte<void>//实时时钟读取一字节<部函数>{unsignedchari;for<i=8;i>0;i-->{ACC=ACC>>1;//相当于汇编中的RRCACC7=DS1302_IO;DS1302_CLK=1;DS1302_CLK=0;}return<ACC>;}voidWrite1302<unsignedcharucAddr,unsignedcharucDa>//ucAddr:DS1302地,ucData:{DS1302_RST=0;DS1302_CLK=0;DS1302_RST=1;DS1302InputByte<ucAddr>;//地址,命令DS1302InputByte<ucDa>;//写1Byte数据DS1302_CLK=1;DS1302_RST=0;}unsignedcharRead1302<unsignedcharucAddr>//读取DS1302某地址的数据{unsignedcharucData;DS1302_RST=0;DS1302_CLK=0;DS1302_RST=1;DS1302InputByte<ucAddr|0x01>;//地址,命令ucData=DS1302OutputByte<>;//读1Byte数据DS1302_CLK=1;DS1302_RST=0;return<ucData>;}voidDS1302_SetProtect<bitflag>//是否写保护{if<flag>Write1302<0x8E,0x10>;elseWrite1302<0x8E,0x00>;}voidDS1302_SetTime<unsignedcharAddress,unsignedcharValue>//设置时间函数{DS1302_SetProtect<0>;Write1302<Address,<<Value/10><<4|<Value%10>>>;voidDateToStr<SYSTEMTIME*Time>{Time->DateString[0]=Time->Year/10+'0';Time->DateString[1]=Time->Year%10+'0';Time->DateString[2]='-';Time->DateString[3]=Time->Month/10+'0';Time->DateString[4]=Time->Month%10+'0';Time->DateString[5]='-';Time->DateString[6]=Time->Day/10+'0';Time->DateString[7]=Time->Day%10+'0';Time->DateString[8]='\0';}voidTimeToStr<SYSTEMTIME*Time>{Time->TimeString[0]=Time->Hour/10+'0';Time->TimeString[1]=Time->Hour%10+'0';Time->TimeString[2]=':';Time->TimeString[3]=Time->Minute/10+'0';Time->TimeString[4]=Time->Minute%10+'0';Time->TimeString[5]=':';Time->TimeString[6]=Time->Second/10+'0';Time->TimeString[7]=Time->Second%10+'0';Time->DateString[8]='\0';}voidDS1302_GetTime<SYSTEMTIME*Time>{unsignedcharReadValue;ReadValue=Read1302<DS1302_SECOND>;Time->Second=<<ReadValue&0x70>>>4>*10+<ReadValue&0x0F>;ReadValue=Read1302<DS1302_MINUTE>;Time->Minute=<<ReadValue&0x70>>>4>*10+<ReadValue&0x0F>;ReadValue=Read1302<DS1302_HOUR>;Time->Hour=<<ReadValue&0x70>>>4>*10+<ReadValue&0x0F>;ReadValue=Read1302<DS1302_DAY>;Time->Day=<<ReadValue&0x70>>>4>*10+<ReadValue&0x0F>;ReadValue=Read1302<DS1302_MONTH>;Time->Month=<<ReadValue&0x70>>>4>*10+<ReadValue&0x0F>;ReadValue=Read1302<DS1302_YEAR>;Time->Year=<<ReadValue&0x70>>>4>*10+<ReadValue&0x0F>;}voidInitial_DS1302<void>{unsignedcharSecond=Read1302<DS1302_SECOND>;if<Second&0x80>DS1302_SetTime<DS1302_SECOND,0>;}/*******************************************************************voidBurstWrite1302<unsignedchar*pWClock>//往DS1302写入时钟数据<多字节方式>{unsignedchari;Write1302<0x8e,0x00>;//控制命令,WP=0,写操作?DS1302_RST=0;DS1302_CLK=0;DS1302_RST=1;DS1302InputByte<0xbe>;//0xbe:时钟多字节写命令for<i=8;i>0;i-->//8Byte=7Byte时钟数据+1Byte控制{DS1302InputByte<*pWClock>;//写1Byte数据pWClock++;}DS1302_CLK=1;DS1302_RST=0;}voidBurstRead1302<unsignedchar*pRClock>//读取DS1302时钟数据<时钟多字节方式>{unsignedchari;DS1302_RST=0;DS1302_CLK=0;DS1302_RST=1;DS1302InputByte<0xbf>;//0xbf:时钟多字节读命令for<i=8;i>0;i-->{*pRClock=DS1302OutputByte<>;//读1Byte数据pRClock++;}DS1302_CLK=1;DS1302_RST=0;}voidDS1302_TimeStop<bitflag>//是否将时钟停止{unsignedcharData;Data=Read1302<DS1302_SECOND>;DS1302_SetProtect<0>;if<flag>Write1302<DS1302_SECOND,Data|0x80>;elseWrite1302<DS1302_SECOND,Data&0x7F>;}/******************************************************************/#endifLCD1604.h#ifndefLCD_CHAR_1604#defineLCD_CHAR_1604#include<intrins.h>//PortDefinition***************************************************sbitLcdRs=P3^5;sbitLcdRw=P3^6;sbitLcdEn=P3^7;sfrDBPort=0x80;//P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口//部等待函数**************************************************unsignedcharLCD_Wait<void>{LcdRs=0;LcdRw=1;_nop_<>;LcdEn=1;_nop_<>;//while<DBPort&0x80>;//LcdEn=0;retur

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论