资源描述
华侨大学厦门工学院本科生毕业设计(论文)题 目: 基于DS12C887时钟芯片的高精度时钟的设计姓 名: 吴挺 学 号: 0902106019 系 别: 电气工程 专 业: 电气工程及其自动化 年 级: 2009 指导教师: 刘晓东 年 月 日独创性声明本毕业设计(论文)是我个人在导师指导下完成的。文中引用他人研究成果的部分已在标注中说明;其他同志对本设计(论文)的启发和贡献均已在谢辞中体现;其它内容及成果为本人独立完成。特此声明。论文作者签名: 日期: 关于论文使用授权的说明本人完全了解华侨大学厦门工学院有关保留、使用学位论文的规定,即:学院有权保留送交论文的印刷本、复印件和电子版本,允许论文被查阅和借阅;学院可以公布论文的全部或部分内容,可以采用影印、缩印、数字化或其他复制手段保存论文。保密的论文在解密后应遵守此规定。论文作者签名: 指导教师签名: 日期: 基于DS12C887时钟芯片的高精度时钟的设计摘要随着社会的发展人们的生活节奏越来越快,每天的工作,学习,休息的时间都安排的很紧,需要一个时钟准确的报时。人们对时钟的要求越来越高,不仅要求每天的的时间误差小于几毫秒,还要求具有定时闹钟,具有万年历等功能。传统的日历电子钟元器件多、维修麻烦、误差大、功能更新不方便。DS12C887时钟芯片能够自动显示年、月、日、时、分、秒等时间信息,同时还具有校时,报时,闹钟等功能。DS12C887也可以很方便的由软件编程进行功能的调整或增加。所以设计基于DS12C877时钟芯片的高精度时钟的设计具有十分重 要的现实意义和实用价值。关键词:DS12C887,时钟芯片,单片机STC89C52,高精度时钟Design of high precision clock based on clock chip DS12C887 AbstractWith the development of society, people life rhythm faster and faster, a days work, study and rest time arrangement is very tight, need a clock tell the time accurately. People is higher and higher requirement for the clock, every day not only requires the time error is less than a few milliseconds, also requires a timing alarm clock, a calendar, and other functions. Traditional electronic clock calendar components, maintenance trouble, big error, function more update is not convenient. Chip DS12C887 clock automatically display year, month, day, hours, minutes and seconds time information, but also with the school, the time, alarm clock, and other functions. DS12C887 can also be very convenient by the software programming to adjust function or to increase. So the design is based on DS12C877 clock chip design of high precision clock has very important practical significance and practical value.Keywords: DS12C887,clock chip microcontroller STC89C52,high-precision clock目 录第1章 绪论1 1.1 研究背景1第2章 方案论证选择2 2.1时钟计时的方案选择2 2.2显示部分的方案选择3第3章 系统组成4 3.1.1 系统原理与硬件设计4 3.1.2 硬件选择5 3.1.3单片机STC89C52中文资料5 3.1.4 STC单片机最小系统9第4章 系统硬件电路设计10 4.1.1晶振电路10 4.1.2复位电路10 4.1.3程序下载接口11 4.2.1 1602液晶概述11 4.2.2 1602液晶引脚功能11 4.2.3 1602读写时序图12 4.2.4 1602LCD的一般初始化(复位)过程14 4.2.5 1602LCD的电路连接15 4.3.1 DS12C887概述15 4.3.2 DS12C887引脚功能16 4.3.3 DS12C887读写时序17 4.3.4 DS12C887流程图17 4.3.5 时钟芯片引脚介绍18 4.3.6 4个控制寄存器介绍19 4.4闹铃电路21 4.5 独立键盘电路21 4.6 电源模块21结论23参考文献25谢辞26附录1 硬件实物图27附录2 程序代码28第1章 绪论1.1 研究背景传统时钟芯片在电源断电时内部的时间芯片就会停止计时,所以需要额外使用一个备用的电源向时钟芯片供电,这样会使系统功耗增大,体积变大。单一功能定时时钟只提供年,月,日,时,分,秒的时间信息和日历功能,多功能时钟除了提供时间信息和日历功能以外,通常还具有报警,定时,闹钟等功能。采用单片机STC89C52和时钟日历芯片DS12C887设计并且制作出来的电子钟,一个月的时间里只有1秒内的误差1,比DS1302,DS1307,PCF8485等的芯片设计出来的时钟更精确2时钟按照工具接口方式不同可以分为并行接口时钟和串行接口时钟,并行接口时钟的特点是:传输速度快,但是硬件数目多,接线数目多,产品体积大。串行接口时钟的特点:传输线少,成本低,产品体积小。缺点是传输速度慢。时钟芯片的种类也越来越多,对时钟芯片的要求越来越高,比如精度高,体积小,功耗低,性能稳定,功能齐全,使用方便,技术更新灵活。所以设计一款体积小,工作稳定,时间精确的时钟具有十分重要的意义。第2章 方案论证选择2.1时钟计时的方案选择 方案一:传统的基于单片机的时钟设计可以采用单片机内部的晶振来产生脉冲,然后通过单片机内部的计时器经过分频产生秒脉冲,然后通过软件编程来实现时钟的显示,这种设计方案的优点是外围器件少,电路简单清晰,电路焊接容易,出问题的故障几率小。但是这种方案需由软件编程来实现秒脉冲的产生,编程相对来说比较复杂,而且也不利于排除故障,维修起来不方便。由于单片机内部时钟会产生误差,即使设计时间误差补偿程序也很难实现提供准确时间的功能。这种设计还有一个非常大的缺点就是如果单片机断电,芯片里的时间计时就停止,再次上电时又从初始设定重新计时,这样就需要在每次上电都调整时间,比较麻烦。 方案二:在传统的基于单片机的数字时钟设计的基础上经过一些改进,引入DS12C887时间芯片,本次设计可分为两部分:硬件部分包括:体积小功能丰富的STC89C52单片机3、具有掉电保护的DS12C887时钟芯片4电路简单易于实现的1602LCD液晶显示器5,键盘输入电路等。具体说来,系统智能控制部分由单片机及其相关的外围电路6组成,外围电路包括解决死机等问题的复位电路7、波形稳定的晶振电路8、键盘设计、闹铃电路以及合适的直流电源电路9。利用单片机将复位电路、能够降低功耗和减少显示器外部引线的显示电路10、电源电路等正确的连接在一起,并通过单片机的编程来实现本次设计任务中的要求。软件部分主要包括了主程序模块,DS12C887模块,LCD1602模块,键盘控制模块。DS12C887芯片具有掉电保护功能,内部自带锂电池,能够在断电的情况下保持时间信息,等到外部电路恢复供电之后能够不必调整时间,为时钟的校时操作节省了很多时间,而且这种设计更节能,在需要观察时间的时候比如白天就可以给主电路通电。而在夜晚不需要观察时钟的时候就可以给主电路断电,这样可以节约大量电能。 时间芯片DS12C887采用了内部集成晶振的电路,并且具有内部温漂补偿电路设计。能够准确计时,提供精确的时间,这样就简化了电路的器件选择,另外也使程序的设计更加简洁。在硬件设计方面,由于只增加了一个DS12C887时间芯片,因此并不是特别复杂,而且这种独立计时的设计使得产品排故更加方便。第二种方案更加准确而且电路硬件设计更加简单,软件设计更加简洁,因此采用第二种方案。2.2显示部分的方案选择1.数码管显示,8段数码管显示虽不需要复杂的驱动程序,可视范围宽,但硬件制作成本高,硬件电路的设计复杂。2. LCD1602 液晶显示,液晶显示最大的特点就是界面简洁,已经广泛应用于现代工业控制和智能化仪器仪表等地方,己经成为单片机开发领域典型模块之一。能够方便的显示文字和数字。3.LCD1602液晶显示时屏幕不会有闪烁。液晶操作方便,且与单片机的接口电路简单,接线面积小,大大提高了万年历的性能。所以最终选择LCD1602液晶显示方案。第3章 系统组成3.1.1 系统原理与硬件设计本次的设计题目是电子万年历设计,要求实现年、月、日、时、分、秒的正常显示,需要硬件和软件的结合来实现。本次设计利用时钟日历芯片DS12C887的特性和STC89C52单片机的功能利用实现的。根据设计的要求万年历要显示年、月、日、时、分、秒的显示同LCD1602。在明确本次设计思路之后,画出设计框图,总体框图如图2.1所示。图1 设计总体框图图2 系统电路原理图3.1.2 硬件选择(1)时钟芯片选择 选用DS12C887时钟芯片。(2)单片机的选择 选用STC89C52单片机,并配备11.0592MHz晶振,复位电路采用上电复位。(3)显示电路选择 采用LCD1602液晶显示。(4)电源选择 采用直流5V电源供电。3.1.3单片机STC89C52中文资料STC89C52 是STC公司生产的低电压,高性能CMOS 8位单片机片内含8K byTES的可反复擦写的只读程序存储器(PEROM)和256 bytes的随机存取数据存储器(RAM),器件采用STC公司的高密度、非易失性存储技术生产,与标准MCS-51指令系统及8052 产品引脚兼容,片内置通用8位中央处理器(CPU )和FLASH由存储单元, STC89C52单片功能强大,适用于许多电子产品。主要性能参数:1.与Mcs-51产品指令和引脚完全兼容。2.8字节可重擦写FLASH闪速存储器3.1000 次擦写周期4.全静态操作:0HZ-24MHZ5.三级加密程序存储器6.256X8字节内部RAM7.32个可编程I/0口线8.3个16 位定时计数器9.8个中断源10.可编程串行UART通道11.低功耗空闲和掉电模式图3 STC89C52外部引脚图Vcc:电源电压GND:地线P0:P0口是一组8位漏极开路型双向1/O 口,也即地址/数据总线复用口。作为输出口用时每位能吸收电流的方式驱动8个TTL 逻辑门电路,对端口P0 写“1”时,可作为高阻抗输入端用。当访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部 上拉电阻。在FLASH由编程时,P0口接收指令字节,而在程序校验时,输出指令字 节,校验时,要求外接上拉电阻。P1口:PI 是一个带内部上拉电阻的8位双向I/O口,Pl的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻某个引脚被外部信号拉低时会输出一个电流IIL与AT89C51不同之处是,Pl.0 和P1.1还可分别作为定时/计数器2 的外部计数输入(Pl.0/T2 )和输入(P1.1/T2EX) , 参见图3 FLASH编程和程序校验期间,Pl接收低8位地址。图3 PI.O 和PI.l 的第二功能口:P2 是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑电路。对端口P2写“l,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(llt )。在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOvxDPTR 指令)时,P2送出高8 位地址数据。在访问8位地址的外部数据存储器、如执行MOVXRI指令)时,P2口输出P2锁存器的内容。FLASH编程或校验时,P2亦接收高位地址和一些控制信号。P3口:P3口是一组带有内部上拉电阻的8位双向I/O口。P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对P3口写入“1”时,内部上拉电阻把它们被拉高,并作为输入的端口。这个时候,被外部拉低的P3口将用上拉电阻输出电流(IIL) . P3口除了作为一般的I/0口线外,更重要的用途是它的第二功能,如图表1:表1端口引脚第二功能P3.0RXD(串行输入口P3.1TXD(串行输出口P3.2INTO(外中断0P3.3INTO(外中断l)P3.4TO (定时计数器0 )P3.5Tl (定时计数器l )P3.6WR(外部数据存储器写选通)P3.7RD(外部数据存储器读选通) 此外,P3口还接收一些用于FLASH闪速存储器编程和程序校验的控制信号。RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上的高电平时单片机复位。ALE/PROG:当访问外部程序存储器或数据存储器的时候,ALE(地址锁存允许)输出脉冲用来锁存低8位字节的地址通常,ALE依然以时钟振荡频率的1/6输出固定的脉冲信号,所以可以用来实现对外输出时钟或用于定时目的。每次访问外部数据存储器时将跳过一个ALE脉冲。对Flash存储器编程的时候,这个引脚还用于输入编程脉冲(PROG)。可以通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位可禁止ALE操作。该位置位后,只有一条MOVX和MOVC指令才能将ALE激活,另外,此引脚会被拉高一点点,当单片机执行外部程序得时候,应该把ALE设置为禁止。PSEN:程序储存允许PSEN输出是外部程序存储器的读选通信号,当AT89C52由外部程序存储器取指令时,每个机器周期两次PSEN有效,就是输出两个脉冲。这个时候,当访问外部数据存储器时,就会跳过两次PSEN信号。EA/VPP:外部访问允许。欲使CPU 仅访问外部程序存储器(地址为0000H-FFFFH ) , EA端必须保持低电平(接地)如EA端接在高电平上, CPU就执行内部程序存储器中的指令。flash存储器编程时,该引脚加上+12V的编程允许电源VPP,该器件必须使用12V编程电压VPP 。XTAL1:振荡器的反相放大器的及内部时钟发生器的输入端XTAL2:振荡器的反相放大器的输出端。AT89C52的特殊功能是,在AT89C52 片内存储器中,80H-FFH 共128 个单元为特殊功能寄存器(SFR),SFR 的地址空间映象如表2 所示。并非所有的地址都被定义,从80HFFH 共128 个字节只有一部分被定义,还有相当一部分没有定义。对没有定义的单元读写将是无效的,读出的数值将不确定,而写入的数据也将丢失。不应将数据写入未定义的单元,由于这些单元在将来的产品中可能赋予新的功能,在这种情况下,复位后这些单元数值总是“0”。AT89C52除了有AT89C51所有的定时/计数器0 和定时/计数器1 外,还增加了一个定时/计数器2。定时/计数器2 的控制和状态位位于T2CON,T2MOD,寄存器对(RCAO2H、RCAP2L)是定时器2 在16 位捕获方式或16 位自动重装载方式下的捕获/自动重装载寄存器。3.1.4 STC单片机最小系统图4 单片机最小系统STC单片机是一种高性能、低功耗的8位CMOS微处理芯片, STC单片机虽然功能强大,但要想完成其强大的功能,单靠它也是不的行的,因此要让它运行起来,就要创设其工作的环境,即最小系统,STC单片机最小系统如图1所示,它包括由一个晶振,两个电容组成的振荡电路,一个复位按钮一个10UF电容和一个10K电阻组成的复位电路,电源电路三个电路组成。本系统以STC89S52单片机为核心,使用11.0592MHZ的晶振,复位电路为按键高电平复位。第4章 系统硬件电路设计4.1.1晶振电路图5 晶振电路在晶振电路中,C1、C2为晶振的负载电容,分别接在晶振的两个脚上和对地的电容,电路中取了30PF。因为晶振与单片机的振荡电路中脚XTAL0和脚XTAL1会产生偕波,虽然谐波对电路的影响不大,但是会影响电路中时钟振荡器的稳定性. 在晶振的脚XTAL0和脚XTAL1之间接分别接入两个5pf-30pf的瓷片电容接可以增加电路的稳定性。4.1.2复位电路图6 复位电路单片机复位电路有上电自动复位和手动复位两种方式。上电复位要求接通电源后,自动进行复位操作。手动复位要求接通电源的前提下,在单片机运行的条件下,在单片机运行期间,用按钮开关操作使单片机进行复位的操作。这里采用的是手动复位。4.1.3程序下载接口图7 程序下载接口图如图可接插USB口,从而获取+5V的电源。RXD,TXD用于下载程序、串口通信用。通过计算机把程序下载到单片机中。4.2.1 1602液晶概述1602LCD是指显示的字符和数字为16X2,即可以显示两行,每行16个字符液晶模块共32个字符和数字。1602LCD主要技术参数:1.显示大小:162个字符2.芯片额定电压:4.55.5V3.额定电流:2.0mA(5.0V)4.工作时的电压:5.0V4.2.2 1602液晶引脚功能表2 液晶引脚功能引脚符号功能说明1VSS一般接地2VDD接电源正极(+5V)3V0液晶显示器对比度调整端,接正电源时对比度最低,接地时对比度最高。4RSRS是选择两种寄存器,当高电平1时选择数据寄存器、当低电平0时选择指令寄存器。5R/WR/W是选择两种读写信号线,高电平1时进行读操作,低电平0时进行写操作6EE(或EN)端为使能端,下降沿使能。7DB0双向数据总线第0位(最低位)8DB1双向数据总线第1位9DB2双向数据总线第2位10DB3双向数据总线第3位11DB4双向数据总线第4位12DB5双向数据总线第5位13DB6双向数据总线第6位14DB7双向数据总线第7位(最高位),是读忙标志位15BLA背光电源正极16BLK背光电源负极4.2.3 1602读写时序图1602液晶模块内部的控制器一共具有11条控制指令,如表3所示:表3序号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3置输入模式00000001I/DS4显示开/关控制0000001DCB5光标或字符移位000001S/CR/L*6置功能00001DLNF*7置字符发生存贮器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01BF计数器地址10写数到CGRAM或DDRAM)10要写的数据内容11从CGRAM或DDRAM读数11读出的数据内容表3字符控制命令说明:通过指令编程来实现1602液晶模块的读写操作、屏幕和光标的操作。(其中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:读出数据。芯片时序表如下:表4读状态输入RS=L,R/W=H,E=H输出D0D7=状态字写指令输入RS=L,R/W=L,D0D7=指令码,E=高脉冲输出无读数据输入RS=H,R/W=H,E=H输出D0D7=数据写数据输入RS=H,R/W=L,D0D7=数据,E=高脉冲输出无图8 1602读写时序图4.2.4 1602LCD的一般初始化(复位)过程1.延时15mS2.写指令38H(不检测忙信号)3.延时5mS4.写指令38H(不检测忙信号)5.延时5mS6.写指令38H(不检测忙信号)以后每次写指令、读/写数据操作均需要检测忙信号7.写指令38H:显示模式设置8.写指令08H:显示关闭9.写指令01H:显示清屏10.写指令06H:显示光标移动设置11.写指令0CH:显示开及光标设置4.2.5 1602LCD的电路连接液晶5端为读/写选择端,因为我们不从液晶中读取数据,只向其写入命令和显示数据,因此此端始终选择为写状态,即低电平接地。液晶6端为使能信号,是操作时必须的信号。其电路如图2-11所示:图9 1602的电路连接4.3.1 DS12C887概述DS12C887具有DS12R885裸片,32.768HZ石英晶体和一个可充电电池三个部分, DS12C887与计算机常用的时钟芯片MC146818B和DS12887管脚兼容,同时可直接替换可以用来直接代替IBM PC上的时钟日历芯片DS12887。采用DS12C887芯片设计的时钟电路有良好的微机接口,并且不需要任何外围电路和器件。时钟芯片DS12C887具有如下的特征11:(1)DS12C887里面自带一个锂电池,外部掉电时,内部信息还能保持10年的时间,保证不丢失数据。(2)能够自动产生秒、分、时、天、星期、日、月、年、世纪等时间信息, 并有闰年补偿功能。其内部还增加了世纪寄存器,利用硬件电路解决了“千年”问题。(3)具有二进制数码和BCD码两种表示时间的方法、具有日历和定时闹钟功能。(4)一天内的时间记录具有12小时制和24小时制两种,12小时时钟模式中,具有PM和AM用来区分上午和下午。同时可选用夏令时模式;(5)有128个RAM单元与软件接口,其中有11字节RAM用来存储时间信息,4字节RAM用来存储DS12C887的控制信息,称为控制寄存器14个作为字节时钟和控制寄存器,113字节通用RAM使用户使用。(6)用户还可对DS12C887进行编程以实现多种方波输出,并可对其内部的三路中断通过软件进行屏蔽。4.3.2 DS12C887引脚功能表5 DS12C887引脚功能引脚符号功能说明1MOT模式选择引脚,接Vcc时,选择的是Motorola的总线时序;当接地或悬空,选择的是Intel总线时序4-11AD0-AD7双向地址/数据总线12GND接地13CSDS12887的芯片选选通信号,必须在CS有效的状态下,Motorola时序中数据或地址才可以选通或Intel时序中读写信号才可以有效。14AS地址选通,一个高电平的地址选通信号提给总线时,在AS脉冲的下降沿,DS12887选通地址。15R/W读写信号,有两种操作模式。当MOT引脚接Vcc选择Motorola时序,当MOT接地选择的是Intel时序。17DS数据选通或读出,根据模式选择的不同,DS引脚有两种不同的操作模式。18RESETRESET引脚对时钟,日历,RAM没有影响。在上电时,RESET能一直保持低电平使系统保持稳定。19IRQ中断请求,在DS12887中IRQ是一个低有效信号,它能对处理器发出一个中断信号。23SQW方波输出引脚24VCC接电源(+5V)注:其中NC代表空脚。 4.3.3 DS12C887读写时序图10 DS12C887读写时序 4.3.4 DS12C887流程图进入主程序后,DS12C887首先进行初始化设置,当串行口有数据时,则调用函数从日历时钟芯片获取日历时钟信息,调用显示函数显示日历时钟信息显示出来,重复进行。这部分包括DS12C887某个单元写、读DS12C887某个单元的内容和DS12C887设定时间。DS12C887的流程图如图7所示。开始 DS12C887初始化 调用函数获取时钟信息 送数据显示 图11 DS12C887的流程图4.3.5 时钟芯片引脚介绍1) 时钟芯片DS12C887,其引脚分布图如下所示图12 时钟引脚分布MOT (1脚) :总线时序模式选择脚。接高电平时,选择MOTOROLA总线方式工作;接低电平或悬空时,芯片按照INTEL总线方式工作。此时其工作时序与MCS51芯片的片外RAM读写时序相伺。NC (2,3,16,20,21,22脚):不解任何引脚。AD0AD7(411脚):地址/地址数据复用总线引脚。CS(13脚):片选脚,低电平有效。AS(14脚):地址锁存输入脚。引脚上的正脉冲用于切换地址/数据复用总线。脉冲后沿将地址锁入DS12887中,在Intel总线方式下,该脚等效于MCS一51系列单片机芯片的ALE脚。R/W(15脚):读/写输入脚。此引脚有两种工作方式,在选择MOTOROLA总线方式下,此引脚用于指示当前的读写周期,高电平表示一个读周期,低电平表示一个写周期;选择INTEL中线时序模式时,此引脚为低电平有效的输入脚,相当于通用RAM的写使能信号(/WE)DS(17脚):此引脚有两种工作方式,当MOT接高电平时时,此引脚为数据锁存脚;当MOT接低电平时,此引脚为读输入脚,在Mcs一51系统中,Ds相等于RD脚。RESET(18脚):复位输入,当 RESET为低电平且VCC4.25时,DS12C887芯片执行复位操作。该脚上的电压不影响时钟、日历及片内RAM的内容。IRQ(19脚):中断申请输出脚,低电平有效,只要引起中断的状态位有效且相应的中断允许位为1,则IRQ变为低。微机需靠读寄存器C来清除该脚信号,RESET脚也可清除该信号。SQW(23脚):方波信号输出脚。可通过设置寄存器位SQWE关断此信号输出,此信号的输出频率也可通过对芯片内部的寄存器编程予以改变。VCC(24脚):+5V电源端。当Vcc3v时,芯片内部自动将Vcc切换至片内置电池上,当VCC恢复为4.25V后须经过100ms才能对它进行访问。4.3.6 4个控制寄存器介绍DS12C887有4个控制寄存器,在任何时间都可以进行访问,即使处于更新周期。寄存器A字节的内容如下。MSB LSB UIP DV2 DV1 DV0 RS3 RS2 RS1 RS0UIP:当该位为一时表明即将产生一次时钟更新周期。当该位为零时,表示至少在244,s内不会产生更新。该位不受RESET脚的影响, 当UIP为0时,可以获得所有时钟、日历、闹钟信息。用户将寄存器B中的SET位写为1时,可以限制数据的更新的传送并清零UIP位。DV2、DV1、DV0:用于打开振荡器和复位分频器,将其置为010是唯一打开振荡器并使时钟计时的办法,置为1lx将打开振荡器但使分频器处于复位态,下一个更新周期将发生在DV2,DVI,DV0被置为010的500ms之后。寄存器B字节的内容如下。 MSB LSB SET PIE AIE UIE SQWE DM24/12 DSESET:设置位,不受到复位操作影响,可以进行读写。当0时,不处于设置状态,芯片更新时间数据;当1时,抑制数据更新,可以通过程序设定时间和日历信息。PIE:周期性中断使能位,复位时清除此位,可以进行读写。当1时,允许寄存器C中的周期中断标志位PF,驱动/IRQ引脚向低产生中断信号输出,中断信号产生的周期通过RS0RE3决定。AIE:闹钟中断使能位,可以进行读写。当1时,允许寄存器C中的闹钟中断标志位AF、闹钟发生时就会通过/IRQ引脚产生中断输出。UIE:数据更新结束中断使能位,可以进行读写。复位或者SET位为1时清除此位。为1时允许寄存器C中的更新结束标志UF,更新结束后就会通过/IRQ引脚产生中断输出。SQWE:方波使能位,复位时清除此位,可以进行读写。当0时,SQW引脚保持低电平;当1时,SQW引脚输出方波信号,其频率由RS3RS0决定。DM:数据模式位,不受复位操作影响,可以进行读写。当0时,设置时间、日历信息为二进制数据; 当1时,设置为BCD码数据。24/12:时间模式设置为,不受复位操作影响,可以进行读写。当0时,设置为12小时模式;当1时,设置为24小时模式。DSE:当1时,会进行两次特殊时间的更新;4月的第一个星期日凌晨1:59:59会直接更新到3:00:00,10月的最后一个星期日凌晨1:59:59会直接更新到1:00:00;为0时,时间信息正常更新,不受复位操作影响,可以进行读写。寄存器C字节内容如下。 MSB LSB IRQF PF AF UF 0 0 0 0IQRF:中断申请标志位。当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引脚为低电平,申请中断。此位由读寄存器C操作或者复位操作清除。寄存器D字节的内容如下。 MSB LSB 0 0 0 0 0 0 0 0VRT;RAM和时间有效位。用于指示和VBAT引脚连接的电池状态。此位不可写入,也不受操作的影响,一般的时候读取时总去为1,如果出现读取为0的情况,就说明电池没电了,时间数据和RAM中的数据就会变得不准确。芯片DS12CR887的113字节普通RAM空间为非易失性RAM空间,可以在未处理器程序中作为非易失性内存空间使用。4.4闹铃电路图13 闹铃电路闹铃功能是由单片机的I/O口输出一定频率方波信号,驱动蜂鸣器发出特定频率的声音信号实现的。当闹铃设置的时间到达时钟的时间时,单片机发送一个低电平给蜂鸣器,三极管导通驱动蜂鸣器发出声音作为定时闹铃。4.5 独立键盘电路图14 独立键盘电路当单片机检测到有按键被按下时,就发射与之相对应的二进制编码信号4.6 电源模块时钟的电源为+5V直流电源,本设计中可以使用4节1.5V电池,电源模块的原理图如图2-15所示:图15 电源模块结论 时钟芯片DS12C887其功能丰富、时钟精确性好、运行稳定性好,使用简单,可靠性高,是时间产生电路的良好选择。正常运行时间数据10年内不会丢失,是工业生产高精度时钟的理想芯片。 DS12C887 因为丰富的功能及简便的连接接口,不仅应用于通用微机系统中,也广泛地应用于各类以单片机为核心的智能化仪器仪表中,不仅准确的显示时间信息,节省 CPU的定时资源,减少软件设计工作量,提高稳定性,在智能检测仪表的应用中,取得了满意的效果。本次毕业设计主要是完成以下几点:对设计方案的理论研究,单片机的合理选型,硬件电路的设计,元器件的焊接,软件的编写和调试以及毕业论文的制作。在这个过程中,有许多东西以前都没有学过,比如如何看芯片的引脚,如何用protel画图,如何用Keil软件编译12,如何用STC-ISP-V4.80烧录程序,这些都要通过自学和请教别人来完成,所以花费了许多的时间。设计好电路后,一次次的烧程序,改线路,看试验结果,用万用表测试哪些PIN脚有短接。通过一天天的实践,思路也逐渐清晰起来,找到了解决的方法,最终达到了预期的效果。 最终实现功能:(1)能显示阳历年、月、日、星期、小时、分、秒。(2)通过LCD1602液晶显示,用增大按键调整时间,日期 。分钟和秒钟增大到59变成0,小时增大到23变成0,日期增大到31号变成1,月份增大到11月变成1,星期调到周日变成周一。(3)通过DS12C887芯片实现断电继续计时,再次通电时显示当前时间。(4)具有定时报警功能。(5)选择功能按键依次选择秒,分,时,日,月,年,星期,闹钟秒,闹钟分,闹钟时。图16 实物功能展示图由于时间有限,本系统还有一些需要改进和完善的地方。比如没有实现数值减小按键的功能,在调节分钟时要增大到60变成0,设置时间,日期和闹铃的时候比较不方便,希望以后有机会对该系统做进一步的完善。参考文献1 牛余朋.DS12C887时钟芯片在单片机系统中的应用J.电子报,2006,(08):15.2 陈华珍; 夏国清.基于DS1307的可调实时时钟系统设计J.现代计算机(专业版),2010,(9):183-186.3 卢庆林.数字动态扫描显示电路的设计J.组合机床与自动化加工技术, 2007,(02):56-60.4 杨伟强; 张振东; 张朋; 刘炳翔. 新型时钟日历芯片DS12C887的应用设计J. 电子元器件应用, 2010,(15):21-23.5 张开碧; 王浩; 曾勇斌.基于STC89C52单片机的多功能数字钟的设计N.科技信息, 2010,(35):12-13+56.6 张永安; 王睿.基于DS12C887的数字时钟的实现J.内蒙古农业大学学报(自然科学版),2010,(3):263-266.7 莫禾胜; 唐晓辉.基于LCD液晶显示器的时间显示系统设计与制作J.科技信息, 2010,(21): 106-107.8 朱永辉; 毛培法.运用PSD系列器件进行单片机外围电路扩展J.电子工程师, 2000,(9): 4-6+16.9 袁旭军; 庄松林.单片机复位电路的可靠性分析J. 电子技术应用, 2002,(12): 69-70+73.10 程雯; 戎蒙恬; 李萍.用于实时时钟的32.768kHz晶振电路分析与设计J.信息技术, 2009,(1):5-17+86.11 唐金元; 王翠珍.024V可调直流稳压电源电路的设计方法J.现代电子技术,2008,(04):12-14. 12郭天祥.新概念51单片机C语言教程 入门、提高、开发、拓展全攻略M.北京:电子工业出版社,2009谢辞完成篇论文以后我大学生涯也即将结束,在此我要感谢老师和同学对我的帮助,没有你们我不可能顺利地完成大学的学习,更不可能完成本次毕业设计。我要由衷地感谢老师的给予的意见和建议,感谢同学给予的帮助。这次设计让我认识和学习了关于DS12C887时钟芯片,AT89C52单片机和LCD1602液晶屏的许多知识,同时学习到如何运用protel画图,如何用Keil软件编译,如何用STC-ISP-V4.80烧录程序,了解了整个电路开发设计过程。在这次毕业设计中通过查找大量的和DS12C887时钟芯片,AT89C52单片机和LCD1602液晶屏的相关资料,锻炼了文献检索的能力。积累了焊接元器件的经验和动手能力。本设计将书本知识和实物结合在一起,提高了查找相关资料和撰写论文的能力,培养了端正的态度和分析解决问题的能力,对今后的学习和工作产生积极重大的影响。 附录1 硬件实物图图19 未通电实物图图20 通电实物图附录2 程序代码#include#include“intrins.h” #define uchar unsigned char#define uint unsigned intuchar miao,fen,shi,ri,zhou,yue,nian,time_flag,key_num;uchar naofen,naoshi;sbit DS_cs=P23;sbit DS_as=P24;sbit DS_rw=P36;sbit DS_ds=P37;sbit LCD_rs=P20;sbit LCD_en=P22;sbit beep=P27;sbit key1=P25;sbit key2=P26;uchar code table1=DATE - - ;uchar code table2=TIME : : ;void delay(uchar z)uchar x,y;for(x=z;x0;x-)for(y=110;y0;y-);void DS_write(uchar add,uchar date) DS_as=1; DS_ds=1; DS_rw=1; DS_cs=0; P1=add; DS_as=0; DS_rw=0; P1=date; DS_rw=1; DS_as=1; DS_cs=1;uchar DS_read(uchar add) uchar DS_read_dat; DS_as=1; DS_ds=1; DS_rw=1; DS_cs=0; P1=add; DS_as=0; DS_ds=0; P1=0xff; DS_read_dat = P1; DS_ds=1; DS_as=1; DS_cs=1; return(DS_read_dat);void LCD_write_com(uchar com) LCD_rs=0; LCD_en=0; delay(5); LCD_en=1; P0= com; LCD_en=0;void LCD_write_data(uchar date) LCD_rs=1; LCD_en=0; delay(5); LCD_en=1; P0= date; LCD_en=0;void Display_Btime(uchar add,uchar date)LCD_write_com(add);LCD_write_data(date);void Display_BCDtime(uchar add,uchar date)uchar gw,sw;sw=date/10;gw=date%10;LCD_write_com(0x80+add);LCD_write_data(0x30+sw);LCD_write_data(0x30+gw);void BCD_time()miao=DS_read(0x00);Display_BCDtime(0x4b,miao);fen=DS_read(0x02);Display_BCDtime(0x48,fen);shi=DS_read(0x04);Display_BCDtime(0x45,shi);ri=DS_read(0x07);Display_BCDtime(0x0b,ri);yue=DS_read(0x08);Display_BCDtime(0x08,yue);nian=DS_read(0x09);Display_BCDtime(0x05,nian);zhou=DS_read(0x06);switch(zhou)case 1:Display_Btime(0x80+0x0d,M);Display_Btime(0x80+0x0e,O);Display_Btime(0x80+0x0f,N);break;case 2:Display_Btime(0x80+0x0d,T);Display_Btime(0x80+0x0e,U);Display_Btime(0x80+0x0f,E);break;case 3:Display_Btime(0x80+0x0d,W);Display_Btime(0x80+0x0e,E);Display_Btime(0x80+0x0f,D);break;case 4: Display_Btime(0x80+0x0d,T);Display_Btime(0x80+0x0e,H);Display_Btime(0x80+0x0f,U);break;case 5:Display_Btime(0x80+0x0d,F);Display_Btime(0x80+0x0e,R);Display_Btime(0x80+0x0f,I);break;case 6:Display_Btime(0x80+0x0d,S);Display_Btime(0x80+0x0e,A);Display_Btime(0x80+0x0f,T);break;case 7:Display_Btime(0x80+0x0d,S);Display_Btime(0x80+0x0e,U);Display_Btime(0x80+0x0f,N);break;default :break;void keyscan()if(key1=0)delay(10);if(key1=0)key_num+;time_flag=1;switch(key_num)case 1:while(!key1);delay(10);while(!key1);LCD_write_com(0x80+0x40+12);LCD_write_com(0x0f);
展开阅读全文