📄 tlcm101.asm
字号:
DB 00000000B
DB 01100010B ; U ; 21
DB 11000000B
DB 01101000B ; N ; 22
DB 11000000B
DB 01100010B ; L ; 23
DB 00000000B
DB 01000110B ; Y ; 24
DB 11000000B
;----------------------------------------------------------
DELAY: ; DLYTIME *
MOV DLY0,#100 ; 1uS At 12MHz
DLYLOOP: MOV DLY1,#56 ; 1uS
DJNZ DLY1,$ ; 2uS * (DLY1)
DJNZ DLY0,DLYLOOP ; 2uS
DJNZ DLYTIME,DELAY ; 2uS
RET
DL10mS:
MOV DLY0,#100
DL10: MOV DLY1,#49
DJNZ DLY1,$
DJNZ DLY0,DL10
RET
DELAYL:
MOV DLYTIME,#60
LCALL DELAY
RET
DELAY_Z: ; OLL1001A
DJNZ R2,$ ; T = 1uS*250*2 =0.5mS
DJNZ R3,DELAY_Z ; T = 40*(500+1*2)=20.08mS
DJNZ DLYTIME,DELAY
RET
;==========================================================
E0_INT:
PUSH ACC
PUSH PSW
PUSH DPH
PUSH DPL
JNB SYS_INIT,E0_RET
MOV KEY_ST,#5
LOOP_SK: MOV A,P1
ANL A,#0F0H
CJNE A,#0F0H,DLY10ms
DJNZ KEY_ST,LOOP_SK
AJMP E0_RET
DLY10ms: LCALL DL10MS
MOV R2,#0
MOV A,P1
LOOP_FK: RLC A
JNC ISKEY
INC R2
CJNE R2,#04H,LOOP_FK
AJMP E0_RET
ISKEY: MOV A,P1
ANL A,#0F0H
CJNE A,#0F0H,ISKEY
MOV A,R2
CJNE A,#0,NEXT1 ; Press S_P1.7 (ADJ_KEY)
CLR SYS_WAIT
INC TESTPRG
MOV A,TESTPRG
CJNE A,#13,SAVEPG
MOV TESTPRG,#0
SAVEPG:
mov saveprg,testprg
LCALL DISP_PRG
AJMP NEXT3_E
; AJMP E0_RET
NEXT1: CJNE A,#1,NEXT2 ; Press S_P1.6 (RUN_KEY)
SETB SYS_WAIT
AJMP E0_RET
NEXT2: CJNE A,#2,NEXT3 ; Press S_P1.5 (PAUSE_KEY)
CPL PAUSE_FG
AJMP E0_RET
NEXT3: CJNE A,#3,E0_RET ; Press S_P1.4 (HOME_KEY)
NEXT3_E: MOV SP,#52H
AJMP E0_DIR
E0_RET: POP DPL
POP DPH
POP PSW
POP ACC
E0_DIR: RETI
;----------------------------------------------------------
T0_INT:
MOV TL0,#11011100B ; RESET TIMER0
MOV TH0,#00001011B
PUSH ACC
PUSH PSW
INC SYM ; 1/16 S +1
MOV A,SYM
CJNE A,#16,T0_RET
MOV SYM,#0
INC SECO ; S+1
MOV A,SECO
CJNE A,#60,T0_RET
MOV SECO,#0
INC MINU ; M+1
MOV A,MINU
CJNE A,#60,T0_RET
MOV MINU,#0
INC HOUR ; H+1
MOV A,HOUR
CJNE A,#24,T0_RET
MOV HOUR,#00H
SJMP T0_RET
T0_RET:
POP PSW
POP ACC
RETI
;--------------------------------------------------------------------
T1_INT: ; Clock for 12232 EXT.OSC
MOV TL1,#11110000B
MOV TH1,#11111110B
CPL CLK12232
RETI
;--------------------------------------------------------------------
ORG 1000H
;*****************************************************************************
; TESTING PROGRAM AREA
;-----------------------------------------------------------------------------
; Character Type , Graphics Type , Segment Type
;=============================================================================
TEST_CHR0: ; Program for Character type LCM
; LCM Chip : HD44780
;=============================================================================
MOV DPTR,#CHR_COM
MOV LOOPREG,#8
LOOP_WRCOM:
MOV A,#0
MOVC A,@A+DPTR
PUSH DPH
PUSH DPL
MOV DPTR,#CHR_COM_W
MOVX @DPTR,A
ACALL CHKBUSY
POP DPL
POP DPH
INC DPTR
DJNZ LOOPREG,LOOP_WRCOM
;----------
MOV A,#01000000B
MOV DPTR,#CHR_COM_W
MOVX @DPTR,A ; Write CGRAM address
LCALL CHKBUSY
MOV DPTR,#CHR_DAT
MOV LOOPREG,#24
LOOP_WRCGR:
MOV A,#0
MOVC A,@A+DPTR
PUSH DPH
PUSH DPL
MOV DPTR,#CHR_DAT_W
MOVX @DPTR,A ; Write CGRAM data
LCALL CHKBUSY
POP DPL
POP DPH
INC DPTR
DJNZ LOOPREG,LOOP_WRCGR
;------------------------------------------------
MOV DPTR,#CHR_COM_W
MOV A,#01H ; Display clear
MOVX @DPTR,A
LCALL CHKBUSY
MOV A,#10000000B ; Write DDRAM address
MOVX @DPTR,A
LCALL CHKBUSY
MOV LOOPREG,#40
MOV DPTR,#CHR_DAT_W
MOV A,#0FFH
LOOP_WDD11:
MOVX @DPTR,A
LCALL CHKBUSY
DJNZ LOOPREG,LOOP_WDD11
MOV DPTR,#CHR_COM_W
MOV A,#11000000B
MOVX @DPTR,A
LCALL CHKBUSY
MOV DPTR,#CHR_DAT_W
MOV LOOPREG,#40
MOV A,#0FFH
LOOP_WDD12:
MOVX @DPTR,A
LCALL CHKBUSY
DJNZ LOOPREG,LOOP_WDD12
MOV DLYTIME,#50
LCALL DELAY
JB PAUSE_FG,$ ; Pause_flag = 1 , Wait
MOV DPTR,#CHR_COM_W
MOV A,#01H ; Display clear
MOVX @DPTR,A
LCALL CHKBUSY
MOV A,#10000000B ; Write DDRAM address
MOVX @DPTR,A
LCALL CHKBUSY
MOV LOOPREG,#40
MOV DPTR,#CHR_DAT_W
MOV A,#00H
LOOP_WDD21:
MOVX @DPTR,A
LCALL CHKBUSY
DJNZ LOOPREG,LOOP_WDD21
MOV DPTR,#CHR_COM_W
MOV A,#11000000B
MOVX @DPTR,A
LCALL CHKBUSY
MOV DPTR,#CHR_DAT_W
MOV LOOPREG,#40
MOV A,#00H
LOOP_WDD22:
MOVX @DPTR,A
LCALL CHKBUSY
DJNZ LOOPREG,LOOP_WDD22
MOV DLYTIME,#50
LCALL DELAY
JB PAUSE_FG,$
;------------------------------------------------
MOV DPTR,#CHR_COM_W
MOV A,#01H ; Display clear
MOVX @DPTR,A
LCALL CHKBUSY
MOV A,#10000000B ; Write DDRAM address
MOVX @DPTR,A
LCALL CHKBUSY
MOV LOOPREG,#40
MOV DPTR,#CHR_DAT_W
MOV A,#3CH
LOOP_WDD31:
MOVX @DPTR,A
LCALL CHKBUSY
DJNZ LOOPREG,LOOP_WDD31
MOV DPTR,#CHR_COM_W
MOV A,#11000000B
MOVX @DPTR,A
LCALL CHKBUSY
MOV DPTR,#CHR_DAT_W
MOV LOOPREG,#40
MOV A,#3CH
LOOP_WDD32:
MOVX @DPTR,A
LCALL CHKBUSY
DJNZ LOOPREG,LOOP_WDD32
MOV DLYTIME,#50
LCALL DELAY
JB PAUSE_FG,$
;------------------------------------------------
MOV DPTR,#CHR_COM_W
MOV A,#01H ; Display clear
MOVX @DPTR,A
LCALL CHKBUSY
MOV A,#10000000B
MOVX @DPTR,A
LCALL CHKBUSY
MOV DPTR,#CHR_DAT_W
MOV LOOPREG,#40
MOV A,#30H
LOOP_WDD41:
MOVX @DPTR,A
LCALL CHKBUSY
INC A
DJNZ LOOPREG,LOOP_WDD41
MOV DPTR,#CHR_COM_W
MOV A,#11000000B
MOVX @DPTR,A
LCALL CHKBUSY
MOV DPTR,#CHR_DAT_W
MOV LOOPREG,#40
MOV A,#30H
LOOP_WDD42:
MOVX @DPTR,A
LCALL CHKBUSY
INC A
DJNZ LOOPREG,LOOP_WDD42
;--------------------------------------
MOV DLYTIME,#50
LCALL DELAY
JB PAUSE_FG,$ ; Pause_flag = 1 , Wait
LJMP TEST_SEL
;------------------------------------------------
CHKBUSY:
PUSH DPL
PUSH DPH
PUSH ACC
MOV DPTR,#CHR_COM_R
LP_CHKRD: MOVX A,@DPTR
JB ACC.7,LP_CHKRD
POP ACC
POP DPH
POP DPL
RET
CHR_COM:
DB 00110000B ; Reset
DB 00110000B ; Reset
DB 00110000B ; Reset
DB 00111000B ; Interface : 8 bits, 2 lines, 5x7 dots
DB 00001000B ; Display OFF, Cousor OFF,
DB 00000001B ; Display clear
DB 00000110B ; Address increment, NO shift
DB 00001100B ; Display ON, Cousor OFF
CHR_DAT:
DB 00010001B
DB 00001010B
DB 00000100B
DB 00001010B
DB 00010001B
DB 00001010B
DB 00000100B
DB 00001110B
DB 00010101B
DB 00010101B
DB 00010101B
DB 00010101B
DB 00010101B
DB 00010101B
DB 00010101B
DB 00010101B
DB 00001010B
DB 00001010B
DB 00001010B
DB 00001010B
DB 00001010B
DB 00001010B
DB 00001010B
DB 00001010B
;=============================================================================
TEST_GRA0: ; 240*128 LCM Testing Program
; Chip type : T6963C
;=============================================================================
MOV ROW_N,#128
MOV COL_N,#30
LJMP T6963C_APPS
;=============================================================================
TEST_GRA1: ; 240*66 LCM
; Chip type : T6963C
;=============================================================================
MOV ROW_N,#66
MOV COL_N,#30
LJMP T6963C_APPS
;=============================================================================
TEST_GRA2: ; 240*64 LCM
; Chip type : T6963C
;=============================================================================
MOV ROW_N,#64
MOV COL_N,#30
LJMP T6963C_APPS
;=============================================================================
TEST_GRA3: ; PROGRAM FOR 16064A GRAPHIC LCM TEST
; LCM CHIP : T6963C
;=============================================================================
MOV ROW_N,#64
MOV COL_N,#20
SETB SMALL_SCR
LJMP T6963C_APPS
;=============================================================================
TEST_GRA4: ; PROGRAM FOR 16064B GRAPHIC LCM TEST
; LCM CHIP : KS0108B
;=============================================================================
CLR RST
MOV DLYTIME,#2
LCALL DELAY
SETB RST
LCALL CK16064B1
LCALL CK16064B2
LCALL CK16064B3
MOV A,#00111110B ; turn OFF display (KS0108B or HD61202)
MOV DPTR,#B16064C1W
MOVX @DPTR,A
MOV DPTR,#B16064C2W
MOVX @DPTR,A
MOV DPTR,#B16064C3W
MOVX @DPTR,A
LCALL B16064_BMP
LCALL CK16064B1
LCALL CK16064B2
LCALL CK16064B3
MOV A,#00111111B ; turn ON display (KS0108B or HD61202)
MOV DPTR,#B16064C1W
MOVX @DPTR,A
MOV DPTR,#B16064C2W
MOVX @DPTR,A
MOV DPTR,#B16064C3W
MOVX @DPTR,A
MOV DLYTIME,#80
LCALL DELAY
JB PAUSE_FG,$ ; Pause_flag = 1 , Wait
MOV DTREG1,#11111111B
MOV DTREG2,#00000000B
ACALL B16064_SCR
MOV DLYTIME,#60
LCALL DELAY
JB PAUSE_FG,$ ; Pause_flag = 1 , Wait
MOV DTREG1,#00000000B
MOV DTREG2,#11111111B
ACALL B16064_SCR
MOV DLYTIME,#60
LCALL DELAY
JB PAUSE_FG,$ ; Pause_flag = 1 , Wait
MOV DTREG1,#01010101B
MOV DTREG2,#01010101B
ACALL B16064_SCR
MOV DLYTIME,#60
LCALL DELAY
JB PAUSE_FG,$ ; Pause_flag = 1 , Wait
MOV DTREG1,#10101010B
MOV DTREG2,#10101010B
ACALL B16064_SCR
MOV DLYTIME,#60
LCALL DELAY
JB PAUSE_FG,$ ; Pause_flag = 1 , Wait
MOV DTREG1,#10101010B
MOV DTREG2,#01010101B
ACALL B16064_SCR
MOV DLYTIME,#40
LCALL DELAY
JB PAUSE_FG,$ ; Pause_flag = 1 , Wait
MOV DTREG1,#01010101B
MOV DTREG2,#10101010B
ACALL B16064_SCR
MOV DLYTIME,#60
LCALL DELAY
JB PAUSE_FG,$ ; Pause_flag = 1 , Wait
LJMP TEST_SEL
;--------------------------------------
B16064_SCR:
MOV COUNTER,#8 ; 8 Pages Counter
MOV VR,#11000000B ; set start line (X address)
MOV HR,#01000000B ; set start columns (Y address)
MOV PR,#0BFH ; Page = 08
LP_PGDWR:
MOV A,PR
MOV DPTR,#B16064C1W
MOVX @DPTR,A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -