Email: Password: Remember Me | Create Account (Free)

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