Electronics / Displays

LCD Custom Character Generator (HD44780, Arduino)

Draw a 5 × 8 pixel custom character for HD44780-compatible 16×2 and 20×4 LCDs and copy the byte array with Arduino LiquidCrystal code to create and show it.

LCD Custom Character Generator (HD44780, Arduino): An HD44780 display stores up to eight custom characters in its CGRAM, each eight rows of five pixels. Each row is a byte whose lowest five bits are the pixels, leftmost in the highest bit. The code defines the array, creates the character in slot 0 with lcd.createChar, and writes it with lcd.write(byte(0)). Runs 100% locally in your browser with zero server file uploads.

Runs
In your browser
Cost
Free · no sign-up
Availability
Ready to use
LCD custom character generatorLocal processing

Runs entirely in your browser

Code

byte customChar[8] = {
  0x04,
  0x0E,
  0x0E,
  0x0E,
  0x1F,
  0x00,
  0x04,
  0x00
};

// in setup():
lcd.createChar(0, customChar);
lcd.setCursor(0, 0);
lcd.write(byte(0));
Load from code

HD44780-compatible 16×2 and 20×4 displays hold up to eight custom characters of 5 × 8 pixels, numbered 0 to 7. Each row is a byte whose lowest five bits are the pixels, leftmost in the highest. The code uses the Arduino LiquidCrystal library; leave the bottom row empty where the cursor underline appears.

Ideas for characters

Battery levels, signal bars, arrows, a degree sign wider than the built-in one, a heart, a bell, or a custom logo split across two or four characters side by side.

For a whole dot-matrix display, use the LED matrix editor.

Built-in characters

The HD44780's own character set includes ASCII letters and digits and, depending on the ROM version, Japanese katakana or Western European accented letters. The ASCII table lists the standard codes it shares with computers.

Custom characters are lost when the display loses power, so create them in setup() every time.

How to use it

  1. Click or drag over the 5 × 8 grid to draw the character.
  2. Choose hexadecimal or binary output.
  3. Copy the code into your sketch and call lcd.createChar.

Privacy & limitations

Everything runs in your browser.

Related tools

Frequently asked questions

How many custom characters can I use?

Eight at a time, slots 0 to 7. You can redefine a slot at any time, and characters already on the screen change with it.

Why leave the bottom row empty?

The cursor underline appears on the eighth row, and most built-in characters use only seven, so leaving it blank keeps your character in line with text.

Does it work with I2C backpacks?

Yes: LiquidCrystal_I2C and similar libraries have the same createChar and write calls.

Free tool · runs in your browser · no account required