You are on page 1of 10

Interfacing an LCD to the 8951 Microcontroller LCD pin descriptions: The LCD discussed in this section has 14 pins.

The function of each pin is given in table.

LCD pin descriptions

LCD pin desciptions

Vcc, Vss, and VEE:

While Vcc and Vss provide +5V and ground, respectively, VEE is used for controlling LCD contrast.

RS register select:

There are two very important registers inside the LCD. The RS pin is used for their selection as follows. If RS = 0, the instruction command code register is selected, allowing the user to send a command such as clear display, cursor at home, etc. If RS = 1 the data register is selected, allowing the user to send data to be displayed on the LCD.

R/W read/write:

R/W input allows the user to write information to the LCD or read information from it. R/W = 1 when reading; R/W =0 when writing.

E enable:

The enable pin is used by the LCD to latch information presented to its data pins. When data is supplied to data pins, a high to low pulse must be applied to this pin in order for the LCD to latch in the data present at the data pins. This pulse must be a minimum of 450 ns wide.

D0 D7:

The 8 bit data pins, D0 D7, are used to send information to the LCD or read the contents of the LCDs internal registers.

To display letters and numbers, we send ASCII codes for the letters A Z, a z, and numbers 0 9 to these pins while making RS = 1.

There are also instructions command codes that can be sent to the LCD to clear the display or force the cursor to the home position or blink the cursor. Table below lists the instruction command codes.

LCD Commands table

We also use RS = 0 to check the busy flag bit to see if the LCD is ready to receive information. The busy flag is D7 and can be read when R/W =1 and RS = 0, as follows: if R/W =1, RS =0. When D7 = 1(busy flag = 1), the LCD busy taking care of internal operations and will not accept any new information. When D7 = 0, the LCD is ready to receive new information. Note: It is recommended to check the busy flag before writing any data to the LCD.

Interfacing LCD to 8951

Here Data pins D0-D7 are connected to port1.0-port1.7 of 8951 microcontroller. Enable pin, RS are connected to P3.3 and P3.4 of 8951 respectively.

We can write program for LCD in two ways. Sending commands and data to LVDs with a time delay. Sending commands and data to LVDs with checking busy flag.

1. Program to display ELECTROFRIENDS in LCD without checking busy flag.

MOV A,#38H ACALL COMMAND ACALL DELAY MOV A,#0EH ACALL COMMAND ACALL DELAY

; initialization LCD 2lines, 57 matrix. ; call command subroutine. ; call delay subroutine. ; display on, cursor on

MOV A,#01H ACALL COMMAND ACALL DELAY MOV A,#06H ACALL COMMAND ACALL DELAY MOV A,#80H ACALL COMMAND ACALL DELAY MOV A,#E' ACALL DATA ACALL DELAY MOV A,#L' ACALL DATA ACALL DELAY MOV A,#E' ACALL DATA ACALL DELAY MOV A,#C' ACALL DATA ACALL DELAY MOV A,#T' ACALL DATA ACALL DELAY MOV A,#R'

; Clear LCD

; shift cursor right

; cursor at beginning of 1st line

; display letter E

; display letter L

; display letter E

; display letter C

; display letter T

; display letter R

ACALL DATA ACALL DELAY MOV A,#O' ACALL DATA ACALL DELAY MOV A,#F' ACALL DATA ACALL DELAY MOV A,#R' ACALL DATA ACALL DELAY MOV A,#I' ACALL DATA ACALL DELAY MOV A,#E' ACALL DATA ACALL DELAY MOV A,#N' ACALL DATA ACALL DELAY MOV A,#D' ACALL DATA ACALL DELAY MOV A,#S' ACALL DATA ; display letter S ; display letter D ; display letter N ; display letter E ; display letter I ; display letter R ; display letter F ; display letter O

ACALL DELAY HERE: JMP HERE

COMMAND: MOV P1,A CLR P3.4 CLR P3.5 SETB P3.3 CLR P3.3 RET

; Send command to LCD

; RS=0 for command ; R/W=0 for write ; E=1 for high pulse ; E=0 for H-to-L pulse

DATA: SETB P3.4 CLR P3.5 SETB P3.3 CLR P3.3 RET

MOV P1,A

; Write data to LCD

; RS=1 for data ; R/W=0 for write ; E=1 for high pulse ; E=0 for H-to-L pulse

DELAY: D1: D2:

MOV R2,#50 MOV R3,#0FFH DJNZ R3,D2

DJNZ R2,D1 RET

2. Program to display ELECTROFRIENDS in LCD with checking busy flag.

MOV A,#38H ACALL COMMAND MOV A,#0EH ACALL COMMAND MOV A,#01H ACALL COMMAND MOV A,#06H ACALL COMMAND MOV A,#80H ACALL COMMAND MOV A,#E' ACALL DATA MOV A,#L' ACALL DATA MOV A,#E' ACALL DATA MOV A,#C' ACALL DATA MOV A,#T' ACALL DATA MOV A,#R' ACALL DATA MOV A,#O' ACALL DATA MOV A,#F'

; initialization LCD 2lines, 57 matrix. ; call command subroutine. ; display on, cursor on

; Clear LCD

; shift cursor right

; cursor at beginning of 1st line

; display letter E

; display letter L

; display letter E

; display letter C

; display letter T

; display letter R

; display letter O

; display letter F

ACALL DATA MOV A,#R' ACALL DATA MOV A,#I' ACALL DATA MOV A,#E' ACALL DATA MOV A,#N' ACALL DATA MOV A,#D' ACALL DATA MOV A,#S' ACALL DATA ; display letter S ; display letter D ; display letter N ; display letter E ; display letter I ; display letter R

HERE: JMP HERE

COMMAND: CALL READY MOV P1,A CLR P3.4 CLR P3.5 SETB P3.3 CLR P3.3 RET

; check whether LCD is ready

; Send command to LCD ; RS=0 for command ; R/W=0 for write ; E=1 for high pulse ; E=0 for H-to-L pulse

DATA:

CALL READY ; check whether LCD is ready

MOV P1,A SETB P3.4 CLR P3.5 SETB P3.3 CLR P3.3 RET

; Write data to LCD ; RS=1 for data ; R/W=0 for write ; E=1 for high pulse ; E=0 for H-to-L pulse

READY: CLR P3.4 SETB P3.5 UP: CLR P3.3 JB P1.7, UP RET

SETB P1.7 ; RS=0

; make P1.7 input port

; R/W=0 for read SETB P3.3 ; E=1 for high pulse

; E=0 for H-to-L pulse ; stay until LCD is busy

You might also like