📄 _tg12864b.a51
字号:
;===========================================================
;;----初始化子程序----------------------------
LCD_INITIAL:
CLR E
CLR RW
CLR RST
LCALL DELAY40MS
SETB RST
MOV LCD_DATA,#3FH
LCALL WRITE_INST
MOV LCD_DATA,#start_line
LCALL WRITE_INST
RET
;===========================================================
;;-----显示子程序-------------------
DISPLAY:
MOV C,DISPLAY_FLAG
JNC DISPLAY_RTN
CLR C
CLR DISPLAY_FLAG
LCALL DISABLE_TIMER1
CLR CS2
SETB CS1
MOV LCD_DATA,#start_line
LCALL WRITE_INST
MOV R0,#lcd_ram_addr
MOV PAGE_INDEX,#8H ;
MOV X_POINTER,#base_x ;
DIS1:
MOV LCD_DATA,X_POINTER
LCALL WRITE_INST
MOV LCD_DATA,#base_y
LCALL WRITE_INST
MOV Y_POINTER,#08H ;
DIS2: MOV A ,@R0
ANL A ,#0FH ;
MOV B ,#08H
MUL AB ;
MOV R5,A
MOV A ,@R0
ANL A ,#0F0H ;
SWAP A
JZ DIS3 ;
MOV B,#08H
MUL AB
MOV R6,A
AJMP DIS4
DIS3: MOV A,R5
MOV R6,A
DIS4: MOV DPTR,#SHAPE ;
MOV COLUMN_INDEX,#8H ;
DIS5: MOV A,R5
MOVC A,@A+DPTR ;
MOV R7,A
MOV A,R6
MOVC A,@A+DPTR ;
ORL A,R7 ;
MOV LCD_DATA,A
LCALL WRITE_DATA
LCALL DELAY_NOP
INC DPTR
DJNZ COLUMN_INDEX,DIS5
INC R0
DJNZ Y_POINTER,DIS2
INC X_POINTER ;
DJNZ PAGE_INDEX,DIS1
LCALL ENABLE_TIMER1
DISPLAY_RTN:
RET
;===========================================================
DISPLAY2:
MOV A,R0
MOV LCD_DATA,#start_line
LCALL WRITE_INST
CLR C
MOV B,#18
MUL AB
ADD A,DPL
MOV DPL,A
XCH A,B
ADDC A,DPH
MOV DPH,A
MOV A,#0
MOVC A,@A+DPTR
ADD A,#base_x
MOV X_POINTER,A
INC DPTR
MOV A,#0
MOVC A,@A+DPTR
ADD A,#base_y
MOV Y_POINTER,A
MOV PAGE_INDEX,#2
INC DPTR
DDIS2: MOV LCD_DATA,X_POINTER
LCALL WRITE_INST
MOV LCD_DATA,Y_POINTER
LCALL WRITE_INST
MOV R5,#8
DDIS3: MOV A,#0
MOVC A,@A+DPTR
MOV LCD_DATA,A
LCALL WRITE_DATA
LCALL DELAY_NOP
INC DPTR
DJNZ R5,DDIS3
INC X_POINTER
DJNZ PAGE_INDEX,DDIS2
RET
;===========================================================
DISPLAY_ALL:
MOV LCD_DATA,#start_line
LCALL WRITE_INST
MOV PAGE_INDEX,#08H
MOV X_POINTER,#base_x
DISPLAY_LOOP1:
MOV LCD_DATA,X_POINTER
LCALL WRITE_INST
MOV LCD_DATA,#base_y
LCALL WRITE_INST
MOV Y_POINTER,#40H
DISPLAY_LOOP2:
MOV LCD_DATA,#0FFH
LCALL WRITE_DATA
DJNZ Y_POINTER,DISPLAY_LOOP2
INC X_POINTER
DJNZ PAGE_INDEX,DISPLAY_LOOP1
RET
;===========================================================
CLEAR_ALL:
MOV LCD_DATA,#start_line
LCALL WRITE_INST
MOV PAGE_INDEX,#08H
MOV X_POINTER,#base_x
CLEAR_LOOP1:
MOV LCD_DATA,X_POINTER
LCALL WRITE_INST
MOV LCD_DATA,#base_y
LCALL WRITE_INST
MOV Y_POINTER,#40H
CLEAR_LOOP2:
MOV LCD_DATA,#00H
LCALL WRITE_DATA
DJNZ Y_POINTER,CLEAR_LOOP2
INC X_POINTER
DJNZ PAGE_INDEX,CLEAR_LOOP1
RET
;===========================================================
;;---写指令子程序-------------------------
WRITE_INST:
CLR E
CLR RW
CLR DI
MOV LCD_DATA_PORT,LCD_DATA
LCALL DELAY_NOP
CLR E
LCALL DELAY_NOP
SETB E
LCALL DELAY_NOP
CLR E
LCALL DELAY_NOP
RET
;===========================================================
;;---写数据子程序----------------------
WRITE_DATA:
CLR E
CLR RW
SETB DI
MOV LCD_DATA_PORT,LCD_DATA
LCALL DELAY_NOP
CLR E
LCALL DELAY_NOP
SETB E
LCALL DELAY_NOP
CLR E
LCALL DELAY_NOP
RET
;===========================================================
;;---读数据子程序----------------------
READ_DATA:
CLR E
SETB RW
SETB DI
CLR E
LCALL DELAY_NOP
SETB E
LCALL DELAY_NOP
CLR E
LCALL DELAY_NOP
SETB RW
SETB DI
CLR E
LCALL DELAY_NOP
SETB E
LCALL DELAY_NOP
CLR E
LCALL DELAY_NOP
MOV LCD_DATA,LCD_DATA_PORT
RET
;===========================================================
DELAY_NOP:
NOP
NOP
NOP
NOP
RET
;=======================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -