Customer Login
If you are already registered, please log in.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
Browse our selection of 1602 and 2004 LCD displays, I2C backpack modules, Arduino and ESP boards, and electronic components for your next project.
If you are already registered, please log in.