📄 8279.asm
字号:
SH_LEFT DATA 58H
DISP_FLASH DATA 59H
SAVE_FLASH DATA 5AH
FLASH BIT 00H
FLASH1 BIT 01H
NIAN BIT 02H
SHIJIAN BIT 03H
bobao bit 04h
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP INTT0
ORG 0023H
LJMP URAT
ORG 0030H
MAIN:mov sp,#70h
MOV R0,#7FH
CLR_RAM:MOV @R0,#00H
DJNZ R0,CLR_RAM
MOV @R0,#00H
clr bobao
MOV SH_LEFT,#48H
MOV TMOD,#00000001B
MOV TH0,#00H
MOV TL0,#00H
MOV SCON,#10111000B
MOV PCON,#10000000B
MOV IE,#92H
SETB TR0
LCALL INIT_8279
MOV R0,#40H
MOV R2,#08H
MAIN3:MOV @R0,#00H
INC R0
DJNZ R2,MAIN3
MAIN1:JNB FLASH,L1
setb FLASH1
MOV R1,SH_LEFT
MOV SAVE_FLASH,@R1
MOV @R1,#1AH
L1:LCALL DISP
JNB FLASH1,L2
MOV R1,SH_LEFT
MOV @R1,SAVE_FLASH
CLR FLASH1
L2:LCALL KEY_B
CJNE A,#0FFH,MAIN2
AJMP MAIN1
MAIN2: CJNE A,#0AH,$+1
JNC SET_DATE
MOV R1,SH_LEFT
MOV @R1,A
LJMP MAIN1
SET_DATE: CJNE A,#0AH,KEY_BB ;a键闪烁位左移键
DEC SH_LEFT
MOV A,SH_LEFT
CJNE A,#40H,KEY_AA
MOV SH_LEFT,#48H
KEY_AA:LJMP MAIN1
KEY_BB:CJNE A,#0BH,KEY_CC ;b键年月日设置
SETB NIAN
CLR SHIJIAN
MOV SH_LEFT,#47H
MOV 40H,#01
MOV 41H,#26
MOV 42H,53H ;年设置
MOV 43H,52H
MOV 44H,51H ;星期设置
MOV 45H,50H
MOV 46H,4fH ;月设置
MOV 47H,4eH
LJMP MAIN1
KEY_CC:CJNE A,#0CH,KEY_DD ;C键时分秒设置
CLR NIAN
SETB SHIJIAN
MOV 40H,#02
MOV 41H,#26
MOV 42H,4dH ;日设置
MOV 43H,4cH
MOV 44H,4bH ;时设置
MOV 45H,4aH
MOV 46H,49H ;分设置
MOV 47H,48H
MOV SH_LEFT,#47H
LJMP MAIN1
KEY_DD:CJNE A,#0DH,KEY_EE ;D键确定键
JNB NIAN,KEY_2D
MOV 53H,42H
MOV 52H,43H
MOV 51H,44H
MOV 50H,45H
MOV 4fH,46H
MOV 4eH,47H
clr nian
LJMP KEY_4D
KEY_2D:JNB SHIJIAN,KEY_3D
MOV 4dH,42H
MOV 4cH,43H
MOV 4bH,44H
MOV 4aH,45H
MOV 49H,46H
MOV 48H,47H
clr shijian
KEY_4D:MOV SH_LEFT,#48H
MOV R0,#40H
MOV R2,#08H
KEY_1D:MOV @R0,#00H
INC R0
DJNZ R2,KEY_1D
KEY_3D:LJMP MAIN1
KEY_ff:CJNE A,#0fH,out ;E键播报时间设定
setb bobao
mov 40h,#03h
mov 41h,#26
mov 42h,#26
mov 43h,#0
mov 44h,#0
mov 45h,#26
mov 46h,#0
mov 47h,#0
LJMP MAIN1
KEY_ee:CJNE A,#0eH,KEY_ff ;f键发送键
jb bobao,key_1f
lcall sett_data1
lcall send
ljmp out
key_1f: lcall sett_data2
lcall send
clr bobao
out:LJMP MAIN1
;8279初始化子程序
send:mov r5,#08h
mov r0,#30h
send1:mov a,@r0
mov sbuf,a
lcall dealyy
inc r0
djnz r5,send1
ret
DEALYY: MOV R7,#0AH
DEALY1: MOV R6,#0FFH
DEALY2: DJNZ R6,DEALY2
DJNZ R7,DEALY1
RET
sett_data1:mov 30h,#00h
mov r7,#6
mov r0,#31h
mov r1,#48h
sett1: mov a,@r1
mov r6,a
inc r1
mov a,@r1
swap a
orl a,r6
mov @r0,a
inc r1
inc r0
djnz r7,sett1
mov 37h,#00h
ret
sett_data2:mov r7,#8
mov r0,#30h
mov a,#00h
sett2: mov @r0,a
inc r0
djnz r7,sett2
mov a,43h
swap a
orl a,44h
mov 32h,a
mov a,46h
swap a
orl a,47h
mov 31h,a
mov 37h,#0ffh
ret
URAT:JBc RI,RCV1
CLR TI
RCV1:reti
INIT_8279: MOV DPTR,#0FFC1H
MOV A,#0D1H
MOVX @DPTR,A
LP0: MOVX A,@DPTR
JB ACC.7,LP0
MOV A,#2AH
MOVX @DPTR,A
MOV A,#00H
MOVX @DPTR,A
RET
DISP: MOV DPTR,#0FFC1H
MOV A,#90H
MOVX @DPTR,A
MOV R0,#40H
MOV R3,#08
LP: MOV DPTR,#TAB
MOV A,@R0
MOVC A,@A+DPTR
MOV DPTR,#0FFC0H
MOVX @DPTR,A
INC R0
DJNZ R3,LP
RET
;显示代码表
TAB: DB 0F3H,60H,0B5H,0F4H,66H,0D6H,0D7H,70H,0F7H,0F6H ;0--9
; 0 1 2 3 4 5 6 7 8 9
DB 77H,0C7H,93H,0E5H,97H,17H ;10--15
; A B C D E F
DB 0FBH,68H,0BDH,0FCH,6EH,0DEH,0DFH,078H,0FFH,0FEH,00H ;16--26
; 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 空
KEY_B: MOV DPTR,#0FFC1H
MOVX A,@DPTR
ANL A,#0FH
JNZ KEY_B1
MOV A,#0FFH
RET
KEY_B1: MOV A,#40H
MOVX @DPTR,A
MOV DPTR,#0FFC0H
MOVX A,@DPTR
MOV R0,A
MOV DPTR,#KEY_TAB
MOV R7,#10H
MOV R2,#00H
KEY_B2: CLR A
MOVC A,@A+DPTR
CLR C
SUBB A,R0
JZ KEY_B3
INC DPTR
INC R2
DJNZ R7,KEY_B2
KEY_B3: MOV A,R2
RET
; 键值表
KEY_TAB: DB 03H,02H,01H,00H,0BH,0AH,09H,08H
; 0 1 2 3 4 5 6 7
DB 13H,12H,11H,10H,1BH,1AH,19H,18H
; 8 9 A B C D E F
INTT0:
PUSH ACC
PUSH PSW
SETB RS0
CLR RS1
INC DISP_FLASH
MOV A,DISP_FLASH
CJNE A,#04H,JUMP1
JUMP1:JC JUMP_FLASH
CPL FLASH
MOV DISP_FLASH,#00H
JUMP_FLASH:MOV TH0,#00H
MOV TL0,#00H
POP PSW
POP ACC
RETI
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -