ÿþ;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 ;T%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%W% ;Q% DARE DEVIL Q% ;Q% ENGINEER Q% ;Z%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%]% ; ;T%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%W% ;Q% M. ASIF ALI Q% ;Q% RAJPUT Q% ;Z%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%]% ; FOR 16X4 ;T%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%W% ;Q% DARE DEVIL Q% ;Q% ENGINEER Q% ;Q%NOONE IS PERFECTQ% ;Q% I AM NOBODY Q% ;Z%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%]% ;T%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%W% ;Q% M. ASIF ALI Q% ;Q% RAJPUT Q% ;Q% www.8052.com Q% ;Q% I LOVE 8052 Q% ;Z%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%P%]% ;========================================================================= ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 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