📄 1.asm
字号:
ADDR_KEY EQU 0080H ;键盘片选地址
KEY_TMP EQU 70H ;键值暂存单元
LEDDATA EQU P2.7 ;定义数码管显示 74LS164 的数据线
LEDCLK EQU P2.6 ;定义数码管显示 74LS164 的时钟线
SCK EQU P2.0 ;定义P1.6为I2C总线的时钟线
SDA EQU P2.1 ;定义P1.7为I2C总线的数据线
CNTRL0 EQU 30H ;定义控制/状态0数据存储地址
CNTRL1 EQU 31H ;定义控制/状态1数据存储地址
SEC EQU 32H ;定义秒初值存储地址
MIN EQU 33H ;定义分初值存储地址
HOUR EQU 34H ;定义时初值存储地址
DAT EQU 35H ;定义天初值存储地址
WEEK EQU 36H ;定义周初值存储地址
MONTH EQU 37H ;定义月初值存储地址
YEAR EQU 38H ;定义年初值存储地址
MINBJ EQU 39H ;定义分定时初值存储地址
HOURBJ EQU 3AH ;定义时定时初值存储地址
DATBJ EQU 3BH ;定义日定时初值存储地址
CLOCK EQU 3CH ;定义CLOCK 输出频率初值地址
LEDBUF1 EQU 3DH ;定义显示的缓冲区,对应数码管显示的L6
LEDBUF2 EQU 3EH ;定义显示的缓冲区,对应数码管显示的L5
LEDBUF3 EQU 3FH ;定义显示的缓冲区,对应数码管显示的L4
LEDBUF4 EQU 40H ;定义显示的缓冲区,对应数码管显示的L3
LEDBUF5 EQU 41H ;定义显示的缓冲区,对应数码管显示的L2
LEDBUF6 EQU 42H ;定义显示的缓冲区,对应数码管显示的L1
TIMEBUF EQU 43H ;定义读出时间、日期数据存储首地址
FLAG BIT 00H
FLAG1 BIT 01H
ORG 0000H
LJMP MAIN
ORG 0013H
LJMP INT
ORG 0100H
MAIN:
MOV SP,#50H
CLR EA
SETB EX1
SETB PX1
CLR IT1
SETB FLAG
SETB FLAG1
LCALL LOAD8563 ;载入初值
MOV R0,#30H ;指向初值寄存器首地址
MOV R1,#00H ;初始化8563寄存器单元地址
MOV R3,#0CH ;需初始化字节数
WRDATA:
LCALL WR_PCF8563 ;向PCF8563写入初值
INC R0
INC R1
DJNZ R3,WRDATA
LCALL DELAY
LCALL CLEARDISP ;清除显示器上的显示内容
REREAD: SETB EA
LCALL KEY
REREAD1:
MOV CLOCK, #83H
MOV R0 ,#CLOCK
MOV R1 ,#0DH
LCALL WR_PCF8563
LCALL KEY
MOV R2 ,#10H
JNB ACC.3 ,DISP ;进入显示月份子程序?
JNB ACC.1,NAOZHONG ;进入闹钟设置
JNB ACC.0,FLAG_1
LCALL TIME
SJMP REREAD1
;***************************************
;关闹钟标志
;****************************************
FLAG_1:
SETB FLAG
MOV R4,#0A0H
PPP:
LCALL KEY
JB ACC.0,ZHENCHANG
MOV CNTRL1, #00H
MOV R0 ,#CNTRL1
MOV R1 ,#01H
LCALL WR_PCF8563
MOV MINBJ,#80H
MOV HOURBJ,#80H
MOV DATBJ,#80H
MOV R0,#39H ;指向初值寄存器首地址
MOV R1,#09H ;初始化8563寄存器单元地址
MOV R3,#03H ;需初始化字节数
WRDATA_:
LCALL WR_PCF8563 ;向PCF8563写入初值
INC R0
INC R1
DJNZ R3,WRDATA_
LCALL QUANLING
LCALL DELAY
LJMP SSPP
ZHENCHANG:
LCALL DELAY
DJNZ R4,PPP
SSPP:
LJMP REREAD1
;***************************************
;使用资源 A ,R
;R4控制在子程序停留的时间 ,时间到则返主,
;时间未到按确认键则转入修改子程序
;***************************************
DISP:
MOV CLOCK, #03H
MOV R0 ,#CLOCK
MOV R1 ,#0DH
LCALL WR_PCF8563
LCALL DISP_NUM
LCALL KEY
JNB ACC.3 , LP
DJNZ R2 ,DISP
AJMP REREAD
;***************************************
;进入闹钟设置程序
;*****************************************
NAOZHONG:
LCALL KEY
LJMP NAOZHONG_1
;**************修改时间子程序***********
;完成了对分钟的修改
;使用 的资源 A ,R3 ,R4 R6,R7
;***************************************
LP: CLR EA
MOV R4,#10H
LCALL KEY
LP_: MOV LEDBUF1 ,#14H ;对分钟的修改
MOV LEDBUF2, #14H
LCALL DISPNUMBER
LCALL DELAY
MOV R7 ,TIMEBUF+1
LCALL KEY1
JNB ACC.0, LOP
JNB ACC.3,L_P
JB ACC.1 ,NEXT0
LCALL INC_NUM
MOV TIMEBUF+1,A
NEXT0:
MOV R0 ,#TIMEBUF+1
MOV R1 ,#03H
LCALL WR_PCF8563
LCALL TIME
DJNZ R4 ,LP_
AJMP REREAD
INC_NUM:
MOV R4,#10H
MOV A ,R7
ADD A ,#01H
DA A
MOV R7,A
SUBB A,#60H
JC NEXT
MOV R7,#00H
NEXT: MOV A, R7
RET
L_P: LCALL KEY
LJMP LP0
;*****************************************
;完成了对星期的修改
;********************************************
LOOP: LCALL KEY
MOV R4,#10H
LOOP_: MOV LEDBUF5 ,#14H ;对星期的修改
MOV LEDBUF6, #14H
LCALL DISPNUMBER
LCALL DELAY
MOV R7 ,TIMEBUF+4
LCALL KEY1
JNB ACC.3, LO_OP
JNB ACC.0, LP
JB ACC.1, NEXT4
LCALL INC_NUM2
NEXT4:
MOV R0 ,#TIMEBUF+4
MOV R1 ,#06H
LCALL WR_PCF8563
LCALL TIME
DJNZ R4 ,LOOP_
AJMP REREAD
INC_NUM2:
MOV R4,#10H
MOV A ,R7
ADD A ,#01H
DA A
MOV R7,A
SUBB A,#08H
JC NEXT5
MOV R7,#01H
NEXT5: MOV A, R7
MOV TIMEBUF+4,A
RET
LO_OP: LCALL KEY
LJMP LP0
;***************************************
;完成对小时的修改
;***************************************
LOP: LCALL KEY
MOV R4,#10H
LOP_: MOV LEDBUF4 ,#14H ;对小时的修改
MOV LEDBUF3, #14H
LCALL DISPNUMBER
LCALL DELAY
MOV R7 ,TIMEBUF+2
LCALL KEY1
JNB ACC.3, LO_P
JNB ACC.0, LOOP
JB ACC.1, NEXT1
LCALL INC_NUM1
NEXT1:
MOV R0 ,#TIMEBUF+2
MOV R1 ,#04H
LCALL WR_PCF8563
LCALL TIME
DJNZ R4 ,LOP_
AJMP REREAD
INC_NUM1:
MOV R4,#10H
MOV A ,R7
ADD A, #01H
DA A
MOV R7,A
SUBB A,#24H
JC NEXT2
MOV R7,#00H
NEXT2: MOV A, R7
MOV TIMEBUF+2,A
RET
LO_P: LCALL KEY
LJMP LP0
;**************************************
;按键连续加一
;***************************************
KEY1: LCALL DL10MS
MOV P0, #0FH
MOV A, P0
LCALL DL10MS
RET
;************键盘扫描子程序*************
;键盘扫描子程?
;***************************************
KEY:
LCALL KS1 ;检查是否有键闭合
JNZ LK1
LJMP LK8
LK1:LCALL DL10MS
LCALL KS1
JNZ LK2
LJMP LK8
LK2:MOV P0, #0FH
MOV A,P0
PUSH 0E0H
LK3:LCALL KS1
JNZ LK3
POP 0E0H
RET
LK8:MOV A, #0FFH ;无键闭合时给A送入0ffh
RET
KS1:MOV P0 , #0FH ;检查是否有键闭子程序合
MOV A , P0
ANL A ,#0FH
ORL A ,#0F0H
CPL A
RET
;************开始对日期修改*************
;开始对日期的修改
;***************************************
LP0: MOV R4,#10H
LCALL KEY
LP0_: MOV LEDBUF1 ,#14H ;开始对天修改
MOV LEDBUF2, #14H
LCALL DISPNUMBER
LCALL DELAY
MOV R7 ,TIMEBUF+3
LCALL KEY1
JNB ACC.3,LP_0
JNB ACC.0,LOP0
JB ACC.1,NEXT00
LCALL INC_NUM0
MOV TIMEBUF+3,A
NEXT00:
MOV R0 ,#TIMEBUF+3
MOV R1 ,#05H
LCALL WR_PCF8563
LCALL DISP_NUM
DJNZ R4 ,LP0_
AJMP REREAD
INC_NUM0:
MOV R4,#10H
MOV A ,R7
ADD A ,#01H
DA A
MOV R7,A
SUBB A,#32H
JC NEXT6
MOV R7,#01H
NEXT6: MOV A, R7
RET
LP_0: LCALL KEY
LJMP SEC1
;**********开始对年份修改***************
;开始对年份修改
;***************************************
LOOP0: MOV R4,#10H
LCALL KEY
LOOP0_:MOV LEDBUF5 ,#14H
MOV LEDBUF6, #14H
LCALL DISPNUMBER
LCALL DELAY
MOV R7 ,TIMEBUF+6
LCALL KEY1
JNB ACC.3, SEC1
JNB ACC.0, LP0
JB ACC.1, NEXT7
LCALL INC_NUM22
NEXT7:
MOV R0 ,#TIMEBUF+6
MOV R1 ,#08H
LCALL WR_PCF8563
LCALL DISP_NUM
DJNZ R4 ,LOOP0_
AJMP REREAD
INC_NUM22:
MOV R4,#10H
MOV A ,R7
ADD A ,#01H
DA A
MOV TIMEBUF+6,A
RET
;************开始对月份的修改***********
;开始对月份的修改
;***************************************
LOP0: MOV R4 ,#10H
LCALL KEY
LOP0_: MOV LEDBUF4 ,#14H ;
MOV LEDBUF3, #14H
LCALL DISPNUMBER
LCALL DELAY
MOV R7 ,TIMEBUF+5
LCALL KEY1
JNB ACC.3, SEC1
JNB ACC.0, LOOP0
JB ACC.1, NEXT11
LCALL INC_NUM11
NEXT11:
MOV R0 ,#TIMEBUF+5
MOV R1 ,#07H
LCALL WR_PCF8563
LCALL DISP_NUM
DJNZ R4 ,LOP0_
AJMP REREAD
INC_NUM11:
MOV R4,#10H
MOV A ,R7
ADD A ,#01H
DA A
MOV R7,A
SUBB A,#13H
JC NEXT22
MOV R7,#01H
NEXT22:MOV A, R7
MOV TIMEBUF+5,A
RET
;***********对秒的修改*******************
;对秒的修改
;****************************************
SEC1:
MOV R4,#10H
LCALL KEY
SEC2:
MOV LEDBUF3, #14H
MOV LEDBUF4, #14H
MOV LEDBUF5, #14H
MOV LEDBUF6, #14H
LCALL DISPNUMBER ;调显示程序
LCALL DELAY ;延时
LCALL KEY1
JNB ACC.3 ,SEC4
JB ACC.1 ,SEC3
LCALL INC_SEC
SEC3: MOV R0,#TIMEBUF
LCALL RD_PCF8563
MOV A, TIMEBUF
ANL A, #7FH ;屏蔽数据无关位
MOV A, TIMEBUF ;对秒的处理
ANL A, #0FH
MOV LEDBUF1, A ;低四送显示缓冲器
MOV A,TIMEBUF
SWAP A
ANL A,#0FH
MOV LEDBUF2,A ;高四位送显示缓冲器
LCALL DISPNUMBER ;调显示程序
LCALL DELAY ;延时
DJNZ R4 ,SEC2
AJMP REREAD
SEC4: LCALL KEY
LJMP REREAD
INC_SEC:
MOV R4,#10H
MOV TIMEBUF , #00H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -