第一章 系统概述 .................................................................................... 5 第二章 方案选择 .................................................................................... 6
2.1 方案1——基于AT89S52单片机的电子万年历设计 ............ 6 2.2 方案2——基于DS1302的电子万年历设计 ..................... 6 第三章 系统硬件电路的设计 ................................................................ 7
3.1 系统核心部分——闪电存储型器件AT89S52 ................... 7
3.1.1 AT89S52具有下列主要性能 ...................................................... 7 3.1.2 AT89S52的引脚及功能 .............................................................. 7 3.2 DS1302时钟电路 .............................................. 9
3.2.1 DS1302芯片介绍 ...................................................................... 10 3.2.2 DS1302 的应用 ........................................................................ 13 3.3 存储电路 ..................................................... 14
3.3.1 AT24C02管脚介绍 .................................................................. 14 3.3.2 AT24C02的特性 ...................................................................... 14 3.4 液晶显示电路 ............................................................................. 16 3.4.1 液晶显示控制驱动器HD61202的特点 ................................. 17 3.4.2 液晶显示控制驱动器HD61202的引脚功能 ......................... 17 3.4.3 液晶显示控制驱动器HD61202的指令系统 ......................... 17 3.4.4 HY-12864的电路结构特点 .................................................... 19 3.5 键盘电路 ..................................... 错误!未定义书签。 第四章 系统程序的设计 ...................................... 错误!未定义书签。
1
4.1 阳历程序的设计 .............................. 错误!未定义书签。 4.2 时间调整程序设计............................ 错误!未定义书签。
4.3 阴历程序设计 ................................... 错误!未定义书签。
第五章 测试结果 .................................................................................... 21 致 谢 ………………………………………………………………...23 参考文献 .................................................................................................. 24
2
摘 要
在日新月异的21世纪里,家用电子产品得到了迅速发展。许多家电设备都趋于人性化、智能化,这些电器设备大部分都含有CPU控制器或者是单片机。单片机以其高可靠性、高性价比、低电压、低功耗等一系列优点,近几年得到迅猛发展和大范围推广,广泛应用于工业控制系统、通讯设备、日常消费类产品和玩具等。并且已经深入到工业生产的各个环节以及人民生活的各个方面,如车间流水线控制、自动化系统等、智能型家用电器(冰箱、空调、彩电)等。用单片机来控制的小型家电产品具有便携实用,操作简单的特点。
本文设计的电子万年历属于小型智能家用电子产品。利用单片机进行控制,实时时钟芯片进行记时,外加掉电存储电路和显示电路,可实现时间的调整和显示。电子万年历既可广泛应用于家庭,也可应用于银行、邮电、宾馆、医院、学校、企业、商店等相关行业的大厅,以及单位会议室、门卫等场所。因而,此设计具有相当重要的现实意义和实用价值。
3
ABSTRACT
In the ever-changing 21st century, home electronics products have been developed rapidly. Many appliances have become humanity, intelligence, most of these electrical equipment containing CPU controller or microcontroller. Microcontroller for its high reliability, high cost, low voltage, low power consumption and a series of advantages in recent years has been the rapid development and large-scale promotion, widely used in industrial control systems, communications equipment, everyday consumer products and toys. And have been deep into all aspects of industrial production and all aspects of people's lives, such as assembly line control, automation systems,
intelligent home appliances (refrigerators, air conditioning, color TV) and so on. Chip microcomputer to control the small household electrical appliances with portable and practical, easy features.
This design of the electronic calendar is a small smart home electronics products. Use of micro controller, real time clock chip in mind, the external power-down memory circuit and display circuit, enabling time adjustment and display. Widely used in household electronic calendar can also be applied to banks, post and telecommunications, hotels, hospitals, schools, businesses, shops and other related industries lobby, and the unit conference room, concierge and other places. Thus, this design has important practical significance and practical value.
Keyword: microcontroller intelligent CPU controller Automatic control
4
第一章 系统概述
本设计以AT89S52单片机为核心,构成单片机控制电路,结合DS1302时钟芯片和24C02FLASH存储器,显示阳历年、月、日、星期、时、分、秒和阴历年、月、日,在显示阴历时间时,能标明是否闰月,同时完成对它们的自动调整和掉电保护,全部信息用液晶显示。人机接口由三个按键来实现,用这三个按键对时间、日期可调,并可对闹铃开关进行设置。软件控制程序实现所有的功能。整机电路使用+5V稳压电源,可稳定工作。系统框图如图1-1所示,其软硬件设计简单,时间记录准确,可广泛应用于长时间连续显示的系统中。
人机接口 单片机控制电路 软件控制程序 电源电路 显示电路 图1-1 系统框图
5
第二章 方案选择
由于电子万年历的种类比较多,因此方案选择在设计中是至关重要的。正确地选择方案可以减小开发难度,缩短开发周期,降低成本,更快地将产品推向市场。
2.1 方案1——基于AT89S52单片机的电子万年历设计
不使用时钟芯片,而直接用AT89S52单片机来实现电子万年历设计。AT89S52是一种带8K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS 8位微处理器,俗称单片机。单片机的可擦除只读存储器可以反复擦写1000余次。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89S52是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
若采用单片机计时,利用它的一个16位定时器/计数器每50ms产生一个中断信号,中断20次后产生一个秒信号,然后根据时间进制关系依次向分、时、日、星期、月、年进位。这样就实现了直接用单片机来实现电子万年历设计。
用单片机来实现电子万年历设计,无须外接其他芯片,充分利用了单片机的资源。但是精度不够高,误差较大,掉电后丢失所有数据,软件编程较复杂。
2.2 方案2——基于DS1302的电子万年历设计
在以单片机为核心构成的装置中,经常需要一个实时的时钟和日历,以便对一些实时发生事件记录时给予时标,实时时钟芯片便可起到这一作用。过去多用并行接口的时钟芯片,如MC146818,DS12887等。它们已能完全满足单片机系统对实时时钟的要求,但是这些芯片与单片机接口复杂、占用地址, 数据总线接线多、芯片体积大占用空间多、近年来串行接口的各种芯片在单片机系统中应用愈来愈多,串行接口的实时时钟芯片也出现了不少,DS1302是一个综合性能较好且价格便宜的串行接口实时时钟芯片。
利用单片机进行控制,采用DS1302作为实时时钟芯片,其三线接口SCLK、I/O、/RST与单片机进行同步通信,外加掉电存储电路、显示电路、键盘电路,即构成一个基本的电子万年历系统,若还要添加其他功能,在这基础上外扩电路即可。
由于在系统设计时,需要考虑以下几点因素:功耗低、精确度高、软件编程较简单,芯片的体积小、芯片成本低等,而DS1302芯片有上面所述的诸多优点,所以本设
6
计采用方案2。
第三章 系统硬件电路的设计
按照系统设计功能的要求,初步确定设计系统由主控模块、时钟模块、存储模块、键盘接口模块、显示模块和闹铃模块共6个模块组成,电路系统构成框图如图4-1所示。主控芯片使用52系列AT89S52单片机,时钟芯片使用美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟芯片DS1302,存储模块采用美国ATMEL公司生产的低功耗CMOS串行EEPROM存储芯片AT24C02。DS1302作为主要计时芯片,可以做到计时准确。更重要的是,DS1302可以在很小电流的后备 (2.5~5.5V电源,在2.5V时耗电小于300nA)下继续计时,并可编程选择多种充电电流来对后备电源进行慢速充电,可以保证后备电源基本不耗电。
DS1302 时钟电路 (89S52) 主控模块 键扫描电路 液晶显示 闹铃电路 存储电路
图4-1 电子万年历电路系统构成框图
3.1 系统核心部分——闪电存储型器件AT89S52 3.1.1 AT89S52具有下列主要性能[5]:
·8KB可改编程序Flash存储器(可经受1000次的写入/擦除周期) ·全静态工作:0Hz~24MHz ·三级程序存储器保密 ·128×8字节内部RAM ·32条可编程I/O线 ·2个16位定时器/计数器 ·6个中断源 ·可编程串行通道 ·片内时钟振荡器 3.1.2 AT89S52的引脚及功能
AT89S52单片机的管脚说明如图4-2所示。
7
1234567891011121314151617181920P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7RSTP3.0(RXD)P3.1(TXD)P3.2(INT0)P3.3(INT1)P3.4(T0)P3.5(T1)P3.6(WR)P3.7(RD)XTAL2XTAL1GNDVCCP0.0(AD0)P0.1(AD1)P0.2(AD2)P0.3(AD3)P0.4(AD4)P0.5(AD5)P0.6(AD6)P0.7(AD7)EA/VPPALE/PROGPSENP2.7(A15)P2.6(A14)P2.5(A13)P2.4(A12)P2.3(A11)P2.2(A10)P2.1(A9)P2.0(A8)4039383736353433323130292827262524232221
图4-2 AT89S52的管脚
(1) 主要电源引脚 ①VCC 电源端 ②GND 接地端
(2) 外接晶体引脚XTAL1和XTAL2
①XTAL1 接外部晶体的一个引脚。在单片机内部,它是构成片内振荡器的反相放大器的输入端。当采用外部振荡器时,该引脚接收振荡器的信号,既把此信号直接接到内部时钟发生器的输入端。
②XTAL2 接外部晶体的另一个引脚。在单片机内部,它是上述振荡器的反相放大器的输出端。采用外部振荡器时,此引脚应悬浮不连接。 (3) 控制或与其它电源复用引脚RST、ALE//PROG、/PSEN和/EA/VPP
①RST 复位输入端。 当振荡器运行时,在该引脚上出现两个机器周期的高电平将使单片机复位。
②ALE//PROG 当访问外部存储器时,ALE(地址锁存允许)的输出用于锁存地址的低位字节。即使不访问外部存储器,ALE端仍以不变的频率(此频率为振荡器频率的1/6)周期性地出现正脉冲信号。因此,它可用作对外输出的时钟,或用于定时目的。然而要注意的是:每当访问外部数据存储器时,将跳过一个ALE脉冲。在对Flash存储器编程期间,该引脚还用于输入编程脉冲(/PROG)[6]。
③/PSEN 程序存储允许(/PSEN)输出是外部程序存储器的读选通信号。当AT89S52/LV52由外部程序存储器取指令(或常数)时,每个机器周期两次/PSEN有效(既输出2个脉冲)。但在此期间内,每当访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
8
④/EA/VPP 外部访问允许端。要使CPU只访问外部程序存储器(地址为0000H~FFFFH),则/EA端必须保持低电平(接到GND端)。当/EA端保持高电平(接VSS端)时,CPU则执行内部程序存储器中的程序。
(4) 输入/输出引脚 P0.0~ P0.7、P1.0~P1.7、P2.0~ P2.7 和P3.0~P3.7 ①P0端口(P0.0~ P0.7) P0是一个8位漏极开路型双向I/O端口。作为输出口用时,每位能以吸收电流的方式驱动8个TTL输入,对端口写1时,又可作高阻抗输入端用。
②P1端口(P1.0~ P1.7) P1是一个带有内部上拉电阻的8位双向I/O端口。P1的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。对端口写1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。作输入口时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流。
③P2端口 (P2.0~P2.7) P2是一个带有内部上拉电阻的8位双向I/O端口。P2的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。对端口写1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。P2作输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流。
④P3端口(P3.0~P3.7) P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流,这是由于上拉的缘故。
P3口也可作为AT89S52的一些特殊功能,这些特殊功能见表3-1。
表3-1 P3端口的特殊功能
端口引脚 P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 兼 用 功 能 RXD (串行输入口) TXD (串行输出口) /INT0 (外部中断0) /INT1 (外部中断1) T0 ( 定时器0的外部输入) T1 (定时器1的外部输入) /WR (外部数据存储器写选通) /RD (外部数据存储器读选通)
3.2 DS1302时钟电路
9
3.2.1 DS1302芯片介绍
低功耗时钟芯片DS1302可以对年、月、日、时、分、秒进行计时,且具有闰年补偿等多种功能。DS1302用于数据记录,特别是对某些具有特殊意义的数据点的记录上,能实现数据与出现该数据的时间同时记录。这种记录对长时间的连续测控系统结果的分析以及对异常数据出现的原因的查找有重要意义[8]。
采用DS1302作为记录测控系统中的数据记录,其软硬件设计简单,时间记录准确,既避免了连续记录的大工作量,又避免了定时记录的盲目性,给连续长时间的测量、控制系统的正常运行及检查都来了很大的方便,可广泛应用于长时间连续的测控系统中。在测量控制系统中,特别是长时间无人职守的测控系统中,经常需要记录某些具有特殊意义的数据及其出现的时间。记录及分析这些特殊意义的数据,对测控系统的性能分析及正常运行具有重要的意义。传统的数据记录方式是隔时采样或定时采样,没有具体的时间记录,因此只能记录数据而无法准确记录其出现的时间;若采用单片机计时,一方面需要采用计数器,占用硬件资源,另一方面需要设置中断、查询等,同样耗费单片机的资源,而且某些测控系统可能不允许。而在系统中采用DS1302则能很好地解决这个问题。 (1) DS1302的性能特性
·实时时钟,可对秒、分、时、日、周、月以及带闰年补偿的年进行计数; ·用于高速数据暂存的31×8位RAM; ·最少引脚的串行I/O; ·2.5~5.5V 电压工作范围; ·2.5V时耗电小于300nA;
·用于时钟或RAM数据读/写的单字节或多字节(脉冲方式)数据传送方式; ·简单的3线接口;
·可选的慢速充电(至VCC1)的能力。
DS1302时钟芯片包括实时时钟/日历和31字节的静态RAM。它经过一个简单的串行接口与微处理器通信。实时时钟/日历提供秒、分、时、日、周、月和年等信息。对于小于31天的月和月末的日期自动进行调整,还包括闰年校正的功能。时钟的运行可以采用24h或带AM(上午)/PM(下午)的12h格式。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302有主电源/后备电源双电源引脚:VCC1 在单电源与电池供电的系统中提供低电源,并提供低功率的电池备份;VCC2在双电源系统中提供主电源,在这种运用方式中,VCC1 连接到备份电源,以便在没有主电源的情况下能保存时间信息以及数据。DS1302由VCC1或VCC2中较大者供电。当VCC2大于VCC1+0.2V时,VCC2给DS1302供电;当VCC2小于VCC1时,DS1302由VCC1供电。 (2) DS1302数据操作原理
10
DS1302在任何数据传送时必须先初始化,把RST脚置为高电平,然后把8位地址和命令字装入移位寄存器,数据在SCLK的上升沿被输入。无论是读周期还是写周期,开始8位指定40个寄存器中哪个被访问到。在开始8个时钟周期,把命令字节装入移位寄存器之后,另外的时钟周期在读操作时输出数据,在写操作时写入数据。时钟脉冲的个数在单字节方式下为8加8,在多字节方式下为8加字节数,最大可达248字节数。
U31234Vcc2X1X2GNDDS1302Vcc1SCLKI/ORST8765
图4-3 DS1302管脚图
如果在传送过程中置RST为低电平,则会终止本次数据传送,并且I/O引脚变为高阻态。上电运行时,在VCC >=2.5V之前,RST脚必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。DS1302的管脚图如图4-3所示,内部结构图如图4-4所示,表4-2为各引脚的功能。
VCC1VCC2GNDI/O电源 电源 控制 控制实时时钟实时时钟 32.768kHzX1X2振荡器与振荡器与分频器 分频器输入移位输入移位寄存器寄存器 DATA BUSSCLKRST命令与命令与控控制逻辑 制逻辑AD BUS31*831ⅹ8RAM RAM
图4-4 DS1302内部结构图 表4-2 DS1302引脚功能表 引脚号 1 2,3 引脚名称 VCC2 X1,X2 主电源 振荡源,外接32768HZ晶振 功能 11
4 5 6 7 8 GND RST I/O SCLK VCC1 地线 复位/片选线 串行数据输入/输出端(双向) 串行数据输入端 后备电源 DS1302的控制字如图4-5所示。控制字节的最高有效位(位7)必须是逻辑1;如果它为逻辑0,则不能把数据写入到DS1302中。位6如果为0,则表示存取日历时钟数据;为1表示存取RAM数据。位5~1(A4~A0)指示操作单元的地址。最低有效位(位0)如为0,表示要进行写操作;为1表示进行读操作。控制字节总是从最低位开始输入/输出。
7 6 5 4 3 2 1 0 1 RAM CK A4 A3 A2 A1 A0 RAM K 图4-5 控制字节的含义
为了提高对32个地址的寻址能力(地址/命令位1~5=逻辑1),可以把时钟/
日历或RAM寄存器规定为多字节(burst)方式。位6规定时钟或RAM,而位0规定读或写。在时钟/日历寄存器中的地址9~31或RAM寄存器中的地址31不能存储数据。在多字节方式中,读或写从地址0的位0开始。必须按数据传送的次序写最先的8个寄存器。但是,当以多字节方式写RAM时,为了传送数据不必写所有31字节。不管是否写了全部31字节,所写的每一字节都将传送至RAM。数据读写程序如图3-6所示。
I/O SCLKRST ≈ ≈ R/W A0 A1 A2 A3 A4 R/C 1 DATA I/O BYTE ≈ ≈ 0 1 2 345670124567DATA I/O BYTE 图3-6 数据读写程序
DS1302共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表3-3,其中奇数为读操作,偶数为写操作。
12
表3-3 DS1302的日历、时钟寄存器及其控制字
寄存器 名 秒寄存器 分钟寄存器 小时 寄存器 日期 寄存器 月份寄存器 周日寄存器 年份寄存器 命令字 写操作 80H 82H 84H 读操作 81H 83H 85H 取值 范围 00-59 00-59 01- 12或 00-23 01-28,29, 30,31 01-12 01-07 00-99 7 CH 0 12/ 24 0 0 0 0 6 5 10SEC 10MIN 10 AP HR 各位内容 4 3 2 1 0 SEC MIN HR 86H 88H 8AH 8CH 87H 89H 8BH 8DH 0 0 0 10DATE 0 0 IOM 0 0 DATE MONTH DAY YEAR 10YEAR
时钟暂停:秒寄存器的位7定义位时钟暂停位。当它为1时,DS1302停止振荡,进入低功耗的备份方式。通常在对DS1302进行写操作时(如进入时钟调整程序),停止振荡。当它为0时,时钟将开始启动。
AM-PM/12-24[小]时方式:[小]时寄存器的位7定义为12或24[小]时方式选择位。它为高电平时,选择12[小]时方式。在此方式下,位5是AM/PM位,此位是高电平时表示PM,低电平表示AM,在24[小]时方式下,位5为第二个10[小]时位(20~23h)。
3.2.2 DS1302 的应用
实时时钟芯片DS1302采用串行数据传输,可为掉电保护电源提供可编程的充电功能,也可以关闭充电功能,芯片采用32768Hz晶振。要特别说明的是,备用电源BT1可以用电池或超级电容(10万μF以上)。虽然DS1302在主电源掉电后耗电很小,但如果要长时间保证时钟正常,最好选用小型充电电池。如果断电时间较短(几小时或几天),可以用漏电较小的普通电解电容代替(100μF就可以保证1小时的正常走时)[9]。DS1302在第一次加电后,需进行初始化操作。初始化后就可以按正常方法调整时间及闹铃。DS1302的时钟电路如图3-7所示。
13
U3+5V12Y132768Hz34Vcc2X1X2GNDDS1302BT1Vcc1SCLKI/ORST87653VP3.2P3.3P3.4
图3-7 DS1302时钟电路
3.3 存储电路
3.3.1 AT24C02管脚介绍
AT24C02是美国ATMEL公司的低功耗CMOS串行EEPROM,它是内含256×8位存储空间,具有工作电压宽(2.5~5.5V)、擦写次数多(大于10000次)、写入速度快(小于10ms)等特点。
AT24C02的1、2、3脚是三条地址线,用于确定芯片的硬件地址。第8脚和第4脚分别为正、负电源。第5脚SDA为串行数据输入/输出,数据通过这条双向I2C总线串行传送。第6脚SCL为串行时钟输入线。SDA和SCL都需要和正电源间各接一个4.7K的电阻上拉。
I2C总线是一种用于I2C器件之间连接的二线制总线。它通过SDA(串行数据线)及SCL(串行时钟线)两根线在连到总线上的器件之间传送信息,并根据地址识别每个器件:不管是单片机、存储器、LCD驱动器还是键盘接口。 3.3.2 AT24C02的特性 (1) I2C总线的基本结构
采用I2C总线标准的单片机或I2C器件,其内部不仅有I2C接口电路,而且将内部各单元电路按功能划分为若干相对独立的模块,通过软件寻址实现片选,减少了器件片选线的连接。CPU不仅能通过指令将某个功能单元电路挂靠或摘离总线,还可对该单元的工作状况进行检测,从而实现对硬件系统的既简单又灵活的扩展与控制。 (2) 双向传输的接口特性
传统的单片机串行接口的发送和接收一般都各用一条线,而I2C总线则根据器件的功能通过软件程序使其可工作于发送或接收方式。当某个器件向总线上发送信息时,它就是发送器(也叫主器件),而当其从总线上接收信息时,又成为接收器(也叫从器件)。主器件用于启动总线上传送数据并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件。I2C总线的控制完全由挂接在总线上的主器件送出的地址和数据决定。
14
总线上主和从(即发送和接收)的关系不是一成不变的,而是取决于此时数据传送的方向。SDA和SCL均为双向I/O线,通过上拉电阻接正电源。当总线空闲时,两根线都是高电平。连接总线的器件的输出级必须是集电极或漏极开路,以具有线“与”功能。I2C总线的数据传送速率在标准工作方式下为100kbit/s,在快速方式下,最高传送速率可达400kbit/s。 (3) I2C总线上的时钟信号
在I2C总线上传送信息时的时钟同步信号是由挂接在SCL时钟线上的所有器件的逻辑“与”完成的。SCL线上由高电平到低电平的跳变将影响到这些器件,一旦某个器件的时钟信号下跳为低电平,将使SCL线一直保持低电平,使SCL线上的所有器件开始低电平期。此时,低电平周期短的器件的时钟由低至高的跳变并不能影响SCL线的状态,于是这些器件将进入高电平等待的状态。
当所有器件的时钟信号都上跳为高电平时,低电平期结束,SCL线被释放返回高电平,即所有的器件都同时开始它们的高电平期。其后,第一个结束高电平期的器件又将SCL线拉成低电平。这样就在SCL线上产生一个同步时钟。可见,时钟低电平时间由时钟低电平期最长的器件确定,而时钟高电平时间由时钟高电平期最短的器件确定。
(4) 数据的传送
在数据传送过程中,必须确认数据传送的开始和结束。当时钟线SCL为高电平时,数据线SDA由高电平跳变为低电平定义为“开始”信号;当SCL线为高电平时,SDA线发生低电平到高电平的跳变为“结束”信号。开始和结束信号都是由主器件产生。在开始信号以后,总线即被认为处于忙状态;在结束信号以后的一段时间内,总线被认为是空闲的。
I2C总线的数据传送格式是:在I2C总线开始信号后,送出的第一个字节数据是用来选择从器件地址的,其中前7位为地址码,第8位为方向位(R/W)。方向位为“0”表示发送,即主器件把信息写到所选择的从器件;方向位为“1”表示主器件将从从器件读信息。开始信号后,系统中的各个器件将自己的地址和主器件送到总线上的地址进行比较,如果与主器件发送到总线上的地址一致,则该器件即为被主器件寻址的器件,其接收信息还是发送信息则由第8位(R/W)确定。
在I2C总线上每次传送的数据字节数不限,但每一个字节必须为8位,而且每个传送的字节后面必须跟一个认可位(第9位),也叫应答位(ACK)。每次都是先传最高位,通常从器件在接收到每个字节后都会做出响应,即释放SCL线返回高电平,准备接收下一个数据字节,主器件可继续传送。如果从器件正在处理一个实时事件而不能接收数据时(例如正在处理一个内部中断,在这个中断处理完之前就不能接收I2C总线上的数据字节),可以使时钟SCL线保持低电平,从器件必须使SDA保持高电平,此时主器件产生1个结束信号,使传送异常结束,迫使主器件处于等待状态。当从器
15
件处理完毕时将释放SCL线,主器件继续传送。
当主器件发送完一个字节的数据后,接着发出对应于SCL线上的一个时钟(ACK)认可位,在此时钟内主器件释放SDA线,一个字节传送结束,而从器件的响应信号将SDA线拉成低电平,使SDA在该时钟的高电平期间为稳定的低电平。从器件的响应信号结束后,SDA线返回高电平,进入下一个传送周期。 (5) 总线竞争的仲裁
总线上可能挂接有多个器件,有时会发生两个或多个主器件同时想占用总线的情况。例如,多单片机系统中,可能在某一时刻有两个单片机要同时向总线发送数据,这种情况叫做总线竞争。I2C总线具有多主控能力,可以对发生在SDA线上的总线竞争进行仲裁,其仲裁原则是这样的:当多个主器件同时想占用总线时,如果某个主器件发送高电平,而另一个主器件发送低电平,则发送电平与此时SDA总线电平不符的那个器件将自动关闭其输出级。总线竞争的仲裁是在两个层次上进行的。首先是地址位的比较,如果主器件寻址同一个从器件,则进入数据位的比较,从而确保了竞争仲裁的可靠性。由于是利用I2C总线上的信息进行仲裁,因此不会造成信息的丢失。
24C02与单片机的接口非常简单,如图4-8所示。A0,A1,A2为器件地址线,WP为写保护引脚,SCL,SDA为二线串行接口,符合I2C总线协议。
1234U2AT24C02A0A1A2GNDVCCWPSCLSDA8765P3.1P3.0R1R24.7K4.7K+5V
图4-8 24C02存储电路
3.4 液晶显示电路
显示器部分是由HD61202液晶显示控制驱动器和HY12864液晶显示器组成的,下面我们对其分别进行介绍。
16
3.4.1 液晶显示控制驱动器HD61202的特点
HD61202液晶显示控制驱动器是一种带有驱动输出的图形液晶显示控制器,它可直接与8位微处理器相连,它可与HD61203配合对液晶屏进行行、列驱动。HD61202是一种带有列驱动输出的液晶显示控制器,它可与行驱动器HD61203配合使用,组成液晶显示驱动控制系统[12]。
(1) 内藏64×64=4096位显示RAM,RAM中每位数据对应LCD屏上一个点的亮、暗状态;
(2) HD61202是列驱动器,具有64路列驱动输出;
(3) HD61202读、写操作时序与68系列微处理器相符,因此它可直接与68系列微处理器接口相连;
(4) HD61202的占空比为1/32~1/64。
3.4.2 液晶显示控制驱动器HD61202的引脚功能
HD61202的引脚功能如下表3-4所示。
表3-4 HD61202的引脚功能
引脚符号 状态 引脚名称 芯片片选端 读写使能信号 读写选择信号 数据、指令选择信号 数据总线 功能 CS1和CS2低电平选通,CS3高电平选通。 在E下降沿,数据被锁存(写)入HD61202;在E高电平期间,数据被读出 R/W=1为读选通,R/W=0为写选通 RS=1为数据操作 RS=0为写指令或读状态 复位信号有效时,关闭液晶显示,使显示RST 输入 复位信号 起始行为0,RST可跟MPU相连,由MPU控制;也可直接接VDD,使之不起作用。 CS1,CS2,CS3 输入 E R/W RS DB0-DB7 输入 输入 输入 三态 3.4.3 液晶显示控制驱动器HD61202的指令系统 (1) 显示开/关指令 R/W RS 0 0 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 1 1 1 1 1 1/0 HD61202的指令系统比较简单,总共只有七种。现分别介绍如下。
17
当DBO=1时,LCD显示RAM中的内容;DBO=0时,关闭显示。 (2) 显示起始行(ROW)设置指令
R/W RS 0 0 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 1 1 显示起始行(0-63) 该指令设置了对应液晶屏最上一行的显示RAM的行号,有规律的改变显示起始行,可以使LCD实现显示滚屏的效果。 (3) 页(PAGE)置指令 R/W RS 0 0 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 1 0 1 1 1 页号(0-7) 显示RAM共64行,分8页,每页8行。 (4) 列地址(Y Address)设置指令 R/W RS 0 0 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 1 显示列地址(0-63) 设置了页地址和列地址,就唯一确定了显示RAM中的一个单元,这样MPU就可以用读、写指令读出该单元中的内容或向该单元写进一个字节数据。 (5) 读状态指令
R/W RS 1 0 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 BUSY 0 ON/OFF REST 0 0 0 0 该指令用来查询HD61202的状态,各参量含义如下: BUSY: 1-内部在工作 0-正常状态 ON/OFF:1-显示关闭 0-显示打开 REST: 1-复位状态 0-正常状态
在BUSY和REST状态时,除读状态指令外,其它指令均不对HD61202产生作用。在对HD61202操作之前要查询BUSY状态,以确定是否可以对HD61202进行操作。 (6) 写数据指令
R/W RS 0 1 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 写 数 据 (7) 读数据指令 R/W RS 1 1 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 读 显 示 数 据 读、写数据指令每执行完一次读、写操作,列地址就自动增一,必须注意的是,进行读操作之前,必须有一次空读操作,紧接着再读才会读出所要读的单元中的数据。
18
3.4.4 HY-12864的电路结构特点
HY-12864是使用HD61202作为列驱动器,同时使用HD61203作为行驱动器的液晶模块。由于HD61203不与MPU发生联系,只要提供电源就能产生行驱动信号和各种同步信号,比较简单,因此这就不做介绍了。
下面主要介绍以下HY-12864这个模块的逻辑电路图。HY-12864共有两片HD61202和一片HD61203,如下图3-9所示。
图3-9 HY-12864的逻辑电路图
在HY-12864中,两片HD61202的ADC均接高电平,RST也接高电平,这样在使用HY-12864时就不必再考虑这两个引脚的作用。/CSA跟HD61202(1)的/CS1相连;/CSB跟HD61202(2)的CS1相连,因此/CSA、/CSB选通组合信号为/CSA,/CSB=01选通(1),/CSA,/CSB=10选通(2)。对于HY-12864,只要供给VDD、VSS和V0即可,HD61202和HD61203所需的电源将由模块内部电路在VDD和V0、VSS的作用下产生。 HY-12864的应用
19
以下内容为以单片机8031为例机的接口电路,电路原理图如图3-10所示。控制电路为直接访问方式的接口电路。
图4-3 计算阳历天数程序流程图
计算出当前阳历日期为该年中的第几天后,再减去阳历该年春节和元旦的日差,如果够减,则相减的结果就是阴历在该年中的总第几天了。根据该数据就可以推算出具体的当前阴历日期;如果不够减,则表示当前阴历年为阳历年的前一年。这种情况下,根据实际,当前阴历日期会处于阴历11月或12月,此时春节和元旦的日差减去前面计算出的当前阳历日期在阳历年为第几天的数据,其结果表示当前阴历日期离春节的天数。计算出的阳历天数为该年的第几天,存放在寄存器R2和R3中。计算出天数后,如果大于#FFH,则把#FFH存放在R2中,余值存放在R3中。也就是说在用寄存器R2和R3表示的天数信息中,R2充当主寄存器,数据先存满R2,再存R3。在整个转换程序中,这里面的数据不能被覆盖。
计算出阳历总天数后,就可以根据它来推算阴历日期。推算方法是,先用总天数减去春节和元旦的日差,如果结果为1,则该天正好是春节(因为春节在元旦之后,在计算春节和元旦的日差时,假设元旦为0天,春节为n天,则日差为n。而前面计算的阳历总天数是该天在该年中的第几天,是以元旦为1而得到的,与计算春节和元旦日差的这样方法相比,其数值少了1,所以要在原来本应该以0作为该天就是春节的依据的基础上加1,所以以1作为该天是春节的标志);如果结果小于1,则阴历应
20
该是阳历的前一年;如果结果大于
第五章 测试结果
设计完成后,给系统上电,液晶显示屏显示结果如图5-1所示。 ]
河南工业职业技术学院 电气0701班 王金海毕业设计 SOLAR 2000/01/01 LUNAR 2095/11/25 00:00:00 SUN 闹铃 关 滚动显示
图5-1 液晶显示屏的显示结果
调节10K电位器R4可调整液晶显示屏的亮度。调整到合适亮度后,按控制按钮,光标会从阳历年位开始闪烁,进入设定调整状态。此时按加按钮,当前数字就可改变。按一次,数字加1;若长按,则数字连续加。此时,调整的位一直在闪烁,直到再次按光标移动控制位,光标跳到下一位闪烁。调整顺序依次为:阳历年、月、日,阴历年、月、日,时、分、秒,闹铃时、分。当全部参数调整完毕后,按退出按钮,光标停止闪烁,退出设定调整状态;当再次按下此按钮,闹铃显示“开”;当第三次按下此键,闹铃显示“关”。若当前月为闰月,则屏幕左下角会显示“闰月”;若不是闰月,则无显示。
调试分为硬件调试和软件调试。硬件调试主要是检测硬件电路是否有短路、断路、虚焊等。DS1302的硬件电路很简单,只通过3根线与单片机相连,很容易检测,主要是检查其引脚,如晶振和电源等是否接好。另外可以通过软件来调试硬件,如为了测试显示电路连接是否正确,可以编写一个简单的显示程序来测试它。接下来可进行软件调试,可以编写只含DS1302的计时和读写程序、显示程序,测试DS1302是否正常工作。最后调试时间调整程序和阴历推算程序。
计时器最关键的是计时的精度。电子万年历中DS1302电路使用专用的晶振,经测试制作的电子万年历,一星期快了3s左右,误差较大,实验设计中可换用标准晶振或用软件进行修正。
21
结论
本设计硬件电路较简单,所用器件较少,电路中使用了AT89S52单片机、DS1302时钟芯片、24C02FLASH存储器和HY-12864液晶显示器等主要芯片,实现了预计功能。
在对芯片的管脚功能和用法有充分的了解后,根据设计要求设计硬件电路,包括单片机控制电路、时钟电路、存储电路、键盘扫描电路、显示电路和闹铃电路。然后通过软件编程,实现了对年、月、日、时、分、秒、星期、闰年和阴历的自动调整,用按键进行控制,用液晶模块进行显示,并具有闹铃功能。
电子万年历可以正常显示时间并进行时间调整,基本完成了预期要实现的目标。
22
致 谢
不知不觉,十二周的毕业设计结束了。我的毕业论文已整理完毕,电路调试进展良好。毕业设计的完成意味着我的大学学习生活即将结束,从此我将进入一个新的人生旅途、开始一段崭新的生活——工作。在此,我衷心地感谢所有在我做毕业设计期间帮助过我的人。
首先我要感谢我的指导老师刘艺柱的大力帮助和支持。在整个设计过程当中,李老师在大局上指导我毕业设计的每一进程,还在百忙中抽空为我答疑解难,帮我分析讲解毕业设计中所遇到的问题。不仅如此,刘老师还无私的给我提供了丰富的学习资源和良好的学习环境,为我的毕业设计带来了很大方便。同时在我完成毕业设计的过程中提供了很多指导性的意见,使我受益匪浅。另外,刘老师渊博的学识、严谨的治学态度和为人给了我很大的教育,这些将使我终身受益。在此,我衷心感谢刘老师给予我的帮助和教育。
最后,我要感谢我的母校——河南工业职业技术学院,在校期间,这里给我留下了美好的回忆。特别是在我即将踏上工作岗位的同时,毕业设计整个过程给了我这样一个锻炼的机会,使我加深了对以前知识的理解和巩固,拓宽了知识面,也提高了我对所学知识的综合应用能力。我要对母校说:母校有我三五载,我爱母校一万年。祝愿母校的将来更美好!
23
参考文献
[1] 吴金戌,沈庆阳.8051单片机实践与应用,北京:清华大学出版社,2003.12,
26-38.
[2] 何立民.单片机应用文集,北京:北京航空航天大学出版社,1991,53-72. [3] 公茂法.单片机人机接口实例集,北京:北京航空航天大学出版社,1998.2,32
-59.
[4] 何立明.单片机高级教程——应用与设计,北京:北京航天航空大学出版社,
2000.4,149-173.
[5] 李广弟,朱月秀.单片机基础,北京:北京航空航天大学出版社,2001.8,36
-85.
[6] 楼然苗,李光飞.MCS-51系列单片机设计实例,北京:北京航天航空大学出版
社,2001.3,75-83.
[7] 李华.单片机原理与接口技术,北京:清华大学出版社,33-80.
[8] 王伟.高性能、低功耗带RAM实时时钟芯片DS1302(上),电子世界:第一期,
1995,26-35.
[9] 王伟.高性能、低功耗带RAM实时时钟芯片DS1302(下),电子世界:第四期,
1995,32-41.
[10] 刘光潭.中外集成电路简明速察手册,上海:电子工业出版社,1991. [11] 一九九九年产品目录(第一期),武汉力源股份有限公司,1999. [12] 刘利.液晶显示原理,上海:电子工业出版社,2002.5,52-70.
[13] 李宏,张家田.液晶显示器件应用技术,北京:机械工业出版社,2004,156
-183.
[14] 沈庆阳.汉字显示应用技术,上海:电子工业出版社,2002.3,128-139. [15] MAXIM.NEW RELEASES DATA BOOK (VOLUME V),AMERICA,1996.
24
+
+5V+5VU1LCMR410KV0R/SWRVSSVDDP1.0P0.1(A)VDC1C4039383736353433EA/VPPALE/PROG3231P3.3(INT1)1112P3.4(T0)P3.5(T1)P3.6(WR)P3.7(RD)P2.3(A11)P2.2(A10)XTAL2XTAL1P2.1(A9)P2.0(A8)P2.4(A12)2726P2.5(A13)28BT113143VT115WR16RD1718Y1Hz12M19C122P20ATC51G8N9DC222P8765PSENP2.6(A14)29WR74ALS00CERDU4AP2.7(A15)30DB7DB6DB5DB4DB3DB2DB1RSRWCE0DBDB0P0.2(AD2)P0.3(AD3)P0.4(AD4)P0.5(AD5)P0.6(AD6)P0.7(AD7)1P1.12P1.23P1.3P1.45P1.5P1.61.07(RXD)P3P1(TXD)R3S.T9P3.2(INT0)10674S1S2S312345678190P0.0(AD0)8R1R2C310UDB1DB2DB3DB4DB5DB6DB7CS1CS2
+5V874.7K4.7K65DB0EDB1DB2DB3DB4DB5DB6DB7CS1CS2RSTHY128X64VLEEEDK11121314151617181920LEDAAT24C02U21A0VCC+5V2A1WP附录1:电子万年历设计电路原理图
25
2524232221CS2CS1RWRS3A2SCLGNDSDA4+5VU3Vcc2Vcc11327681HzY+5VSCLK2X13X2I/O4GNDDS1302RSTSPEALKSE1R8050Q1T1R34.7K+5V 附录2 主程序
MAIN: MOV SP,#70H LCALL DELAY ;LCALL DELAY ;LCALL DELAY
MOV 59H,#00H CLR 22H CLR 23H CLR P3.5
MOV IE,#00H MOV TMOD,#10H MOV TL1,#0F0H MOV TH1,#00H ;MOV IP,#01H
;SETB EX0 SETB EA LCALL VIICREAD ;MOV 65H,#00H ;MOV 66H,#00H ;MOV 67H,#00H ;MOV 68H,#00H LCALL INT LCALL CLEAR LCALL INTSHI
LCALL DDD ;以下字为动态显示
DONGXIAN:MOV DPTR,#CCTAB MOV ZIDI,DPL MOV ZIGAO,DPH MOV DONGXH, #1CH
DXH1: MOV PAGER, #00H MOV COLUMN,#00H MOV CODER,#00H
;判断调整地址 ;停止周期第三位闪烁 ;判断是否开闹铃 ;关所有中断 ;开外中断 ;开总中断允许
;将EEPROM中原频率数据调入内存;静态字显示 ;16X16点阵字体 ;起始列为第0列 ;字符代码
26
LCALL CCW_PR MOV PAGER,#00H MOV COLUMN,#10H MOV CODER,#01H LCALL CCW_PR MOV PAGER,#00H MOV COLUMN,#20H MOV LCALL MOV MOV MOV LCALL MOV MOV MOV LCALL MOV MOV MOV LCALL MOV MOV MOV LCALL MOV MOV MOV LCALL LCALL CLR MOV ADD MOV MOV
CODER,#02H CCW_PR
PAGER, #00H COLUMN,#30H CODER,#03H CCW_PR PAGER,#00H COLUMN,#40H CODER,#04H CCW_PR PAGER,#00H COLUMN,#50H CODER,#05H CCW_PR PAGER,#00H COLUMN,#60H CODER,#06H CCW_PR PAGER,#00H COLUMN,#70H CODER,#07H CCW_PR DELAY
C A,ZIDI A,#20H ZIDI,A A,ZIGAO
;16X16点阵字体,第2页 ;起始列为第0列 ;字符代码 ; 动态显示循环程序控制27
ADDC A,#00H MOV ZIGAO,A
L1: MOV 3CH,#0F7H ;开始键扫描 MOV 3DH,#00H L2: MOV A,3CH MOV P1,A MOV A,P1 MOV 3EH,A SETB C MOV 3FH,#04H L3: RLC A JNC MNJIXU INC 3DH DJNZ 3FH,L3 LCALL DISP1 MOV A,3CH SETB C RRC A MOV 3CH,A JC L2 JMP MNMN MNJIXU:MOV A,P1 XRL A,3EH JNZ DF3
AJMP DF3 DF3: CLR C MOV A,3DH RLC A
MOV DPTR,#TABLE JMP @A+DPTR AJMP DONGXIAN
TABLE: AJMP MN0 AJMP MN1 AJMP MN2 AJMP MN3
; MNJIXU ;键盘入口地址 28
AJMP MN4 AJMP MN5 AJMP MN6 AJMP MN7 AJMP MN8 AJMP MN9 AJMP MN10 AJMP MN11 AJMP MN12 AJMP MN13 AJMP MN14 AJMP MN15
MNFH: AJMP DXH1
MNMN: DJNZ DONGXH, MNFH AJMP DONGXIAN ;键盘入口地址 MN0: CLR EA
MOV BAOHUDI2,ZIDI MOV BAOHUGAO2,ZIGAO
MOV CDAT1,#10001110B MOV CDAT2,#00000000B LCALL DSWORD ;判断调整的地址 SETB TR1 SETB ET1 MOV A,59H
CJNE A,#00H,JIANPAN1 MOV 5AH,#8CH
INC 59H MOV YJSSDZ0,#82H MOV YJSSDZ1,#40H MOV YJSSDZ2,#82H MOV YJSSDZ3,#48H LJMP JIAN1_0 JIANPAN1:MOV A,59H
29
;打开写保护; 年 时间 CJNE A,#01H,JIANPAN2 MOV 5AH,#88H
INC 59H ;月 时间 MOV YJSSDZ0,#82H MOV YJSSDZ1,#58H MOV YJSSDZ2,#82H MOV YJSSDZ3,#60H LJMP JIAN1_0 JIANPAN2:MOV A,59H
CJNE A,#02H,JIANPAN3 MOV 5AH,#86H
INC 59H MOV YJSSDZ0,#82H MOV YJSSDZ1,#70H MOV YJSSDZ2,#82H MOV YJSSDZ3,#78H LJMP JIAN1_0 JIANPAN3:MOV A,59H
CJNE A,#03H,JIANPAN4 MOV 5AH,#84H
INC 59H MOV YJSSDZ0,#84H MOV YJSSDZ1,#10H MOV YJSSDZ2,#84H MOV YJSSDZ3,#18H LJMP JIAN1_0 JIANPAN4:MOV A,59H
CJNE A,#04H,JIANPAN6 MOV 5AH,#82H
INC 59H MOV YJSSDZ0,#84H MOV YJSSDZ1,#28H MOV YJSSDZ2,#84H MOV YJSSDZ3,#30H LJMP JIAN1_0
;日 ;时 ;分 30
时间 时间 时间JIANPAN6:MOV A,59H
CJNE A,#05H,JIANPAN7 MOV 5AH,#8AH
INC 59H ;周期
SETB 22H ;启动周期第三位闪烁 MOV YJSSDZ0,#84H MOV YJSSDZ1,#58H MOV YJSSDZ2,#84H MOV YJSSDZ3,#60H MOV YJSSDZ4,#84H MOV YJSSDZ5,#68H LJMP JIAN1_0 JIANPAN7:MOV A,59H
CJNE A,#06H,JIANPAN8
MOV 5AH,#01H INC 59H MOV YJSSDZ0,#87H MOV YJSSDZ1,#30H MOV YJSSDZ2,#87H MOV YJSSDZ3,#38H
CLR 22H LJMP JIAN1_0 JIANPAN8:MOV A,59H
CJNE A,#07H,JIANPAN9
INC 59H MOV YJSSDZ0,#87H MOV YJSSDZ1,#48H MOV YJSSDZ2,#87H MOV YJSSDZ3,#50H
CLR 22H LJMP JIAN1_0
JIANPAN9:MOV 59H,#01H MOV 5AH,#8CH MOV YJSSDZ0,#82H MOV YJSSDZ1,#40H
;判断是否能执行 键2键3 ;时 闹铃 ;停止周期第三位闪烁 ;分 闹铃 ;停止周期第三位闪烁 ; 年 时间 31
MOV YJSSDZ2,#82H MOV YJSSDZ3,#48H
JIAN1_0:LCALL DSWRPRT ;写保护 MOV ZIDI,BAOHUDI2 MOV ZIGAO,BAOHUGAO2
;LCALL VIICWRITE ; 频率数据存入EEPROM SETB EA AJMP MNMN MN1: CLR EA
MOV BAOHUDI2,ZIDI MOV BAOHUGAO2,ZIGAO
MOV A,5AH CJNE A,#00H,JIAN1_1 LJMP JIAN1_11 JIAN1_1:MOV A,59H
CJNE A,#01H,JIAN1_2
MOV CDAT1,#10001110B MOV CDAT2,#00000000B LCALL DSWORD
MOV CDAT1,#8Dh LCALL DSRORD ;MOV A,CDAT2 LCALL ADD1 MOV CDAT2,A CJNE A,#51H,NIAN1_01 MOV CDAT2,#01H NIAN1_01:MOV CDAT1,#8CH
LCALL DSWORD LCALL DSWRPRT ;写保护 LJMP JIAN1_11 JIAN1_2:MOV A,59H
CJNE A,#02H,JIAN1_3
MOV CDAT1,#10001110B MOV CDAT2,#00000000B LCALL DSWORD
32
;看是否进入调整状态 ;打开写保护 ;读年 ;写年 ;打开写保护 MOV CDAT1,#89h ;读月 LCALL DSRORD ;MOV A,CDAT2 LCALL ADD1 MOV CDAT2,A CJNE A,#13H,NIAN1_02 MOV CDAT2,#01H NIAN1_02:MOV CDAT1,#88H
LCALL DSWORD ;写月 LCALL DSWRPRT ;写保护 LJMP JIAN1_11 JIAN1_3: MOV A,59H
CJNE A,#03H,JIAN1_4A LJMP NEXXI JIAN1_4A:LJMP JIAN1_4
NEXXI: MOV CDAT1,#10001110B ;打开写保护 MOV CDAT2,#00000000B LCALL DSWORD
MOV CDAT1,#87h ;读日 LCALL DSRORD ;MOV A,CDAT2 LCALL ADD1 MOV CDAT2,A
MOV R0,CYEAR ;判断日期是30还是31还是28还是29 LCALL BCD_10 MOV A,R0 MOV B,#04H DIV AB MOV A,B JNZ GGG11 MOV A,CMONTH CJNE A,#02H,GGG11 MOV A,CDAT2
CJNE A,#30H,NIAN1_031 MOV CDAT2,#01H
33
NIAN1_031:MOV CDAT1,#86H
LCALL DSWORD ;写日 LCALL DSWRPRT ;写保护 LJMP JIAN1_11
GGG11: MOV A,CMONTH ;非闰年 CJNE A,#01H,NIAN1_033 LJMP NIAN1_032 NIAN1_033:MOV A,CMONTH CJNE A,#02H,NIAN1_034 MOV A,CDAT2
CJNE A,#29H,NIAN1_0333 MOV CDAT2,#01H NIAN1_0333:MOV CDAT1,#86H
LCALL DSWORD LCALL DSWRPRT LJMP JIAN1_11 NIAN1_034:MOV A,CMONTH CJNE A,#03H,NIAN1_035 LJMP NIAN1_032 NIAN1_035:MOV A,CMONTH CJNE A,#04H,NIAN1_036 LJMP NIAN1_0336 NIAN1_036:MOV A,CMONTH CJNE A,#05H,NIAN1_037 LJMP NIAN1_032 NIAN1_037:MOV A,CMONTH CJNE A,#06H,NIAN1_038 LJMP NIAN1_0336 NIAN1_038:MOV A,CMONTH CJNE A,#07H,NIAN1_039 LJMP NIAN1_032 NIAN1_039:MOV A,CMONTH CJNE A,#08H,NIAN1_040 LJMP NIAN1_032 NIAN1_040:MOV A,CMONTH
;写日 ;写保护 34
CJNE A,#09H,NIAN1_041 LJMP NIAN1_0336 NIAN1_041:MOV A,CMONTH CJNE A,#10H,NIAN1_042 LJMP NIAN1_032 NIAN1_042:MOV A,CMONTH CJNE A,#11H,NIAN1_043 LJMP NIAN1_0336 NIAN1_043: LJMP NIAN1_032 NIAN1_032: MOV A,CDAT2 CJNE A,#32H,NIAN1_03 MOV CDAT2,#01H NIAN1_03:MOV CDAT1,#86H
LCALL DSWORD LCALL DSWRPRT LJMP JIAN1_11 NIAN1_0336:MOV A,CDAT2 CJNE A,#31H,NIAN1_03A MOV CDAT2,#01H NIAN1_03A:MOV CDAT1,#86H
LCALL DSWORD LCALL DSWRPRT ;写保护 LJMP JIAN1_11 JIAN1_4:MOV A,59H
CJNE A,#04H,JIAN1_5
MOV CDAT1,#10001110B MOV CDAT2,#00000000B LCALL DSWORD
MOV CDAT1,#85h LCALL DSRORD ;MOV A,CDAT2 LCALL ADD1 MOV CDAT2,A
CJNE A,#24H,NIAN1_04 MOV CDAT2,#00H
35
;写日 31 ;写保护 ;写日 30 ;打开写保护;读时 NIAN1_04:MOV CDAT1,#84H
LCALL DSWORD ;写时 LCALL DSWRPRT ;写保护 LJMP JIAN1_11 JIAN1_5:MOV A,59H
CJNE A,#05H,JIAN1_6
MOV CDAT1,#10001110B ;打开写保护 MOV CDAT2,#00000000B LCALL DSWORD
MOV CDAT1,#83h LCALL DSRORD ;MOV A,CDAT2 LCALL ADD1 MOV CDAT2,A CJNE A,#60H,NIAN1_05 MOV CDAT2,#00H NIAN1_05:MOV CDAT1,#82H
LCALL DSWORD LCALL DSWRPRT ;写保护 LJMP JIAN1_11 JIAN1_6:MOV A,59H
CJNE A,#06H,JIAN1_7
MOV CDAT1,#10001110B MOV CDAT2,#00000000B LCALL DSWORD
MOV CDAT1,#8Bh LCALL DSRORD ;MOV A,CDAT2 LCALL ADD1 MOV CDAT2,A CJNE A,#08H,NIAN1_06 MOV CDAT2,#01H NIAN1_06:MOV CDAT1,#8AH
LCALL DSWORD LCALL DSWRPRT ;写保护
36
;读分 ;写分 ;打开写保护 ;读星期 ;写星期 LJMP JIAN1_11 JIAN1_7:MOV A,59H
CJNE A,#07H,JIAN1_8
MOV A,65H ;写闹时 SWAP A ORL A,66H ADD A,#01H DA A MOV 69H,A
CJNE A,#24H,JIAN1_71 MOV 65H,#00H MOV 66H,#00H LCALL VIICWRITE LJMP JIAN1_11 JIAN1_71:MOV A,69H SWAP A ANL A,#0FH MOV 65H,A MOV A,69H ANL A,#0FH MOV 66H,A
LCALL VIICWRITE LJMP JIAN1_11
JIAN1_8: MOV A,67H SWAP A ORL A,68H ADD A,#01H DA A MOV 69H,A
CJNE A,#60H,JIAN1_81 MOV 67H,#00H MOV 68H,#00H LCALL VIICWRITE LJMP JIAN1_11 JIAN1_81:MOV A,69H
;写闹分 37
SWAP A ANL A,#0FH MOV 67H,A MOV A,69H ANL A,#0FH MOV 68H,A
LCALL VIICWRITE JIAN1_11:MOV ZIDI,BAOHUDI2 MOV ZIGAO,BAOHUGAO2
;LCALL VIICWRITE SETB EA AJMP MNMN MN2: CLR EA
MOV BAOHUDI2,ZIDI MOV BAOHUGAO2,ZIGAO
MOV A,5AH CJNE A,#00H,JIAN4_1 CPL 23H
JIAN4_1:CLR 22H CLR TR1 CLR ET1 MOV 59H,#00H MOV 5AH,#00H
MOV ZIDI,BAOHUDI2 MOV ZIGAO,BAOHUGAO2 SETB EA AJMP MNMN
38
;频率数据存入EEPROM ;看是否进入调整状态 ;停止周期第三位闪烁
因篇幅问题不能全部显示,请点此查看更多更全内容