基于DS 1 307的可调实时时钟系统设计 陈华珍‘. 夏国清 (广州大学华软软件学院电子系,广州510990) 摘要:利用实时时钟芯片DS1307设计一个能够调节时间的实时时钟。介绍采用PC总线接口实 时时钟芯片DS1307进行准确定时的设计原理.提出实时时钟芯片DS1307与单片机接口 电路的设计方法,同时给出几个典型程序实例,通过Proteus软件进行仿真实现。 关键词:Proteus;DS1307;单片机;可调实时时钟 0 引言 电控单元的时钟基准通常可利用CPU内部定时器 P2.7口来虚拟I2C总线接口 I2C总线是同步串行数据 传输总线.其内部为双向传输电路.端口输出为开漏结 构,故总线上必须有上拉电阻.通常可取5~l0kQ。因单 片机P2口内部有上拉电阻.故DS1307芯片的SCL引 脚与SDA引脚与单片机接口时.不需再添加上拉电 作为时钟基准.并通过软件编程和CPU时钟中断来构造 一个软时钟。这种方法的优点是无需额外硬件支持,但 缺点是时钟的计时精度受CPU主晶振以及与其相连的 起振电容的影响而无法做到很高,因此累积误差较大。 同时在主电源掉电时为了维持时钟不停摆.系统必须由 备用电源给整个CPU供电 这将导致功耗增大 阻。此外.按照DAuAS公司推荐的硬件接法.往往需 要精度很高的晶体.为了提高其可靠性并节约成本.可 将DS1307的X2引脚添加上拉电阻。从而可以克服使 用普通晶振时DS1307不起振的问题.进而保证了 DS1307的起振 日历时钟芯片DS1307与AT89C51的 1 I℃总线虚拟技术 DS1307是一款具有I2C总线接口的实时时钟芯 接口电路如图1所示 片.要驱动具有I C总线接El的DS1307芯片.一种办 法是选择一款带有IzC总线接口的高档单片机.然而. 在很多小型仪器仪表中以及在单片机的教学环境中. 2.2时钟显示电路 为了将系统时间实时显示出来.本系统没有采用 常用的数码管作为显示方式.而是采用1602LCD液晶 实时显示时间,这样电路的设计就会相对简单一些.所 用到的 示。 使用带有I2C总线接口的高档单片机在经济上是不合 算的.在这种情况下.可以采用I2C总线虚拟技术【lJ.选 口也较少f21 1602液晶的接口电路如图2所 用普遍使用的51单片机.利用单片机的通用I/O端El 模拟实现I℃总线接口 2-3时钟调节电路 为了能够及时对时间进行调节.本系统设计了时 钟调节电路,由K0、K1、K2三个按键组成,且分别由单 片机的P2.0、P2.1和P2.2口控制。其中.K0做为时钟 2 硬件接口电路设计 本系统的电路由单片机AT89C51、日历时钟芯片 DS1307、按键及显示电路组成。 调节的菜单键,第一次按下表示可以调节时间秒.第二 次可以调节时间分.第三次按下调节时.第四次按下退 出调时菜单.时钟继续开始走动 K1和K2分别是时分 秒调节的加减键。在本电路中.根据经验总结.额外添 2.1 DS1307与AT89C51的接口 为了使AT89C51单片机能够驱动DS1307芯片. 本文采用了I℃总线虚拟技术.将单片机P2.6口和 收稿日期:2010—08—03 修稿日期:2010—08—25 作者简介:陈华珍(1982一),女,助教,硕士,从事领域为单片机教学工作 现代计算机2010.09 @ 图1日历时钟芯片DS1307与AT89C51的接口电路 加三个上拉电阻,以保证在没有按键按下时,进入单片 线处于备用状态:初始化LCD液晶显示器让其正常显 示:初始化定时器0并开启定时器0中断 时钟运行子 程序主要负责让DS1307芯片更新时间并在LCD上显 示 按键扫描子程序负责检测按键的状态并将更改后 的时间显示出来 主程序主要负责初始化及键盘扫描 工作 本系统主程序的流程图如图4所示。 机三个I/O VI的按键均处于高电平状态.防止干扰产 生。时钟调节电路如图3所示。 图2 1602液晶显示接口电路 图4主程序流程图 在本系统中,因采用了I2C总线虚拟技术,需严格 按照时序图的要求进行操作,因此,在程序设计当中, 分别添加了几个子程序.用于实现单片机与DS1307进 行通信。下面是根据本文电路对I2C总线上的信号进 行模拟的几个子程序: void start0,,模拟I2C启动信号 { 图3时钟调节电路 SDA=1: Nop 0; 3 接口程序设计 软件程序设计采用模块化设计思想,包括主程序、 初始化子程序、时钟运行子程序,按键扫描子程序。其 中。初始化子程序主要工作有:初始化I2C总线,使总 SCL:l: Nop 0; SDA=0: Nop 0; 现代计算机2010.09 SCL=0: 需要注意的是.DS1307的各类时间数据均以BCD 码的格式存储在相应的时间寄存器中.而1602液晶显 示器只能识别字符码,即ASCLL码,因而1602在向 DS1307读取或写入时问数据时.需要进行数据类型转 换。本文采用以下两个子程序用来完成上述功能: uchar decto——} void stop0,/模拟I2C停止信号 { SDA=O: Nop 0; SCL=1: bcd(uchar dec)//ASCLL码(十进制)转 BCD码 Nop 0; SDA:1: { Uchar x,y; x=dec/10; y=dec%10; Nop 0; } void ack0,,模拟I2C应答信号 { SDA=l: y=(x<<4)Iy; retum y; } uchar bcd_Nop o; SCL=l: to_dec(uchar bcd)//BCD码转ASCLL码(十 进制) Nop O; SCL=0: i Ucharx,y; y=bed/16; } void un_ack0∥模拟I2C非应答信号 x=bcd%16; y=y lO+x; return y; { uchari; i-O; SCL=I; l while(SDA==1&&i<200)i++: Nop O; SCL=0: 4仿真分析 本文最后使用Proteus软件对本实时时钟系统进 行仿真,将代码下载到单片机当中并启动Proteus后, 液晶显示器与DS1307时钟显示模块同时显示初始时 I 图4主程序流程图  ̄fei-I-lltqt 2010舶o 间并开始计时.适当调节三个按键K0~K2后.液 晶显示器显示调整后的时间并且把新的时间写入 DS1307.DS1307从新的时间开始计时 仿真效果如图 5所示。 力技术.2004(02) 参考文献 【1】肖辉.单片机的I2C总线扩展和I2C虚拟技术【J1.四JII电 【2】郭强.液晶显示应用技术【M】.北京:电子工业出版社,2000 【3】赵海兰,朱剑,赵祥伟.DS1302实时显示时间的原理与应 用fJ].电子技术,2004 5 结语 本文设计了一个基于DS1307可调实时时钟系统. 提出了实时时钟芯片DS1307与单片机接口电路的设 计方法.因本系统采用了I2C总线虚拟技术.需严格按 照I2C总线时序图的要求对DS1307进行操作.本文给 出了对I2C总线上的信号进行模拟的几个典型程序实 [4]李华.MCS一51系列单片机实用接口技术[M】.北京:北京航 空航天大学出版社.1993 【5137 ̄11旭.单片机原理与应ffJ[M].北京:机械工业出版社, 2004 [6】马忠梅,马岩,张凯等.单片机的C语言应用程序设计【M】. 北京:北京航空航天大学出版社.1997 例.最后通过Proteus软件成功仿真实现。 图5可调实时时钟系统仿真效果 Design of an Adjustable Real-Time Clock System Based on the DS1 307 CHEN Hua-zhen,XIA GUO-qing . (South China Institute of Software Engineering,GU Electronics Dept.,Guangzhou 510990) Abstract:Uses the chip DS1307 to design an adjustable real-time clock.Introduces the design principle of real——time clock by using the real-time clock chip DS1307 of I2C bus interface.Puts forward the design method of interface circuit between micmcontroller and DS1307,and gives several typical programming examples,and gives a simulation by using the software of Proteus. Keywords:Proteus;DS1307;Single-Chip Mieroeontorller;Adjustable Real—Time Clock @ 现代计算机2010.09