基于PCF8563的时钟系统设计Word下载.docx
《基于PCF8563的时钟系统设计Word下载.docx》由会员分享,可在线阅读,更多相关《基于PCF8563的时钟系统设计Word下载.docx(21页珍藏版)》请在冰豆网上搜索。
![基于PCF8563的时钟系统设计Word下载.docx](https://file1.bdocx.com/fileroot1/2022-10/8/74184054-cadc-40f1-bab6-608a976fa916/74184054-cadc-40f1-bab6-608a976fa9161.gif)
当P1.2=0时,显示年,月,日。
(3)蜂鸣器发声子程序(BUZZL和BUZZH)
设置初始值使BUZZL发声频率为500HZ,BUZZH发声频率为1500HZ。
(4)键盘修改子程序
读入进入中断前的数据,将8563的20H单元内容送入单片机内部12H单元(秒);
21H单元内容送入单片机内部13H单元(分);
22H单元内容送入单片机内部14H单元(时)便于修改后显示。
读入输入的键值为0AH时,为A键修改小时参数。
设置小时的十位闪烁命令等待按键操作,读入键值判断是否超过三,超过则报警且要求重新输入。
输入正确时回显,设置小时的个位闪烁命令等待按键操作,读入键值判断个位不超过9,然后判断小时整个数是否小于24。
分和秒的设置与小时类似,不同的是十位不能超过5个位不能超过9。
(5)闪烁子程序
设置入口闪烁参数单元值
3系统电路图
4外围接口模块硬件电路功能描述
ZLG7290B
驱动8个数码管显示时钟时间,管理按键并读取键值,和/INT1相连,引发中断。
PCF8563T
设置时钟时间,控制时间的运行,和/INT0相连,每一秒产生一次中断。
蜂鸣器
整点报时,错误提示
KEY1
控制显示时间或日期
5主程序中主要变量定义
变量名称
RAM单元/寄存器
功能
WSLA_8563
0A2H
PCF8563T写地址
RSLA_8563
0A3H
PCF8563T读地址
WSLA_7290
70H
ZLG7290B写地址
RSLA_7290
71H
ZLG7290B读地址
SS
50H
为闪烁程序传递参数
无
10H-1DH
准备向时钟芯片写入的值
07H
写入参数个数
00H
参数和控制命令缓冲区首地址
02H
从器件内部地址
03H
从器件写地址
30H
写入闪烁控制字使闪烁速度最快
6系统软件中各个子程序的功能描述
子程序名称
入口参数
出口参数
功能描述
INT_RCT
读取时间参数送数码管显示,并在整点时刻报警
BUZZL
蜂鸣器以500HZ频率发声
BUZZH
蜂鸣器以1500HZ频率发声
ADJUST
20H-26H单元
将20H-26H中从PCF8563中读出的7个参数无关位屏蔽掉
CHAIFEN
28H-2FH单元
38H-3FH单元
将20H-26H单元的参数拆分并在查表后送28H-2FH,38H-3FH
CF
累加器A
R4(H)R3
将A中的数据拆分为两个独立的BCD码并查表结果存于R4R3
INT_7290
修改时间、回显、纠错、闪烁
FLASH
控制闪烁位置
RDKEY
读键值子程序
WR8563
10H-1DH单元
向日历芯片写入时间参数
WRNBYT
多字节写操作
RDADD
多字节读操作
8程序清单
SDABITP1.0
SCLBITP1.1
WSLA_8563EQU0A2H;
PCF8563T口地址
RSLA_8563EQU0A3H
WSLA_7290EQU70H;
ZLG7290B口地址
RSLA_7290EQU71H
ORG8000H
LJMP8040H
ORG8003H
LJMPINT_RCT
ORG8013H
LJMPINT_7290
ORG8040H
START:
MOVSP,#60H
CLRP1.7;
ZLG7290复位
LCALLDELAY
SETBP1.7
;
****************************************
设定pdf8563tde时间和命令参数(参数和控制命令缓冲区10H-1DH)
MOV10H,#00H;
启动控制字
MOV11H,#1FH;
设置报警及定时器中断
MOV12H,#50H;
秒单元
MOV13H,#59H;
分单元
MOV14H,#08H;
小时单元
MOV15H,#01H;
日期单元
MOV16H,#01H;
星期单元
MOV17H,#01H;
月单元
MOV18H,#10H;
年单元
MOV19H,#00H;
设定分报警
MOV1AH,#00H;
设定小时报警
MOV1BH,#00H;
设定日报警
MOV1CH,#00H;
设定星期报警
MOV1DH,#83H;
设定CLKOUT的频率,1秒周期方波
MOVR7,#0EH;
MOVR0,#10H;
参数与控制命令缓冲区首地址
MOVR2,#00H;
从器件内部子地址
MOVR3,#WSLA_8563;
准备向PCF8563T写入数据串
LCALLWRNBYT;
写入时间,控制命令到PCF8563T
SETBEA;
启动总中断
SETBEX0;
启动INT_RCT(INT_0)
SETBIT0;
定时器0下降沿有效
SETBEX1;
启动INT_7290(INT_7290)
SETBIT1;
定时器1下降沿有效
SJMP$;
等待中断
中断服务子程序INT_RCT
INT_RCT:
MOVR7,#07H;
数据块字节数
MOVR0,#20H;
内部数据块首地址
MOVR2,#02H;
内部寄存器首地址
向8563写地址
MOVR4,#RSLA_8563;
从8563读地址
LCALLRDADD;
调读数据子程序,将读出的数据存放于单片机20H-26H中
MOVA,21H;
判断是否为59分
CJNEA,#59H,NEXT1
MOVA,20H;
判断是否为55秒
CJNEA,#55H,NEXT2
LCALLBUZZL
SJMPNEXT
NEXT2:
CJNEA,#56H,NEXT3
NEXT3:
CJNEA,#57H,NEXT4
NEXT4:
CJNEA,#58H,NEXT5
NEXT5:
CJNEA,#59H,NEXT
NEXT1:
CJNEA,#00H,NEXT
MOVA,20H
CJNEA,#00H,NEXT
LCALLBUZZH
NEXT:
LCALLADJUST;
调时间调整子程序
LCALLCHAIFEN;
调拆分子程序,将20H-26H中的参数分别存28H-2FH,38H-3FH中
MOVR7,#08H
MOVR2,#10H
MOVR3,#WSLA_7290
JNBP1.2,YEARS;
使用P1.2控制显示内容
MOVR0,#38H;
显示时分秒
SJMPDISP
YEARS:
MOVR0,#28H;
显示年月日
DISP:
调7290显示子程序
JNBP3.2,$
RETI
BUZZ
BUZZL:
PUSH07H
MOVTMOD,#01H;
方式1
MOVTL0,#66H;
低频500HZ
MOVTH0,#0FCH
MOVR7,#50
SETBTR0
LOOPL:
JNBTF0,$
CLRTF0
MOVTL0,#66H
CPLP3.4;
驱动蜂鸣器
DJNZR7,LOOPL
SETBP3.4
POP07H
RET
BUZZH:
MOVTMOD,#01H
MOVTL0,#0CDH;
高频1500HZ
MOVTH0,#0FEH
MOVR7,#100
LOOPH:
MOVTL0,#0CDH
DJNZR7,LOOPH
键盘修改中断服务程序INT_7290
INT_7290:
PUSH00H
PUSH02H
PUSH03H
PUSH04H
PUSH07H
PUSHACC
PUSHPSW
MOVR7,#07H;
从器件内部从地址
准备向8563写入数据串
准备从8563读