Custom Large Font For 16×2 LCDs using Arduino

A couple of years ago i was learning to use the Ardiuno and started playing around with an Hitachi HD44780 based 16×2 LCD screen. I soon learned that the screen has 8 customizable character slots. I had found a project where someone used those slots to create there own custom characters that could then be used to form large character font using both rows of the screen. I didn’t like the look of those characters and couldn’t make since of the sketch that person wrote. So i decided i needed to create my own set and use my limited programming skills to create a more user friendly sketch to support my large character font.
Arduino with LCD

In this Instructable i’ll show you how i designed my large character font and break down the sketch to make it easier to understand. But first we need to set up the Arduino and LCD.

Materials Needed:

– Arduino (i used a Nove)
– Hitachi HD44780 based 16×2 LCD
– Breadboard
– 5K Potentiometer
– button or switch
– jumper wires

Step 1: Connecting the LCD to the Arduino

First i want to cover how to connect a Hitachi HD44780 based LCD screen to an Arduino. The first thing you need to do is identify Pin 1 on your display and figure out which pins you need. The first image shows a very simple layout for connecting the LCD to your Arduino. Here is the pin Layout for the LCD.

  • Pin 1 – Grd
  • Pin 2 – VCC
  • Pin 3 – Vee (controls screen contrast)
  • Pin 4 – RS (controls where in the LCD’s memory your writing too)
  • Pin 5 – RW (controls weather your Reading or Writing to the LCD)
  • Pin 6 – E (enables writing to the register)
  • Pin 7 – D0 (not used)
  • Pin 8 – D1 (not used)
  • Pin 9 – D2 (not used)
  • Pin 10 – D3 (not used)
  • Pin 11 – D4
  • Pin 12 – D5
  • Pin 13 – D6
  • Pin 14 – D7
  • Pin 15 – LED+ (LCD back light)
  • Pin 16 – LED-  (Grd)

My LCD only had 15 pins which is fine since 16 should be tied to ground anyway. As you can see in the picture Vee is tied into a potentiometer. This controls the contrast of the screen. The data pins are the individual bits your writing to or reading from the register.

For the purposes of keeping things simple i wired mine up a bit differently. I like to use ribbon cable whenever possible to keep the clutter of wires down. I makes keeping track of the connections allot easier too.

  • RS pin to D7
  • E pin to D6
  • D4 pin to D5
  • D5 pin to D4
  • D6 pin to D3
  • D7 pin to D2
  • V0 tied to a pot to control brightness
  • Grd and R/W tied to ground
  • Vcc to +5V
  • pin 15 to push button/switch that is tied to ground for control of back light

With everything connected we can now go over how i created the fonts.

Step 2: Numerical Font Design

It then came time to think about the font design. What kind of segments would i need to create to make a nice and sharp looking large character font for this screen?

I wanted to start simple and get numbers out of the way first. I figured people would be looking for a good large font to use for an Arduino based digital clock or other project. So logically i started by designing the number 8 since all the segments that comprise the 8 can be mixed to create most of the other numbers. This used up only 6 of the custom blocks. But i still needed one more custom block to be able to display a 0, 1 and  7.
Arduino with LCD connection
The images show the first generation of numbers i produced. A couple of changes where made in the custom blocks to make the numbers look better. I’ll show them in a later step.

Major Components in Project

Hitachi HD44780 based LCD


  • Pin 1 – Grd
  • Pin 2 – VCC
  • Pin 3 – Vee


For more detail: Custom Large Font For 16×2 LCDs using Arduino

This Post / Project can also be found using search terms:

  • custom font lcd 1602

Leave a Comment

= 3 + 6

(Spamcheck Enabled)

Read previous post:
Arduino Automated Gardening System
Garduino-Automated Gardening System using Arduino

This instructable is a guide for setting up an automated gardening system using an arduino and other cheap electronic parts. ...

Scroll to top