大连理工大学本科设计报告题目:基于ZLG7290B、PCF8563的时钟系统设计课程名称:单片机原理及应用实验学院(系):电子信息与电气工程学部专业:班级:学号:学生姓名:成绩:2015年5月4日《计算机技术实验室安全操作规范》1.实验前认真阅读安全操作规程,不得擅自触及总电源开关。2.实验期间学生不准使用与实验无关的电气设备。3.实验过程中若遇计算机故障时,交由指导老师负责,不允许学生私自开箱维修。4.在实验过程中,连接实验设备的220v电源时,要保持手部干燥,并注意操作安全,不允许使用金属物件触碰220v电源线及电源插座的带点部位。5.学生实验期间,在连接导线时不允许实验台带电操作,连接完成后经检查无误时再将实验台上电。完成实验时先将实验台断电后再进行导线的拆除。6.实验期间要关闭手机等通讯工具,实验室一律禁止携带饮料、食品、禁止吸烟、喧哗、嬉闹、确保实验室卫生、整洁。7.学生完成实验后,必须关闭所有实验设备的电源。8.如果实验过程中发生“突发事件”时,不要慌张、应沉着冷静,采取相关的措施。必要时拨打校内晋级电话(84708110)或拨打110、120报警。电工电子实验教学中心计算机技术实验室个人签字:题目:基于ZLG7290B、PCF8563的时钟系统设计1设计要求(1)由PCF8563提供时间参数并由ZLG7290进行显示;(2)能够利用键盘实现时间参数的修改,修改过程可加入“回显”、“闪烁”、“容错”等功能;(3)利用蜂鸣器实现时钟系统的“整点报时”功能;(4)要求程序中有中断环节;2设计分析及系统方案设计(1)由PCF8563T实时时钟芯片提供时间数据,由ZLG7290B显示电路控制8位数码管显示当前时间,二者通过I2C总线结构与AT89C51单片机相连,SDA和SCK分别接P1.0和P1.1。(2)该系统采用双中断结构,时钟输出CLKOUT接INT0,为低优先级,每一秒触发一次中断;键盘中断输出信号INT接INT1,为高优先级,每当有按键时触发中断。(3)算法说明:10H-1DH:向PCF8563T输入的相关参数的数据块;20H-26H:从PCF8563T中读出的时间参数(秒、分、小时、日、星期、月、年)。通过CHAIFEN子程序将20H-26H中获取时间参数拆分查表后送入下列缓冲区:28H-2FH:年(4单元)、月(2单元)、日(2单元);38H-3FH:小时、分钟、秒(各占单元)。键盘修改时间子程序中先将键值读入A,经判断转换后送入缓冲区20H-22H。主程序功能:将10H-1DH中特定时间和控制命令送入PCF8563T对应寄存器中,等待中断。由于PCF8563T的CLKOUT设定输出频率为1HZ,将其与INT0相连,每秒引发一次中断。在时钟中断服务程序中读取时间参数,调整各参数后进入整点报时子程序,判断是否报时。然后将时间参数经拆分查表等操作,将年、月、日送28H-2FH缓冲区,将小时、分、秒送38H-3FH缓冲区,最后根据P1.2电平决定哪个缓冲区内容送ZLG7290B进行显示。ZLG7290B的键盘中断输出信号INT与INT1相连,每当有按键是触发中断,先读入键值至A中,判断是A、B或C,分别对应修改时、分、秒,进入对应子程序然后在等待两次输入,经转换设置成十位和个位,存入入12H-14H对应单元,再送入PCF8563T对应寄存器。3系统电路4外围接口模块硬件电路功能描述(1)ZLG7290B:数码管动态显示驱动、键盘扫描管理芯片,可驱动8位共阴极结构LED数码管,同时可管理64个按键扫描识别,接口采用I2C结构。(2)PCF8563T:由Philips公司设计的低功耗CMOS实时时钟日历芯片,具有1.0-5.5V的电压工作范围、一个可编程时钟输出和掉电检测电路,接口采用I2C结构,每次读写操作内部地址寄存器自动产生增量。(3)交流驱动蜂鸣器:一种发声元件,体积小,使用PNP驱动,需要一交变信号驱动才能发出相应频率的声音。5主程序中主要变量定义RAM单元或工作寄存器定义、功能等。变量名称RAM单元/寄存器功能PCF8563T时间和控制命令参数10H-1DH设定PCF8563T时间和命令参数的缓冲区时间参数20H-26H从PCF8563T中读出的时间参数(秒、分、小时、日、星期、月、年)缓冲区年月日28H-2FH拆分查表所得年月日缓冲区以待显示时分秒38H-3FH拆分查表所得时分秒缓冲区以待显示键值1FH读入的键值存储单元6系统软件中各个子程序的功能描述子程序的名称、功能,以及入口、出口参数。子程序名称入口参数出口参数功能描述INT_RCT无无时钟中断服务子程序PANDUAN20-21H无判断并进行整点报时CHAIFEN20-26H28-2FH、38-3FH将时间参数拆分查表CFAR4、R3将A中数据拆违两独立的十六进制数并查表得到对应字型码ADJUST20-25H20-25H屏蔽各时间参数无关位INT_7290无无键盘修改时间中断服务子程序RDKEY无A读键值子程序WR8563R7、R0、R2、R3无向日历芯片写时间参数WRNBYTR7、R0、R2、R3无带有内部单元地址的多字节写操作子程序RDADDR7、R0、R2、R3、R4无带有内部单元地址的多字节读操作子程序7主程序程序流程图NY主程序入口开辟一数据区10H-1DH存储时间、命令参数将10H=1DH存储时间命令参数送PCF8563T中等待中断时钟中断服务子程序利用RDADD从PCF8563T中读出时间参数送20H-27H利用ADJUST屏蔽掉参数中无用的位调用PANDUAN子程序判断并进行整点报时调CHAIFEN子程序将时间分别送28H-2FH、38H-3FH缓冲区P1.2=1?显示时分秒显示年月日RETINYNNWAIT1NYYWAIT2NY8程序清单;************************************************************;由PCF8563提供时间参数并由ZLG7290进行显示;能够利用键盘实现时间参数的修改,修改过程可加入回显、闪烁、容错等功能;利用蜂鸣器实现时钟系统整点报时功能;要求程序中有中断环节;转换显示:P1.2与KEY1连接,按下KEY1显示年月日,平时显示时分秒;设定时钟芯片CLKOUT输出秒脉冲且与P3.2连接;采用中断的方式来显示时间(每秒钟刷新一次显示)键盘修改时间中断服务子程序读取键值A键?B键?C键?查询按键?读取键值,将此值送小时的十位查询按键?读取键值,将此值送小时的个位RETI向日历芯片写入10H-1DH中的时间参数分钟处理(同小时处理)秒处理(同小时处理);ZLG7290B芯片的RST_L复位端与P1.7口连接,以便复位操作;************************************************************SDABITP1.0;定义I2C信号引脚SCLBITP1.1WSLA_8563EQU0A2H;PCF8563T口地址RSLA_8563EQU0A3HWSLA_7290EQU70H;ZLG7290B口地址RSLA_7290EQU71HORG8000HLJMP8100HORG8003HLJMPINT_RCTORG8013HLJMPINT_7290ORG8100HSTART:MOVSP,#60HCLRP1.7;ZLG7290B复位LCALLDELAYSETBP1.7;******************************;设定PCF8563T的时间和命令参数;******************************MOV10H,#00H;启动控制字MOV11H,#1FH;设置报警及定时器中断MOV12H,#50H;秒单元MOV13H,#59H;分单元MOV14H,#10H;时单元MOV15H,#29H;日期单元MOV16H,#03H;星期单元MOV17H,#04H;月单元MOV18H,#15H;年单元MOV19H,#00H;设定分报警MOV1AH,#00H;设定小时报警MOV1BH,#00H;设定日报警MOV1CH,#00H;设定星期报警MOV1DH,#83H;设定CLKOUT的频率(1S);*****************************MOVR7,#0EH;写入参数个数(时间和控制字)MOVR0,#10H;参数和控制命令缓冲区首地址MOVR2,#00H;从器件内部从地址MOVR3,#WSLA_8563;准备向PCF8563T写入数据串LCALLWRNBYT;写入时间、控制命令到PCF8563TMOVIP,02HSETBEASETBEX0SETBEX1SETBIT0SETBIT1SJMP$;等待中断;******************************;时钟中断服务子程序;******************************INT_RCT:MOVR7,#07H;读出数个数MOVR0,#20H;目标数据块首地址MOVR2,#02H;从器件内部首地址MOVR3,#WSLA_8563MOVR4,#RSLA_8563;准备读PCF8563T的时间参数LCALLRDADD;调读数据子程序,将读出的数据存放于单片机20H~26H中LCALLADJUST;调时间调整子程序LCALLPANDUAN;调判断键值子程序LCALLCHAIFEN;调拆分子程序(包含查表),将20H~26H中的参数分别存于28H~2FH、38H~3FH单元中MOVR7,#08HMOVR2,#10HMOVR3,#WSLA_7290JNBP1.2,YEARS;使用P1.2控制显示内容MOVR0,#38H;显示小时、分钟和秒SJMPDISPYEARS:MOVR0,#28H;显示年月日DISP:LCALLWRNBYT;调ZLG7290B显示JNBP3.2,$RETI;******************************;整点报时子程序;******************************PANDUAN:MOVA,21HCJNEA,#59H,PDFENMOVA,20HCJNEA,#56H,PD57LCALLBAOSHI1AJMPEXITPD57:CJNEA,#57H,PD58LCALLBAOSHI1AJMPEXITPD58:CJNEA,#58H,PD59LCALLBAOSHI1AJMPEXITPD59:CJNEA,#59H,EXITLCALLBAOSHI1AJMPEXITPDFEN:CJNEA,#00H,EXITMOVA,20HCJNEA,#00H,EXITLCALLBAOSHI2EXIT:RET;*******************************;低音1S报时BAOSHI1:PUSHPSWPUSH00HMOVR0,#0FFHMOVTMOD,#10HMOVTL1,#00HMOVTH1,#0FEHSETBTR1WORK1:JNBTF1,$CLRTF1MOVTL1,#00HMOVTH1,#0FEHCPLP1.4DJNZR0,WORK1POP00HPOPPSWRET;*****************************;高音1S报时BAOSHI2:PUSHPSWPUSH00HPUSH01HMOVR0,#04HWORK2:MOVR1,#00HMOVTMOD,#10HMOVTL1,#00HMOVTH1,#0FFHSETBTR1WORK3:JNBTF1,$CLRTF1MOVTL1,#00HMOVTH1,#0FFHCPLP1.4DJNZR1,WORK3DJNZR0,WORK2POP01HPOP00HPOPPSWRET;******************************;各子程序;*****************************ORG8300HCHAIFEN:PUSHPSW;对20H~26H单元的参数拆分并在查表后送28H~2FH(年月日)和38H~3FH(时分秒)PUSHA