This demo program can be used in either parallel or serial mode of operation.
Setting 'PARALLEL EQU 1' enable parallel operation ( 'J1' to 'VCC' ),
Setting 'PARRALE EQU 0' enable serial operation ( 'J1' to 'GND' ).
$MOD52
$PAGEWIDTH(132)
$DEBUG
$OBJECT
$NOPAGING
;PARALLEL EQU 1 ; PARALLEL MODE
PARALLEL EQU 0 ; SERIAL MODE
;---------------------------------------------------------
; YOU CAN CHANGE THE FOLLOWING PORT TO SUIT YOUR DESIGN
;---------------------------------------------------------
IF (PARALLEL)
; PARALLEL CONFIG
LCD_RD BIT P3.2
LCD_WR BIT P3.3
LCD_RS BIT P3.4
LCD_RESET BIT P3.5
LCD_CS BIT P3.6
LCD_DATA_BUS EQU 080H ; PORT 0
ELSE
; SERIAL CONFIG
LCD_RS BIT P3.4
LCD_RESET BIT P3.5
LCD_CS BIT P3.6
LCD_SID BIT P0.7
LCD_SCLK BIT P0.6
ENDIF
;---------------------------------------------------------
ORG 0000H ; POWER ON/RESET VECTOR
JMP ON_RESET
ON_RESET:
CLR LCD_RESET
CALL DELAY_1S
SETB LCD_RESET
;---------------------------
; INITIALIZATION OF THE LCD
;---------------------------
MOV A,#0E2H
CALL LCD_CMD
MOV A,#0A0H
CALL LCD_CMD
MOV A,#0C8H
CALL LCD_CMD
MOV A,#0A3H
CALL LCD_CMD
MOV A,#2FH
CALL LCD_CMD
MOV A,#23H
CALL LCD_CMD
MOV A,#81H
CALL LCD_CMD
MOV A,#11H
CALL LCD_CMD
MOV A,#40H
CALL LCD_CMD
MOV A,#0A6H
CALL LCD_CMD
MOV A,#0A4H
CALL LCD_CMD
MOV A,#0AFH
CALL LCD_CMD
;------------------
; ENTIRE DISPLAY ON
;------------------
MOV A,#0A5H ; ENTIRE DISPLAY ON
CALL LCD_CMD
CALL DELAY_1S
CALL DELAY_1S
CALL DELAY_1S
CALL DELAY_1S
MOV A,#0A4H ; ENTIRE DISPLAY NORMAL
CALL LCD_CMD
CALL LCD_CLR
; FILLING THE DISPLAY DATA
MOV A,#0A7H
CALL LCD_CMD
MOV DPTR,#TABLE1
CALL LCD_FILL_DATA
CALL DELAY_1S
LOOP1:
;------------------
; FLASH THE DISPLAY
;------------------
MOV R1,#02 ; FLASH THE DISPLAY 2 TIMES
FLASH_LOOP:
MOV A,#0AEH ; DISPLAY OFF
CALL LCD_CMD
CALL DELAY_1S
MOV A,#0AFH ; DISPLAY ON
CALL LCD_CMD
CALL DELAY_1S
DJNZ R1,FLASH_LOOP
;------------------
; INVERT THE DISPLAY
;------------------
MOV A,#0A6H
CALL LCD_CMD
CALL DELAY_1S
MOV A,#0A7H
CALL LCD_CMD
CALL DELAY_1S
;------------------
; DIRECTION CHANGE
;------------------
MOV A,#0C0H ; NORMAL DIRECTION
CALL LCD_CMD
CALL DELAY_1S
MOV A,#0C8H ; REVERSE DIRECTION
CALL LCD_CMD
CALL DELAY_1S
JMP LOOP1
;------------------------------------------------------
; CLEAR THE DISPLAY, FILL IN DATA '00' TO ALL LOCATION
;------------------------------------------------------
LCD_CLR:
MOV R6,#0B0H
LCD_CLR_LOOP:
MOV A,R6
CALL LCD_CMD
MOV A,#10H
CALL LCD_CMD
MOV A,#00H
CALL LCD_CMD
MOV R1,#84H
LCD_CLR_LOOP_1:
MOV A,#00H
CALL LCD_DATA
DJNZ R1,LCD_CLR_LOOP_1
INC R6
CJNE R6,#0B8H,LCD_CLR_LOOP
RET
;--------------------------------------------------------
; FILL THE DATA WHICH ARE POINTED BY DPTR TO THE DISPLAY
;--------------------------------------------------------
LCD_FILL_DATA:
MOV R6,#0B0H
LCD_FILL_DATA_LOOP:
MOV A,R6 ; SET PAGE NO. (0-8)
CALL LCD_CMD
MOV A,#10H ; SET COLUMN ADDRESS MSB=0000
CALL LCD_CMD
MOV A,#00H ; SET COLUMN ADDRESS LSB=0000
CALL LCD_CMD
MOV R1,#84H ; 84H(132)->FILL 132 BYTES OF DATA
LCD_FILL_DATA_LOOP_1:
MOV A,#00H
MOVC A,@A+DPTR
CALL LCD_DATA
INC DPTR
DJNZ R1,LCD_FILL_DATA_LOOP_1 ; NEXT COLUMN DATA
INC R6 ; NEXT PAGE
CJNE R6,#0B8H,LCD_FILL_DATA_LOOP
RET
;------------------------------
; SEND COMMAND CODE TO THE LCD
;------------------------------
LCD_CMD:
NOP
CLR LCD_RS
SJMP LCD_WR_CODE
;------------------------------
; SEND DISPLAY DATA TO THE LCD
;------------------------------
LCD_DATA:
NOP
SETB LCD_RS
LCD_WR_CODE:
CLR LCD_CS
;**************************************************
IF (PARALLEL)
SETB LCD_RD
MOV LCD_DATA_BUS,A
CLR LCD_WR
NOP
SETB LCD_WR
ELSE
MOV R0,#08H
NEXT_BIT:
RLC A
MOV LCD_SID,C
CLR LCD_SCLK
SETB LCD_SCLK
DJNZ R0,NEXT_BIT
ENDIF
;**************************************************
SETB LCD_CS
RET
;-----------------------
; WAIT A PERIOD OF TIME
;-----------------------
; **********************************************************
; DELAY ROUTINE
; **********************************************************
DELAY_0S5:
MOV A,#250
CALL MDELAY
MOV A,#250
CALL MDELAY
RET
DELAY_1S:
MOV A,#250
CALL MDELAY
MOV A,#250
CALL MDELAY
MOV A,#250
CALL MDELAY
MOV A,#250
CALL MDELAY
RET
; DELAY TIME = ACC * 1MS
MDELAY:
CALL SDLY1MS
DJNZ ACC,MDELAY
RET
SDLY1MS:
PUSH ACC ; 2+3*(1+(152*2))+2+2=921
MOV A,#152 ; (1/(11059200/12))*921 = 1mS
DJNZ ACC,$
MOV A,#152
DJNZ ACC,$
MOV A,#152
DJNZ ACC,$
POP ACC
RET
;-------------------------------------------
; FILL IN THE DATA THAT YOU WANT TO DISPLAY
;-------------------------------------------
TABLE1:
;-- 132x64 --
DB 0FFH,0FFH,003H,003H,0F3H,0F3H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H
DB 033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H
DB 033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H
DB 033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H
DB 033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H
DB 033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H
DB 033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H
DB 033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,0F3H,0F3H
DB 003H,003H,0FFH,0FFH,0FFH,0FFH,000H,000H,0FFH,0FFH,000H,000H,0FFH,0FFH,003H,003H
DB 0F3H,0F3H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H
DB 033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H
DB 033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H
DB 033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H
DB 033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H
DB 033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H
DB 033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,0F3H,0F3H,003H,003H,0FFH,0FFH
DB 000H,000H,0FFH,0FFH,000H,000H,0FFH,0FFH,0FFH,0FFH,000H,000H,0FFH,0FFH,000H,000H
DB 0FFH,0FFH,000H,000H,0FFH,0FFH,000H,000H,0FFH,0FFH,003H,003H,0F3H,0F3H,033H,033H
DB 033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H
DB 033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H
DB 033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H
DB 033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H
DB 033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H,033H
DB 033H,033H,033H,033H,033H,033H,0F3H,0F3H,003H,003H,0FFH,0FFH,000H,000H,0FFH,0FFH
DB 000H,000H,0FFH,0FFH,000H,000H,0FFH,0FFH,000H,000H,0FFH,0FFH,0FFH,0FFH,000H,000H
DB 0FFH,0FFH,000H,000H,0FFH,0FFH,000H,000H,0FFH,0FFH,000H,000H,0FFH,0FFH,000H,000H
DB 0FFH,0FFH,000H,000H,0FFH,0FFH,003H,003H,003H,003H,003H,003H,003H,003H,003H,003H
DB 043H,0E3H,043H,043H,043H,003H,003H,003H,043H,0C3H,083H,043H,043H,083H,003H,003H
DB 083H,043H,043H,043H,043H,083H,003H,043H,0C3H,043H,003H,003H,043H,0C3H,043H,003H
DB 003H,043H,043H,0D3H,003H,003H,003H,003H,083H,043H,043H,043H,083H,0C3H,003H,003H
DB 083H,043H,043H,043H,043H,083H,003H,003H,043H,0E3H,043H,043H,043H,003H,003H,003H
DB 003H,003H,003H,003H,003H,003H,0FFH,0FFH,000H,000H,0FFH,0FFH,000H,000H,0FFH,0FFH
DB 000H,000H,0FFH,0FFH,000H,000H,0FFH,0FFH,000H,000H,0FFH,0FFH,000H,000H,0FFH,0FFH
DB 0FFH,0FFH,000H,000H,0FFH,0FFH,000H,000H,0FFH,0FFH,000H,000H,0FFH,0FFH,000H,000H
DB 0FFH,0FFH,000H,000H,0FFH,0FFH,000H,000H,0FFH,0FFH,0C0H,0C0H,0C0H,0C0H,0C0H,0C0H
DB 0C0H,0C0H,0C0H,0C0H,0C0H,0C7H,0C8H,0C8H,0C8H,0C4H,0C0H,0C0H,0C8H,0CFH,0C8H,0C0H
DB 0C8H,0CFH,0C8H,0C0H,0C7H,0C8H,0C8H,0C8H,0C8H,0C7H,0C0H,0C0H,0C0H,0C3H,0CCH,0CCH
DB 0C3H,0C0H,0C0H,0C0H,0C0H,0C8H,0C8H,0CFH,0C8H,0C8H,0C0H,0C0H,0C7H,0C8H,0C8H,0C8H
DB 0C8H,0C4H,0C0H,0C0H,0C7H,0C9H,0C9H,0C9H,0C9H,0C9H,0C0H,0C0H,0C0H,0C7H,0C8H,0C8H
DB 0C8H,0C4H,0C0H,0C0H,0C0H,0C0H,0C0H,0C0H,0C0H,0C0H,0FFH,0FFH,000H,000H,0FFH,0FFH
DB 000H,000H,0FFH,0FFH,000H,000H,0FFH,0FFH,000H,000H,0FFH,0FFH,000H,000H,0FFH,0FFH
DB 000H,000H,0FFH,0FFH,0FFH,0FFH,000H,000H,0FFH,0FFH,000H,000H,0FFH,0FFH,000H,000H
DB 0FFH,0FFH,000H,000H,0FFH,0FFH,0C0H,0C0H,0CFH,0CFH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH
DB 0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH
DB 0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH
DB 0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH
DB 0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH
DB 0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH
DB 0CCH,0CCH,0CFH,0CFH,0C0H,0C0H,0FFH,0FFH,000H,000H,0FFH,0FFH,000H,000H,0FFH,0FFH
DB 000H,000H,0FFH,0FFH,000H,000H,0FFH,0FFH,0FFH,0FFH,000H,000H,0FFH,0FFH,000H,000H
DB 0FFH,0FFH,0C0H,0C0H,0CFH,0CFH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH
DB 0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH
DB 0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH
DB 0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH
DB 0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH
DB 0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH
DB 0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CFH,0CFH
DB 0C0H,0C0H,0FFH,0FFH,000H,000H,0FFH,0FFH,000H,000H,0FFH,0FFH,0FFH,0FFH,0C0H,0C0H
DB 0CFH,0CFH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH
DB 0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH
DB 0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH
DB 0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH
DB 0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH
DB 0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH
DB 0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH
DB 0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CCH,0CFH,0CFH,0C0H,0C0H,0FFH,0FFH
END |