?? clock.asm
字號:
;#################
DISPBUFFER DATA 30H
TEMPKey DATA 3DH
FLASHPOS DATA 3EH
RAMPOS DATA 3FH
DISPBITS DATA 40H
MAX DATA 41H
;SCOUNT1 DATA 42H
;SCOUNT2 DATA 43H
FLASHCOUNT DATA 44H
DISPNO DATA 45H
;FUNNO DATA 46H
KEYOLD DATA 47H
KEYLENGTH DATA 48H
LOOPNO DATA 4BH
;##################
;MAX1FLAG BIT 23H.0
;MAX2FLAG BIT 23H.1
;MAX3FLAG BIT 23H.2
;MAX5FLAG BIT 23H.3
;MAX7FLAG BIT 23H.4
;MAX9FLAG BIT 23H.5
;PORT0FLAG BIT 24H.0
;PORT1FLAG BIT 24H.1
;PORT2FLAG BIT 24H.2
DISPFLAG BIT 25H.0
;DISPDATEFLAG BIT 25H.1
UPDATEDISPFLAG BIT 25H.2
INNORMalDISPFLAG BIT 25H.3
KEYRUNFLAG BIT 25H.4
KEYCONCLICKFLAG BIT 25H.5
FLASHFLAG BIT 25H.6
;WRDATEFLAG BIT 26H.0
;WRCLOCKFLAG BIT 26H.1
;HIGHFLAG BIT 26H.2
BLACKFLAG BIT 26H.3
K1FLAG BIT 26H.4
;K3FLAG BIT 26H.5
;K4FLAG BIT 26H.6
;K3DOWNFLAG BIT 26H.7
;################
ORG 0000H
AJMP INIT
ORG 000BH
AJMP INT1MS
ORG 001BH
AJMP INT15MS
;###################
ORG 0050H
INIT:
MOV TMOD,#11H
MOV TL1,#20H
MOV TH1,#0d1H
MOV IE,#0AH
MOV IP,#02H
MOV SP,#5FH
MOV R7,#48H
MOV R0,#18H
INITRAM:
MOV @R0,#00H
INC R0
DJNZ R7,INITRAM
;--------------------------
MOV R0,#0AH
MOVX A,@R0
MOV R1,A
ANL A,#70H
XRL A,#20H
JZ START1
MOV A,R1
CLR ACC.4
SETB ACC.5
CLR ACC.6
MOVX @R0,A
MOV R0,#0BH
MOV A,#02H
MOVX @R0,A
MOV R0,#01H
MOV A,#00H
MOVX @R0,A
MOV R0,#03H
MOV A,#0ffH
MOVX @R0,A
MOV R0,#05H
MOVX @R0,A
;---------------------
START1:
SETB TR1
SETB EA
WAITINT:
SJMP WAITINT
;####################
INT15MS:
MOV TL1,#20H
MOV TH1,#0d1H
MOV TL0,#0ffH
MOV TH0,#0FfH
SETB DISPFLAG
;mov dispbits,#00h
SETB TR0
jb INNORMALDISPFLAG,readkey
MOV R0,#0CH
MOVX A,@R0
MOV 20H,A
JNB 20H.4,READKEY ;20H.4--SECONDUPDATEFLAG
LCALL RDCLOCKDATE
setb updatedispflag
;mov dispno,#01h
READKEY:
LCALL KEYSCAN
WAITINT1MS:
JB DISPFLAG,WAITINT1MS
LCALL UPDATEDISPBUFFER
RETI
;###################
INT1MS:
MOV TL0,#18H
MOV TH0,#0FCH
PUSH PSW
PUSH ACC
SETB PSW.3
MOV A,DISPBITS
ADD A,#30H; 30H--DISPBUFFER
MOV R0,A
MOV P2,@R0
INC DISPBITS
MOV A,DISPBITS
XRL A,#0bH
JZ DISPEND
SJMP RETURN1MS
DISPEND:
MOV DISPBITS,#00H
CLR DISPFLAG
CLR TR0
RETURN1MS:
POP ACC
POP PSW
RETI
;################
RDCLOCKDATE:
MOV R0,#0BH
MOVX A,@R0
SETB ACC.7
MOVX @R0,A
MOV R0,#00H
MOVX A,@R0
MOV R1,#18H
MOV @R1,A
MOV R0,#02H
MOVX A,@R0
INC R1
MOV @R1,A
MOV R0,#04H
MOVX A,@R0
INC R1
MOV @R1,A
MOV R6,#03H
INC R0
RDDATE:
INC R0
INC R1
MOVX A,@R0
MOV @R1,A
DJNZ R6,RDDATE
MOV R0,#0BH
MOVX A,@R0
CLR ACC.7
MOVX @R0,A
RET
;################
WRCLOCKDATE:
CLR EA
MOV R0,#0BH
MOVX A,@R0
SETB ACC.7
MOVX @R0,A
WRCLOCK:
MOV R1,#18H
MOV R0,#00H
MOV A,@R1
MOVX @R0,A
MOV R0,#02H
INC R1
MOV A,@R1
MOVX @R0,A
MOV R0,#04H
INC R1
MOV A,@R1
MOVX @R0,A
WRDATE:
MOV R6,#03H
MOV R1,#1BH
MOV R0,#06H
REWRDATE:
MOV A,@R1
MOVX @R0,A
INC R0
INC R1
DJNZ R6,REWRDATE
RETURNWR:
MOV R0,#0BH
MOVX A,@R0
CLR ACC.7
MOVX @R0,A
SETB EA
RET
;################
;---------------------------------------------
KEYSCAN:
ORL P1,#07H
MOV A,P1
ANL A,#07H
XRL A,#07H ;低3位
JZ KEYUP ;沒有按鍵轉(zhuǎn)走
XRL A,#07H
CJNE A,keyold,KEYne ;是否與上次讀鍵相等,不等則轉(zhuǎn)走
jnb acc.0,KEYIS1
JNB ACC.1,KEYIS2
JNB ACC.2,KEYIS3
AJMP RETURNKEY
KEYIS1: ;設(shè)置鍵
MOV R7,#00H
CLR KEYCONCLICKFLAG
aJMP KEYYEAR
KEYIS2: ;移位鍵(k2)
MOV R7,#01H
CLR KEYCONCLICKFLAG
aJMP KEYYEAR
KEYIS3: ;增一鍵,允許連擊
MOV R7,#02H
SETB KEYCONCLICKFLAG
KEYYEAR:
INC KEYLENGTH ;鍵年齡增1
JNB KEYRUNFLAG,KEYRUN ;是否已執(zhí)行,沒執(zhí)行轉(zhuǎn)執(zhí)行
JNB KEYCONCLICKFLAG,RETURNKEY ;已執(zhí)行,判斷是否允許連擊,不允許轉(zhuǎn)退出
MOV A,KEYLENGTH ;允許連擊,則判斷鍵年齡是否到
clr c
subb A,#15H ;允許連擊,則判斷鍵年齡(一秒擊四次--250ms一次)是否到,不到轉(zhuǎn)退出
jc returnkey
KEYRUN:
SETB KEYRUNFLAG ;設(shè)置運行標(biāo)志
MOV KEYLENGTH,#00H ;鍵年齡清0
MOV DPTR,#KEYVALUERUN ;
MOV A,R7
RL A
JMP @A+DPTR
KEYVALUERUN:
AJMP K1
AJMP K2
AJMP K3
KEYUP: ;按鍵全部抬起
MOV A,#07H ;恢復(fù)本次讀鍵值
KEYNE: ;相臨兩次讀鍵值不等,即沒有按鍵
MOV KEYLENGTH,#00H ;鍵年齡清零
CLR KEYRUNFLAG ;清已運行標(biāo)志
MOV keyold,A ;保存本次按鍵值
RETURNKEY:
RET
;##################
K1:
cpl k1flag
jnb k1flag,k1up
MOV A,1dh
SWAP A ;
ANL A,#0FH ;取月的十位
MOV TEMPKEY,A ;放入調(diào)整區(qū)
;MOV DISPNO,#02H ;設(shè)置顯示號
MOV LOOPNO,#00H ;設(shè)置位置號為0
MOV FLASHPOS,#30H ;閃爍位對應(yīng)顯緩30H
mov max,#02h
setb innormaldispflag
clr UPDATEDISPFLAG ;清更新顯緩標(biāo)志
SETB FLASHFLAG ;設(shè)置閃爍標(biāo)志
MOV FLASHCOUNT,#00H
LJMP RETURNKEY
k1up:
SETB UPDATEDISPFLAG
MOV DISPNO,#01H
CLR INNORMALDISPFLAG ;清非正常標(biāo)志
clr flashflag
lcall movekey
lcall wrclockdate
LJMP RETURNKEY
;###########################
K2:
jb k1flag,k20
ljmp returnkey
k20:
lcall movekey
;JB K2FLAG,K22
;SETB K2FLAG
;K22:
SETB UPDATEDISPFLAG
;MOV DISPNO,#02H ;設(shè)置顯示號
LJMP RETURNKEY
;#################
movekey:
INC LOOPNO
MOV A,LOOPNO
clr c
subb a,#0bh
Jc K21
MOV LOOPNO,#00H
K21:
MOV A,LOOPNO
RL A
MOV DPTR,#K22
JMP @A+DPTR
K22:
AJMP POS1
AJMP POS2
AJMP POS3
AJMP POS4
AJMP POS5
AJMP POS6
AJMP POS7
AJMP POS8
AJMP POS9
AJMP POS10
AJMP POS11
RETURNK2:
ret
;###################
POS1:
MOV A,1bh
aNL A,#0F0H
ORL A,TEMPKEY
MOV 1bh,A
MOV A,1dh
ANL A,#0F0H
SWAP A
MOV TEMPKEY,A
MOV FLASHPOS,#30H
MOV MAX,#02H
LJMP RETURNK2
POS2:
MOV A,1dh
ANL A,#0FH
SWAP A
ORL A,TEMPKEY
SWAP A
MOV 1dh,A
MOV A,1dh
ANL A,#0FH
MOV TEMPKEY,A
MOV FLASHPOS,#31H
MOV MAX,#0AH
LJMP RETURNK2
POS3:
MOV A,1dh
aNL A,#0F0H
oRL A,TEMPKEY
MOV 1dh,A
MOV A,1ch
ANL A,#0F0H
SWAP A
MOV TEMPKEY,A
MOV FLASHPOS,#32H
MOV MAX,#04H
LJMP RETURNK2
POS4:
MOV A,1ch
ANL A,#0FH
SWAP A
ORL A,TEMPKEY
SWAP A
MOV 1ch,A
MOV A,1ch
ANL A,#0FH
MOV TEMPKEY,A
MOV FLASHPOS,#33H
MOV MAX,#0AH
LJMP RETURNK2
POS5:
MOV A,1ch
aNL A,#0F0H
oRL A,TEMPKEY
MOV 1ch,A
MOV A,1ah
ANL A,#0F0H
SWAP A
MOV TEMPKEY,A
MOV FLASHPOS,#34H
MOV MAX,#03H
LJMP RETURNK2
POS6:
MOV A,1ah
ANL A,#0FH
SWAP A
ORL A,TEMPKEY
SWAP A
MOV 1ah,A
MOV A,1ah
ANL A,#0FH
MOV TEMPKEY,A
MOV FLASHPOS,#35H
MOV MAX,#0AH
LJMP RETURNK2
POS7:
MOV A,1ah
aNL A,#0F0H
oRL A,TEMPKEY
MOV 1ah,A
MOV A,19h
ANL A,#0F0H
SWAP A
MOV TEMPKEY,A
MOV FLASHPOS,#36H
MOV MAX,#06H
LJMP RETURNK2
POS8:
MOV A,19h
ANL A,#0FH
SWAP A
ORL A,TEMPKEY
SWAP A
MOV 19h,A
MOV A,19h
ANL A,#0FH
MOV TEMPKEY,A
MOV FLASHPOS,#37H
MOV MAX,#0AH
LJMP RETURNK2
POS9:
MOV A,19h
aNL A,#0F0H
oRL A,TEMPKEY
MOV 19h,A
MOV A,18h
ANL A,#0F0H
SWAP A
MOV TEMPKEY,A
MOV FLASHPOS,#38H
MOV MAX,#06H
LJMP RETURNK2
POS10:
MOV A,18h
ANL A,#0FH
SWAP A
ORL A,TEMPKEY
SWAP A
MOV 18h,A
MOV A,18h
ANL A,#0FH
MOV TEMPKEY,A
MOV FLASHPOS,#39H
MOV MAX,#0AH
LJMP RETURNK2
POS11:
MOV A,18h
aNL A,#0F0H
oRL A,TEMPKEY
MOV 18h,A
MOV A,1bh
ANL A,#0FH
MOV TEMPKEY,A
MOV FLASHPOS,#3aH
MOV MAX,#08H
LJMP RETURNK2
;#################
K3:
jnb k1flag,returnk3
INC TEMPKEY
clr c
mov a,tempkey
SUBB A,MAX
JC RETURNK3
MOV TEMPKEY,#00H
MOV A,LOOPNO
CJNE A,#0AH,RETURNK3
MOV TEMPKEY,#01H
RETURNK3:
LJMP RETURNKEY
;######################
UPDATEDISPBUFFER:
JB UPDATEDISPFLAG,dispno1
LJMP FLASH
dispno1:
;mov a,dispno
;CJNE A,#01H,DISPNO2
MOV A,1dh
ANL A,#0F0H
SWAP A
ORL A,#00H
MOV 30H,A
MOV A,1dh
ANL A,#0FH
ORL A,#10H
MOV 31H,A
MOV A,1ch
ANL A,#0F0H
SWAP A
ORL A,#20H
MOV 32H,A
MOV A,1ch
ANL A,#0FH
ORL A,#30H
MOV 33H,A
MOV A,1ah
ANL A,#0F0H
SWAP A
ORL A,#40H
MOV 34H,A
MOV A,1ah
ANL A,#0FH
ORL A,#50H
MOV 35H,A
MOV A,19h
ANL A,#0F0H
SWAP A
ORL A,#60H
MOV 36H,A
MOV A,19h
ANL A,#0FH
ORL A,#70H
MOV 37H,A
MOV A,18h
ANL A,#0F0H
SWAP A
ORL A,#80H
MOV 38H,A
MOV A,18h
ANL A,#0FH
ORL A,#90H
MOV 39H,A
MOV A,1bh
ANL A,#0FH
ORL A,#0a0H
MOV 3aH,A
;ljmp flash
;DISPNO2:
;CJNE A,#02H,FLASH
FLASH:
CLR UPDATEDISPFLAG
JnB INNORMALDISPFLAG,RETURNUPDATE ;D1
;clr flashflag
;INC FLASHCOUNT
;MOV A,FLASHCOUNT
;clr c
;subb A,#32H
;Jc RETURNUPDATE
;MOV FLASHCOUNT,#00H
;SJMP RETURNUPDATE
D1:
INC FLASHCOUNT
MOV A,FLASHCOUNT
clr c
subb A,#15H
Jc d2
CPL BLACKFLAG
MOV FLASHCOUNT,#00H
d2:
MOV R0,FLASHPOS
MOV A,FLASHPOS
ANL A,#0FH
SWAP A
JB BLACKFLAG,BLACK
ORL A,TEMPKEY
SJMP SETFLASH
BLACK:
ORL A,#0FH
SETFLASH:
MOV @R0,A
RETURNUPDATE:
RET
END
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -