

The LCD 20x4 is a Liquid Crystal Display module capable of displaying 20 characters per line across 4 lines. It is widely used in embedded systems and microcontroller projects for presenting textual information such as sensor readings, system status, or user instructions. This display is based on the HD44780 controller, which is compatible with most microcontrollers, including Arduino, Raspberry Pi, and others.








Below are the key technical details of the LCD 20x4 module:
| Parameter | Value |
|---|---|
| Display Type | 20x4 Character LCD |
| Controller | HD44780 or compatible |
| Operating Voltage | 4.7V to 5.3V |
| Backlight Voltage | 4.2V to 4.6V |
| Current Consumption | 1-2 mA (without backlight), ~120 mA (with backlight) |
| Character Size | 5x8 dot matrix |
| Interface Type | Parallel (4-bit or 8-bit mode) |
| Operating Temperature | -20°C to +70°C |
The LCD 20x4 module typically has 16 pins. Below is the pinout and description:
| Pin | Name | Description |
|---|---|---|
| 1 | VSS | Ground (0V) |
| 2 | VDD | Power supply (4.7V to 5.3V) |
| 3 | VO | Contrast adjustment (connect to a potentiometer) |
| 4 | RS | Register Select (0: Command, 1: Data) |
| 5 | RW | Read/Write (0: Write, 1: Read) |
| 6 | E | Enable signal (triggers data read/write) |
| 7-14 | D0-D7 | Data pins (D0-D3 used in 8-bit mode, D4-D7 used in 4-bit mode) |
| 15 | A (LED+) | Backlight anode (connect to +5V via a resistor) |
| 16 | K (LED-) | Backlight cathode (connect to ground) |
The LCD 20x4 can be connected to an Arduino UNO using the 4-bit mode to save pins. Below is a typical wiring configuration:
| LCD Pin | Arduino Pin |
|---|---|
| VSS | GND |
| VDD | 5V |
| VO | Potentiometer (middle pin) |
| RS | Digital Pin 12 |
| RW | GND |
| E | Digital Pin 11 |
| D4 | Digital Pin 5 |
| D5 | Digital Pin 4 |
| D6 | Digital Pin 3 |
| D7 | Digital Pin 2 |
| A (LED+) | 5V (via 220Ω resistor) |
| K (LED-) | GND |
Below is an example code to display text on the LCD 20x4 using the Arduino LiquidCrystal library:
#include <LiquidCrystal.h>
// Initialize the library with the pins connected to the LCD
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
// Set up the LCD's number of columns and rows
lcd.begin(20, 4);
// Print a message to the LCD
lcd.setCursor(0, 0); // Set cursor to column 0, row 0
lcd.print("Hello, World!");
lcd.setCursor(0, 1); // Set cursor to column 0, row 1
lcd.print("LCD 20x4 Demo");
lcd.setCursor(0, 2); // Set cursor to column 0, row 2
lcd.print("Line 3 Example");
lcd.setCursor(0, 3); // Set cursor to column 0, row 3
lcd.print("Line 4 Example");
}
void loop() {
// Nothing to do here
}
No Display on LCD
Flickering or Garbled Text
Backlight Not Working
Text Not Displaying Correctly
lcd.begin(20, 4) function is called in the setup.Can I use the LCD 20x4 with a 3.3V microcontroller?
How do I clear the display?
lcd.clear() function in your code to clear the screen.Can I use the LCD without a potentiometer?
What is the maximum cable length for connecting the LCD?
By following this documentation, you can effectively integrate the LCD 20x4 into your projects and troubleshoot common issues with ease.