Source: https://mokxi.com/parts/lcd2004
Updated: 2026-11-10

Part

# Character LCD, 20x4

Four rows of twenty on the same controller as the 16x2. Text that runs off row 0 carries on in row 2.

See every part

- 16 pins
- In 1 project
- In 1 lesson

Drawn live by the editor's own code, at the size you see it.

At a glance

## The Character LCD, 20x4 in brief

What it is, and where it sits on the bench.

The LCD2004 is the 20x4 character LCD with the bare sixteen-pin header, VSS, VDD, V0, RS, RW, E, D0 to D7, A and K, on the same HD44780 controller as the 16x2. Unlike the lcd2004i2c, it has no PCF8574 backpack and no address. It is a 5 V module. In four-bit mode it takes six signal wires, RS, E and D4 to D7, to any digital pins on an Uno, with RW tied to ground; an ESP32 can drive the same six from its 3.3 V pins while VDD stays on 5 V. Mokxi models the four-bit start-up, the byte taken on the falling edge of E, the busy time after every byte and after a clear, CGRAM, and the contrast: the drive is VDD minus V0, so V0 at ground is fully dark and a 10 k pot shows text only near its ground end. Four rows are the controller’s two 40-character lines, so the rows start at 0x00, 0x40, 0x14 and 0x54 and a long print runs off row 0 into row 2. Nothing is read back, there is no 5x10 font, and bias, temperature and viewing angle are not modeled.

Family

Displays

Pins

16

Pins

## 16 pins

Named as the editor names them, so a wire lands where you expect it.

Pin

What it does

VSS

Ground.

VDD

Ground and 5 V.

V0

Contrast. Near VSS is dark text; at VDD the glass is empty.

RS

Low for a command, high for a character.

RW

Tie it to ground: nothing here answers a read.

E

The clock. The byte is taken on the falling edge.

D0

D1

D2

D3

D4

D5

D6

D7

A

The backlight LED.

K

The backlight LED.

How to use it

## How to use a 20x4 LCD with an Arduino, without I2C

Six signal wires in four-bit mode: RS to pin 2, E to 3 and D4 to D7 to pins 4 to 7. VDD goes to 5 V, and VSS, RW and V0 to GND, which puts the contrast at full. Create a LiquidCrystal with those six pins and call begin(20, 4): the 20 and the 4 are what give setCursor() the right row starts.

The controller has two lines of memory, not four, so the rows start at 0x00, 0x40, 0x14 and 0x54. In the project beside this, the bare panel prints forty characters in one go and the second twenty land in row 2, not row 1. If the glass is empty, look at V0: on a 10 k pot the text only shows near the ground end of the turn.

Part pin

Board pin

VSS

GND

VDD

5 V

V0

GND

RS

Pin 2

RW

GND

E

Pin 3

D4

Pin 4

D5

Pin 5

D6

Pin 6

D7

Pin 7

LiquidCrystal compiles on every board here. With the backpack fitted it is the lcd2004i2c part instead, on two wires.

Click to open it in the editor

This is the simulator itself, running here. Click anything to open it in the editor.

Open this project in the editor Read the full tutorial

Four rows on the bare 20x4 with LiquidCrystal

How it is modeled

## What is true about the Character LCD, 20x4, here

In its help article’s own words: what the simulation gets right, and where it stops.

### Not modeled

The same as the 16x2: nothing is read back (the busy flag, the address counter and
DDRAM all read nothing), there is no 5x10 font, and bias, temperature and viewing
angle do not exist. On the backpack, the PCF8574's input port and its interrupt pin
are not there either.

From 20x4 character LCD, in full.

Projects

## See the Character LCD, 20x4 in a project

One built-in project uses it. It opens in the editor, already wired.

Lessons

## Where it turns up in a lesson

One lesson places it in its own circuit.

### Learn articles

1 lesson

- Arduino LCD 20x4: I2C Example Code and Library

Boards

## The boards it is shown on

This board has a built-in project with the Character LCD, 20x4 in it.

- Arduino Uno R3

Libraries

## Arduino libraries for the Character LCD, 20x4

Built in, so the sketch compiles with nothing to install. Each page has the calls, the wiring and an example to run.

- LiquidCrystal

More parts

## The rest of the bench

Every one of these is drawn and simulated the same way.

Full-size breadboard

A real 0.1 inch grid with the rails and the center channel, 63 columns wide.

Jumper wires

Drag from any pin or hole to any other. Corners snap, and you can drag them.

Power

A supply rail at the voltage you choose.

Ground

The other end of every circuit.

LED

Lights when current flows. Five colors, and the brightness is what your eye would see.

Filament lamp

A tungsten bulb in a holder: an inrush when it is switched on cold, tens of milliseconds to warm up, and dim on half its voltage.

Resistor

Any value you like, with the color bands drawn to match.

ESP32-C3-DevKitM-1

A RISC-V board that runs your firmware at 160 MHz on the real memory map.

Pushbutton

A 12 mm tactile switch. Hold it while the simulation runs.

Raspberry Pi Pico

The RP2040 board on our own Cortex-M0+ core. Pick a program and press Run.

Raspberry Pi Pico W

Raspberry Pi Pico W (RP2040). The same board and the same pinout as a Pico, with the CYW43439 on it. The WiFi is simulated (no radio; real internet through the Cloud panel’s switch), and the on-board LED, which hangs off that chip rather than off GP25, is driven through the same path. Everything else is the Pico.

Raspberry Pi 4 Model B

Raspberry Pi 4 Model B: the 40-pin header, driven by main.py with RPi.GPIO or gpiozero.

See every part

## Wire up the Character LCD, 20x4

Open the editor and push it into the breadboard. It is free, and it runs on your own machine.

Start building free Open the editor
