Character LCDs are the small monochrome text displays on instruments, appliances, and controllers, specified as characters wide by lines tall: 16×2, 20×4, and a handful of others. Nearly every convention on this page, the sizes, the pinout, the addressing, the fonts, traces to one part: the Hitachi HD44780 controller and its clones. This is the lookup for the standard formats and their conventions. For the terms it uses see the display glossary, and for how these modules connect see the display interface quick reference.

Anatomy of a character LCD module: a module with a yellow-green backlit glass showing two rows of characters reading Orient Display and 16x2 character, a 16-pin header strip along the bottom labeled pins 1 to 16, and to the right a magnified single character cell of 5 wide by 8 tall dots forming the letter A, with a note that row 8 carries the cursor or underline, and that a character LCD shows the built-in font plus 8 custom glyphs and cannot draw arbitrary graphics unlike a pixel-addressable 128 by 64 graphic LCD.

The standard formats

A single HD44780 drives up to 80 characters, which is the ceiling that decides what counts as standard. The two dominant formats are 16×2, the de-facto default, and 20×4, the largest single-controller format at exactly 80 characters.

Format (cols × rows)StandingTypical use
8×1CommonTiny panels, handhelds, meters
8×2CommonCompact instruments, small consumer devices
16×1Common, trickySingle-line readouts; most are wired 8+8 (see below)
16×2Most common of allThe default: appliances, printers, front panels, maker boards
16×4Less commonFour short lines
20×2CommonInstruments, POS, medical, telecom
20×4Very commonMenus, multi-line status, test gear, 3D printers
24×2ModerateSlightly wider 2-line panels
40×1Less commonLong single-line labels and tickers
40×2Common (large)Long 2-line industrial displays; fills all 80 characters
40×4Reference onlyOver 80 characters, so it needs two controllers

The HD44780 and DDRAM addressing

The HD44780U is the industry-standard character-LCD controller, and compatible clones (Samsung KS0066, Sitronix ST7066, Sunplus SPLC780, and others) share its instruction set as near drop-ins. Its display RAM (DDRAM) is 80 bytes, one per character, organized internally as two 40-character rows: row 1 at addresses 0x00 to 0x27, row 2 at 0x40 to 0x67. Note the gap between 0x27 and 0x40; the addresses are not contiguous. The controller only ever thinks in these two 40-character rows, so a physical layout is carved out of them and the firmware, not the controller, has to know the real geometry. The standard line-start addresses:

FormatLine 1Line 2Line 3Line 4
16×2 / 20×2 / 24×2 / 40×20x000x40––
16×40x000x400x100x50
20×40x000x400x140x54
A diagram of how character formats map onto DDRAM: two long bars represent internal row 1 from address 0x00 to 0x27 and internal row 2 from 0x40 to 0x67, each 40 characters. Below, 16x2 uses line 1 at 0x00 and line 2 at 0x40; 20x4 uses 0x00, 0x40, 0x14, and 0x54 with lines 3 and 4 continuing rows 1 and 2; and 16x1 Type 2 puts the left 8 characters at 0x00 and the right 8 at 0x40 so writing 16 naively shows only the first 8, with notes that 4-line addresses jump because each internal row is only 40 characters and that one HD44780 holds 80 characters so 40x4 needs a second controller.

For a 4-line display, line 3 is the continuation of line 1 and line 4 the continuation of line 2, which is why 20×4 addressing jumps from 0x00 to 0x40 to 0x14 to 0x54 rather than running in sequence. And because DDRAM address is not screen position, writing past a line’s width does not wrap to the next visible line.

The 16×1 gotcha

“16×1” is not one thing, and this is the classic character-LCD trap. A true Type 1 (1×16) maps all sixteen characters to a single DDRAM row from 0x00, but these are less common. Most 16×1 modules are Type 2, internally an 8+8 display: the left eight characters live at 0x00 to 0x07 and the right eight at 0x40 to 0x47, and the module is initialized as a two-line display even though it has one physical row. Write sixteen characters straight through and only the first eight appear; the fix is to move the cursor to 0x40 after the eighth character. Check the datasheet before assuming contiguous addressing.

The 16-pin interface, 4-bit vs 8-bit, and I²C

The standard interface is the 16-pin header everyone searches for. It runs in 8-bit mode (all of D0 to D7, one byte per Enable pulse) or 4-bit mode (only D4 to D7, each byte sent as two nibbles with two Enable pulses), the latter saving four MCU pins and the more common wiring today. Control is RS (register select, command versus data), R/W (usually tied low to write), and E (the enable strobe). Where pins are scarce, a PCF8574 I²C backpack solders to the 16 pins and drops the host connection to four wires (VCC, GND, SDA, SCL), driving the LCD in 4-bit mode; modules commonly ship at I²C address 0x27 or 0x3F.

PinNameFunction
1VSSGround
2VDDLogic supply, +5V or +3.3V
3V0 / VEEContrast, via potentiometer
4RSRegister select, 0 = command, 1 = data
5R/WRead/Write, tie low to write
6EEnable strobe
7–14D0–D7Data bus, D0–D3 unused in 4-bit mode
15A (LED+)Backlight anode
16K (LED−)Backlight cathode

Fonts and custom characters

Each character is a 5×8 dot cell, the standard font (the visible glyph is 5×7 with the eighth row for the cursor or underline). A taller 5×10 font exists (some datasheets call it 5×11, counting the cursor row) but is only supported on certain modules, so treat it as the less-common option. The built-in font lives in CGROM, which comes in two common ROM variants, a Japanese katakana set (A00) and a European set (A02), whose maps differ, so portable code should not assume a specific table. On top of the fixed font, CGRAM gives 8 custom characters in the 5×8 font (or 4 in 5×10), addressed as character codes 0x00 to 0x07.

Choosing the build

Two decisions turn a character LCD into a spec: the format (how many characters by how many lines) and the readability build (where it has to stay legible). The readability side is a stack of choices: the LCD mode, usually STN for character parts; the polarizer, reflective for sunlight with no backlight, transflective for both sun and dark, or transmissive for backlit use; the backlight color, from the classic yellow-green to blue, white, amber, or RGB; the logic voltage, 3.3V or 5V; and the temperature grade, standard 0 to +50°C or a wide -20 to +70°C and industrial option. Construction is usually COB (the controller potted on a PCB behind the glass, the traditional robust build) or COG (the controller bonded to the glass, thinner and lighter for slim products).

Two decision panels for picking a character LCD. The first, format by characters times lines: 16x2 as the default and category reference; 20x4 as the largest single controller at exactly 80 characters; a group of other stock formats 8x1, 8x2, 16x1, 16x4, 20x2, 24x2, 40x2; and 40x4 and larger flagged as needing two controllers, with a note that firmware must know the layout because DDRAM addressing is not the screen geometry. The second, readability build: polarizer or mode reflective, transflective, or transmissive; backlight color yellow-green, blue, white, amber, or RGB; temperature standard 0 to plus 50 C or wide minus 20 to plus 70 C; and voltage 3.3V or 5V with parallel or I2C and SPI interfaces, noting STN is the character-LCD workhorse mode.

Orient Display builds character LCDs both ways: 16×2 and 20×4 off the shelf, and non-standard glass, backlight color, polarizer, voltage, temperature grade, interface, and pinout as a custom order. If you know the character count and where the display has to stay readable, that is enough to start. See the character LCD and graphic LCD lines for stock formats.