PP: MOV 37H, #12 MOV R0, #30H
MOV R7, #07H PPP: MOV @R0, #10 INC R0
DJNZ R7, PPP RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;; 键扫子程序 ;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; KEY: LCALL KEYS
JZ EXIT
LCALL DISP LCALL DISP
LCALL KEYS JZ EXIT
MOV B, 20H
KEYSF: LCALL KEYS
JZ KEYY
LCALL DISP
AJMP KEYSF
KEYY: MOV A, B
EXIT: RET
KEYS: MOV P1, #0FFH
MOV A, P1
CPL A
ANL A, #0FH MOV 20H, A
RET
;P点编码送寄存器 ;P点编码送寄存器
;调键值处理子程序 ;没有键按下转到返回
;调显示去抖动
;保存键值 ;调键值处理子程序 ;键释放,转到恢复键值;调显示子程序延时 ;等到键释放 ;键值送20H单元保存 ;返回
;先向P1口写1 ;P1口值送累加器A ;A值取反
;保存P1口的低4位 ;A值送20H保存
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;; 键功能子程序 ;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ANKEY: CLR EA CHECK: JB
;关中断 ;判断是否运行
TR0, YXZ
K0: CJNE A, #01H, K1
AJMP K1: CJNE AJMP K2: CJNE AJMP K3: CJNE AJMP
YXZ: JB AJMP
KEY1: MOV LCALL CLR
CJNE ACALL AJMP KEY2: MOV LCALL CLR
CJNE ACALL AJMP
RUN A,
#02H, KEY1 A,
#04H, KEY2 A,
#08H, KEY3 ACC.0, STOP
OUT R0, #45H
ADD1 C
A, #24H, CLR0 OUTT
R0, #43H
ADD1 C
A, #60H, CLR0 OUTT
;转运行
K2
;转时调整
K3
;转分调整
OUT
;转秒调整
;时调整
OUTT
;分调整
OUTT
KEY3: MOV R0, ADD1 C A,
#41H ;秒调整
ACALL CLR
CJNE #60H, OUTT
ACALL CLR0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;; 传送显示数据 ;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; OUTT: MOV 30H, 40H
MOV 31H, 41H MOV 32H, #11 MOV 33H, 42H
MOV 34H, 43H MOV 35H,
#11 MOV 36H, 44H
MOV
37H,
45H
RET STOP: CLR
TR0
RET
RUN: LCALL TIME
OUT: SETB EA RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;; 运行电子钟 ;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; TIME: SETB EA
MOV TL0, #0B0H
MOV TH0, #3CH MOV R4, #20
;秒显示单元41H-42H
; \
;分显示单元43H-44H
; \
;时显示单元44-45H
;关电子钟并跳出
;运行电子钟
;无键按下或完成功能跳出;3CB0H
;50ms,20次循环
SETB TR0 RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;; 定时中断 ;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; INTT0: PUSH ACC
PUSH PSW CLR
ET0
CLR TR0
MOV TL0, #0B0H MOV TH0, #3CH
SETB TR0
DJNZ R4, OUTT0 ADDSS: MOV R4, #14H MOV
R0,
#41H ACALL ADD1
CLR
C CJNE A,
#60H, ADDMM ;1ADDMM: JC
OUTT0 ACALL CLR0 MOV
R0,
#43H ACALL ADD1
CLR
C CJNE A,
#60H, ADDHH ;1ADDHH: JC
OUTT0 ACALL CLR0 MOV
R0,
#45H ACALL
ADD1
;启动定时器0
;重新设定定时初值;启动定时器0
;1秒到
;20次计数 ;秒十位 ;加1程序
分到
;加1程序
小时到
;加1程序
CLR C A,
#24H,
HOUR ;1天到
CJNE HOUR: JC
OUTT0 ACALL CLR0 OUTT0: MOV 30H, 40H
MOV 31H, 41H MOV 32H, #11 MOV 33H, 42H
MOV 34H, 43H MOV 35H,
#11 MOV 36H, 44H
MOV 37H, 45H
POP PSW POP
ACC SETB ET0
RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;; 时间清零子程序 ;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; CLR0: CLR A MOV @R0,
A
DEC R0 MOV
@R0,
A RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;; 加一子程序 ;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;秒显示单元41H-42H
; \
;分显示单元43H-44H
; \
;时显示单元44-45H