《电子万历毕业设计基于某AT89C51单片机和DS1302时钟芯片.doc》由会员分享,可在线阅读,更多相关《电子万历毕业设计基于某AT89C51单片机和DS1302时钟芯片.doc(47页珍藏版)》请在课桌文档上搜索。
1、word某某职业技术学院毕业设计论文论文题目:电子时钟目 录 摘要 .3绪论 .5第1章 设计要求与方案论证.71.1 引言.71.2 功能要求.7.7第2章 系统硬件电路设计.112.1 电路设计.112.2 系统硬件概述.15.15第3章 系统的软件设计.22.22.22第4章 完毕语.24附录一电路原理图.附录二程序清单.27摘要随着社会、科技的开展,人类得知时间,从观太阳、摆钟到现在电子钟,不断研究、创新。为了在观测时间,能够了解与人类密切相关的信息,比如星期、日期等,电子时钟诞生了,它集时间、日期、星期等功能于一身,具有读取方便、显示直观、功能多样、电路简洁等诸多优点,符合电子仪器仪
2、表的开展趋势,具有广阔的市场前景。该电子时钟主要采用STC89C52RC单片机作为主控核心,由DS1302时钟芯片提供时钟、LED动态扫描显示屏显示。STC89C52RC单片机是由Atmel公司推出的,功耗小,电压可选用46V电压供电;DS1302时钟芯片是美国DALLAS公司推出的具有涓细电流充电功能的低功耗实时时钟芯片,它可以对年、月、日、星期、时、分、秒进展计时,还具有闰年补偿等多种功能,而且DS1302的使用寿命长,误差小;数字显示是采用的LED显示屏来显示,可以同时显示年、月、日、星期、时、分、秒和温度等信息。此外,该电子时钟还具有时间校准等功能。关键词:时钟电路;时钟芯片DS130
3、2;LED动态扫描;单片机STC89C52RC;绪论随着人们生活水平的提高和生活节奏的加快,对时间的要求越来越高,精准数字计时的消费需求也是越来越多。二十一世纪的今天,最具代表性的计时产品就是电子时钟,它是近代世界钟表业界的第三次革命。第一次是摆和摆轮游丝的发明,相对稳定的机械振荡频率源使钟表的走时差从分级缩小到秒级,代表性的产品就是带有摆或摆轮游丝的机械钟或表。第二次革命是石英晶体振荡器的应用,发明了走时精度更高的石英电子钟表,使钟表的走时月差从分级缩小到秒级。第三次革命就是单片机数码计时技术的应用,使计时产品的走时日差从分级缩小到1/600万秒,从原有传统指针计时的方式开展为人们日常更为熟
4、悉的夜光数字显示方式,直观明了,并增加了全自动日期、星期的显示功能,它更符合消费者的生活需求!因此,电子时钟的出现带来了钟表计时业界跨跃性的进步我国生产的电子时钟有很多种,总体上来说以研究多功能电子时钟为主,使万年历除了原有的显示时间,日期等根本功能外,还具有闹铃,报警等功能。商家生产的电子万年历更从质量,价格,实用上考虑,不断的改良电子时钟的设计,使其更加的具有市场。本设计为软件,硬件相结合的一组设计。在软件设计过程中,应对硬件局部有相关了解,这样有助于对设计题目的更深了解,有助于软件设计。根本的要了解一些主要器件的根本功能和作用。除了采用集成化的时钟芯片外,还有采用MCU的方案,利用STC
5、89系列单片微机制成电子电路,采用软件和硬件结合的方法,控制LED数码管输出,分别用来显示年、月、日、时、分、秒,其最大特点是:硬件电路简单,安装方便易于实现,软件设计独特,可靠。STC89C52RC是由ATMEL公司推出的一种小型单片机。95年出现在中国市场。其主要特点为采用Flash存贮器技术,降低了制造本钱,其软件、硬件与MCS-51完全兼容,可以很快被中国广阔用户承受。本文介绍了基于STC89C52RC单片机设计的电子时钟。首先我们在绪论中简单介绍了单片机的开展与其在中低端领域中的优势以与课题的开发意义;接着介绍了STC89C52RC单片机的硬件结构和本毕业设计所要外扩的LED显示与其
6、驱动方法,并在此根底上实现了时钟根本电路的设计;然后使用单片机C语言进展时钟程序的设计,程序采用模块化结构,使得逻辑关系简单明了,维护方便。第1章 设计要求与方案论证1.1 引言本文提出了一种基于STC89C52RC单片机的时钟设计方案,本方案以STC89C52RC单片机作为主控核心,与时钟芯片DS1302、按键、LED显示等模块组成硬件系统。在硬件系统中设有独立按键和LED显示器,能显示丰富的信息,根据使用者的需要可以随时对时间进展校准、选择时间等,综上所述此电子时钟具有读取方便、显示直观、功能多样、电路简洁、本钱低廉等诸多优点,符合电子仪器仪表的开展趋势,具有广阔的市场前景。本电子时钟能动
7、态显示年、月、日、星期、小时、分钟、秒1.3.1 技术可行性随着国内超大规模集成电路的出现,微处理器与其外围芯片有了迅速的开展。集成技术的最新开展之一是将CPU和外围芯片,如程序存储器、数据存储器、并行I/O口、串行I/O口、定时/计数器、中断控制器与其他控制部件集成在一个芯片之中,制成单片计算机Single-Chip Microputer。而近年来推出的一些高档单片机还包括有许多特殊功能单元,如A/D、D/A转换器、调制解调器、通信控制器、锁相环、DMA、浮点运算单元、PWM控制输出单元、PWM输出时的死区可编程控制功能等。因此,只要外加一些扩展电路与必要的通道接口就可以构成各种计算机应用系
8、统,如工业流水线控制系统、作为家用电器的主控制器、分布式控制系统的终端节点或作为其主控制节点起中继的作用、数据采集系统、自动测试系统等。单片机的出现,并在各技术领域中得到如此迅猛的开展,与单片机构成计算机应用系统所形成的下述特点有关: 1、单片机构成的应用系统有较大的可靠性。这些可靠性的获得除了依靠单片机芯片本身的高可靠性以与应用有最少的联接外,还可以方便地采用软、硬件技术。2、系统扩展、系统配置较典型、规X,容易构成各种规模的应用系统,应用系统有较高的软、硬件利用系数。 3、由于构成的应用系统是一个计算机系统,相当多的测、控功能由软件实现,故具有柔性特征,不须改变硬件系统就能适当地改变系统功
9、能。4、有优异的性能、价格比。1.3.2 单片机的选择方案一:采用传统的STC89C52RC作为电机的控制核心。单片机算术运算功能强,软件编程灵活、自由度大,可用软件编程实现各种算法和逻辑控制,并且由于其功耗低、体积小、技术成熟和本钱低等优点,使其在各个领域应用广泛。方案二:采用FTC10F04单片机,还带有非易失性Flash程序存储器。它是一种高性能、低功耗的8位CMOS微处理芯片,市场应用最多。其主要特点如下:8KB Flash ROM,可以擦除1000次以上,数据保存10年。由于本系统对CPU运算速度要求很高,需要执行很复杂的运算,方案一本钱比拟低,适合做设计,方案二运算速度高,性能好,
10、所以两种方案都有可取之处。选用方案一作为主方案,方案二作为备用方案。1.3.3 显示模块的选择方案一:使用液晶显示屏显示时间数字。液晶显示屏LCD具有轻薄短小、低耗电量、无辐射危险,平面直角显示以与影象稳定不闪烁等优势,可视面积大,画面效果好,分辨率高,抗干扰能力强等特点。但由于液晶是以点阵的模式显示各种符号,需要利用控制芯片创建字符库,编程工作量大,控制器的资源占用较多,其本钱也偏高。在使用时,不能有静电干扰,否如此易烧坏液晶的显示芯片,不易维护。方案二:使用传统的LED数码管显示。数码管具有:低能耗、低损耗、低压、寿命长、耐老化、防晒、防潮、防火、防高低温,对外界环境要求低,易于维护,同时
11、其精度比拟高,称重轻,准确可靠,操作简单。数码管采用BCD编码显示数字,程序编译容易,资源占用较少。根据以上的论述,采用方案二。在本系统中,我们采用了八段四位一体数码管串口的动态显示。1.3.4 键盘模块的选择在对日期和时间进展切换,对日期和时间进展调节校准过程中,系统需要产生激励电流,因此需要用按键。方案一:使用独立式键盘。独立式键盘是指直接用I/O口线构成的单个按键电路。独立式按键电路配置灵活,软件结构简单。方案二:使用矩阵式键盘。矩阵式键盘是由行线和列线组成,按键位于行、列的交叉点上,行线、列线分别连接到按键开关的两端。其特点是简单且不增加本钱,这种键盘适合按键数量较多的场合。根据以上的
12、论述,因本系统需要的按键不多,日期加1键,月数加1键,年数加1键,分数加1键,时数加1键,时间/日期切换键,要求简单。所以采用方案一独立式键盘。按照系统设计功能的要求,初步确定系统由主控模块、时控模块、与显示模块和键盘接口模块共4个模块组成。主控芯片使用51系列STC89C52RC单片机,时钟芯片使用美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟DS1302。采用DS1302作为计时芯片,可以做到计时准确。更重要的是,DS1302可以在很小电流的后备电源2.55.5V电源,再2.5V时耗电小于300nA,而且DS1302可以编程选择多种充电电流来为后备电源进展慢速充电,可以保
13、证后备电源根本不耗电。显示模块采用普通的共阳极四位一体八段LED数码管。第二章 系统硬件电路设计2.2.1 主控制器STC89C52RCSTC89C52RC单片机是宏晶科技推出的新一代高速、低功耗、超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟、机器周期和6时钟、机器周期可以任意选择。 主要特性如下: 增强型8051单片机,6时钟、机器周期和12时钟、机器周期可以任意选择,指令代码完全兼容传统8051单片机。 工作频率X围:044MHz。 用户应用程序空间为8K字节 片上集成512字节RAM 通用I/O口32个,复位后为:P1/P2/P3/P4是准双向口/弱上位,P0口是漏极
14、开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。 ISP(在系统可编程)/IAP再应用可编程,无需专用编程器,无需专用仿真器,可通过串口RXD/P3.0,TXD/P3.1 直接下载用户程序,数秒即可完成一片。 具有EEPROM功能 具有看门狗功能 共3个16位定时器/计数器。与定时器T0、T1、T2 外部中断4路,下降沿中断或低电平触发电路,Power Down模式可由外部中断低电平触发中断方式唤醒 通用异步串行口UART,还可用定时器实现多个UART 工作温度X围:-40+85度工业级/075度商业级 PDIP封装时钟电路DS1302 DS1302的性能特性: 实
15、时时钟,可对秒、分、时、日、周、月以与带闰年补偿的年进展比拟; 用于高速数据暂存的31*8位RAM; 最少引脚的串行I/O; 电压工作X围; 时耗小于300nA; 用于时钟或RAM数据读/写的单字节或多字节脉冲方式数据传送方式; 简单的三线接口; 可选的慢速充电至Vcc1的能力。DS1302在任何数据传送时必须先初始化,把RST脚置为高电平,然后把8位地址和命令字装入移位存放器,数据在SCLK的上升沿被访问到。在开始8个时钟周期,把命令字节装入移位存放器后,另外的时钟周期在读操作时输出数据,在写操作时写入数据。时钟脉冲的个数在单字节方式下为8+8,在多字节方式下为8+字节数,最大可达248字节
16、数。如果在传送过程中置RST脚为低电平,如此会终止本次数据传送,并且I/O引脚变为高阻态。上电运行时,在之前,RST脚必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。DS1302的控制字如表所示。控制字节的最高有效位位7必须是逻辑1,如果它为0,如此不能把数据写入到DS1302中。位6如果为0,如此表示存取日历时钟数据;为1如此表示存取RAM数据。位51A4A0指示操作单元的地址。最低有效位位0如果为0,如此表示药进展写操作;为1表示进展读操作。控制字节总是从最低位开始输入/输出。为了提高对32个地址寻址能力地址/命令位15=逻辑1,可以把时钟/日历或RAM存放器规定为多字节
17、burst方式。位6规定时钟或RAM,而位0规定读或写。在时钟/日历存放器中的地址931或RAM存放器中的地址31不能存储数据。在多字节方式下,读或写从地址0的位0开始。必须按数据传送的次序写最先的8个存放器。但是,当以多字节方式写RAM时,为了传送数据不必写所有的31字节,不管是否谢了全部31字节,所写的每一字节都将传送至RAM。表2.1 DS1302控制字 DS1302共有12个存放器,其中有7个存放器与日历、时钟相关,存放的数据位为BCD码形式。其日历、时间存放器与其控制字如上表所示,其中奇数为读操作,偶数为写操作。时钟暂停:秒存放器的位7定义位时钟暂停位。当它为1时,DS1302停止振
18、荡,进入低功耗的备份方式,通常在对DS1302进展写操作时如进入时钟调整程序,停止振荡。当它为0时,时钟将开始启动。 AM-PM/12-24小时方式:小时存放器的位7定义为12或24小时方式选择位。它为高电平时,选择12小时方式。在此方式下,位5为第二个10小时位2023h。 DS1302的晶振选用32768Hz,电容推荐值为6pF。因为振荡频率较低,也可以不接电容,对计时精度影响不大。显示局部采用普通的共阳数码管显示,采用动态扫描,以减少硬件电路。年月日、时分秒、报警共需要24位数码显示,用8位数码管以按键切换的方式来显示。考虑到一次扫描24位数码管显示时会出现闪烁情况,故采用动态扫描,可将
19、数码管数量减少至8位,显示时采用串行口输出段码。键盘在单片机系统中是一个很重要的部件。为了输入数据、查询和控制系统的工作状态,都要用到键盘,键盘是人工干预计算机的主要手段。键盘可分为编码和非编码键盘两种。编码键盘采用硬件线线路来实现键盘编码,每按下一个键,键盘能自动生成按键代码,键数较多,而且还具有去抖动功能。这种键盘使用方便,但硬件较复杂,PC机所用的键盘就属于这种。非编码键盘仅提供按键开关工作状态,其他工作由软件完成,这种键盘键数较少,硬件简单,一般在单片机应用系统中广泛使用。此处主要介绍该类非编码键盘与其与MCS51型单片机的接口。按键开关在电路中的连接如下列图。按键未按下时,A点电位为
20、高电平5V;按键按下时,A点电位为低电平。A点电位就用于向CPU传递按键的开关状态。但是由于按键的结构为机械弹性开关,在按键按下和断开时,触点在闭合和断开瞬间还会接触不稳定,引起A点电平不稳定,如图2-11b所示,键盘的抖动时间一般为510ms,抖动现象会引起CPU对一次键操作进展屡次处理,从而可能产生错误。因此必须设法消除抖动的不良后果。图2.3 键操作和键抖动消除抖动的不良后果的方法有硬、软件两种。为了节省硬件,通常在单片机系统中,一般不采用硬件方法消除键的抖动,而是用软件消除抖动的方法。根据抖动特性,在第一次检测到按键按下后,执行一段延时510ms让前延抖动消失后再一次检测键的状态,如果
21、仍保持闭合状态电平,如此确认真正有键按下。当检测到按键释放后,也要给510ms的延时,待后延抖动消失后才转入该键处理程序。按照键盘与CPU的连接方式可以分为查询按键和矩阵式键盘。查询式按键是各按键相互独立,每个按键占用一根I/O口线,每根I/O口线上的按键工作状态不会影响其他I/O口线上按键的工作状态。查询式按键电路配置灵活,软件结构简单,但每个按键必须占用一根I/O口线,在按键数量较多时,I/O口线浪费较大,且电路结构显得繁杂。故这种形式适用于按键数量较少的场合。矩阵式键盘又称行列式键盘,有n个行线和m个列线,经限流电阻接+5V电源上,按键跨接在行线和列线上,nm行列结构可构成mn个按键,组
22、成一个键盘。与独立式按键相比,mn个按键只占用m+n根I/O口线,因此适用于按键较多的场合。当无键闭合时,相应的I/O之间开路。当有键闭合时,与闭合键相连接的两条I/O口线之间短路。判断有无键按下的方法是:第一步,置列线相关I/O口为输入态,从行线相对应的I/O口输出低电平,读入列线数据,假如某一列线为低电平,如此该列线上有键闭合。第二步,置行线相关I/O口输出低电平,读入列线数据,假如某一列线为低电平,如此该列线上有键闭合。综合一二两步的结果,可确定按键编号。但是键闭合一次只能进展一次键功能操作,因此须等待近按键释放后,再进展键功能操作,否如此按一次键,有可能会连续屡次进展同样的键操作。在单
23、片机应用系统中,对键盘的处理工作仅是CPU工作内容的一局部,CPU还要进展数据处理、显示和其他输入输出操作,因此键盘处理工作既不能占用CPU太多时间,又需要CPU对键盘操作与时作出响应。CPU对键盘处理控制的工作方式有以下几种:1. 程序控制扫描方式程序控制扫描方式是在CPU工作空余,调用键盘扫描子程序,响应键输入信号要求。2. 定时控制扫描方式定时控制扫描方式是利用定时/计数器每隔一段时间产生定时中断,CPU响应中断后对键盘进展扫描,并在有键闭合时转入该键的功能子程序。3. 中断控制扫描方式中断控制扫描方式是利用外部中断源,响应输入信号。当无按键按下时,CPU执行正常工作程序。当有按键按下时
24、,CPU立即产生中断。在中断服务子程序中扫描键盘,判断是哪一个键被按下,然后执行该键的功能子程序。这种控制方式克制了前两种控制方式可能产生的空扫描和不能与时响应键输入的缺点,既能与时处理键输入,又能提高CPU运行效率,但要占用一个宝贵的中断资源。图即工作于中断方式的矩阵式键盘接口电路。在初始化时P1.4P1.7置输出0,P1.0P1.3置为输入态,P1.0P1.3分别接至与门各输入端。当有键闭合时=0,CPU中断后,在中断服务子程序中,再完成键识别和键功能处理。图2.4 工作于中断方式的矩阵式键盘接口电路2.3.3时钟电路2.3.3.1 DS1302工作方式简介与数据操作原理DS1302可以对
25、年、月、日、星期、时、分、秒进展计时, 且具有闰年补偿功能, 工作电压宽达2.55.5V。采用三线接口与CPU进展同步通信, 并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个33x8的用于临时性存放数据的RAM存放器。DS1302是的DS1202升级产品, 与DS1202兼容, 但增加了主电源/后背电源双电源引脚, 同时提供了对后背电源进展涓细电流充电的能力。DS1302时钟芯片包括实时时钟/日历和31字节的静态RAM。它经过一个简单的串行接口与微处理器通信。实时时钟/日历提供秒、分、时、日、周、月和年等信息。对于小于31天的月和月末的日期自动进展调整,还包括闰年
26、校正的功能。时钟的运行可以采用24时或带AM/PM的12小时格式。采用三线接口与CPU进展同步通信,并可采用突发方式一次传送多字节的时钟信号或RAM数据。DS1302有主电源/后备电源双电源引脚:Vcc1在单电源与电池供电的系统中提供低电源,并提供低功率的电磁备份;Vcc1在双电池系统中提供主电源。在这种运行方式中,Vcc1里连接到后备电源,以便在没有主电源的情况下能保存时间信息以与数据。DS1302由Vcc1或Vcc2中较打大者供电。当Vcc2Vcc1+0.2V时,Vcc2给DS1302供电;当Vcc2Vcc1时,DS1302由Vcc1供电。图2.5 DS1302DS1302在任何数据传送时
27、必须先初始化,把RST脚置为高电平,然后把8位地址和命令字装入移位存放器,数据在SCLK的上升沿被访问到。在开始8个时钟周期,把命令字节装入移位存放器后,另外的时钟周期在读操作时输出数据,在写操作时写入数据。时钟脉冲的个数在单字节方式下为8+8,在多字节方式下为8+字节数,最大可达248字节数。如果在传送过程中置RST脚为低电平,如此会终止本次数据传送,并且I/O引脚变为高阻态。上电运行时,在之前,RST脚必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。DS1302的控制字如下列图。控制字节的最高有效位位7必须是逻辑1,如果它为0,如此不能把数据写入到DS1302中。位6如果
28、为0,如此表示存取日历时钟数据;为1如此表示存取RAM数据。位51A4A0指示操作单元的地址。最低有效位位0如果为0,如此表示药进展写操作;为1表示进展读操作。控制字节总是从最低位开始输入/输出。为了提高对32个地址寻址能力地址/命令位15=逻辑1,可以把时钟/日历或RAM存放器规定为多字节burst方式。位6规定时钟或RAM,而位0规定读或写。在时钟/日历存放器中的地址931或RAM存放器中的地址31不能存储数据。在多字节方式下,读或写从地址0的位0开始。必须按数据传送的次序写最先的8个存放器。但是,当以多字节方式写RAM时,为了传送数据不必写所有的31字节,不管是否谢了全部31字节,所写的
29、每一字节都将传送至RAM。DS1302共有12个存放器,其中有7个存放器与日历、时钟相关,存放的数据位为BCD码形式。其日历、时间存放器与其控制字如下表所示,其中奇数为读操作,偶数为写操作。表2.3 DS1302控制字时钟暂停:秒存放器的位7定义位时钟暂停位。当它为1时,DS1302停止振荡,进入低功耗的备份方式,通常在对DS1302进展写操作时如进入时钟调整程序,停止振荡。当它为0时,时钟将开始启动。 AM-PM/12-24小时方式:小时存放器的位7定义为12或24小时方式选择位。它为高电平时,选择12小时方式。在此方式下,位5为第二个10小时位2023h。 DS1302的晶振选用32768
30、Hz,电容推荐值为6pF。因为振荡频率较低,也可以不接电容,对计时精度影响不大。第3章 系统的软件设计3.1 程序设计电子时钟的程序主要包括3个方面的内容:一是DS1302从单片机中读取数据进展计数,二是利用按键进展时间的调整,三是单片机中读取DS1302中的数据驱动LED数码管显示时间。STC89C52RC单片机主要I/O口的分配:P10、P11、P12分别接时钟芯片的SCLK、I/O、RST引脚,P13、P14、P15、P16接四个独立按键。主程序流程图时间调整程序流程图第4章 完毕语2010年3月,我开始了我的毕业论文工作,时至今日,论文根本完成。从最初的茫然,到慢慢的进入状态,再到对思
31、路逐渐的清晰,整个写作过程难以用语言来表达。历经了一个多月的奋战,紧X而又充实的毕业设计终于落下了帷幕。回想这段日子的经历和感受,我感慨万千,在这次毕业设计的过程中,我拥有了无数难忘的回忆和收获。当我终于完成了所有打字、绘图、排版、校对的任务后整个人都很累,但同时看着电脑荧屏上的毕业设计稿件我的心里是甜的,我觉得这一切都值了。这次毕业论文的制作过程是我的一次再学习,再提高的过程。在论文中我充分地运用了大学期间所学到的知识。我不会忘记这难忘的几个月的时间。毕业论文的制作给了我难忘的回忆。在我徜徉书海查找资料的日子里,面对无数书本的罗列,最难忘的是每次找到资料时的激动和兴奋;亲手用protel 9
32、9设计电路图的时间里,记忆最深的是每一步小小思路实现时那幸福的心情;为了论文我曾赶稿到深夜,但看着亲手打出的一字一句,心里满满的只有喜悦毫无疲惫。这段旅程看似荆棘密布,实如此蕴藏着无尽的宝藏。我从资料的收集中,掌握了很多单片机与其接口应用的知识,让我对我所学过的知识有所巩固和提高,并且让我对当今单片机的最新开展技术有所了解。在整个过程中,我学到了新知识,增长了见识。在今后的日子里,我仍然要不断地充实自己,争取在所学领域有所作为。脚踏实地,认真严谨,实事求是的学习态度,不怕困难、坚持不懈、吃苦耐劳的精神是我在这次设计中最大的收益。我想这是一次意志的磨练,是对我实际能力的一次提升,也会对我未来的学
33、习和工作有很大的帮助。在这次毕业设计中也使我们的同学关系更进一步了,同学之间互相帮助,有什么不懂的大家在一起商量,听听不同的看法对我们更好的理解知识,所以在这里非常感谢帮助我的同学。在此更要感谢我的指导教师和专业教师,是你们的细心指导和关怀,使我能够顺利的完成毕业论文。在此我要向司教师致以最衷心的感谢和敬意。程序#include#define uint unsigned int#includeds1302.h#includekey.h#includebell.hsbit k4=P13;char k=0;char shi,fen,miao,nian,yue,ri;char baojingshi=
34、0x00,baojingfen=0x06,baojingmiao=0x00;void sjdisplay();void rqdisplay();void baojingdisplay();void delay(uint ms);void display(char shu,char wei);char table=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e;void main()ds1302_write(0x80,0x55);ds1302_write(0x82,0x45);ds13
35、02_write(0x84,0x00); ds1302_write(0x8c,0x11);ds1302_write(0x88,0x10);ds1302_write(0x86,0x07);while(1) if(k4=0) delay(5); if(k4=0) while(k4=0); k+; if(k=3) k=0; if(k=0)sjdisplay(); if(k=1) rqdisplay(); if(k=2) baojingdisplay(); if(shi=baojingshi)&(fen=baojingfen)&(miao=baojingmiao)didi(10);key();void
36、 sjdisplay() shi=ds1302_read(0x85);/hourfen=ds1302_read(0x83);/minitesmiao=ds1302_read(0x81);/seconddisplay(shi4)&0x07,0);display(shi&0x0f,1);display(fen4)&0x07,3);display(fen&0x0f,4);display(miao4)&0x07,6);display(miao&0x0f,7);void rqdisplay() nian=ds1302_read(0x8d);/nian yue=ds1302_read(0x89);/yue
37、 ri=ds1302_read(0x87);/ri display(nian4)&0x07,0); display(nian&0x0f,1); display(yue4)&0x07,3); display(yue&0x0f,4); display(ri4)&0x07,6);/0000 0111 display(ri&0x0f,7);void baojingdisplay() display(baojingshi4)&0x07,0); display(baojingshi&0x0f,1); display(baojingfen4)&0x07,3); display(baojingfen&0x0f
38、,4); display(baojingmiao4)&0x07,6); display(baojingmiao&0x0f,7);void delay(uint ms)uint i,j;for(i=ms;i0;i-)for(j=124;j0;j-);void display(char shu,char wei)P0=tableshu;P2=(1wei);delay(3);P2=0xff; / D#include#define uchar unsigned char#define uint unsigned intsbit rst=P12;sbit dat=P11;sbit clk=P10;voi
39、d ds1302_write(char m,char dat1)char temp,t;rst=0;clk=0;rst=1;temp=m;for(t=0;t1);clk=0;temp=dat1;for(t=0;t1;clk=0;rst=0;uchar ds1302_read(char m)char temp,t;rst=0;clk=0;rst=1;temp=m;for(t=0;t1;clk=0;temp=0;/00000000 for(t=0;t1;if(dat=1)temp=temp|0x80;else temp=temp&0x7f;clk=1;clk=0;rst=0;return temp
40、;/D/K#include#define char signed char#define uint unsigned intsbit mode=P14;sbit add=P15;sbit sub=P16;char mod=0;extern void delay(uint ms);extern char shi,fen,nian,yue,ri;extern char baojingshi,baojingfen;extern char ds1302_read(char);extern void ds1302_write(char,char);void key()shi=ds1302_read(0x
41、85);fen=ds1302_read(0x83);if(mode=0)delay(5);if(mode=0)while(mode=0);mod+;if(mod=8)mod=0;if(add=0)delay(5);if(add=0)while(add=0);if(mod=1)shi=(shi4)&0x03)*10+(shi&0x0f)+1;if(shi=24)shi=0;ds1302_write(0x84,(shi/10)4)&0x07)*10+(fen&0x0f)+1;if(fen=60)fen=0;ds1302_write(0x82,(fen/10)4)&0x0f)*10+(nian&0x0f)+1;if(nian=99)nian=1;ds1302_write(0x8c,(nian/10)4)+(