📄 test1001.asm
字号:
MOV TEPOINT,#15 ; E ,LCD左起第四位
MOV A,TEPOINT
MOVC A,@A+DPTR
MOV DGRAM13,A
MOV A,#21 ; r ,LCD左起第五位
MOVC A,@A+DPTR
MOV DGRAM12,A
MOV A,#21 ; r ,LCD左起第六位
MOVC A,@A+DPTR
MOV DGRAM11,A
MOV TEPOINT,#20 ; o ,LCD左起第七位
MOV A,TEPOINT
MOVC A,@A+DPTR
MOV DGRAM10,A
MOV TEPOINT,#21 ; r ,LCD左起第八位
MOV A,TEPOINT
MOVC A,@A+DPTR
MOV DGRAM9,A
ACALL DISPLAY
RET
;---------------------------------------------------------------
; Key Scan & Control
;---------------------------------------------------------------
;---------------------------------------------------------------
; Read HT1621 Memory RAM0
;---------------------------------------------------------------
READ_DRM:
MOV R0,#DISPADR
; MOV A,@R0 ;
; ORL A,#01000000B ;
; ANL A,#11011111B ;
; MOV @R0,A ; Convert 101(WR) to 110(RD) Mode
MOV ST1,#9
ACALL SEND_BIT
; MOV LOOPREG,#8
mov loopreg,#4
CLR A
SETB MSG
LOP_RD:
CLR RD_
NOP
MOV C,MSG
NOP
SETB RD_
RLC A
DJNZ LOOPREG,LOP_RD
SETB CS_ ; Finish data Read, Initialize interface
RET
;---------------------------------------------------------------
; HT1621 Memory Read_Modify_Write Operation
;---------------------------------------------------------------
RD_M_WR:
MOV R0,#DISPADR
MOV ST1,#9
ACALL SEND_BIT
MOV COUNTER,#4
LOOP_MD:
MOV LOOPREG,#4
CLR A
SETB MSG
LOOP_RD:
CLR RD_
NOP
MOV C,MSG
NOP
SETB RD_
RLC A
DJNZ LOOPREG,LOOP_RD
SWAP A
CPL A
MOV LOOPREG,#4
LOOP_WR:
CLR WR_
RLC A
MOV MSG,C
NOP
SETB WR_
DJNZ LOOPREG,LOOP_WR
DJNZ COUNTER,LOOP_MD
SETB CS_ ; Finish data Read, Initialize interface
MOV DLYTIME,#40
ACALL DELAY
RET
;---------------------------------------------------------------
; Clear Display Data area
;---------------------------------------------------------------
CLR_DDRAM:
MOV R0,#DISPRAM
MOV LOOPREG,#16
LOOPCLR:
MOV @R0,#0
INC R0
DJNZ LOOPREG,LOOPCLR
RET
;---------------------------------------------------------------
; Write Display Data to Display at Spacery address
;---------------------------------------------------------------
DISPLAY:
MOV R0,#DISPADR
MOV ST1,#9
LCALL SEND_BIT
MOV R0,#DISPRAM
MOV ST1,#128
LCALL SEND_BIT
SETB CS_ ; Reset Display, De-select Display
RET
;---------------------------------------------------------------
; Display Command_Code Move to RAM area
;---------------------------------------------------------------
LOAD_CODE:
MOV LOOPREG,#16
MOV DPTR,#TABLE_ID
MOV R0,#CODERAM
LPLOADID: MOV A,#00
MOVC A,@A+DPTR
MOV @R0,A
INC R0
INC DPTR
DJNZ LOOPREG,LPLOADID
RET
;----------------------------------
LOAD_ADDR:
MOV LOOPREG,#2
MOV DPTR,#TABLE_AD
MOV R0,#DISPADR
LPLOADAD: MOV A,#00
MOVC A,@A+DPTR
MOV @R0,A
INC R0
INC DPTR
DJNZ LOOPREG,LPLOADAD
RET
;---------------------------------------------------------------
; Display Device Code and data BIT translate
;---------------------------------------------------------------
SEND_BIT:
CLR CS_ ; CHIP ENABLE
DTW: MOV ST2,#8
MOV A,@R0
CLR C
DW_CLK:
CLR WR_
RLC A
MOV MSG,C
NOP
SETB WR_
NOP
DJNZ ST1,CONT
RET
CONT: DJNZ ST2,DW_CLK
INC R0
JMP DTW
;---------------------------------------------------------------
; Normal time delay
;---------------------------------------------------------------
DELAY: ; Delay_Z_Time = Dlytime * Delay_time
MOV R3,#40 ;
MOV R2,#0FAH ;
DELAY_Z:
DJNZ R2,$ ; T = 1uS*250*2 =0.5mS
DJNZ R3,DELAY_Z ; T = 40*(500+1*2)=20.08mS
DJNZ DLYTIME,DELAY
RET
;---------------------------------------------------------------
; RTC HEX to BCD and move to DDRAM area
;---------------------------------------------------------------
TIME_DUMP: ;在LCD屏中央位置显示:时—分—秒
ACALL CLR_DDRAM
MOV DPTR,#TABLE_DD
MOV A,HOUR
MOV B,#10
DIV AB
MOVC A,@A+DPTR
MOV DGRAM12,A
MOV A,B
MOVC A,@A+DPTR
MOV DGRAM11,A
MOV DGRAM10,#00000100B ;显示:—
MOV A,MINU
MOV B,#10
DIV AB
MOVC A,@A+DPTR
MOV DGRAM9,A
MOV A,B
MOVC A,@A+DPTR
MOV DGRAM8,A
MOV DGRAM7,#00000100B
MOV A,SECO
MOV B,#10
DIV AB
MOVC A,@A+DPTR
MOV DGRAM6,A
MOV A,B
MOVC A,@A+DPTR
MOV DGRAM5,A
RET
;***************************************************************
; Timer0 Interrupt
;***************************************************************
TIMER0_INT:
MOV TL0,#11011100B ; RESET TIMER0
MOV TH0,#00001011B
PUSH ACC
INC SYM ; 1/16 S +1
MOV A,SYM
CJNE A,#16,RETURN
MOV SYM,#0
JNB DISP,SKIP_CNT ; 时间显示使能位为0,不显示时间。
ACALL TIME_DUMP
ACALL DISPLAY
SKIP_CNT:
INC SECO ; S+1
MOV A,SECO
CJNE A,#60,RETURN
MOV SECO,#0
INC MINU ; M+1
MOV A,MINU
CJNE A,#60,RETURN
MOV MINU,#0
INC HOUR ; H+1
MOV A,HOUR
CJNE A,#24,RETURN
MOV HOUR,#00H
SJMP RETURN
RETURN:
POP ACC
RETI
;===============================================================
; CODE and Digital CHAR module TABLE area
;---------------------------------------------------------------
TABLE_ID:
DB 10000000B ; 1 Byte
DB 00100000B ; Turn ON system oscillator
DB 10000011B ; 3 Byte
DB 00000000B ; On-chip RC oscillator
DB 10000101B ; 5 Byte
DB 00100000B ; 1/3 Bias, 1/4 Duty LCD type
DB 10000000B ; 7 Byte
DB 01100000B ; LCD ON
DB 10001100B ; 9 Byte
DB 00000000B ; TONE 2K
DB 10000001B ; 11 Byte
DB 00100000B ; TONE ON
DB 10000001B ; 13 Byte
DB 00000000B ; TONE OFF
DB 10010001B ; 15 Byte
DB 00000000B ; IRQ EN
DB 10000000B ; --->50H
DB 11100000B ; WDT EN
TABLE_AD:
DB 10100000B ; Display first address is 00H
DB 00000000B ; First Output is SEG0
TABLE_DD:
DB 11101011B ; 0
DB 01100000B ; 1
DB 11000111B ; 2
DB 11100101B ; 3
DB 01101100B ; 4
DB 10101101B ; 5
DB 10101111B ; 6
DB 11100000B ; 7
DB 11101111B ; 8
DB 11101101B ; 9
DB 00010000B ; DOT
DB 11101110B ; A
DB 00101111B ; b
DB 00000111B ; c
DB 01100111B ; d
DB 10001111B ; E
DB 10001110B ; F
DB 00000000B ; EMPTY
DB 11111111B ; FULL
DB 00000100B ; -
DB 00100111B ; o
DB 00000110B ; r
DB 10101011B ; G
;===============================================================
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -