大连理工大学单片机综合设计基于ZLG7290BPCF8563的时钟系统设计Word格式.docx

上传人:b****6 文档编号:21630451 上传时间:2023-01-31 格式:DOCX 页数:26 大小:104.69KB
下载 相关 举报
大连理工大学单片机综合设计基于ZLG7290BPCF8563的时钟系统设计Word格式.docx_第1页
第1页 / 共26页
大连理工大学单片机综合设计基于ZLG7290BPCF8563的时钟系统设计Word格式.docx_第2页
第2页 / 共26页
大连理工大学单片机综合设计基于ZLG7290BPCF8563的时钟系统设计Word格式.docx_第3页
第3页 / 共26页
大连理工大学单片机综合设计基于ZLG7290BPCF8563的时钟系统设计Word格式.docx_第4页
第4页 / 共26页
大连理工大学单片机综合设计基于ZLG7290BPCF8563的时钟系统设计Word格式.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

大连理工大学单片机综合设计基于ZLG7290BPCF8563的时钟系统设计Word格式.docx

《大连理工大学单片机综合设计基于ZLG7290BPCF8563的时钟系统设计Word格式.docx》由会员分享,可在线阅读,更多相关《大连理工大学单片机综合设计基于ZLG7290BPCF8563的时钟系统设计Word格式.docx(26页珍藏版)》请在冰豆网上搜索。

大连理工大学单片机综合设计基于ZLG7290BPCF8563的时钟系统设计Word格式.docx

通过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

时钟中断服务子程序

PANDUAN

20-21H

判断并进行整点报时

CHAIFEN

20-26H

28-2FH、38-3FH

将时间参数拆分查表

CF

A

R4、R3

将A中数据拆违两独立的十六进制数并查表得到对应字型码

ADJUST

20-25H

屏蔽各时间参数无关位

INT_7290

键盘修改时间中断服务子程序

RDKEY

读键值子程序

WR8563

R7、R0、R2、R3

向日历芯片写时间参数

WRNBYT

带有内部单元地址的多字节写操作子程序

RDADD

R7、R0、R2、R3、R4

带有内部单元地址的多字节读操作子程序

7主程序程序流程图

N

Y

YN

NWAIT1

WAIT2

8程序清单

;

************************************************************

由PCF8563提供时间参数并由ZLG7290进行显示

能够利用键盘实现时间参数的修改,修改过程可加入回显、闪烁、容错等功能

利用蜂鸣器实现时钟系统整点报时功能

要求程序中有中断环节

转换显示:

P1.2与KEY1连接,按下KEY1显示年月日,平时显示时分秒

设定时钟芯片CLKOUT输出秒脉冲且与P3.2连接

采用中断的方式来显示时间(每秒钟刷新一次显示)

ZLG7290B芯片的RST_L复位端与P1.7口连接,以便复位操作

************************************************************

SDABITP1.0;

定义I2C信号引脚

SCLBITP1.1

WSLA_8563EQU0A2H;

PCF8563T口地址

RSLA_8563EQU0A3H

WSLA_7290EQU70H;

ZLG7290B口地址

RSLA_7290EQU71H

ORG8000H

LJMP8100H

ORG8003H

LJMPINT_RCT

ORG8013H

LJMPINT_7290

ORG8100H

START:

MOVSP,#60H

CLRP1.7;

ZLG7290B复位

LCALLDELAY

SETBP1.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;

写入时间、控制命令到PCF8563T

MOVIP,02H

SETBEA

SETBEX0

SETBEX1

SETBIT0

SETBIT1

SJMP$;

等待中断

INT_RCT:

MOVR7,#07H;

读出数个数

MOVR0,#20H;

目标数据块首地址

MOVR2,#02H;

从器件内部首地址

MOVR3,#WSLA_8563

MOVR4,#RSLA_8563;

准备读PCF8563T的时间参数

LCALLRDADD;

调读数据子程序,将读出的数据存放于单片机20H~26H中

LCALLADJUST;

调时间调整子程序

LCALLPANDUAN;

调判断键值子程序

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:

调ZLG7290B显示

JNBP3.2,$

RETI

整点报时子程序

PANDUAN:

MOVA,21H

CJNEA,#59H,PDFEN

MOVA,20H

CJNEA,#56H,PD57

LCALLBAOSHI1

AJMPEXIT

PD57:

CJNEA,#57H,PD58

PD58:

CJNEA,#58H,PD59

PD59:

CJNEA,#59H,EXIT

PDFEN:

CJNEA,#00H,EXIT

LCALLBAOSHI2

EXIT:

RET

*******************************

低音1S报时

BAOSHI1:

PUSHPSW

PUSH00H

MOVR0,#0FFH

MOVTMOD,#10H

MOVTL1,#00H

MOVTH1,#0FEH

SETBTR1

WORK1:

JNBTF1,$

CLRTF1

CPLP1.4

DJNZR0,WORK1

POP00H

POPPSW

高音1S报时

BAOSHI2:

PUSH01H

MOVR0,#04H

WORK2:

MOVR1,#00H

MOVTH1,#0FFH

WORK3:

DJNZR1,WORK3

DJNZR0,WORK2

POP01H

各子程序

ORG8300H

CHAIFEN:

PUSHPSW;

对20H~26H单元的参数拆分并在查表后送28H~2FH(年月日)和38H~3FH(时分秒)

PUSHACC

PUSH03H

PUSH04H

MOVA,20H;

取秒参数

LCALLCF;

拆分、查表在R4、R3中

MOV38H,R3;

送秒的个位

MOV39H,R4;

送秒的十位

MOV3AH,#02H;

送分隔符

MOVA,21H;

取分参数

LCALLCF

MOV3BH,R3;

送分的个位

MOV3CH,R4;

送分的十位

MOV3DH,#02H;

MOVA,22H;

取小时参数

MOV3EH,R3;

送小时的个位

MOV3FH,R4;

送小时的十位

MOVA,23H;

取日期参数

MOVA,R3

MOVR3,A

MOV28H,R3

MOV29H,R4

MOVA,25H;

取月参数

ORLA,#01H

MOV2AH,R3

MOV2BH,R4

MOVA,26H;

取年参数

MOV2CH,R3

MOV2DH,R4

MOV2EH,#0FCH;

年的高两位处理

MOV2FH,#0DAH

POP04H

POP03H

POPACC

*************************************************************

将A中的数据拆分成两个独立的BCD码并查表,结果分别存放于R4、R3中

CF:

PUSH02H

PUSHDPH

PUSHDPL

MOVDPTR,#LEDSEG

MOVR2,A

ANLA,#0FH

MOVCA,@A+DPTR

MOVA,R2

SWAPA

MOVR4,A

POPDPL

POPDPH

POP02H

******************************************************************

LEDSEG:

DB0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E4H

DB0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH,8EH

将20H~26H中从PCF8563T中读出的7个字节参数的无关位屏蔽掉

ADJUST:

ANLA,#7FH

MOV20H,A

MOV21H,A

MOVA,22H

ANLA,#3FH

MOV22H,A

MOVA,23H

MOV23H,A

MOVA,24H

ANLA,#07H

MOV24H,A

MOVA,25H

ANLA,#1FH

MOV25H,A

**************************

延时子程序

***************************

DELAY:

MOVR0,#00H

DELAY1:

DJNZR1,$

DJNZR0,DELAY1

INT_7290:

PUSH07H

PUSHPSW

LCALLRDKEY;

读取第一个按键值(功能键)

*************************

修改小时

********************************

AKEY:

CJNEA,#0AH,BKEY;

判断是A键吗?

不是跳转判断是B

JBP3.3,$;

以查询的方式等待下一次按键操作

读取第二个按键值(小时的十位数?

ANL14H,#0FH

ORL14H,A;

14H单元中的“十位数”生成

读取第三个按键值(小时的个位数)

ANL14H,#0F0H;

将键值数据处理成小时的个位

ORL14H,A

MOVR7,#01H

MOVR0,#14H

MOVR2,#04H

将修改后的时间参数送PCF8563T

LJMPDOWN

**********************

修改分

BKEY:

CJNEA,#0BH,CKEY

JBP3.3,$

LCALLRDKEY

ANL13H,#0FH

ORL13H,A

ANL13H,#0F0H

MOVR0,#13H

MOVR2,#03H

LCALLWRNBYT

修改秒

CKEY:

CJNEA,#0CH,DOWN

ANL12H,#0FH

ORL12H,A

ANL12H,#0F0H

MOVR0,#12H

MOVR2,#02H

LJMPDOWN

*******************

中断返回退出

DOWN:

CLRIE0

POP07H

读键值子程序(出口参数累加器A,获取到的键值)

RDKEY:

MOVR0,#1FH;

键值缓冲单元

MOVR7,#01H;

取键值数据

MOVR2,#01H;

指向内部数据键值寄存器地址

MOVR3,#WSLA_7290;

取器件写地址

MOVR4,#RSLA_7290;

取器件读地址

读出7290的01H单元中的键值

MOVA,1FH;

取键值送缓冲单元

DECA

向日历芯片中写入时间参数子程序

WR8536:

MOVR7,#07H;

MOVR0,#12H;

************************

相关I2C子程序

带有内部单元地址的多字节写操作子程序WRNBYT

通用的I2C通讯子程序(多字节写操作)

入口参数R7字节数,R0:

源数据块首地址

R0原数据块首地址;

R2从器件内部子地址;

R3:

外围器件地址(写)

相关子程序WRBYT、STOP、CACK、STA

WRNBYT:

PUSHPSW

PUSHACC

WRADD:

MOVA,R3;

取外围器件地地址(包含r/w=0)

LCALLSTA;

发送起始信号S

LCALLWRBYT;

发送外围地址

LCALLCACK;

检测外围器件的应答信号

JBF0,WRADD;

如果应

发送内部寄存器首地址

如果应答不正确返回重来

WRDA:

MOVA,@R0

如果应答不正确返回重来

INCR0

DJNZR7,WRDA

LCALLSTOP

RET

***********************************

带有内部单元地址的多字节读操作子程序RDADD

入口参数R7字节数;

R0目标数据块首地址;

R2从器件内部子地址;

R3器件地址(写);

R4器件地址(读)

相关子程序WRB

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 初中作文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1