1、日历实时时钟0目录一、 系统方案 .11、实验目的 .12、实验要求 .1二、硬件介绍 .11、微控制器 AT89C51 12.1.1 单片机的构成 .12.1.2 AT89C51 单片机的引脚说明 22、时钟电路模块 DS12887 .42.2.1 DS12887 主要功能介绍 .42.2.2 更新周期 .52.2.3 DS12887 的中断和更新周期: .62.2.4 DS12887 初始化方法: .63、LCD 显示 7三、理论分析及程序设计 .101、系统功能 .102 程序流程图 113、主程序清单 .13四、结果分析 .221、仿真电路图 .222、实验台测试结果 .23五、总结
2、.24参考文献 .25日历实时时钟1一、 系统方案1、实验目的1. 进一步熟悉和掌握单片机的结构及工作原理;通过课程设计,掌握以单片机核心的电路设计的基本方法和技术;2. 了解有关电路参数的计算方法培养综合运用单片机课程课题及有关选修课程的基本知识去解决实际问题的基本训练;3. 掌握单片机的接口技术及相关外围芯片的外特性,控制方,从而加深对该课程知识的理解;4. 熟悉 Ptoteus 及 Keil 软件的调试和仿真,通过实际程序设计和调试,逐步掌握模块化程序设计方法和调试技术。2、实验要求1、 实时显示年、月、日等;2、 实时显示秒、分、时等。二、硬件介绍1、微控制器 AT89C51AT89C
3、51 单片机是一种低功耗,高性能的片内含有 4KB 可编程/ 擦除只读存储器(FPEROM Flash Programmable and Erasable Read Only Memory)的 8 位 COMS 微控制器,使用高密度,非易失存储技术制造,并且与 AT89C51 引脚和指令系统完全兼容。芯片上的 FPEROM 允许在线编程或采用通用的非易失存储编程器对存储器重复编程。AT89C51 单片机带有 2K 字节闪烁可编程可擦除只读存储器的单片机,其内部的可擦除只读存储器可以反复擦除 100 次。2.1.1 单片机的构成AT89C51 单片机是在一块芯片中集成了 CPU、RAM、ROM、
4、定时器/计数器和多种功能的 I/O 线等一台计算机所需要的基本功能部件,AT89C51 单片机单片机内包含下列几个部件:(1) 一个 8 位 CPU;日历实时时钟2(2)一个片内振荡器及时钟电路;(3)4K 字节 ROM 程序存储器;(4)128 字节 RAM 数据存储器;(5)两个 16 位定时器/计数器;(6)可寻址 64K 外部数据存储器和 64K 外部程序存储器空间的控制电路;(7)32 条可编程的 I/O 线(四个 8 位并行 I/O 端口) ;(8)一个可编程全双工串行口;(9)具有五个中断源、两个优先级嵌套中断结构。 2.1.2 AT89C51 单片机的引脚说明AT89C51 单
5、片机采用 40 条引脚双列直插式器件,引脚除 5V( 40 脚)和电源地(20 脚)外,其功能分为时钟电路、控制信号、输入/输出三大部分,逻辑框图及引脚图分别如图 2.3(a)(b)所示(a) (b) 图 1-1 AT89C51 单片机逻辑图与引脚图AT89C51 单片机的内部硬件结构中除了程序存储器由 FPEROM 取代了 87C51 单片机的EPROM 外,其余部分完全相同,其管脚说明如下:(1)VCC:供电电压(2)GND:接地日历实时时钟3(3)时钟电路XTAL1(19 脚)芯片内部振荡电路(单级反相放大器)输入端。XTAL2(18 脚)芯片内部振荡电路(单级反相放大器)输出端。 (4
6、)控制信号RST(9 脚)复位信号:时钟电路工作后,在此引脚上将出现两个机器周期的高电平,芯片内部进行初始复位,P0 口P3 口输出高电平,将初值 07H 写入堆栈指针。ALE(30 脚)地址锁存信号:当访问外部存储器时,P0 口输出的低 8 位地址由 ALE输出的控制信号锁存到片外地址锁存器,P0 口输出地址低 8 位后,又能与片外存储器之间传送信息。(29 脚)片外程序存储器读选通: 低电平有效, 作为程序存储器PSENPSENPSEN的读信号,输出负脉冲,将相应的存储单元的指令读出并送到 P0 口。/Vpp(30 脚):当 为高电平且 PC 值小于 0FFFH 时,CPU 执行内部程序存
7、储器AEA程序;当 为低电平时,CPU 仅执行外部程序存储器程序。(5)I/O 接口P0 口(P0.0P0.7,3932 脚)三态双向口:P0 口结构包括一个输出锁存器、两个三态缓冲器、一个输出驱动电路和一个输出控制端。P0 口做地址/数据复用总线使用。P1 口(P1.0P1.7,18 脚)准双向口:P1 口做通用 I/O 接口使用,P1 口的每一位口线能独立地作用于输入线,P1 口可驱动 4 个 TTL 门。P2 口(P2.0P2.7,2128 脚)通用 I/O 接口:它做通用 I/O 接口使用时,是一个准双向口,此时转换开关 MUX 倒向左边,输出极与锁存器相连,引脚可作为用户 I/O 口
8、线使用,输入/输出操作与 P1 口完全相同,P2 口做地址总线使用。当系统中接有外部存储器时,P2 口用于输出高 8 位地址 A8A15,这时在 CPU 控制下,转换开关 MUX 倒向右边,接通内部地址总线。P3 口(P3.0P3.7,1017 脚)双功能口:P3 口做通用 I/O 接口使用,输出功能控制线为高电平,与非门的输出取决于锁存器的状态,此时锁存器 Q 端的状态与其引脚状态是一致的。在这种情况下,P3 口的结构和操作与 P1 口相同。P3 口第二功能是可作为系统具有控制功能的控制线,另外 P3 口可驱动 4 个 LSTTL 门电路。P3 口也可作为AT89C51 的一些特殊功能口使用
9、如:P3.0 RXD(串行输入口) ;P3.1 TXD(串行输出口) ;P3.2 /INT0(外部中断 0) ;P3.3 /INT1(外部中断 1) ;P3.4 T0(记时器 0 外部输入) ;P3.5 T1(记时器 1 外部输入) ;P3.6 /WR(外部数据存储器写选通) ;P3.7 /RD(外部数据存储器读选通) ;日历实时时钟42、时钟电路模块 DS12887DS12887 芯片是时钟芯片中功能较强的一种,它将晶体振荡电路、充电电路和可充电锂电池等一起封装在芯片的上方,组成一个加厚的集成电路模块。电路通电时其充电电路便自动对可充电电池充电,其内部包含非易失时钟、警报器、百年历、可编程中
10、断、方波发生器和 114 个字的非易失静态 RAM。DS12887 具有日历、时钟、低功耗静态RAM、输出方波信号等功能,石英晶振和写保护电路也封装在内,在断电情况下仍能保持时间和内存。DS12887 可以方便地与单片机接口,并由单片机系统对其进行操作得到日历、时钟信息,输出方波信号用于秒信号的显示。其封装方式为 24 脚双排直列,如图 2.5所示。图 1-2 DS12887 的封装形式2.2.1 DS12887 主要功能介绍(1)内含一个锂电池,断电后运行十年以上不丢失数据。(2)计秒,分,时,天,星期,日,月,年,并有闰年补尝功能。(3)二进制数码或 BCD 码表示时间,日历和定闹。(4)
11、12 小时或 24 小时制,12 小时时钟模式带有 PM 和 AM 指示,有夏令时功能。(5)Motorola 和 Intel 总线时序选择,可编程方波信号输出。(6)有 128 个字节 RAM 单元与软件接口,其中 14 个字节作为时钟和控制寄存器,114 字节为通用 RAM,所有 RAM 单元数据都具有掉电保护功能。(7)中断信号输出(IRQ)和总线兼容,周期性中断、时钟更新周期结束中断可分别由软件屏蔽,也可分别进行测试。(8)工作电压:+4.55.5V。(9)工作温度范围:070。日历实时时钟52.2.2 更新周期DS12887 每一秒执行一次更新周期,保证时间、日历的准确。DS1288
12、7 内部 RAM 专用寄存器地址功能 DS12887 的地址由 114 字节的用户 RAM 存放。10 字节的存放实时时钟时间,日历和控制和状态的 4 字节特殊寄存器组成,几乎所有的 128 个字节直接读写。表 2.2 为DS12887 内部 RAM 和各专用寄存器地址分布表, 表 2.2 DS12C887 内部 RAM 和各专用寄存器地址地址单元 用途地址单元 用途地址00H 秒地址01H 秒闹地址02H 分地址03H 分闹地址04H 时地址05H 时闹地址06H 星期地址07H日(两位数)地址08H月(两位数) 地址09H年(两位数)地址0AH 寄存器 A地址0BH 寄存器 B地址0CH
13、寄存器 C地址0CH 寄存器 D0EH7EH不掉电 RAM 区,共 114字节寄存器 A 寄存器 A 各位不受复位的影响,UIP 位为只读位,其它各位均可读写,寄存器的控制字的格式如表 2.3 所列。 表 2.3 DS12887 控制寄存器 A 各布尔位定义BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 UIP DV2 DV1 DV0 RS3 RS2 RS1 RS0 (1)UIP 位:更新周期标志位。该位为“1”时,表示芯片正处于或将开始更新周期,此时程序不准读写时标寄存器;该位为“0”时,表示至少在 244us 后才开始更新周期,此时程序可读芯片内时标寄存器,
14、该位是只读位。 (2) DV0、DV1、DV2:芯片内部振荡器 RTC 控制位。当芯片解除复位状态,并将010 写入 DV0、DV1、DV2 后,另一个更新周期将在 500ms 后开始。因此,在程序初始化时可用这三位精确地使芯片在设定的时间开始工作。这与 MC146818 不同的是,DS12887 固日历实时时钟6定使用 32 768Hz 的内部晶体,所以,DV0=“0” ,DV1=“1” ,DV2=“0” ,即只有一种 010的组合选择即可启动 RTC。 (3) RS3、RS2、RS1、RS0:周期中断可编程方波输出速率选择位。各种不同的组合可以产生不同的输出。程序可以通过设置寄存器B的SQ
15、WF和PIE位控制是否允许周期中断方波输出。寄存器B寄存器B 允许读写,主要用于控制芯片的工作状态。寄存器B 的控制字的格式如表4 所列。表4 DS12887 控制寄存器B各布尔位定义BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0SET PIE AIE UIE SQWE DM 24/12 DSE(1)SET 位:当该位为“0”时,芯片处于正常工作状态,每秒产生一个更新周期来更新时标寄存器。为“1”时,芯片停止工作,程序在此期间可初始化芯片的各个时标寄存器。(2) PIE、AIE、UIE 位:分别为周期中断、报警中断、更新周期结束中断允许位。各位为“1”时,允许芯
16、片发相应的中断。(3) SQWE 位: 方波输出允许位。SQWE =“1”,按寄存器A 输速率选择位所确定的频率输出方波;SQWE =“0”,脚SQW 保持低电平。(4) DM 位:时标寄存器用十进制BCD 码表示或用二进制表示格式选择位。DM =“0”时,为十进制BCD 码;DM =“1”时,为二进制码。(5) 24/ 12 位: 24/ 12 小时模式设置位。24/ 12位=“1”时,为24 小时工作模式;24/ 12 位=“0”时,为12 小时工作模式。(6) DSE 位:夏令时服务位。DSE =“1”,夏时制设置有效,夏时制结束可自动刷新恢复时间;DSE=“0”,无效。2.2.3 DS
17、12887 的中断和更新周期:DS12887 处于正常工作状态时,每秒钟将产生一个更新周期,芯片处于更新周期的标志是寄存器 A 中的 UIP 位为“1” 。在更新周期内,芯片内部时标寄存器数据处于更新阶段,故在该周期内,微处理器不能读芯片时标寄存器的内容,否则将得到不确定数据。更新周期的基本功能主要是刷新各个时标寄存器中的内容,同时秒时标寄存器内容加 1,并检查其他时标寄存器内容是否有溢出,如果有溢出则相应进位日、月、年。 2.2.4 DS12887 初始化方法:DS12887 采取连续工作制,一般无须每次都初始化,即使是系统复位时也如此。但初始化时,首先应禁止芯片内部的更新周期操作,所以先将
18、 DS12887 状态寄存器 B 中的 SET位置“1” ,然后初始化 00H09H 时标参数寄存器和状态寄存器 A,此后再通过读状态寄存器 C,清除寄存器 C 中的周期中断标志位 PF,报警中断标志位 AF,更新周期结束中断日历实时时钟7标志位 UF。通过读寄存器口 D 中的 VRT 位,读状态寄存器口后 VRT 位将自动置“1” ,最后将状态寄存器 B 中的 SET 位置“0” ,芯片开始计时工作。3、LCD 显示本次课程设计采用试验台的 OCMJ4X8C 作为显示设备引脚功能分别为:VSS:电源地(GND)。VCC:电源电压(5V) 。V0:LCD 驱动电压,液晶显示器对比度调整端。使用
19、时可以通过一个 10K 的电位器调整对比度,接正电源时对比度最弱,接地电源时对比度最高。RS:寄存器选择输入端,选择模块内部寄存器类型信号。RS=0,进行写模块操作时指向指令寄存器,进行读模块操作时指向地址计数器。RS=1,无论进行读操作还是写操作均指向数据寄存器。R/W:读写控制输入端,选择读/写模块操作信号。 R/W=0,读操作;R/W=1,写操作。本设计中只需往 LCD 里写数据即可,写时序见图 3-4。E:使能信号输入端。读操作时,高电平有效;写操作时,下降沿有效DB0DB7:数据输入/输出口,单片机与模块之间的数据传送通道。选择 4 位方式通讯时,不使用 DB0DB3。BLA:背光的
20、正端 +5V。BLK:背光的负端 0V。4X8C 模块内部主要由 LCD 显示屏、控制器、列驱动器和偏压产生电路构成。控制器接受来自 MPU 的指令和数据,控制着整个模块的工作。主要由显示数据缓冲区 DDRAM,字符发生器 CGROM,字符发生器 CGRAM,指令寄存器 IR,地址寄存器 DR,忙标志BF,地址计数器 AC 以及时序发生电路组成。模块通过数据总线 DB0DB7 和 E、R/W、RS 三个输入控制端与 MPU 接口。这三根控制日历实时时钟8线按照规定的时序相互协调作用,使控制器通过数据总线接受 MPU 发来的数据和指令,从 CGROM 中找到欲显示字符的字符码,送入 DDRAM,
21、在 LCD 显示屏上与 DDRAM 存储单元对应的规定位置显示出该字符。控制器还可以根据 MPU 的指令,实现字符的显示,闪烁和移位等显示效果。CGROM 内提供的是内置字符码,CGRAM 则是供用户存储自定义的点阵图形字符。模块字符在 LCD 显示屏上的显示位置与该字符的字符代码在显示缓冲区 DDRAM 内的存储地址一一对应。LCD4X8C 模块内部具有两个 8 位寄存器:指令寄存器 IR 和地址寄存器 DR,用户可以通过 RS 和 R/W 输入信号的组合选择指定的寄存器,进行相应的操作。表 3-1 中列出了组合选择方式:表 3-1 寄存器选择组合RS R/W 操 作0 0 将 DB0DB7
22、 的指令代码写入指令寄存器 IR 中0 1 分别将状态标志 BF 和地址计数器 AC 内容读到 DB7 和DB6DB01 0将 DB0DB7 的数据写入数据寄存器中,模块的内部操作将数据写到 DDRAM 或者 CGRAM 中的数据送入数据寄存器中1 1将数据寄存器内的数据读到 DB0DB7,模块的内部操作自动将 DDRAM 或者 CGRAM 中的数据送入数据寄存器中4X8C 提供了较为丰富的指令设置,通过选择相应的指令设置,用户可以实现多种字符显示样式。下面仅简要介绍本次设计中需要用到的一些指令设置。清屏指令 Clear display清显示指令将空位字符码 20H 送入全部 DDRAM 地址
23、中,时 DDRAM 中的内容全部清除,显示消失,地址计数器 AC=0,自动增一模式。显示归位,光标闪烁回到原点(显示屏左上角),但不改变移位设置模式。清屏指令码见表 3-2。表 3-2 清屏指令码RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB00 0 0 0 0 0 0 0 0 1进入模式设置指令 Entry mode set见表 3-3,进入模式设置指令用于设定光标移动方向和整体显示是否移动。表 3-3 模式设置指令码RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0日历实时时钟90 0 0 0 0 0 0 1 I/D SI/D:字符码写
24、入或者读出 DDRAM 后 DDRAM 地址指针 AC 变化方向标志。I/D=1,完成一个字符码传送后,AC 自动加 1。I/D=0,完成一个字符码传送后,AC 自动减 1。S:显示移位标志。S=1,完成一个字符码传送后显示屏整体向右(I/D=0)或向左(I/D=1)移位。S=0,完成一个字符码传送后显示屏不移动。显示开关控制指令 Display on/off control指令码见表 3-4,该指令功能为控制整体显示开关,光标显示开关和光标闪烁开关。表 3-4 显示开关控制指令码RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB00 0 0 0 0 0 1 D C B
25、D:显示开/关标志。D=1,开显示;D=0 ,关显示。关显示后,显示数据仍保持在 DDRAM 中,开显示即可再现。C:光标显示控制标志。C=1,光标显示;C=0,光标不显示。不显示光标并不影响模块其他显示功能。显示 5*8 点阵字体时,光标在第八行显示;显示 5*10 点阵字符时,光标在第 11 行显示。B:闪烁显示控制标志。B=1,光标所在位置会交替显示全黑点阵和显示字符,产生闪烁效果;B=0 ,光标不闪烁。功能设置指令 Function set功能设置指令用于设置接口数据位数,显示行数以及字形。指令码见表 3-5。表 3-5 功能设置指令码RS R/W DB7 DB6 DB5 DB4 DB
26、3 DB2 DB1 DB00 0 0 0 1 DL N F * *DL:数据接口宽度标志。DL=1 ,8 位数据总线 DB7DB0;DL=0,4 位数据总线DB7DB4,DB3DB0 不使用,此方式传送数据需分两次进行。N:显示行数标志。N=0,显示一行;N=1 ,显示两行。F:显示字符点阵字体标志。F=0,显示 5*7 点阵字符;F=1,显示 5*10 点阵字符。表 3-6 地址归位(02H)RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB00 0 0 0 0 0 0 0 1 *功能:把 DDRAM 地址计数器调整为“00H” ,光标回原点,该功能不影响显示 DDR
27、AM表 3-7 功能设定(20H/24H/26H/30H/34H/36H)RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB00 0 0 0 1 DL * RE * *功能:DL=1: 8-BIT 控制接口 DL=0: 4-BIT 控制接口 RE=1: 扩充指令集动作 RE=0: 基本指令集动作初始化进行的指令操作为:日历实时时钟10清显示功能显示DL=1:8 位数据接口。N=0:显示一行。F=0:显示 5*10 点阵字符字体。显示开/关控制D=0:关显示。C=0:不显示光标。B=0:光标不闪烁。输入模式设置I/D=1:AC 自动增一。S=0:显示不移位。三、理论分析及
28、程序设计 1、系统功能该系统实现了日期时间年月日十分秒的显示功能,一天 24 小时的计时方法,用DS12887 来进行时间计时,通过 AT89C51 将所得到的时间显示到 LCD 当中。DS12887 可以自动进行时间年月日十分秒的计时,将初始时间通过单片机写入DS12887 芯片,该芯片读出时间后,进行一次时间延时的调用,然后回到主程序进行自动计时,然后不断得循环得到准确的时间。日历实时时钟112 程序流程图 图 3-1 主程序流程图日历实时时钟12图 3-2 从 DS12887 读时间开始赋 12887 地址设置初始时间将初始时间写入DS12887 内芯片读时间设置循环将时间时间信息存入指
29、定位置时间通过显示器显示时间是否改变结束日历实时时钟13图 3-3 设置 DS12887 时间流程图3、主程序清单;定义 DS12887 的地址;-SECOND EQU 7f00H ; 秒寄存器MINUTE EQU 7f02H ; 分寄存器HOUR EQU 7f04H ; 时寄存器DATE EQU 7f07H ; 日寄存器MONTH EQU 7f08H ; 月寄存器YEAR EQU 7f09H ; 年寄存器REG_A EQU 7f0AH ; 寄存器 AREG_B EQU 7f0BH ; 寄存器 B开始将内存中时间秒寄存器中的低四位提取出并赋给相应的秒低位显示寄存器调用显示程序显示秒低位按照以上
30、方法显示其余时间结束日历实时时钟14REG_C EQU 7f0CH ; 寄存器 CREG_D EQU 7f0DH ; 寄存器 D;-SECOND_BUFFER EQU 51H ;秒缓冲区MINUTE_BUFFER EQU 52H ;分缓冲区HOUR_BUFFER EQU 53H ;时缓冲区DATE_BUFFER EQU 54H ;日缓冲区MONTH_BUFFER EQU 55H ;月缓冲区YEAR_BUFFER EQU 56H ;年缓冲区;-MIAO1 EQU40HMIAO2 EQU 41HFEN1 EQU42HFEN2 EQU43HSHI1 EQU 44HSHI2 EQU 45HRI1 EQ
31、U 46HRI2 EQU 47HYUE1 EQU48HYUE2 EQU49HNIAN1 EQU 4AHNIAN2 EQU4BH;-COUNT EQU4EHCOUNT1 EQU4DHCOUNT2 EQU4CHCOUNT3 EQU4BHCOUNT4 EQU4AHCOUNT5 EQU49HRS BIT P2.0 ;使能端,读操作时,高电平有效;写操作时,下降沿有效RW BIT P2.1 ;读操作为 0,写操作为 1E BIT P2.2 ;寄存器选择输入端PSB EQUP2.3;低电平串行,高电平并行;-主程序-ORG 0000HSTART: ;-LCD 初始化-MOV SP,#60H MOVA,#3
32、4H ;34H-扩充指令操作 0011 0100 8 位数据总线 显示日历实时时钟15一行 显示 5*10 点阵字符LCALL ENABLEMOVA,#30H ;30H-基本指令操作 0011 0000LCALL ENABLEMOVA,#01H ;清除显示 0000 0001LCALL ENABLEMOVA,#06H ;指定在资料写入或读取时,光标的移动方向 0000 0110 AC 自动加 1 显示屏不移动LCALL ENABLEMOVA,#0CH ;开显示,关光标,不闪烁 0000 1011LCALL ENABLESETB PSB ;设置并行CHU: MOV 51H,#50H ;秒MOV
33、52H,#05H ;分 MOV 53H,#09H ;时MOV 54H,#24H ;日MOV 55H,#12H ;月MOV 56H,#10H ; -LCALL WRITETIME ;调用时钟写;-MAIN: LCALL READTIME ;调用时钟读LCALL T10MSDAJMP MAIN;-DS12887 写时间子程序-WRITETIME: PUSH DPH PUSH DPLPUSH ACCMOV DPTR,#REG_A ;开启振荡器和允许计时MOV A,#00100000BMOVX DPTR,AMOV DPTR,#REG_B ;设定 SET=1,禁止更新资料MOV A,#10000000B
34、MOVX DPTR,AMOV DPTR,#SECOND ;设定秒MOV A,SECOND_BUFFERMOVX DPTR,A日历实时时钟16MOV DPTR,#MINUTE ;设定分MOV A,MINUTE_BUFFERMOVX DPTR,AMOV DPTR,#HOUR ;设定时MOV A,HOUR_BUFFERMOVX DPTR,AMOV DPTR,#DATE ;设定日MOV A,DATE_BUFFERMOVX DPTR,AMOV DPTR,#MONTH ;设定月MOV A,MONTH_BUFFERMOVX DPTR,AMOV DPTR,#YEAR ;设定年MOV A,YEAR_BUFFER
35、MOVX DPTR,AMOV DPTR,#REG_B ;设定 SET=0,BCD 模式,24 小时制MOV A,#00000010BMOVX DPTR,APOP ACCPOP DPLPOP DPHRET;- DS12887 读时间子程序-READTIME: PUSH DPLPUSH DPHPUSH ACCMOV DPTR,#REG_A ;读取寄存器 ARTCBUSY: MOVX A,DPTRJBC ACC.7,RTCBUSY ;测试 UIP 位,如果 UIP=0;则执行以下程序MOV DPTR,#MINUTE ;读取分数据MOVX A,DPTRMOV MINUTE_BUFFER,AMOV DP
36、TR,#HOUR ;读取时资料MOVX A,DPTRMOV HOUR_BUFFER,AMOV DPTR,#DATE ;读取日资料日历实时时钟17MOVX A,DPTRMOV DATE_BUFFER,A MOV DPTR,#MONTH ;读取月资料MOVX A,DPTRMOV MONTH_BUFFER,AMOV DPTR,#YEAR ;读取年资料MOVX A,DPTRMOV YEAR_BUFFER,AMOV DPTR,#SECOND ;读取秒资料MOVX A,DPTRSUBB A,SECOND_BUFFERJNZ DISPLAY ;POP ACCPOP DPHPOP DPLRETDISPLAY:
37、 MOVX A,DPTRMOV SECOND_BUFFER,APOP ACCPOP DPHPOP DPLLCALL ZHUAN LCALL LCDRET;-LCD 显示主程序-LCD:MOVA,#02H MOV COUNT1,#00H ;TIME:MOV COUNT2,#06HMOVDPTR,#TAB1ACALL LCD_TIMEMOVCOUNT,SHI2;时 ACALL LCD_SHUMOVCOUNT,SHI1ACALL LCD_SHUMOV COUNT,#00H日历实时时钟18ACALL LCD_FUMOVCOUNT,FEN2 ;分 ACALL LCD_SHUMOVCOUNT,FEN1AC
38、ALL LCD_SHUMOV COUNT,#00HACALL LCD_FUMOVCOUNT,MIAO2 ;秒ACALL LCD_SHUMOVCOUNT,MIAO1ACALL LCD_SHU;-MOV COUNT1,#00H ;DATEMOV COUNT2,#09HMOVDPTR,#TAB3ACALL LCD_TIMEMOVCOUNT,NIAN2 ;年ACALL LCD_SHUMOVCOUNT,NIAN1ACALL LCD_SHUMOV COUNT,#01HLCALL LCD_FUMOVCOUNT,YUE2 ;月ACALL LCD_SHUMOVCOUNT,YUE1ACALL LCD_SHUMOV
39、 COUNT,#01HACALL LCD_FUMOVCOUNT,RI2 ;日ACALL LCD_SHUMOVCOUNT,RI1ACALL LCD_SHURET;-LCD 显示子程序-LCD_TIME:MOV A,COUNT1MOVC A,A+DPTRINC COUNT1日历实时时钟19DJNZ COUNT2, WR_EN1RETLCD_SHU:MOVDPTR,#TAB4MOV A,COUNTMOVC A,A+DPTRLCALL WR_EN2RETLCD_FU:MOV DPTR,#TAB5MOV A,COUNTMOVC A,A+DPTRLCALL WR_EN2RET;-ENABLE:LCALL
40、CHK_BUSY ;写指令子程序CLRRSCLRRWMOVP1,ASETB ENOPNOPCLRERETWR_EN1: ;写数据子程序LCALL CHK_BUSYSETB RSCLRRWMOVP1,ASETB ENOPNOPCLRELJMP LCD_TIMEWR_EN2: ;写数据子程序LCALL CHK_BUSYSETB RSCLRRW日历实时时钟20MOVP1,ASETB ENOPNOPCLRERETCHK_BUSY: MOVP0,#0FFH ;测忙碌子程序CLRRSSETB RWSETB EJB P1.7,$CLRERET;-ZHUAN: MOV A,51HMOV MIAO1,ASWAP
41、 AMOV MIAO2,AANL MIAO1,#0FHANL MIAO2,#0FHMOV A,52HMOV FEN1,ASWAP AMOV FEN2,AANL FEN1,#0FHANL FEN2,#0FHMOV A,53HMOV SHI1,ASWAP AMOV SHI2,AANL SHI1,#0FHANL SHI2,#0FHMOV A,54HMOV RI1,ASWAP AMOV RI2,AANL RI1,#0FHANL RI2,#0FH日历实时时钟21MOV A,55HMOV YUE1,ASWAP AMOV YUE2,AANL YUE1,#0FHANL YUE2,#0FHMOV A,56HMO
42、V NIAN1,ASWAP AMOV NIAN2,AANL NIAN1,#0FHANL NIAN2,#0FHRET;-延时子程序-T10MSD:SETB RS0MOV COUNT4, #12TM:MOV COUNT3, #128TM6:DJNZ COUNT3, TM6DJNZ COUNT4, TMCLR RS0RETTAB1:DBTIME: TAB3:DB DATE: TAB4:DB 0123456789TAB5:DB :-END日历实时时钟22四、结果分析1、仿真电路图图 4-1 仿真电路图日历实时时钟232、实验台测试结果图 4-2 实验台测试结果日历实时时钟24五、总结信息技术是当今世界
43、发展最快、渗透性最强、应用最广的关键技术,是推动经济增长和知识传播的重要引擎。在我国,随着国家信息化发展战略的贯彻实施,信息化建设已经进入了全方位、多层次推进应用的新阶段。现在,掌握计算机技术已成为二十一世纪人才应具备的基本素质之一。单片机作为我们的主要专业课之一,虽然在大三开学初我对这门课并没有什么兴趣,觉得那些程序枯燥乏味,但在这次课程设计后我发现自己在一点一滴的努力中对单片机的兴趣也在逐渐增加。这次课程设计历时两个星期,经过这些天的实践和体验下来,我们学到了不仅是知识更多的学会的是团队协作。现在想来,也许学校安排这次课程设计又烫而更深的意义吧,它不仅综合理论知识来运用到创新和设计,还让我
44、们知道了团队的合作。两个星期前我们还为这次课程设计发愁,我们需要了解很多我们在课本上没学到的知识,比如说 LCD 的应用 、以及 DS12887 芯片的用法,我们通过上网和图书馆查资料并在老师细心的指导下,完成了这次设计,感谢老师的辛勤指导。在做本次课程设计的过程中,我感触最深的当属查阅大量设计资料了。为了让自己的设计更加完善,查阅这方面的设计资料是十分必要的,同时也是必不可少的。在这两星期的时间里,我们经历从迷茫到清晰的全过程, ,我认识到做课程设计,必须做到,首先要分析好自己的设计目的及要求,在设计程序前不能妄想一蹴而就要有一个清晰的思路和一个完整的流程图,学会单步调试来找错误,设计过程,
45、好比是人类成长的过程,常有一些不如意和挫折,我们经历了不少艰辛,收获同样巨大。通过这次课程设计,我也发现了自身存在的很多不足之处,虽然理论知识感觉掌握了,但在运用实践过程中仍有意想不到的困惑,进过一番努力才得以解决。我想这将对我以后的学习产生积极的影响。通过这次设计,我懂得了学习的重要性,了解到理论知识与实践相结合的重要性,学会了坚持、耐心和努力,这将为自己今后的学习和工作作出了最好的榜样。再次感谢老师的热心指导,没有老师的指导我们不可能完成。There is a will,there is a way.有志者事竟成。日历实时时钟25参考文献电子设计自动化技术基础马建国、孟宪元编 清华大学出版 2004 年4 月实用电子系统设计基础 姜威 2008 年 1 月单片机系统的 PROTEUS 设计与仿真 张靖武 2007 年 4 月