;----------------------------------------------------------------------------------------; ;THIS IS A 16X2 LCD DRIVING ROUTINE YOU CAN ADD IT TO YOUR CODES FOR DISPLAYING ; ;DATA OR MESSAGES ON AN LCD. ; ;IF YOU WANT TO LEARN MORE ABOUT LCDs TRY THE FOLLOWING LINKS: ; ; http://www.geocities.com/kool_projects/lcd1.pdf ; ;and ; ; http://www.geocities.com/kool_projects/lcd2.pdf ; ;----------------------------------------------------------------------------------------; ;This code is written by Mubashar Yasin(Islamabad,Pakistan).It is freely distributable ; ;however please distribute it with my name and if you add this code to your website or ; ;some other publication then mention about me along with this code.I have tested this ; ;code to work properly even then there is no guarantee or warranty and i cannot be held ; ;responsible for any damage or loss due to this code.If you have any querries about this ; ;code please contact me at: ; ; ; ; kool_projects@yahoo.com ; ; mubasharpk09@hotmail.com ; ; ; ;or visit my website: ; ; ; ; http://www.geocities.com/kool_projects ; ;----------------------------------------------------------------------------------------; EN EQU P3.5 RW EQU P3.6 RS EQU P3.7 DAT EQU P1 ORG 0000H LJMP MAIN STRING1: DB ' MUBASHAR YASIN ',0H STRING2: DB ' ELECT. ENGG. ',0H ;;;;;;;;;;;;;;;;; INIT_LCD: ;;;;;;;;;;;;;;;;; CLR RS MOV DAT,#38h ;8-BIT DATA LINE, 5X8 DOT CHARACTER FONT SETB EN CLR EN LCALL WAIT_LCD CLR RS MOV DAT,#0Eh ;TURN ON (LCD + CURSOR) SETB EN CLR EN LCALL WAIT_LCD CLR RS MOV DAT,#06h ;SHIFT THE CURSOR ONE POSITION RIGHT WHEN A CHAR. IS WRITTEN SETB EN CLR EN LCALL WAIT_LCD RET ;;;;;;;;;;;;;;;;; WAIT_LCD: ;;;;;;;;;;;;;;;;; WAIT: CLR RS ;It's a command SETB RW ;It's a read command MOV DAT,#0xFF ;Set all pins to FF initially CLR EN ;Clock out command to LCD SETB EN;Status out JB P1.7,WAIT ;If bit 7 high, LCD still busy CLR EN ;Finish the command CLR RW ;Turn off RW for future commands RET ;;;;;;;;;;;;;;;;; CLEAR_LCD: ;;;;;;;;;;;;;;;;; CLR RS MOV DAT,#01h SETB EN CLR EN LCALL WAIT_LCD RET ;;;;;;;;;;;;;;;;; WRITE_CHAR: ;;;;;;;;;;;;;;;;; SETB RS MOV DAT,A SETB EN CLR EN LCALL WAIT_LCD RET ;;;;;;;;;;;;;;;;; WRITE_STRING: ;;;;;;;;;;;;;;;;; MOV R0,#0H RPT: MOV A,R0 MOVC A,@A+DPTR JZ EXIT1 LCALL WRITE_CHAR INC R0 LJMP RPT EXIT1: RET ;;;;;;;;;;;;;;;;; SELECT_LINE1: ;;;;;;;;;;;;;;;;; CLR RS MOV DAT,#080H ;PLACE CURSOR ON FIRST LINE SETB EN CLR EN LCALL WAIT_LCD RET ;;;;;;;;;;;;;;;;; SELECT_LINE2: ;;;;;;;;;;;;;;;;; CLR RS MOV DAT,#0C0H ;PLACE CURSOR ON SECOND LINE SETB EN CLR EN LCALL WAIT_LCD RET ;;;;;;;;;;;;;;;;; MAIN: ;;;;;;;;;;;;;;;;; CLR RW LCALL INIT_LCD LCALL CLEAR_LCD LCALL SELECT_LINE1 MOV DPTR,#STRING1 LCALL WRITE_STRING LCALL SELECT_LINE2 MOV DPTR,#STRING2 LCALL WRITE_STRING JMP $ END