Controlling a Character LCD With an Arduino





Introduction: Controlling a Character LCD With an Arduino

Hello! Today I will be introducing Character LCDs and showing how to connect them to an Arduino.
It is all very simple and uses only 6 PINS TO INTERFACE WITH!

Note: the image is not mine and comes from

Step 1: Parts Needed

You will need the following components to perform this project:
1x '''Arduino (any kind will do)'''
1x '''HD44780 character LCD'''
'''lots of non-stranded wire'''
One 10k Potientiometer

Step 2:

LCDs are pretty usefull things.
They can be used for a project which needs to display something small, to huge machinery.
After all, they are always used for the same purpose.

I will be using a HD44780 Character LCD, with a 16x2 display. (2 lines, 16 characters per line)
They come in all sizes, from 8x2 to 40x4.
they have a 8x5 font and can use up to 8 custom characters.
These LCDs have 16 pins, but only 11 of them are for communication. we will use 6 of them for 4 bit mode.

These LCDs can be run in 4 or 8 bit mode, depending on how many pins you have.

4 bit mode is usefull for saving pins, but only has a refresh rate of 74ms

8 bit mode is usefull for a fast refresh rate (5ms), usefull for displaying custom character animations.

The image shows a few Custom Characters.

Note: the image is not mine and comes from

Step 3: Connections

Connect the LCD according to this picture:

Step 4: Test Code 1: Hello World

First, open the file i have added to this step.
Second, copy and paste the file into the Arduino IDE.
Lastly, click the UPLOAD TO I/O board button, or CTRL+U
if everything went to plan, it should now say "Hello World!".

Step 5: Test Code 2: Using 2 Lines

NOTE: For this to work, you will need Arduino - 0017.
open and upload this next program.
it will now say:


Step 6: Test Code 3: Custom Characters

NOTE: to use this feature, you will need Arduino - 0017 or higher.
Now what we will need to do is download LCD CUSTOM CHAR CREATOR.exe  (download below)
Also open the Arduino IDE and copy and paste Arduino_custom_char_example.txt into the IDE.

Open up LCD CUSTOM CHAR CREATOR.exe and type ",0x" into the "Insert before entries" box.
Then click on the pixels to create a character. (I made a smiley)
Then, copy the hex code (highlited in the picture to this part in the IDE:

uint8_t custom_hex1[8] = {0x00,0x0A,0x00,0x11,0x0E,0x00,0x00,0x00};

NOTE: on the program, it has a comma at the beginning, so just highlight the text after the first comma, and press CTRL+C to copy.

Then click UPLOAD TO I/O BOARD     (Or CTRL+U)



    • Epilog Challenge 9

      Epilog Challenge 9
    • Paper Contest 2018

      Paper Contest 2018
    • Science of Cooking

      Science of Cooking

    We have a be nice policy.
    Please be positive and constructive.





    Where can I find the Arduino source code for the LCD scope please

    Kind regards

    You can fix that by changing the line "lcd.print(1, BYTE);" to "lcd.write(byte(1));"

    It should do the exact same thing

    Thanks a lot man!! Really!!!

    Or just use Google python app to create the characters without having to install Wine on linux to get this to work.

    Hi, this instructable is exactly what i have been looking for but i am having a problem downloading the custon character creator it keeps wanting to download as a .tmp file amd my computer keeps asking if i want to go online to find a program to open it , which does not work either. I am using a Windows Vista machine. Is this the only character creator that will work with my Arduino? Your help in this matter will be greatly appreciated.

    Thank you

    change the .tmp to .exe that works for me because i had the same problem

    you do know that the pot has to be connected to GND - LCD3 - +5volt. yet it will probably work your way.

    thank, i use AVR and this help me much

    Hmm, i must be doing something wrong because when I hooked it up and ran the code, all I saw on the first line was squares, nothing else. When i was looking at it from an angle I saw an 'o' and saw a cursor blinking but that's about it... Wired it up exactly like the image, but didn't seem to work. Also, in the Arduino code, it says pin 11 is RW, but on the image, there is no pin 11 connected, and RW on my LCD module is actually pin 5... I tried rewiring it according to the comments in the Arduino code, but then the boxes didn't even come up, so i'm at a loss...