单片机综合设计实验_第1页
单片机综合设计实验_第2页
单片机综合设计实验_第3页
单片机综合设计实验_第4页
单片机综合设计实验_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、大连理工大学本科设计报告题目:基于PCF8563的时钟系统设计课程名称: 学院(系): 专 业: 班 级: 学 号: 学生姓名: 成 绩: 2014 年 7 月 10 日题目:基于PCF8563的时钟系统设计1 设计要求实验要求:(1) 显示两位小时、两位分钟和两位秒参数,相互之间有分隔符号;(2) 按住KEY1可显示四位年、两位月、两位日;(3) 具备整点报时功能(模拟广播电台的整点报时从59分55秒开始,每一秒驱动蜂鸣器一次,其中前5次为低频,00秒时为高频驱动);(4) 具备键盘修改时间功能。可修改小时、分钟和秒参数;(5) 修改时间时具备“回显”功能,以方便观察;(6) 输入时间参数时

2、应具有“自动纠错”功能,以免错误数据的输入;(7) 在修改时间参数时具备“参数闪烁”功能,是操作更人性化;2 设计分析及系统方案设计(1)主程序算法描述主程序中定义端口名称、围器件读写地址增强程序的可读性。设置中断服务程序入口地址,将硬件电路连接与之对应。INT_RCTDUI对应INT_0中断服务程序,INT_7290对应INT1的中断服务程序。开始时先对硬件电路进行复位操作。然后设定PCF8563T的时间和命令参数存放在单片机内部的10H1DH单元,将其写入到8563的00H0DH单元。使总的中断使能端有效,开INT0和INT1中断,使触发极性为下降沿。等待中断的到来。(2)INT_RCT中

3、断子程序算法描述调读数据子程序,将读出的8563中02H08H单元的内容存放于单片机内部20H26H单元。判断时、分的数值,当时间在*-59-55至*-59-59时调用低频蜂鸣器BUZZL,当时间为*-00-00时调用高频蜂鸣器BUZZH。实现整点报时。调整时间,将20H-26H单元中内容拆分查表后送到28H2FH(年,月,日)和38H3FH(时,分,秒)。使P1.2控制显示内容,当P1.2=1时,显示时,分,秒;当P1.2=0时,显示年,月,日。(3)蜂鸣器发声子程序(BUZZL和BUZZH)设置初始值使BUZZL发声频率为500HZ,BUZZH发声频率为1500HZ。(4)键盘修改子程序读

4、入进入中断前的数据,将8563的20H单元内容送入单片机内部12H单元(秒);21H单元内容送入单片机内部13H单元(分);22H单元内容送入单片机内部14H单元(时)便于修改后显示。读入输入的键值为0AH时,为A键修改小时参数。设置小时的十位闪烁命令等待按键操作,读入键值判断是否超过三,超过则报警且要求重新输入。输入正确时回显,设置小时的个位闪烁命令等待按键操作,读入键值判断个位不超过9,然后判断小时整个数是否小于24。分和秒的设置与小时类似,不同的是十位不能超过5个位不能超过9。(5)闪烁子程序设置入口闪烁参数单元值 3系统电路图AT89C51P1.0P1.1P1.7/INT0(P3.2)

5、/INT1(P3.3)P3.4P1.2 ZLG7290BSDA SCL /RST/INTI2C总线 PCF8563TSDA OSCISCL OSCOCLKOUTVCC上拉电阻 5K×232.768K8位数码管BUZZVCCB5区855010K保护电阻47欧103+5VSW14 外围接口模块硬件电路功能描述ZLG7290B驱动8个数码管显示时钟时间,管理按键并读取键值,和/INT1相连,引发中断。PCF8563T设置时钟时间,控制时间的运行,和/INT0相连,每一秒产生一次中断。蜂鸣器整点报时,错误提示KEY1控制显示时间或日期5 主程序中主要变量定义变量名称RAM单元/寄存器功能WS

6、LA_85630A2HPCF8563T写地址RSLA_85630A3HPCF8563T读地址WSLA_729070HZLG7290B写地址RSLA_729071HZLG7290B读地址SS50H为闪烁程序传递参数无10H-1DH准备向时钟芯片写入的值无07H写入参数个数无00H参数和控制命令缓冲区首地址无02H从器件内部地址无03H从器件写地址无30H写入闪烁控制字使闪烁速度最快6系统软件中各个子程序的功能描述子程序名称入口参数出口参数功能描述INT_RCT无无读取时间参数送数码管显示,并在整点时刻报警BUZZL无无蜂鸣器以500HZ频率发声BUZZH无无蜂鸣器以1500HZ频率发声ADJUS

7、T20H-26H单元20H-26H单元将20H-26H中从PCF8563中读出的7个参数无关位屏蔽掉CHAIFEN20H-26H单元28H-2FH单元38H-3FH单元将20H-26H单元的参数拆分并在查表后送28H-2FH,38H-3FHCF累加器AR4(H)R3 将A中的数据拆分为两个独立的BCD码并查表结果存于R4 R3INT_7290无无修改时间、回显、纠错、闪烁FLASHSS无控制闪烁位置RDKEY无累加器A读键值子程序WR856310H-1DH单元无向日历芯片写入时间参数WRNBYT无无多字节写操作RDADD无无多字节读操作8程序清单SDA BIT P1.0SCL BIT P1.1

8、WSLA_8563 EQU 0A2H ;PCF8563T口地址RSLA_8563 EQU 0A3H WSLA_7290 EQU 70H ;ZLG7290B口地址RSLA_7290 EQU 71HORG 8000HLJMP 8040HORG 8003HLJMP INT_RCTORG 8013HLJMP INT_7290ORG 8040HSTART: MOV SP,#60H CLR P1.7 ;ZLG7290复位 LCALL DELAY SETB P1.7;*;设定pdf8563tde时间和命令参数(参数和控制命令缓冲区10H-1DH);*MOV 10H,#00H ;启动控制字MOV 11H,#1

9、FH ;设置报警及定时器中断MOV 12H,#50H ;秒单元MOV 13H,#59H;分单元MOV 14H,#08H;小时单元MOV 15H,#01H;日期单元MOV 16H,#01H;星期单元MOV 17H,#01H;月单元MOV 18H,#10H;年单元MOV 19H,#00H;设定分报警MOV 1AH,#00H;设定小时报警MOV 1BH,#00H;设定日报警MOV 1CH,#00H;设定星期报警MOV 1DH,#83H;设定CLKOUT的频率,1秒周期方波MOV R7,#0EH ;写入参数个数MOV R0,#10H;参数与控制命令缓冲区首地址MOV R2,#00H;从器件内部子地址M

10、OV R3,#WSLA_8563;准备向PCF8563T写入数据串LCALL WRNBYT;写入时间,控制命令到PCF8563TSETB EA;启动总中断SETB EX0;启动INT_RCT(INT_0)SETB IT0;定时器0下降沿有效SETB EX1;启动INT_7290(INT_7290)SETB IT1;定时器1下降沿有效SJMP $;等待中断;*;中断服务子程序INT_RCT;*INT_RCT:MOV R7,#07H;数据块字节数 MOV R0,#20H;内部数据块首地址 MOV R2,#02H;内部寄存器首地址 MOV R3,#WSLA_8563;向8563写地址 MOV R4,

11、#RSLA_8563;从8563读地址 LCALL RDADD;调读数据子程序,将读出的数据存放于单片机20H-26H中 MOV A,21H;判断是否为59分 CJNE A,#59H,NEXT1 MOV A,20H;判断是否为55秒 CJNE A,#55H,NEXT2 LCALL BUZZL SJMP NEXTNEXT2:CJNE A,#56H,NEXT3 LCALL BUZZL SJMP NEXTNEXT3:CJNE A,#57H,NEXT4 LCALL BUZZL SJMP NEXTNEXT4:CJNE A,#58H,NEXT5 LCALL BUZZL SJMP NEXTNEXT5:CJN

12、E A,#59H,NEXT LCALL BUZZL SJMP NEXTNEXT1:CJNE A,#00H,NEXT MOV A,20H CJNE A,#00H,NEXT LCALL BUZZHNEXT:LCALL ADJUST;调时间调整子程序 LCALL CHAIFEN;调拆分子程序,将20H-26H中的参数分别存28H-2FH,38H-3FH中 MOV R7,#08H MOV R2,#10H MOV R3,#WSLA_7290 JNB P1.2,YEARS;使用P1.2控制显示内容 MOV R0,#38H;显示时分秒 SJMP DISPYEARS: MOV R0,#28H;显示年月日DIS

13、P: LCALL WRNBYT;调7290显示子程序 JNB P3.2,$ RETI;*;BUZZ;*BUZZL: PUSH 07H MOV TMOD,#01H;方式1 MOV TL0,#66H;低频500HZ MOV TH0,#0FCH MOV R7,#50 SETB TR0LOOPL:JNB TF0,$ CLR TF0 MOV TL0,#66H MOV TH0,#0FCH CPL P3.4 ;驱动蜂鸣器 DJNZ R7,LOOPL SETB P3.4 POP 07H RETBUZZH: PUSH 07H MOV TMOD,#01H MOV TL0,#0CDH;高频1500HZ MOV TH

14、0,#0FEH MOV R7,#100 SETB TR0LOOPH:JNB TF0,$ CLR TF0 MOV TL0,#0CDH MOV TH0,#0FEH CPL P3.4 ;驱动蜂鸣器 DJNZ R7,LOOPH SETB P3.4 POP 07H RET;*;键盘修改中断服务程序INT_7290;*INT_7290:PUSH 00H PUSH 02H PUSH 03H PUSH 04H PUSH 07H PUSH ACC PUSH PSW MOV R7,#07H;写入参数个数MOV R0,#20H;参数和控制命令缓冲区首地址MOV R2,#02H;从器件内部从地址MOV R3,#WSL

15、A_8563;准备向8563写入数据串MOV R4,#RSLA_8563;准备从8563读取数据串LCALL RDADDMOV 12H,20H;写入秒单元MOV 13H,21H;写入分单元MOV 14H,22H;写入时单元RE:JB P3.3,$;以查询方式等待下一次按键LCALL RDKEY;读取键值CJNE A,#0AH,BKEY;判断是否为A键AKEY: MOV 51H,#80HLCALL FLASHJB P3.3,$LCALL RDKEYCJNE A,#03H,HOUR1;判断键入的数是否满足小时十位的要求HOUR1: JNC ERROR1;若键值大于2,则报错 SWAP A;将键值处

16、理成小时数据的十位ANL 14H,#0FHORL 14H,A;小时数据的十位生成LCALL WR8563;写入8563LCALL CF;拆分,查表,R4(H),R3(L)MOV 3FH,R4;回显MOV R7,#01HMOV R0,#3FHMOV R2,#17HMOV R3,#WSLA_7290LCALL WRNBYTLJMP HOUR2ERROR1: LCALL BUZZH;报错,返回重新键入LJMP AKEYHOUR2: MOV 51H,#40HLCALL FLASHJB P3.3,$LCALL RDKEYCJNE A,#0AH,STEP1;判断键值是否满足小时个位的要求(小于10)STE

17、P1:JNC ERROR2ANL 14H,#0F0HORL 14H,AMOV A,14HCJNE A,#24H,JJJ;判断小时的值是否满足要求(小于24)JJJ:JNC ERROR2LCALL WR8563LCALL CF;拆分,查表,R4(H),R3(L)MOV 3EH,R3;回显MOV R7,#01HMOV R0,#3EHMOV R2,#16HMOV R3,#WSLA_7290LCALL WRNBYTMOV 51H,#00H;停止闪烁LCALL FLASHLJMP DOWNERROR2: LCALL BUZZHLJMP HOUR2BKEY: CJNE A,#0BH,CKEYMOV 51H

18、,#10HLCALL FLASHJB P3.3,$LCALL RDKEYCJNE A,#06H,MIN1MIN1: JNC ERROR3SWAP AANL 13H,#0FHORL 13H,ALCALL WR8563LCALL CF;拆分,查表,R4(H),R3(L)MOV 3CH,R4;回显MOV R7,#01HMOV R0,#3CHMOV R2,#14HMOV R3,#WSLA_7290LCALL WRNBYTLJMP MIN2ERROR3: LCALL BUZZHLJMP BKEYMIN2: MOV 51H,#08HLCALL FLASHJB P3.3,$LCALL RDKEYCJNE A

19、,#0AH,STEP2STEP2:JNC ERROR4ANL 13H,#0F0HORL 13H,ALCALL WR8563LCALL CF;拆分,查表,R4(H),R3(L)MOV 3BH,R3;回显MOV R7,#01HMOV R0,#3BHMOV R2,#13HMOV R3,#WSLA_7290LCALL WRNBYTMOV 51H,#00HLCALL FLASHLJMP DOWNERROR4: LCALL BUZZHLJMP MIN2CKEY: CJNE A,#0CH,ERRORMOV 51H,#02HLCALL FLASHJB P3.3,$LCALL RDKEYCJNE A,#06H,

20、SEC1SEC1: JNC ERROR5SWAP AANL 12H,#0FHORL 12H,ALCALL WR8563LCALL CF;拆分,查表,R4(H),R3(L)MOV 39H,R4;回显MOV R7,#01HMOV R0,#39HMOV R2,#11HMOV R3,#WSLA_7290LCALL WRNBYTLJMP SEC2ERROR5: LCALL BUZZHLJMP CKEYSEC2: MOV 51H,#01HLCALL FLASHJB P3.3,$LCALL RDKEYCJNE A,#0AH,STEP3STEP3:JNC ERROR6ANL 12H,#0F0HORL 12H,

21、ALCALL WR8563LCALL CF;拆分,查表,R4(H),R3(L)MOV 38H,R3;回显MOV R7,#01HMOV R0,#38HMOV R2,#10HMOV R3,#WSLA_7290LCALL WRNBYTMOV 51H,#00HLCALL FLASHLJMP DOWNERROR6: LCALL BUZZHLJMP SEC2ERROR: LCALL BUZZH;若键入数不为A、B、C中的一个,则报错LCALL DELAYLCALL BUZZLDOWN: CLR IE1CLR IE0POP PSWPOP ACCPOP 07HPOP 04HPOP 03HPOP 02HPOP

22、00HRETI;*;读键值子程序(出口参数累加器A获取到的键值);*RDKEY:MOV R0,#1FHMOV R7,#01HMOV R2,#01HMOV R3,#WSLA_7290MOV R4,#RSLA_7290LCALL RDADDMOV A,1FHDEC ARET;*;向日历芯片写入时间参数子程序;将RAM的10H-1DH中的时间参数(含控制字)写入芯片的00H-0DH单元;*WR8563: MOV R7,#0EHMOV R0,#10HMOV R2,#00HMOV R3,#WSLA_8563LCALL WRNBYTRET;* ;闪烁子程序;* FLASH:PUSH 00HPUSH 02H

23、PUSH 03HPUSH 07HMOV 50H,#70HMOV R7,#02HMOV R0,#50HMOV R2,#07HMOV R3,#WSLA_7290LCALL WRNBYTPOP 07HPOP 03HPOP 02HPOP 00H RET;*;各子程序;*CHAIFEN:PUSH PSWPUSH ACCPUSH 03HPUSH 04HMOV A,20HLCALL CFMOV 38H,R3MOV 39H,R4MOV 3AH,#02HMOV A,21HLCALL CFMOV 3BH,R3MOV 3CH,R4MOV 3DH,#02HMOV A,22HLCALL CFMOV 3EH,R3MOV

24、3FH,R4MOV A,23HLCALL CFMOV A,R3ORL A,#01HMOV R3,AMOV 28H,R3MOV 29H,R4MOV A,25HLCALL CFMOV A,R3ORL A,#01HMOV R3,AMOV 2AH,R3MOV 2BH,R4MOV A,26HLCALL CFMOV A,R3ORL A,#01HMOV R3,AMOV 2CH,R3MOV 2DH,R4MOV 2EH,#0FCHMOV 2FH,#0DAHPOP 04HPOP 03HPOP ACCPOP PSWRETCF: PUSH 02HPUSH DPHPUSH DPLMOV DPTR,#LEDSEGMOV

25、R2,AANL A,#0FHMOVC A,A+DPTRMOV R3,AMOV A,R2SWAP AANL A,#0FHMOVC A,A+DPTRMOV R4,APOP DPLPOP DPHPOP 02HRETLEDSEG:DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E4H DB 0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EH;*;将20H-26H中从PCF8563T中读出的7个字节参数的无关位屏蔽掉;* ADJUST: PUSH ACCMOV A,20HANL A,#7FHMOV 20H,AMOV A,21HANL A,#7FHMOV 21H

26、,AMOV A,22HANL A,#3FHMOV 22H,AMOV A,23HANL A,#3FHMOV 23H,AMOV A,24HANL A,#07HMOV 24H,AMOV A,25HANL A,#1FHMOV 25H,APOP ACCRET;*;延时子程序;*DELAY: PUSH 00HPUSH 01HMOV R0,#00HDELAY1: MOV R1,#01HDJNZ R1,$DJNZ R0,DELAY1POP 01HPOP 00HRET;*;I2C子程序;*END9系统调试运行结果说明、分析所出现得问题,设计体会与建议硬件环境:DP-51PROC单片机综合仿真实验台,TKSMon

27、itor51仿真器。软件环境:PC及Keil软件。结果说明:可通过8563日历显示芯片将时间显示在数码管上,按KEY1键可显示日期,按A、B、C键可分别改变时、分、秒,按错键时会有警告音提醒并要求重新输入。可进行整点报时。调试中出现的问题及解决方法:(1)显示两位小时、两位分钟和两位秒参数,相互之间有分隔符号功能:在该环节中,利用书上的参考程序,实现每1s进入一次中断实现读取时间参数,并进行拆分显示等操作。最后能够在数码管上显示出初始设置的时间,当按下key1键时可以显示初始设置的日期。(2)整点报时功能:设置两个驱动蜂鸣器发声的子程序,一个发声频率为500HZ,另外一个为1500HZ。成功实现了当时间为59分55秒59分59秒时以500HZ的频率发声,时间为整点时以1500HZ的频率发声(3)键盘修改时间功能:这部分程序是整个程序的难点,修改的过程为从8563读取数据存入单片机,在单片机内修改后存回8563,并写入7290回显。我参照书上的程序写了A键基本的框架,发现修改完成后需要写入8563才能成功在数码管上显示,还需考虑键入值是否符合要求,比如小时十位不能大于2,小时不能大于24等等, 能成功键入后,我又相继添加了新的功能,比如

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论