LCD Special Characters

The HD44780 chip has two character tables in it's datasheet. pg 17 & 18.

One is labeled as ROM Code: A00 and the other as ROM Code: A02. Is there a way to access A02? It has much more symbols and frankly, I have no need for Chinese or Japanese (sorry, can't tell the difference with LCD font).

With the LiquidCrystal library, it gets all characters from A00. I read the datasheet and can't find any information on how to "unlock" the A02 ROM.

Any insight? I'm very new with LCDs.


A00 and A02 indicates the type of controller. If the name of the controller contains "A00" it has the japanese standard font, if it contains "A02" it has the european standard font. So if you want to use the european standard font you must buy a new display.

You may find it useful to read this thread on LCDs and special characters. At the very end, I posted my sketch code to set up user-defined characters on the HD44780:

Thanks. That makes sense.

If you have the HD44780 or compatible I wrote a little ditty of code to scroll through them with a potentiometer. This can make it easier to figure out a character if you’re not sure. It really started as an exercise in making sure that when the order of magnitude changed I could refresh the screen and avoid having “stuck characters”. This is my first contribution, enjoy. :smiley:

// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

int foo = 0;
int bar = 0;
int temp = 0;
int bigO = 0;
int tempO = 0;

void setup() {
  // set up the LCD's number of rows and columns: 
  lcd.begin(16, 2);
  pinMode(7, OUTPUT); 

void loop() {

  //Take analog reading, store in temp, normalize to 8 bit range..
  temp = (int)analogRead(1)/4;
  //Store order of magnitude.
//Detect if we have changed order of magnitude and clear LCD if this is the case.


  //Update our carry-over values.
  //This one too...
  //Write only to the first row.
  lcd.setCursor(4, 0);
  // Print the number (0-255) to the LCD.

  //Write only to the second row.
  lcd.setCursor(4, 1);
  // Print the character to the LCD.