You are on page 1of 4

;TESTED 4-BIT LCD CODE FOR 16X2 AND 16X4 DISPLAY (HD44780 COMPATABLE LCD)

;CREATED BY ASIF ALI (DARE DEVIL)


;FEEL FREE TO ASK IF ANY PROBLEM
;EMAIL ID: sirfrajput@yahoo.com
;EMAIL ID: sirfrajput@gmail.com
;PIN CONFIGURATION
;P1.7 --------> DB7
;P1.6 --------> DB6
;P1.5 --------> DB5
;P1.4 --------> DB4
;P3.7 --------> EN
;P3.5 --------> RS
;P3.4 --------> RW
;FOR 16X2 DISPLAY ITS READEY TO RUN CODE JUST MAKE HEX AND BURN IT ON MCU
;=========================================================================
;NOTE: FOR 16X4 JUST REMOVE COMMENT SIGN ";" WHERE ITS WRITTEN ";(16X4)"
;=========================================================================
;AND AT END I WOULD LIKE TO THANK ALL OF MEMBERS OF 8052 WHO GAVE ME SUCH
;IMPORTANT KNOWLEDGE ABOUT LCD INTERFACING TO LCD PROGRAMMING.
;SO GUYS JUST BURN THE PROGRAM ON MCU AND HAVE FUN IT WILL BE LOOK LIKE
;=========================================================================
; PREVIEW
; FOR 16X2
;╔════════════════╗
;║ DARE DEVIL ║
;║ ENGINEER ║
;╚════════════════╝
;
;╔════════════════╗
;║ M. ASIF ALI ║
;║ RAJPUT ║
;╚════════════════╝
; FOR 16X4
;╔════════════════╗
;║ DARE DEVIL ║
;║ ENGINEER ║
;║NOONE IS PERFECT║
;║ I AM NOBODY ║
;╚════════════════╝
;╔════════════════╗
;║ M. ASIF ALI ║
;║ RAJPUT ║
;║ www.8052.com ║
;║ I LOVE 8052 ║
;╚════════════════╝
;=========================================================================
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN: NOP
EN EQU P3.7
RS EQU P3.5
RW EQU P3.4
DAT EQU P1
LCALL LCD_INT
AGAIN: LCALL CLEAR
LCALL LINE1
MOV DPTR,#MYDATA
LCALL LOOP
LCALL LINE2
MOV DPTR,#MYDAT2
LCALL LOOP
;LCALL LINE3 ;(16X4)
;MOV DPTR,#MYDAT3 ;(16X4)
;LCALL LOOP ;(16X4)
;LCALL LINE4 ;(16X4)
;MOV DPTR,#MYDAT4 ;(16X4)
;LCALL LOOP ;(16X4)
;------------------------------------------------------------------------
LCALL LINE1
MOV DPTR,#MYDAT5
LCALL LOOP
LCALL LINE2
MOV DPTR,#MYDAT6
LCALL LOOP
;LCALL LINE3 ;(16X4)
;MOV DPTR,#MYDAT7 ;(16X4)
;LCALL LOOP ;(16X4)
;LCALL LINE4 ;(16X4)
;MOV DPTR,#MYDAT8 ;(16X4)
;LCALL LOOP ;(16X4)
SJMP AGAIN
;=========================================================================
W_NIB: PUSH ACC ;Save A for low nibble
ORL DAT,#0F0h ;Bits 4..7 <- 1
ORL A,#0Fh ;Don't affect bits 0-3
ANL DAT,A ;High nibble to display
SETB EN
CLR EN
POP ACC ;Prepare to send
SWAP A ;...second nibble
ORL DAT,#0F0h ; Bits 4...7 <- 1
ORL A,#0Fh ; Don't affect bits 0...3
ANL DAT,A ;Low nibble to display
SETB EN
CLR EN
RET
;=========================================================================
LCD_INT: CLR RS
CLR RW
CLR EN
SETB EN
MOV DAT,#028h
CLR EN
LCALL SDELAY
MOV A,#28h
LCALL COM
MOV A,#0Ch
LCALL COM
MOV A,#06h
LCALL COM
LCALL CLEAR
MOV A,#080H
LCALL COM
RET
;=========================================================================
CLEAR: CLR RS
MOV A,#01h
LCALL COM
RET

;=========================================================================
DATAW: SETB RS
CLR RW
LCALL W_NIB
LCALL LDELAY
RET
;=========================================================================
SDELAY: MOV R6,#1
HERE2: MOV R7,#255
HERE: DJNZ R7,HERE
DJNZ R6,HERE2
RET
;=========================================================================
LDELAY: MOV R6,#100
HER2: MOV R7,#255
HER: DJNZ R7,HER
DJNZ R6,HER2
RET
;=========================================================================
COM: CLR RS
CLR RW
LCALL W_NIB
LCALL SDELAY
RET
;=========================================================================
LINE1: MOV A,#002H
LCALL COM
RET
LINE2: MOV A,#0C0H
LCALL COM
RET
LINE3: MOV A,#090H
LCALL COM
RET
LINE4: MOV A,#0D0H
LCALL COM
RET
;=========================================================================
LOOP: CLR A
MOVC A,@A+DPTR
JZ GO_B2
LCALL DATAW
LCALL SDELAY
INC DPTR
SJMP LOOP
GO_B2: RET
;=========================================================================
MYDATA: DB " DARE DEVIL ",0
MYDAT2: DB " ENGINEER ",0

MYDAT3: DB "NOONE IS PERFECT",0


MYDAT4: DB " I AM NOBODY ",0

MYDAT5: DB " M. ASIF ALI ",0


MYDAT6: DB " RAJPUT ",0
MYDAT7: DB " www.8052.com ",0
MYDAT8: DB " I LOVE 8052 ",0
;=========================================================================
END

You might also like