Most character LCDs use the Hitachi HD44780 or compatible clones like AIP31066 or SPLC780. These share a standard 14/16-pin layout for easy wiring(Embedded Development Basic Tutorial: Detailed Explanation of the 16×2 LCD Module).
The HD44780 instruction set ensures 16×2 and 20×4 displays work with the same LiquidCrystal library. This compatibility simplifies coding for developers.
Clones like KS0066 and ST7066 match the HD44780’s timing and commands. This allows seamless swapping of modules in projects.
I²C interfaces, like PCF8574 or AIP31068, reduce pin count for HD44780-based LCDs. They make connections easier for compact designs.
Why is the Hitachi HD44780 controller the standard for character LCD modules?
The Hitachi HD44780 LCD controller set the industry standard for small character displays. Its simple 14‑pin parallel interface and stable command set meant most 16×2 (and similar) character LCD modules used it or a directly compatible derivative. As a result, code and libraries written for the HD44780 work on nearly every character LCD. This broad compatibility and support keeps the HD44780 (and its clones) as the default choice in alphanumeric LCD designs(Which LCD Display Module is Best for Industrial Applications?).
These cheap LCDs include the controller chip (under the epoxy blob) and six or more header pins for simple microcontroller interfacing. The HD44780 interface uses a standard connector (pins for RS, RW, E, DB0–DB7 plus power and contrast).
It can operate in 4‑bit mode (using only DB4–DB7) to reduce required I/O pins. Only six microcontroller lines (four data plus RS and E) are needed to update the text, and the controller’s built‑in character ROM (CGROM) holds the standard ASCII font and symbols. Because all clones speak the same protocol, Arduino and other microcontroller LCD libraries work out of the box on any HD44780‑based display.
- Standard interface: Character LCDs use a 16‑pin (2×8) parallel header. The HD44780’s control lines (RS, RW, E) and data bus (DB0–DB7, or DB4–DB7 in 4‑bit mode) are fixed. Any microcontroller can drive it with simple GPIOs.
- • Widespread compatibility: Nearly every 16×2 and 20×4 LCD uses an HD44780 or clone. Manufacturers label modules “HD44780 or equivalent” because almost all vendors adopted the HD44780 command set. This means a huge range of displays and drop-in replacements.
- Drop-in clones: Other controllers (such as Samsung/KS0066, KS0073, Sitronix SPLC780, Sitronix ST7066U, or Wuxi i‑Core’s AIP31066) use the same bus and commands as the HD44780. These chips are marketed as “HD44780 compatible,” so firmware works unchanged.
- Low I/O requirement: In practice, only the high data lines (DB4–DB7) and control pins (RS, E) need to be driven for 4‑bit mode. This lets a text display run on just 6 I/O pins (with RW tied low if reads aren’t needed).
- Built‑in font and RAM: The HD44780 includes a CGROM with standard alphanumeric characters and a small CGRAM for custom glyphs. Text can be shown immediately without downloading a font.
- Library support: Popular microcontrollers (Arduino, PIC, AVR, etc.) have libraries (like LiquidCrystal) that assume an HD44780 interface. Engineers can write text output code once and use it on any HD44780‑style display, further reinforcing its dominance.
What features of the HD44780 interface made it so widely adopted?
The HD44780 became popular because it combined easy interfacing with useful built‑in resources. It provides its own character generator and memory, so designers only need to send ASCII codes and commands. The simple 4‑ or 8‑bit bus and single +5V supply let almost any microcontroller drive it. Importantly, vendors standardized on it early, so designers chose the HD44780 to match existing tutorials and examples. In short, the HD44780 required minimal hardware and minimal code changes to show text, making it a natural default for character LCDs.
By today’s count, the HD44780 supports up to 80 characters of display memory (enough for a 20×4 display) and a fixed set of commands (clear display, move cursor, write data, etc.). Its on‑chip ROM holds 208 standard characters (5×8 dots) and 32 special characters (5×11 dots), so no external font download is needed. Designers only need to toggle RS, RW, E and present 4‑bit nibbles on DB4–DB7 to move through this built‑in character set. Since microcontrollers generally have spare I/O pins, any MCU or FPGA can easily “bit-bang” the HD44780 bus. The result is that almost every character LCD interface guide shows the same HD44780 wiring and code, which in turn made the HD44780 concept familiar and widely taught.
- Built‑in character ROM: The HD44780 includes all ASCII letters, numbers, and symbols in CGROM. Projects display text immediately without generating or uploading fonts.
- Internal display RAM: It has 80 bytes of DDRAM for up to 80 characters (e.g. 2×40 or 4×20 lines) and 64 bytes CGRAM for up to eight custom characters. These are updated via simple commands, so advanced graphics aren’t needed.
- Simple command set: Common instructions (clear, home, entry mode, display on/off) cover typical text control. Any MCU can send these via a few GPIO writes.
- 4‑bit bus option: Using only DB4–DB7 halves the required wires. The HD44780 automatically latches high and low nibbles, so sending one byte takes two bus cycles. This cuts pin count while preserving full functionality.
- Low voltage operation: It runs at a single 5V supply (some variants support 3.3–5V), so no exotic power rails are needed. Contrast is adjusted via VEE (pin 3) using a simple potentiometer.
- Example code abundance: Because it was the first common LCD, there are example libraries on Arduino, STM32, PIC, and more. Designers can copy-paste or import code to drive any HD44780 display, easing development.
What makes HD44780-compatible controllers interchangeable?

Most modern character LCD modules use controllers that mimic the Hitachi HD44780. These chips include clones like the SPLC780, KS0066, ST7066, and AIP31066. Each of them uses the same command set, pin interface, and timing, making them drop-in replacements for the original HD44780. Despite coming from different manufacturers, these controllers are functionally identical in standard applications.
Manufacturers label their displays using different controller names, but the underlying protocol remains unchanged. This allows developers to write code once and deploy it across displays using any of these chips. Minor differences, like default contrast or backlight polarity, may exist but don’t affect software compatibility. For users, this creates a broad range of display choices without extra code work.
SPLC780 Series
The Sunplus SPLC780 series (like SPLC780C and SPLC780D) replicates the instruction set and data timing of the HD44780U. It is often found in low-cost LCD modules that do not mention Hitachi at all. These controllers support 4-bit and 8-bit modes, use the same DDRAM/CGROM structure, and require the same initialization sequence.
Many SPLC780-based modules are marked simply as “LCD1602” or “LCD2004” without listing the controller. Despite this, firmware designed for the HD44780 operates identically on SPLC780 modules. Their widespread use in inexpensive displays makes them highly common in entry-level electronics kits and educational projects.
- Chip name: SPLC780C/D
- Interface: 4-bit or 8-bit parallel
- Font support: 5×8 and 5×11 dots
- Common size: 16×2, 20×4
- Code compatibility: Full
- Minor differences: None noted
KS0066 Series
The Samsung KS0066 (or KS0066U) is another widely-used HD44780 clone. It mirrors the command instruction set and display behavior of the HD44780. In most use cases, the KS0066 acts as a full replacement with no software changes required.
Some modules with the KS0066 do show hardware quirks, such as inverted backlight polarity or different contrast defaults. These variations require only minor adjustments to wiring or potentiometer settings, not firmware.
- Chip name: KS0066 / KS0066U
- Interface: 4-bit or 8-bit parallel
- Font support: 5×8 and 5×11 dots
- Common size: 16×2, 20×4
- Code compatibility: Full
- Minor differences: Backlight polarity, contrast level
ST7066 Series
The Sitronix ST7066 (especially ST7066U) is a standard HD44780-compatible controller. It is commonly found in 16×2 and 20×4 modules from various display manufacturers. This chip replicates the full instruction set, addressing, and timing of the HD44780, so no firmware changes are needed.
ST7066-based displays are widely available and often used in industrial equipment, maker boards, and consumer electronics. Their consistent behavior makes them a trusted choice when a known compatible display is required.
- Chip name: ST7066U
- Interface: 4-bit or 8-bit parallel
- Font support: 5×8 and 5×11 dots
- Common size: 16×2, 20×4
- Code compatibility: Full
- Minor differences: Occasionally contrast or pin header layout
AIP31066
The Wuxi iCore AIP31066 is a CMOS driver/controller used in many modern character LCD modules. It explicitly declares itself as HD44780-compatible and supports the same instruction set, font structures, and timing diagrams.
This controller is frequently listed in datasheets as an internal driver for 16×2 or 20×4 modules. It supports both 5×8 and 5×11 dot fonts and is electrically and logically identical to the HD44780U. Some newer variants (e.g., AIP31068) add I2C support, but the base model remains a drop-in replacement.
- Chip name: AIP31066
- Interface: 4-bit or 8-bit parallel (I2C for AIP31068)
- Font support: 5×8 and 5×11 dots
- Common size: 16×2, 20×4
- Code compatibility: Full
- Minor differences: Optional I2C support in extended versions
Other Equivalents
In many product listings, you’ll find multiple controller names grouped together: “AIP31066, HD44780, KS0066, SPLC780, ST7066“. This reflects the reality that all of these controllers are functionally interchangeable. They share the same pinout, instruction codes, and initialization sequence.
The only differences tend to be non-standard startup behavior, undocumented default registers, or manufacturer-specific electrical characteristics. However, for typical microcontroller use, these rarely affect performance. As long as the controller supports the HD44780 command set, it will behave as expected.
- Chip group: SPLC780, KS0066, ST7066, AIP31066
- Interface: HD44780 14/16-pin parallel
- Code compatibility: Universal
- Minor differences: Timing quirks, contrast levels, default settings
Note: Real-world images of each controller module will be provided to visually distinguish their designs and typical usage in commercial LCDs.
What other interfaces are used in character LCD modules besides the HD44780 parallel bus?
Some character LCDs use I2C, SPI, or UART instead of the standard HD44780 parallel interface. These alternatives either use I/O expander chips or have integrated controllers that speak serial protocols directly. While the internal LCD panel often remains HD44780-compatible, the way data is sent differs. This lets designers reduce the number of microcontroller pins used, especially on systems with limited GPIOs.
Most I2C and SPI modules rely on adapter boards or integrated serial drivers to simplify connections. However, using these modules means standard HD44780 libraries don’t work directly — instead, specific libraries or custom initialization code is needed to handle the serial interface.
I²C-Driven LCDs: How does the PCF8574 expand I/O for HD44780 modules?
The PCF8574 is a remote 8-bit I/O expander used to add I2C capability to HD44780 displays. It’s commonly found on small “backpack” boards soldered to standard 16×2 or 20×4 LCDs. This chip doesn’t replace the HD44780 — instead, it outputs digital signals to the parallel input pins (RS, E, D4–D7).
Software sends commands over I2C to the PCF8574, which toggles the parallel pins accordingly. The LCD still behaves like a parallel display, but it only uses two wires (SDA, SCL) from the microcontroller. Since the pin mapping from the PCF8574 to the LCD can vary, configuration code must define which PCF8574 output controls which LCD line.
- Chip name: PCF8574 (I/O expander)
- LCD used: HD44780-compatible
- Interface type: I2C to parallel
- Microcontroller wires: 2 (SDA, SCL)
- Code needs: Custom pin mapping
- Use case: Reducing pin usage in microcontroller projects
Integrated I²C LCD Drivers: What is special about PCF2119x and AIP31068?
The PCF2119x (from Philips/NXP) and AIP31068 (from Wuxi iCore) are fully integrated LCD controllers that natively speak I2C. Unlike PCF8574 backpacks, these chips do not rely on external HD44780 controllers. They generate their own LCD driving signals and accept I2C commands directly.
Many of these chips support ASCII character writing and HD44780-like instructions over serial. This means developers can treat them similarly to standard LCDs but without manual I/O expansion. These displays are especially useful in embedded systems with few available pins and tight board space.
- Chip names: PCF2119x, AIP31068
- LCD control: Built-in
- Interface type: Native I2C
- Command compatibility: Similar to HD44780
- Board space saved: Yes (no backpack needed)
- Use case: Minimal wiring, embedded applications
SPI/UART LCD Modules: How do serial text displays work?
Some LCD modules contain a microcontroller inside that receives SPI or UART input and updates the display. These modules behave like serial terminals — you send plain ASCII text, and the display shows it. Internally, the controller drives an HD44780-compatible LCD, but this is hidden from the user.
Since these modules run their own firmware, they use custom command sets, which can include text positioning, backlight control, and even animations. However, standard HD44780 libraries won’t work. Instead, users must use a module-specific protocol or driver.
- Interface types: SPI, UART
- Control method: Serial input to internal MCU
- LCD used: Often HD44780-compatible
- Library needed: Module-specific
- Use case: Simple serial control, remote displays, debugging
Comparison: How do these serial interfaces differ?
Interface Type | IC Example | Internal HD44780? | Microcontroller Wires | Requires HD44780 Library? | Notes |
---|---|---|---|---|---|
I2C (expander) | PCF8574 | Yes | 2 | Yes (with pin mapping) | Most common backpack |
I2C (native) | PCF2119x | No | 2 | No | Fully serial control |
I2C (native) | AIP31068 | No | 2 | No | Works like UART LCD |
UART | Built-in MCU | Hidden | 1 (TX) | No | Text terminal-style control |
SPI | Built-in MCU | Hidden | 3 | No | Module-specific commands |
These alternative interfaces give designers more flexibility in routing, wiring, and firmware planning. But each one changes how software interacts with the LCD hardware.
How Do You Wire and Initialize HD44780-Family LCDs?
Wiring and initializing HD44780-family LCDs is straightforward due to their standard 14/16-pin layout and consistent initialization sequence. Connect VSS to ground, VDD to 5V, and adjust Vo for contrast. Use 4-bit mode to save pins or 8-bit mode for faster updates, with libraries like LiquidCrystal handling commands across HD44780, ST7066, SPLC780, KS0066, and AIP31066. Below, we explore practical steps for setup and use.
In a typical project, a developer connects a 16×2 LCD to a microcontroller by wiring RS, E, and D4–D7 (for 4-bit mode) and uses a potentiometer for Vo to set clear text visibility. For 20×4 displays, understanding DDRAM addressing (lines 1 and 3 as one 40-character segment, lines 2 and 4 as another) ensures correct text placement. The backlight (pins 15–16) may require a resistor or reversed polarity, depending on the module.
- Connect Pins: Wire VSS (pin 1) to ground, VDD (pin 2) to 5V, and Vo (pin 3) to a potentiometer.
- Choose Mode: Use 4-bit mode (D4–D7) to save pins or 8-bit mode (D0–D7) for speed.
- Initialize: Send 0x3 three times, then 0x2, using LiquidCrystal library.
- Set Contrast: Adjust Vo to ~0.4–1V for clear text.
- Wire Backlight: Connect LED+ (pin 15) to 5V via a resistor, LED– (pin 16) to ground.
How Does DDRAM Addressing Work for Multi-line LCDs?
DDRAM addressing in HD44780-family LCDs defines where text appears, with 16×2 LCDs using addresses 0x00 (line 1) and 0x40 (line 2), and 20×4 LCDs mapping as two 40×2 segments (lines 1 and 3, lines 2 and 4). Libraries like LiquidCrystal set the 2-line mode bit to handle this, ensuring correct text placement.
For example, a developer displaying data on a 20×4 LCD must use begin(20,4) in the LiquidCrystal library to account for the 40×2 segment mapping. Sending text to line 3 starts at address 0x00 + 0x14, as lines 1 and 3 are treated as one continuous segment. This setup ensures accurate text positioning across HD44780-compatible displays.
- Set 16×2 Addresses: Use 0x00 for line 1, 0x40 for line 2.
- Set 20×4 Addresses: Map lines 1 and 3, lines 2 and 4 as 40×2 segments.
- Configure Library: Call begin(20,4) for 20×4 LCDs.
- Verify Compatibility: Works across HD44780 clones.
How Do Voltage and Contrast Settings Impact LCD Performance?
Voltage and contrast settings are critical for HD44780-family LCDs, with most requiring 5V for VDD and 0.4–1V for Vo to adjust contrast. The backlight (pins 15–16) typically connects LED+ to 5V via a resistor, with LED– to ground, though some modules reverse this polarity.
In a project, a developer might notice faint or blacked-out text on a 16×2 LCD and adjust the potentiometer on Vo to achieve clear characters. For the backlight, checking the module’s polarity ensures proper illumination. These settings, consistent across HD44780 clones, ensure reliable display performance(How Should You Drive Backlight in an Embedded LCD Display?).
- Set Voltage: Connect VDD to 5V, check module for 3.3–5V support.
- Adjust Contrast: Use a potentiometer to set Vo to 0.4–1V.
- Wire Backlight: Connect LED+ to 5V via a resistor, verify LED– polarity.
- Test Display: Ensure clear text and proper backlight operation.
Code Example for Initializing a 20×4 LCD in 4-bit Mode:
#include
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // RS, E, D4, D5, D6, D7
void setup() {
lcd.begin(20, 4); // Initialize 20x4 LCD
lcd.setCursor(0, 0); // Line 1
lcd.print("Line 1 Text");
lcd.setCursor(0, 2); // Line 3 (address 0x00 + 0x14)
lcd.print("Line 3 Text");
}
void loop() {}
FAQ
Can HD44780 modules display graphics or only text?
HD44780 modules are limited to text and predefined characters, but you can create custom 5×8 dot patterns for simple graphics. For full graphics, consider OLED or graphical LCDs instead.
Do I need to change my code when switching between SPLC780 and AIP31066?
No. If both are HD44780-compatible, you do not need to change your code.
Can I damage the LCD if I wire the backlight incorrectly?
Yes. Reversing the LED+ and LED– pins or skipping the resistor can damage the backlight.
Why does the display flash or flicker?
It may be a delay issue. Add short waits between commands, especially during setup.
Are There Libraries for Non-HD44780 LCD Controllers?
Some non-HD44780 controllers, like PCF2119x, require specific I²C libraries. Search for the controller’s library or check module documentation.