;;;;;;;;;;;键扫子程序;;;;;;;;;;; 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显示程序;;;;;;;;;;; PP: MOV P2,#01H
MOV P0,#12 LCALL YANSHI_1 MOV P2,#00H LCALL YANSHI_1 RET
;;;;;;;;;;;键功能子程序;;;;;;;;;;; ANKEY: CLR EA
CHECK: JB TR0, YXZ
K0: CJNE A,
#01H,
12
;保存键值 ;调键值处理子程序 ;键释放,转到恢复键值 ;调显示子程序延时
;等到键释放
;键值送20H单元保存 ;返回
;先向P1口写1 ;P1口值送累加器A
;A值取反
;保存P1口的低4位 ;A值送20H保存
;关中断
;判断是否运行
K1
AJMP RUN ;转运行 K1: CJNE A, K2: CJNE A,
#02H, K2 #04H, K3
AJMP KEY1 ;转时调整 AJMP KEY2 ;转分调整 K3: CJNE A, #08H, OUT
AJMP KEY3 ;转秒调整
YXZ: JB ACC.0, AJMP OUT
KEY1: MOV R0, #45H LCALL ADD1 CLR
C
CJNE A, #24H, OUTT ACALL CLR0 AJMP OUTT
KEY2: MOV R0, #43H LCALL ADD1 CLR
C
CJNE A, #60H, OUTT ACALL CLR0 AJMP OUTT KEY3: MOV ACALL CLR
CJNE
;;;;;;;;;;;传送显示数据;;;;;;;;;;; OUTT: MOV MOV MOV
30H, 31H, 32H,
40H 41H 42H
;分显示单元43H-44H
;秒显示单元41H-42H
R0, ADD1 C A,
#60H,
OUTT
#41H
;秒调整
;分调整
;时调整
STOP
ACALL CLR0
13
MOV MOV MOV RET STOP: CLR RET
33H, 43H
;时显示单元44-45H
34H, 44H 35H, 45H
TR0 ;关电子钟并跳出
;运行电子钟
RUN: LCALL TIME OUT: SETB EA ; RET
;;;;;;;;;;;运行电子钟;;;;;;;;;;; TIME: SETB EA
MOV TL0, #0B0H
MOV TH0, #3CH MOV R4, #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: JC
OUTT0 ACALL
CLR0
ADDMM ;1无键按下或完成功能跳出;3CB0H
;50ms,20次循环 ;启动定时器0
;重新设定定时初值 ;启动定时器0 ;1秒到
;20次计数
;秒十位 ;加1程序
分到
14
MOV CLR R0, C A, #43H
;加1程序
ACALL CJNE ADD1
#60H, ADDHH ;1小时到
ADDHH: JC OUTT0 ACALL CLR0 MOV R0, #45H
ACALL ADD1
CLR C CJNE A, #24H, HOUR ;1HOUR: JC OUTT0
ACALL
CLR0 OUTT0: MOV 30H, 40H
MOV 31H, 41H MOV 32H, 42H
MOV 33H,
43H
MOV 34H, 44H
MOV 35H, 45H POP PSW POP
ACC SETB
ET0
RETI
;;;;;;;;;;;时间清零子程序;;;;;;;;;;; CLR0: CLR A MOV @R0, A DEC R0
MOV @R0,
A
RET
;;;;;;;;;;;加一子程序;;;;;;;;;;; ADD1: MOV A, @R0 DEC
R0
15
加1程序
天到
秒显示单元41H-42H
分显示单元43H-44H
时显示单元44-45H
取十位
;;;; ;
SWAP A ORL A, @R0 ADD A,
#01H DA A
MOV R3, A ANL A, #0FH
MOV @R0, A MOV
A,
R3
INC R0 SWAP A ANL A, #0FH MOV @R0,
A MOV A,
R3
RET
;;;;;;;;;;;显示子程序(30H);;;;;;;;;;;
DISP: MOV R1, #30H ; MOV R2, #20H ;DISP1: MOV P2, R2 ; MOV DPTR, #TAB MOV A, @R1 MOVC
A, @A+DPTR
LCALL SJ1 MOV P0, A
LCALL DJ1
ACALL DL ; MOV A, R2 JB ACC.0, DISP2 RR A INC R1 MOV R2, A AJMP DISP1
DISP2: RET
16
;组合十位与个位 ;加1 ;十进制调整 ;暂存 ;屏蔽十位 ;放入个位单元 ;取值
;屏蔽个位 ;放入十位单元 ;数值放入A中等待判断
显示缓冲存储单元首地址从右至左显示 送位控 ;送段控
延时