How to control a HD44780-based Character-LCD

(Industry-Standard-Character-LCD)
General info and code-examples


1.1. Pin assignment

The pin assignment shown in Table 1.1. is the industry standard for character LCD-modules with a maximum of 80 characters.
The pin assignment shown in Table 1.2. is the industry standard for character LCD-modules with more than 80 characters.

To be sure always check the manufacturers datasheet!
To locate pin 1 on a module check the manufacturers datasheet!

Table1.1., Pin assignment for <= 80 character displays

Pin number

Symbol

Level

I/O

Function

1

Vss

-

-

Power supply (GND)

2

Vcc

-

-

Power supply (+5V)

3

Vee

-

-

Contrast adjust

4

RS

0/1

I

0 = Instruction input
1 = Data input

5

R/W

0/1

I

0 = Write to LCD module
1 = Read from LCD module

6

E

1, 1-->0

I

Enable signal

7

DB0

0/1

I/O

Data bus line 0 (LSB)

8

DB1

0/1

I/O

Data bus line 1

9

DB2

0/1

I/O

Data bus line 2

10

DB3

0/1

I/O

Data bus line 3

11

DB4

0/1

I/O

Data bus line 4

12

DB5

0/1

I/O

Data bus line 5

13

DB6

0/1

I/O

Data bus line 6

14

DB7

0/1

I/O

Data bus line 7 (MSB)

 

Table 1.2., Pin assignment for > 80 character displays

Pin number

Symbol

Level

I/O

Function

1

DB7

0/1

I/O

Data bus line 7 (MSB)

2

DB6

0/1

I/O

Data bus line 6

3

DB5

0/1

I/O

Data bus line 5

4

DB4

0/1

I/O

Data bus line 4

5

DB3

0/1

I/O

Data bus line 3

6

DB2

0/1

I/O

Data bus line 2

7

DB1

0/1

I/O

Data bus line 1

8

DB0

0/1

I/O

Data bus line 0 (LSB)

9

E1

1, 1->0

I

Enable signal row 0 & 1

10

R/W

0/1

I

0 = Write to LCD module
1 = Read from LCD module

11

RS

0/1

I

0 = Instruction input
1 = Data input

12

Vee

-

-

Contrast adjust

13

Vss

-

-

Power supply (GND)

14

Vcc

-

-

Power supply (+5V)

15

E2

1, 1->0

I

Enable signal row 2 & 3

16

n.c.

 

 

 

 

 

 

 

1.2. Instruction set

Table 1.3. HD44780 instruction set

Instruction

Code

Description

Execution time**

 

RS

R/W

DB7

DB6

DB5

DB4

DB3

DB2

DB1

DB0

 

Clear display

0

0

0

0

0

0

0

0

0

1

Clears display and returns cursor to the home position (address 0).

1.64mS

 

Cursor home

0

0

0

0

0

0

0

0

1

*

Returns cursor to home position (address 0). Also returns display being shifted to the original position. DDRAM contents remains unchanged.

1.64mS

 

Entry mode set

0

0

0

0

0

0

0

1

I/D

S

Sets cursor move direction (I/D), specifies to shift the display (S). These operations are performed during data read/write.

40uS

 

Display On/Off control

0

0

0

0

0

0

1

D

C

B

Sets On/Off of all display (D), cursor On/Off (C) and blink of cursor position character (B).

40uS

 

Cursor/display shift

0

0

0

0

0

1

S/C

R/L

*

*

Sets cursor-move or display-shift (S/C), shift direction (R/L). DDRAM contents remains unchanged.

40uS

 

Function set

0

0

0

0

1

DL

N

F

*

*

Sets interface data length (DL), number of display line (N) and character font(F).

40uS

 

Set CGRAM address

0

0

0

1

CGRAM address

Sets the CGRAM address. CGRAM data is sent and received after this setting.

40uS

 

Set DDRAM address

0

0

1

DDRAM address

Sets the DDRAM address. DDRAM data is sent and received after this setting.

40uS

 

Read busy-flag and address counter

0

1

BF

CGRAM / DDRAM address

Reads Busy-flag (BF) indicating internal operation is being performed and reads CGRAM or DDRAM address counter contents (depending on previous instruction).

0uS

 

Write to CGRAM or DDRAM

1

0

write data

Writes data to CGRAM or DDRAM.

40uS

 

Read from CGRAM or DDRAM

1

1

read data

Reads data from CGRAM or DDRAM.

40uS

 

Remarks:
- DDRAM = Display Data RAM.
- CGRAM = Character Generator RAM.
- DDRAM address corresponds to cursor position.
- * = Don't care.
- ** = Based on Fosc = 250KHz.

Table1.4. Bit names

Bit name

Settings

I/D

0 = Decrement cursor position

1 = Increment cursor position

S

0 = No display shift

1 = Display shift

D

0 = Display off

1 = Display on

C

0 = Cursor off

1 = Cursor on

B

0 = Cursor blink off

1 = Cursor blink on

S/C

0 = Move cursor

1 = Shift display

R/L

0 = Shift left

1 = Shift right

DL

0 = 4-bit interface

1 = 8-bit interface

N

0 = 1/8 or 1/11 Duty (1 line)

1 = 1/16 Duty (2 lines)

F

0 = 5x7 dots

1 = 5x10 dots

BF

0 = Can accept instruction

1 = Internal operation in progress


1
.3. Visible DDRAM addresses

 

1.3.1. 1-line displays

Shown after reset (with N=0).
1-line LCD

Table1.5. DDRAM address usage for a 1-line LCD

Display size

Visible

 

Character positions

DDRAM addresses

 

1*8

00..07

00h..07h

 

1*16

00..15

00h..0Fh

 

1*20

00..19

00h..13h

 

1*24

00..23

00h..17h

 

1*32

00..31

00h..1Fh

 

1*40

00..39

00h..27h

 

 

1.3.2. 2-line displays

Shown after reset (with N=1).
2-line LCD

Table1.6. DDRAM address usage for a 2-line LCD

Display size

Visible

 

Character positions

DDRAM addresses

 

2*16

00..15

00h..0Fh + 40h..4Fh

 

2*20

00..19

00h..13h + 40h..53h

 

2*24

00..23

00h..17h + 40h..57h

 

2*32

00..31

00h..1Fh + 40h..5Fh

 

2*40

00..39

00h..27h + 40h..67h

 


1.3.3. 4-line displays

Shown after reset (with N=1).
4-line LCD

Table 1.7. DDRAM address usage for a 4-line LCD

Display size

Visible

 

Character positions

DDRAM addresses

 

4*16

00..15

00h..0Fh + 40h..4Fh + 14h..23h + 54h..63h

 

4*20

00..19

00h..13h + 40h..53h + 14h..27h + 54h..67h

 

4*40

(00..39) on 1st controller and
(00..39) on 2nd controller

(00h..27h + 40h..67h) on 1st controller and
(00h..27h + 40h..67h) on 2nd controller

 

 

 

 

 

1.4. Interfacing

1.4.1. 8-bit interface

Example of busy flag testing using an 8-bit interface.
8-bit interface
1.4.2. 4-bit interface

Example of busy flag testing using a 4-bit interface.
4-bit interface




 

 

 

 

 

 

 

 

 

 

 

 

Example of data transfer using a 4-bit interface.
4-bit interface

1.5. Characterset for 5x7 dot font LCD character set