字段 码
DB
0F7H ,40H,79H,24H,30H,19H,12H,02H,78H,00H,10H,0C8H,8EH;\加点的0-9,n,F
TAB1: DB 32H,30H,32H,31H,32H,31H,32H,32H,31H,0,0,0,0,0,0 DB 32H,31H,32H ;闰年的表
TAB2: DB 32H,29H,32H,31H,32H,31H,32H,32H,31H,0,0,0,0,0,0 DB 32H,31H,32H ;平年的表
D1MS:MOV R7,#240 ;延时1毫秒子程序 D_1:NOP NOP
DJNZ R7,D_1 RET
D1S:MOV R7,#8 ;软件延时1S子程序
D1S2:MOV R6,#200 ;(200*(2+600+2)+3+2)*8*12/11.0592MHZ=1.048S D1S1:MOV R5,#200 D1S0:NOP DJNZ R5,D1S0 DJNZ R6,D1S1 DJNZ R7,D1S2 RET
;***********************平闰年判断*************************** RUNPING:MOV A, 3FH MOV B,#10 ANL A,#0F0H SWAP A MUL AB MOV B,A MOV A, 3FH ANL A,#0FH ADD A,B MOV B,#4 DIV AB MOV A,B JZ RUN MOV 53H,#00H RET
RUN: MOV 53H,#01H RET
;*****************************闪烁子程序***************** FLASH:JBC 64H,G3 RET
G3:MOV A,52H
CJNE A,#01H,G4 MOV 25H,#0FFH RET
G4:CJNE A,#02H,G5 MOV 25H,#0FFH RET
G5:MOV A,25H CPL A
JZ G6 ;为0则转移25H=0FFH MOV 25H,#0FFH RET
G6: MOV 25H,26H RET
;****************************键盘扫描******************** SKEY:MOV 43H,44H ;滚动存储 MOV 44H,45H MOV 45H,46H MOV 46H,47H MOV A,#81H ;10000001 MOV DPTR,#0FEFFH MOVX @DPTR,A ;行线输出,列线输入 MOV A,#00H
MOV DPTR,#0FEFEH MOVX @DPTR,A ;行线输出0 MOVX A,@DPTR ANL A,#0FH
MOV B,A ;输入列线值 MOV A,#88H ;10001000 MOV DPTR,#0FEFFH MOVX @DPTR,A ;行线输入,列线输出 MOV A,#00H
MOV DPTR,#0FEFEH MOVX @DPTR,A ;列线输出0 MOVX A,@DPTR
ANL A,#0F0H ;输入行线值 ORL B,A ;行、列值合并 MOV 47H,#0 ;存键值单元初值 MOV DPTR,#KTAB MOV R7,#16 ;4X4=16个键
VK0:CLR A ;查表,将状态值转换为键编号 MOVC A,@A+DPTR CJNE A,B,VK1 SJMP VKF ;若有相同,返回(46H)=键值 ;键编码表,对应每个键的行列状态值,该值唯一。
KTAB:DB 0EEH,0EDH,0EBH,0E7H DB 0DEH,0DDH,0DBH,0D7H DB 0BEH,0BDH,0BBH,0B7H DB 7EH,7DH,7BH,77H
VK1:INC 47H ;键值+1 INC DPTR DJNZ R7,VK0
MOV 47H,#0FFH ;若无键,返回(46H)=FFH VKF:MOV A,43H ;键功能处理
CJNE A,44H,VKD ;比较42H~46H是否同 CJNE A,45H,VKD CJNE A,46H,VKD CJNE A,47H,VKD ;不同,放弃 MOV 42H,A ;相同,存入42H MOV A,41H CJNE A,#0FFH,VK2 MOV A,42H CJNE A,#0FFH,VK3 ;判断是否FFH?非FFH VK2:MOV 41H, 42H VKD:RET
VK3:MOV A,42H ;取键值 MOV 41H,A ADD A,42H ADD A,42H ;键值?3
MOV DPTR,#VKT ;根据键值跳转 JMP @A+DPTR VKT:LJMP K0 LJMP K1 LJMP K2 LJMP K3 LJMP K4 LJMP K5 LJMP K6 LJMP K7 LJMP K8 LJMP K9 LJMP K10 LJMP K11 LJMP K12 LJMP K13 LJMP K14 LJMP K15
;*******************************键功能处理******************
K0:MOV A,52H ;1 CJNE A,#01H,W1 RET
W1:CJNE A,#02H,W2 RET
W2:CJNE A,#40H,S1 ;K0键功能 MOV 26H,#0EFH
MOV 35H,#01H ;年十位 MOV 52H,#41H MOV R4,#0 RET
S1:CJNE A,#41H,S2 ;年个位 MOV 26H,#0F7H MOV 34H,#0CH MOV 52H,#42H MOV R4,#0 RET
S2:CJNE A,#42H,S3 ;月十位 MOV 26H,#0FBH MOV 33H,#01H MOV 52H,#43H MOV R4,#0 RET
S3:CJNE A,#43H,S4 ;月个位 MOV 26H,#0FDH MOV 32H,#0CH MOV 52H,#44H MOV R4,#0 RET
S4:CJNE A,#44H,S5 ;日十位 MOV 26H,#0FEH MOV 31H,#01H MOV 52H,#45H MOV R4,#0 RET
S5:CJNE A,#45H,K0_0 ;日个位 MOV R4,#0 MOV A,31H CJNE A,#03H,N2 MOV A,32H
CLR C ;带位减 SUBB A,#0BH MOV B,A
(重)
相关推荐: