📄 tpsz.asm
字号:
;GPS卫星同步时钟,文件名:TPSZ.ASM
;P1.0 MAX7219 数据线 DIN
;P1.1 MAX7219 时钟线 CLK
;P1.2 MAX7219 片选线 LOAD/CS
;P1.3 计数键
;P1.4 右移键
;P1.5 设置键
;34H 时间调整缓存
;35H 时标缓存
;36H 显示地址缓存
;37H 双字节秒缓存
;38H 双字节分缓存
;39H 双字节时缓存
;3AH 3BH 3CH 3DH 3EH 3FH 调整时间交替显示缓存
;40H 41H 42H 43H 44H 45H 时间显示单字节缓存(40H 41H 秒,42H 43H 分, 44H 45H 时)
;47H 移动校时键移位指针缓存
;48H-4FH 指针时钟缓存
;50H-5FH 卫星时间缓存
;=================================================
ORG 8000H
;================================================= 缓存清零
MOV 40H,#00H ; 显示第一位缓存
MOV 41H,#00H ; 显示第二位缓存
MOV 42H,#00H ; 显示第三位缓存
MOV 43H,#00H ; 显示第四位缓存
MOV 44H,#00H ; 显示第五位缓存
MOV 45H,#00H ; 显示第六位缓存
MOV 34H,#00H
MOV 35H,#00H
MOV 37H,#00H
MOV 38H,#00H
MOV 39H,#00H
MOV A,8EH
SETB ACC.1
MOV 8EH,A
;=================================================
AJMP START
;=================================================
START:
MOV SP,#07H ;堆栈设定
MOV A,#0AH ;LED初始化
MOV R4,#02H
ACALL WRITE7219
MOV A,#0BH
MOV R4,#05H
ACALL WRITE7219
MOV A,#09H
MOV R4,#0FFH
ACALL WRITE7219
MOV A,#0CH
MOV R4,#01H
ACALL WRITE7219
; DS12C887初始化 =================================================
; 开启振荡器和允许计时
PUSH ACC
PUSH DPH
PUSH DPL
MOV DPTR,#000AH
MOV A,#00100000B
MOVX @DPTR,A
; ;设定SET=1,禁止更新数据
MOV DPTR,#000BH
MOV A,#10000000B
MOVX @DPTR,A
; 设定秒
MOV DPTR,#0000H
MOV R0,#37H
MOV A,@R0
MOVX @DPTR,A
; 设定分
MOV DPTR,#0002H
MOV R0,#38H
MOV A,@R0
MOVX @DPTR,A
; 设定时
MOV DPTR,#0004H
MOV R0,#39H
MOV A,@R0
MOVX @DPTR,A
; 设定SET=0,BCD模式,24小时制
MOV DPTR,#000BH
MOV A,#00000010B
MOVX @DPTR,A
POP DPL
POP DPH
POP ACC
; 主程序===============================================
MAIN:
LCALL READTIME
LCALL RTOY
MOV 36H,#40H
LCALL DISPLAY
SETB P1.5
ACALL DL
SETB P1.5
JNB P1.5,SETKEY
SETB P1.5
NOP
NOP
AJMP MAIN
READTIME:
; 读取秒数据
PUSH ACC
PUSH DPH
PUSH DPL
MOV DPTR,#0000H
MOVX A,@DPTR
MOV 37H,A
; 读取分数据
MOV DPTR,#0002H
MOVX A,@DPTR
MOV 38H,A
; 读取时数据
MOV DPTR,#0004H
MOVX A,@DPTR
MOV 39H,A
POP DPL
POP DPH
POP ACC
RET
; MAX7219 LED显示子程序 ===========================================
DISPLAY:
MOV R0,36H
MOV R1,#01H
MOV R3,#06H
L2:
MOV A,@R0
MOV R4,A
MOV A,R1
ACALL WRITE7219
INC R0
INC R1
DJNZ R3,L2
RET
;MAX7219 发送地址数据子程序===========================================
SEND7219:
MOV R2,#08H
L1:
NOP
NOP
CLR P1.1
RLC A
MOV P1.0,C
NOP
NOP
SETB P1.1
DJNZ R2,L1
CLR C
RET
;MAX7219 数据写入子程序===========================================
WRITE7219:
ACALL SEND7219
MOV A,R4
ACALL SEND7219
CLR P1.2
NOP
SETB P1.2
NOP
RET
;双字节BCD码转换成单字节BCD码===========================================
RTOY:
MOV R0,#37H
MOV R1,#40H
MOV R3,#03H
CBCD:
MOV A,@R0
ANL A,#0FH
MOV @R1,A
INC R1
MOV A,@R0
SWAP A
ANL A,#0FH
MOV @R1,A
INC R0
INC R1
DJNZ R3,CBCD
RET
;键盘输入子程序===========================================
;设置键子程序
SETKEY:
AJMP WYKEY
SETEXIT:
AJMP START
; 位移功能键子程序
WYKEY:
MOV 47H,#00H
WYKEYY:
SETB P1.4
SETB P1.5
ACALL DL ;调用延时子程序
SETB P1.4
SETB P1.5
JNB P1.5,SETEXIT
JNB P1.4,KEYADD ;没有按下->KEYADD
KEYTEST:
MOV A,47H
JZ WYKEY1 ;按第一下,转WYKEY1
CLR C
SUBB A,#03H
JZ WYKEY2 ;按第二下,转WYKEY2
CLR C
SUBB A,#03H
JZ WYKEY3 ;按第三下,转WYKEY3
WYKEY1: ;校时
MOV 34H,39H ;当前时间送调整缓存
MOV 35H,#24H ;时标送35H(最大23,24时清“0”,重新开始)
ACALL JSKEY ;调用时间调整子程序
MOV 39H,34H ;调整后的时间替换成当前时间
ACALL RTOY ;双字节BCD码转换成单字节BCD码
ACALL MOVE ;数据送入交替显示缓存
MOV 3EH,#0FH ;送消隐字低位
MOV 3FH,#0FH ;送消隐字高位
MOV 36H,#40H ;送正常显示地址
ACALL DISPLAY ;调用显示子程序
ACALL DL ;调用延时子程序
MOV 36H,#3AH ;送闪显地址
ACALL DISPLAY ;调用显示子程序
AJMP WYKEYY
WYKEY2: ;校分
MOV 34H,38H
MOV 35H,#60H
ACALL JSKEY
MOV 38H,34H
ACALL RTOY
ACALL MOVE
MOV 3CH,#0FH
MOV 3DH,#0FH
MOV 36H,#40H
ACALL DISPLAY
ACALL DL
MOV 36H,#3AH
ACALL DISPLAY
AJMP WYKEYY
WYKEY3: ;校秒
MOV 34H,37H
MOV 35H,#60H
ACALL JSKEY
MOV 37H,34H
ACALL RTOY
ACALL MOVE
MOV 3AH,#0FH
MOV 3BH,#0FH
MOV 36H,#40H
ACALL DISPLAY
ACALL DL
MOV 36H,#3AH
ACALL DISPLAY
AJMP WYKEYY
KEYADD:
INC 47H
INC 47H
INC 47H
MOV A,#09H
CLR C
SUBB A,47H
JZ CLEAR
AJMP KEYTEST
CLEAR:
MOV 47H,#00H
LJMP WYKEYY
;===========================================
JSKEY:
SETB P1.3
LCALL DL
SETB P1.3
JB P1.3,JYEXIT ;按下计数,否则转移位
MOV A,34H ;当前时间->A
ADD A,#01H ;当前时间+1
DA A ;BCD码调整为十进制
MOV R5,A ;保存调整好的时间
CLR C
SUBB A,35H ;与时标进行相减比较
MOV R1,34H ;当前时间->R1
JZ ACLEAR ;相减后A中为“0”转移,调整的时间清零
MOV A,R5 ;恢复调整好的时间
MOV 34H,A ;调整后的时间为当前时间
AJMP JYEXIT
ACLEAR:
MOV 34H,#00H
LJMP JYEXIT
JYEXIT:
RET
;数据移动,使3AH与40H的内容交替显示,产生调整位闪亮的效果
MOVE:
MOV 3AH,40H
MOV 3BH,41H
MOV 3CH,42H
MOV 3DH,43H
MOV 3EH,44H
MOV 3FH,45H
RET
;延时子程序===========================================
DL: MOV R7,#0FFH
DL1: MOV R6,#0FFH
DL6: DJNZ R6,DL6
DJNZ R7,DL1
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -