摘要电子万年历是一种非常广泛日常计时工具,对现代社会越来越流行。它可以对年、月、日、周日、时、分、秒进行计时,还具有闰年补偿等多种功能。本系统选用DALLAS公司生产的日历时钟芯片DS12C887来作为实时时数字万年历采用直观数字显示,可以同时显示年、月、日、周日、时、分、秒和温度等信息,还具有定时和时间校准等功能。该电路采用AT89S52单片机作为核心,功耗小,能在3V的低压工作,电压可选用3~5V电压供电。本系统硬件部分由AT89S52单片机、DS12C887时钟芯片、1062液晶显环境下用C51语言编写,包括时间设置、时间显示、定时设置、定时闹钟、温度显示。没有良好的基础知识和实践经验会受到很大限制,每项功能实现时需要那种硬件,程序该如何编写,算法如何实现等,没有一定的基础就不可能很好的实现。在编写程序过程中发现以现有的相关知识要独自完成编写任务困难重重,在老师和同学的帮助下才完成了程序部分的编写。文章后附有电路原理图、程序清单,以供读者参考。因水平有限,难免有疏落不足之处,敬请老师和同学能给与批评指正。关键词:时钟芯片DS12C887;温度采集DS18B20;单片机AT89S52;液晶显示1602目录第一章概述2§1.1实时时钟研究的背景及意义2§1.2论文主要研究内容31.2.1系统设计实现的目标31.2.2系统的总体设计3第二章硬件电路设计3§2.1单片机最小系统3§2.2时钟芯片电路42.2.1时钟芯片引脚介绍42.2.2时钟芯片DS12C887,其内存空间介绍52.2.34个控制寄存器介绍6§2.4温度采集电路设计82.4.1DS18B20的主要特性82.4.2DS1820的基本操作指令82.4.3温度测量的步骤92.4.4DS18B20的操作时序9§2.51602LCD液晶显示屏112.5.11602字符型LCD简介112.5.21602引脚功能说明112.5.31602LCD的指令说明及时序112.5.41602LCD的RAM地址映射及标准字库表132.5.51602LCD的一般初始化(复位)过程152.4.61602LCD的电路连接15§2.6蜂鸣器闹铃电路15§2.7按键调整电路16§2.8电源模块16第三章软件部分设计17§3.1主程序流程17§3.2时间设置子程序流程17§3.3闹钟设置子程序流程18§3.4程序设计问题193.4.1按键抖动问题193.4.2蜂鸣器设置193.4.3液晶显示的设置193.4.4中断设置193.4.5时钟芯片设置20结束语22致谢词23参考文献24附件125第一章概述§1.1实时时钟研究的背景及意义在现实我们生活中每个人都可能有自己的时钟,光阴在永不停息的流逝,有了时钟人们就能随着时间有计划的过着每一天。然而现在绝大部分的时钟有的需要不断地跟换电池,有些时钟需要外接电源,如果一旦电池没电时钟日历芯片DS12C887就能解决这一问题。该器件能提供实时时钟(RTC)/日历、定时闹钟。少于31天的月份,月末日期可自动调整,其中包括闰年补偿。该器件还可以工作于24小时货代/PM指示的12小时格式。一个精密的温度补偿电路用来监视Vcc的状态。如果检测到主电源故障,该器件可以自动振荡器和寄存器供电长达10年之久。本时钟还具有环保、走时无噪音、低功耗等非实时时钟不具有的功能。该实时时钟不但可以作为家用,而且更可以在公共场合使用,如车站、码头、商场等场所。§1.2论文主要研究内容1.2.1系统设计实现的目标本文是以实时时钟芯片DS12C887和AT89S52单片机为主要研究对象,着重进以及运用18B20进行实时温度检测。主要内容包括:实时温度显示;年月日星期时分秒显示;年月日星期时分秒调整;闹钟定时小时分钟和秒;1.2.2系统的总体设计采用AT89S52作为主控单片机,时钟模块选用DS12C887作为时钟芯片,温度模块选用DS18B20作为温度传感器,显示模块选用LCD1602,设置部分选用按键电路。AT89S52与MCS-51单片机产品兼容、8K字节在系统可编程Flash存储器、1000次擦写周期、全静态操作:0Hz~33Hz、三级加密程序存储器、双数据指针、掉电标识符。DS12C887实时时钟芯片功能丰富,可以用来直接代替IBMPC上的时钟日历芯片DS12887,同时,它的管脚也和MC146818B、DS12887相兼容。由于DS12C887能够自动产生世纪、年、月、日、时、分、秒等时间信息,其内部又增加了世纪寄存器,从而利用硬件电路解决子“千年”问题;DS12C887中一天内的时间记录,有12小时制和24小时制两种模式。用户还可对DS18B20可组网数字温度传感器芯片封装而成,具有耐磨耐碰,体积小,可编程的分辨率为9~12位温度转换为12位数字格式最大值为750毫秒用户可定义的非易失性温度报警设置。DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。第二章硬件电路设计§2.1单片机最小系统本系统以AT89S52单片机为核心,本系统选用11.0592MHZ的晶振,,使得单片机有合理的运行速度。起振电容30pF对振荡器的频率高键高电平复位。AT89S52单片机最小系统电路设计如图2.1所示。图2-1单片机最小系统§2.2时钟芯片电路2.2.1时钟芯片引脚介绍时钟芯片DS12C887,其引脚分布图如下所示图2-2时钟引脚分布MOT(1脚):总线时序模式选择脚。接高电平,选择MOTOROLA总线时;序;接低电平或悬空,择选择INTEL总线时序。NC(2,3,16,20,21,22脚):悬空脚。AD0~AD7(4~11脚):地址/地址数据复用总线引脚。CS(13脚):片选脚,低电平有效。AS(14脚):地址锁存输入脚。下降沿时,地址被锁存,紧接着的上升沿来时地址被清除。R/W(15脚):读/写输入脚。在选择MOTOROLA总线时序模式时,此引脚用于指示当前的读写周期,高电平指示当前为读周期,低电平指示当前为写周期;选择INTEL中线时序模式时,能信号(/WE)DS(17脚):选择MOTOROLA总线时序模式时,此引脚为数据锁存脚;选择INTEL总线时序模式时,此引脚为读输入脚,低电平有效,相当于典型的内存的输出使能信号(/OE)RESET(18脚):复位脚,低电平有效,复位不会影响到时钟、日历和RAM。IRQ(19脚):中断申请输出脚,低电平有效,可作为微处理器的中断输入。SQW(23脚):方波信号输出脚。可通过设置寄存器位SQWE关断此信器编程予以改变。VCC(24脚):+5v电源端。2.2.2时钟芯片DS12C887,其内存空间介绍图2-3时钟、日历和闹钟数据模式——BCD模式(DM=0)图2-4时钟、日历和闹钟数据模式——二进制模式(DM=1)2.2.34个控制寄存器介绍DS12C887有4个控制寄存器,在任何时间都可以进行访问,即使处于更新周期。寄存器A字节的内容如下。MSBLSBUIPDV2DV1DV0RS3RS2RS1RS0UIP:更新标志位。为只读位且不受复位操作的影响,为1时,表示即将发生的数据更新;为0时,表示至少244US不会更新数据。当UIP为0时,可以获得所有时钟、日历、闹钟信息。将寄存器B中的SET位置1可以限制任何DV2、DV1、DV0:此3位为010时将打开晶振,并开始计时。RES3、RES2、RES1、RES0:用于设置周期性中断产生的时间周期和输出方波的频率。寄存器B字节的内容如下。MSBLSBSETPIEAIEUIESQWEDM24/12DSESET:设置位,可读写,不受复位操作影响。为0时,不处于设置状态,芯片进行正常时间数据更新;为1时,抑制数据更新,可以通过程序设定时间和日历信息。PIE:周期性中断使能位,可读写,复位时清除此位。为1时,允许寄存器C中的周期中断标志位PF,驱动/IRQ引脚为低产生中断信号输出,中断信号产生的周期由RS3~RE0决定。志位AF、闹钟发生时就会通过/IRQ引脚产生中断输出。UIE:数据更新结束中断使能位,可读写。复位或者SET位为1时清除此位。为1时允许寄存器C中的更新结束标志UF,更新结束时就会通过/IRQ引脚产生中断输出。低电平;为1时,SQW引脚输出方波信号,其频率由RS3~RS0决定。DM:数据模式位,可读写,不受复位操作影响。为0时,设置时间、日历信息为二进制数据;为1时,设置为BCD码数据。为12小时模式;为1时,设置为24小时模式。DSE:为1时,会引起两次特殊的时间更新;4月的第一个星期日凌晨1:59:59会直接更新到3:00:00,10月的最后一个星期日凌晨1:59:59会直接更新到1:00:00;为0时,时间信息正常更新,此位可读写,不受复位操作影响。寄存器C字节内容如下。MSBLSBIRQFPFAFUF0000IQRF:中断申请标志位。为1时,/IRQ引脚为低,产生中断申请。当PF、PIE为1时或者AF、ATE为1或者UF、UIE为1时,此位为1,否则置0.PF:中期中断标志位。为1时,它是只读位,和PIE位状态无关,由复位操作或者寄存器C操作清除。AF:闹钟中断标志位。为1时,表示当前时间和闹钟设定时间一至,由复位操作或读寄存器C操作清除。UF:数据更新结束中断标志位。每个更新周期后此位都会置1,当UIE位位置1时,UF若为1就会引起IRQF置1,将驱动/IRQ引脚为低电平,申请中寄存器D字节的内容如下。MSBLSB00000000VRT;RAM和时间有效位。用于指示和VBAT引脚连接的电池状态。此位不可写,也不受操作为影响,正常情况下读取时总去为1,如果出现读取为0的情况,则表示电池耗尽,时间数据和RAM中的数据就会出现问题。专门用于某些特别功能,而是可以在未处理器程序中作为非易失性内存空间使用。§2.4温度采集电路设计2.4.1DS18B20的主要特性适应电压范围更宽,电压范围:3.0~5.5V,在寄生电源方式下可由数据线供电。②独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。③DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温④DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内。⑥可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温。⑦在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最⑧测量结果直接输出数字温度信号,以一线总线串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力。⑨负压特性:电源极性接反时,芯片不会因发热而烧毁,但不能正常工作。2.4.2DS1820的基本操作指令DS1820的操作指令分为ROM操作命令和存储器操作命令。(1)、ROM操作命令及其含义ReadROM指令代码(33h):如果只有一片DS1820,可用此命令读出其序列号,若在线DS1820多于一个,将发生冲突。MatchROM指令代码(55h):多个DS1820在线时,可用此命令匹配一个给定序列号的DS1820,此后的命令就针对该DS1820。所有DS1820。SearchROM指令代码(F0h):用以读出在线的DS1820的序列号。AlarmSearch指令代码(ECh):当温度值高于TH或低于TL中的数值(2)、存储器操作指令代码及其含义WriteScratchpad指令代码(4Eh):写两个字节的数据到温度寄存器。ReadScratchpad指令代码(BEh):读取温度寄存器的温度值。CopyScratchpad指令代码(48h):将温度寄存器的数值拷贝到EERAM中,保证温度值不丢失。ConvertT指令代码(44h):启动在线DS1280做温度A/D转换。RecallE2指令代码(B8h):将EERAM中的数值拷贝到温度寄存器中。ReadPowerSupply指令代码(B4h)