magnifier
Language
  • English
  • German
Currency

Tools

LCD Custom Character Generator

Free LCD Custom Character Generator for Arduino — HD44780 1602 and 2004

Every Arduino project with a 16×2 or 20×4 LCD display eventually needs custom characters — a temperature symbol, battery icon, progress bar, or large clock digits that the built-in font doesn't include. Our free LCD Character Designer lets you draw custom characters pixel by pixel, preview them on a simulated HD44780 display, and export ready-to-paste Arduino code. No software to install, no account needed.

Works with all HD44780-compatible LCD displays including the standard 1602 (16 characters × 2 rows) and 2004 (20 characters × 4 rows), connected via 4-bit parallel, 8-bit parallel, or I2C backpack. Compatible with the Arduino LiquidCrystal and LiquidCrystal_I2C libraries.

Two Design Modes

The designer has two tabs: Single Characters for standard 5×8 pixel custom characters, and Big Character for large 15×16 pixel designs that span multiple character cells — perfect for oversized clock digits and dashboard icons.

How to Use: Single Character Mode (5×8)

Step 1 — Select a Character Slot

The HD44780 LCD controller chip has exactly 8 custom character slots, numbered 0 through 7. This is a hardware limit built into every HD44780 LCD ever made — you cannot have more than 8 custom characters displayed at the same time. The slot thumbnails at the top show all 8 slots with a tiny LCD-style preview. Click any slot to select it for editing. Filled slots show a dot indicator.

Step 2 — Draw Your Character

Each custom character is a 5 pixel wide × 8 pixel tall grid. Click any cell to toggle it on or off. Click and drag to paint multiple pixels. The drawing grid uses large cells for easy editing, with a real-time LCD-style preview shown at the same size next to it.

Use the toolbar buttons below the grid: Clear erases all pixels, Invert flips lit and unlit pixels, and the arrow buttons shift the entire design one pixel in any direction — useful for centering your character or creating animation frames.

Step 3 — Use the Symbol Library

Click the Symbol Library bar to expand it. Over 70 pre-designed characters are organized into categories: Arrows, Faces, Hearts and Stars, Music and Sound, Battery and Power (full, 75%, 50%, 25%, empty, charging), Signal and WiFi (signal bars, WiFi icon, Bluetooth, antenna), Progress Bar segments, Weather (sun, cloud, rain, moon, thermometer), and UI Elements (checkmark, lock, home, gear, clock, mail, bell, and many more).

Click any symbol to instantly load it into the currently selected slot. Use it as-is or modify it on the drawing grid to fit your project.

Step 4 — Preview on the Simulated LCD

The LCD Display Preview at the top shows a realistic simulation of your actual LCD, complete with the characteristic dot-matrix pixel styling and backlight color. Switch between 16×2 and 20×4 display sizes and three backlight colors — Green (classic), Blue (modern), and Yellow-Green — to match your physical display.

Type any text in the input field and it renders on the simulated display using the built-in HD44780 font. To show your custom characters, type a backslash followed by the slot number: \0 displays slot 0, \1 displays slot 1, and so on up to \7. This lets you see exactly how your custom characters look alongside regular text — for example, typing Temp: 25\0C \1\2 would show a temperature reading with your custom degree symbol in slot 0 and icons in slots 1 and 2.

Step 5 — Copy the Arduino Code

The Arduino Code section at the bottom generates complete, ready-to-paste code. Each custom character becomes a byte array with 8 rows of binary values, exactly matching what the Arduino lcd.createChar() function expects. The code includes the #include header, all character arrays, lcd.createChar() calls in setup(), and example lcd.write(byte(N)) calls showing how to display each character. Copy the code, paste it into your Arduino IDE sketch, and it works immediately.

How to Use: Big Character Mode (15×16)

The HD44780 only allows 5×8 pixels per character cell, but you can create larger designs by combining multiple cells. Big Character Mode gives you a 15 pixel wide × 16 pixel tall canvas that spans 3 columns and 2 rows of character cells.

Drawing on the Big Canvas

The 15×16 grid works exactly like the single character grid — click and drag to draw. Dashed lines on the canvas show where each 5×8 cell boundary falls, so you can see how your design will be divided. The tool automatically splits your drawing into 6 separate 5×8 character slots.

Big Digit Presets

Click any of the digit preset buttons (0-9, colon, dot, dash) to instantly load a pre-designed big number. These are specifically designed for building large clock displays — load "1", "2", ":", "4", "5" to see a big "12:45" on the simulated LCD. Each preset uses thick, readable strokes that look great on actual hardware.

Load any preset, then customize it on the canvas. Adjust stroke thickness, round corners, or completely redraw to match your project's style.

How It Works on Real Hardware

The big character uses 6 of the 8 available custom character slots, leaving 2 slots free for small icons or indicators. The generated Arduino code includes a showBigChar(col, row) function that creates all 6 character definitions and places them at the correct cursor positions on the LCD. Call this function each time you need to display or update the big character.

For a clock display showing multiple big digits, your code would call showBigChar() multiple times, updating the character definitions between digits. Since the HD44780 updates character RAM instantly, previously displayed characters change too — this is why clock projects typically redraw the entire display each second.

Understanding HD44780 Custom Characters

The HD44780 character ROM contains 256 pre-defined characters, but positions 0-7 map to the custom character RAM instead. When you call lcd.createChar(0, myChar), you're writing 8 bytes of pixel data into this RAM. Each byte represents one row of the character, with the lower 5 bits controlling the 5 pixels from left to right. The designer handles all this encoding automatically — you just draw pixels and copy the code.

Important: custom character 0 can sometimes conflict with the null terminator in C strings. If lcd.print() stops at your custom character, use lcd.write(byte(0)) instead, which sends the raw byte without string interpretation. The generated code already uses this correct syntax.

Common Custom Character Projects

Temperature display: Use a thermometer icon in slot 0 and a degree symbol in slot 1. The library includes both.

Battery indicator: Load all 5 battery levels (full, 75%, 50%, 25%, empty) into slots 0-4. Update the display by writing the appropriate slot number based on voltage readings.

Signal strength meter: The library includes 4 signal bar levels plus a full signal icon. Assign them to slots and switch between them based on your wireless signal strength.

Progress bar: Use the 5 progress bar segments (empty through full) to create a smooth progress bar across the display. Each character position represents one segment of the bar.

Big clock: Use Big Character Mode to design your digit style, then cycle through the 10 digit presets at runtime to display the current time in large, readable numbers.

Try It Now

The full designer is ready to use above. Draw custom characters, browse the symbol library, design big digits, preview on the simulated LCD, and export Arduino code — all free, right in your browser.

Compatible Hardware

The LCD Character Designer works with any HD44780-compatible display: 1602 (16×2) and 2004 (20×4) character LCDs, displays connected via 4-bit mode (using 6 Arduino pins), I2C backpack modules using PCF8574 or PCF8574A (2 pins: SDA and SCL), and 8-bit direct connection. Compatible Arduino libraries include LiquidCrystal (built-in), LiquidCrystal_I2C, hd44780 (by Bill Perry), and NewLiquidCrystal. Works with Arduino Uno, Nano, Mega, ESP8266, ESP32, and any microcontroller with a LiquidCrystal-compatible library.

More Tools for Your Project

Building an LED matrix display? Try our Pixel Font Designer for MAX7219 custom fonts, or the LED Matrix Animator for frame-by-frame animations. Need to calculate component values? Use our Resistor Color Code Calculator with Ohm's Law, LED sizing, and voltage divider tools.

Get the Parts

Browse our selection of 1602 and 2004 LCD displays, I2C backpack modules, Arduino and ESP boards, and electronic components for your next project.

You have successfully subscribed!