8051 Assembly Subroutines
For
20x4 Liquid Crystal Display
|
;;;;;;;;;;;;;;;;;;;;;SOFTWARE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; LAST CODE : 20X4LCD.ASM ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;HARDWARE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; PROCESSOR : AT-89C52/89S8252/89C55/89C55WD ; LCD : 20X4 BACKLIT CHARACTER LCD ;;;;;;;;;;;;;;;;;;;;;;DIRECTIVES;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; LCDPORT EQU P0 ;DATA PORT FOR LCD LCDRS EQU P1.0 ;REGISTER SELECT PIN FOR LCD (0-COMMAND, 1-DATA) LCDRW EQU P1.1 ;READ/WRITE PIN FOR LCD (1>0-DISPLAY, 0>1-READ) LCDEN EQU P1.2 ;ENABLE PIN FOR LCD (0-WRITE, 1-READ) ;;;;;;;;;;;;;;;;;;;;;;;;; LCDLINENO EQU 03H ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;MACROS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ORG 0000H ;STARTING POINT FOR PROGRAM COUNTER LJMP START ORG 0033H ;INTERRUPT EXT0 START ;;;;;;;*12345678901234567890*;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MENU00: DB '$+++++++++++++++++$|' DB '$UTILITY SOFTWARE$|' DB '$D&D : MANOJ MEENA$|' DB '$+++++++++++++++++$!' ;;;;;;;*12345678901234567890*;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; START: MOV SP,#030H LCALL INITIALIZELCD ;;;;;;;;;;;;;;;;; MAIN: LCALL CLEARDISPLAY LCALL LCD1LINE MOV LCDLINENO,#'1' MOV DPTR,#(MENU00) LCALL DISPMENU ;DISLAYING MAIN MENU WAIT4EVER: JMP WAIT4EVER ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;SUBROUTINES;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DISPMENU: MOV A,#00H MOVC A,@A+DPTR LCALL LCDDATA INC DPTR MOV A,#00H MOVC A,@A+DPTR CJNE A,#'!',CHKCHAR4END RET CHKCHAR4END: CJNE A,#'|',DISPMENU INC LCDLINENO LCALL NEXTLCDLINE INC DPTR JMP DISPMENU ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NEXTLCDLINE: CJNE R3,#'2',CHK4LCDLINE3 LCALL LCD2LINE RET CHK4LCDLINE3: CJNE R3,#'3',CHK4LCDLINE4 LCALL LCD3LINE RET CHK4LCDLINE4: CJNE R3,#'4',CHK4LCDLINE1 LCALL LCD4LINE RET CHK4LCDLINE1: LCALL LCD1LINE RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; INITIALIZELCD: SETB LCDEN ;ENABLE LCD CLR LCDRW ;WRITING MODE SETB LCDRS ;DATA MODE ;;;;;;;;;;;;;;;;;;;; ;SETTING OPERATING CHARACTERISTICS OF THE LCD MOV A,#01H ;CLEAR THE DISPLAY LCALL LCDCOMMAND MOV A,#06H ;ENTRY MODE INCREMENT WITH EACH WRITE LCALL LCDCOMMAND MOV A,#03CH LCALL LCDCOMMAND ;8 BIT DATA,5X10 FONT,2 LINE MOV A,#0FH LCALL LCDCOMMAND ;DISPLAY ON,CURSOR BLINK OFF,CURSOR UNDERLINE MOV A,#02H ;PUT THE CURSOR HOME LCALL LCDCOMMAND RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; CLEARDISPLAY: MOV A,#01H LCALL LCDCOMMAND ;CLEAR THE DISPLAY RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; LCD1LINE: MOV A,#02H ;PUT THE CURSOR HOME LCALL LCDCOMMAND RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; LCD2LINE: MOV A,#0C0H LCALL LCDCOMMAND RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; LCD3LINE: MOV A,#094H LCALL LCDCOMMAND RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; LCD4LINE: MOV A,#0D4H LCALL LCDCOMMAND RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; LCDCOMMAND: CLR LCDRS ;SELECTING COMMAND MODE MOV LCDPORT,A ;WRITING ONTO PORT SETB LCDEN ;DOING 1 TO 0 TRANSITION FOR ENABLE PIN NOP CLR LCDEN LCALL LCDSTATUS RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; LCDDATA: SETB LCDRS ;SELECTING DATA MODE MOV LCDPORT,A ;WRITING ONTO PORT SETB LCDEN ;DOING 1 TO 0 TRANSITION FOR ENABLE PIN CLR LCDEN LCALL LCDSTATUS RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; LCDSTATUS: MOV LCDPORT,#0FFH SETB LCDRW ;(1-READING MODE, 0-WRITING MODE) CLR LCDRS SETB LCDEN ;DOING 1 TO 0 TRANSITION FOR ENABLE PIN MOV A,LCDPORT ;READ LCD STATUS(MSBIT:1-BUSY, 0-READY) JB ACC.7,LCDSTATUS CLR LCDEN ;DOING 1 TO 0 TRANSITION FOR ENABLE PIN CLR LCDRW ;(1-READING MODE, 0-WRITING MODE) RET ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; END |



