Quick Project – Arduino Backlit LCD shield

In this tutorial learn how to make your own backlit-LCD Arduino shield.

Updated 18/03/2013

Let’s see how simple it is to make your own Arduino LCD shield. Sure – you can just buy one, but where’s the fun in that?

Getting Started

Our LCD is a two line, sixteen character backlit LCD. It has a typical HD44780-compatible interface, which makes it very easy to use with Arduino. The other parts required are laid out along with the LCD:3


We have the LCD, a Freetronics Protoshield Basic, a button, a 0.1 uF capacitor and some header pins. We also need some solid core, thin wire to make jumpers.

Next is the plan – our schematic. Even for the smaller projects, this is a wise step. You can iron out the bugs before soldering. From experience with these backlit LCDs, there are two ways to wire them up. Either with a trimpot so you can adjust the display contrast, or without. With my example screen, the display was only clear with the trimpot turned all the way to one side, however your screen may vary.

Please note that the voltage for LCD backlights can vary, some are 5V, some are 3.3V. Check your data sheet and plan accordingly!

Consider the following schematics:



If you are making this circuit without the protoshield, the 0.1 uF capacitor is for decoupling, so place it between 5V and GND. It would be wise to test your LCD using the setup on pin 3 as shown in the second schematic. Then you will have a good idea about the display brightness and contrast. This was done with the usual breadboard setup, but not before soldering the pins into the LCD:


which allowed the LCD to slot into the breadboard nicely:


The brightness shown in the image above is satisfactory, so I measured the resistance between each of the outside pins of the trimpot and the centre. The resulting resistance between the centre and ground was around 15 ohms, so basically nothing. So for this LCD, there will not be any adjustments – and the full schematic above will be used (with LCD pin 3 going straight to GND).

The sketch to drive this LCD is quite simple, for example this will do:

For more information about using LCD modules with your Arduino, please refer to my series of Arduino tutorials.

The next step is to consider the plan for the shield. Thankfully this is a pretty simple operation, and minimal extra components to worry about. There is a catch with regards to the LCD module itself, it has six large metal tabs that need to be avoided if the LCD is to sit flush on the shield:


Kudos to the engineers who had the pinouts printed on the back of the LCD. Thanks!

You can see that one of the tabs has been … removed. Just carefull use a pair of pliers and bend it slowly back and forth. Metal fatigue will take care of the rest. Anyhow, back to the shield. It is a simple task of soldering in some jumper wires to connect LCD pins 4, 6, 11~14 to the Arduino digital pins 4~9:


Also during this stage the reset button and the 0.1 uF capacitor were soldered in. When fitting the capacitor, leave around 5mm of length above the board, so you can push it over to one side, this is to give the LCD enough clearance. Furthermore, the lead from the 3.3V pad to LCD 15 is curved so as to avoid another metal tab on the rear of the LCD. The underside of the shield is quite simple:


To ensure a good solder joint when working with these shields – it is very important to heat the ring around the hole for two seconds if you need to create a solder bridge, or heat the wire for two seconds before attempting to solder it on. Otherwise you will either get a cold joint; or become frustrated and keep adding solder, at which point it leaks through to the other side and becomes a problem to remove.

Now to solder in the LCD. If you can, try and bend the LCD pins 1, 3, 5 and 16 towards the GND line, this will help when you need to connect them later. However, please be careful, if you position the LCD incorrectly you will have to basically start all over again with a new shield. When trimming the header pins, be sure to put a finger over the end to stop the cutting flying into your face:


Once you have the LCD module soldered in, and the ends trimmed – the final soldering task is to bridge the pins to the necessary points. This is relatively easy, just heat up one side of the junction and coax the solder across to the required spot. Sometimes the gap will be too large, so trim up the excess legs of the capacitor into small jumpers, say 3~4 mm long. You can then solder these in between the pads quite easily:


Now – the final soldering task. Snap off some header pins, two of six-pin, and two of eight-pin. Insert them into your Arduino or compatible board as such:


Then place your shield on top and solder the header pins to the shield. And we’re finished… well almost. Before you use the shield, use a multimeter or continuity tester to make sure none of the pins are shorted out, and generally double-check your soldering. You don’t want any mischievous short circuits ruining your new LCD or Arduino board.

Once you are satisfied, plug in your new shield and enjoy your success!


So there you are, another useful Arduino shield ready for action. I hope you enjoyed reading about this project, and hopefully some of you have made one as well. High resolution images are available from flickr.

In the meanwhile have fun and keep checking into tronixstuff.com. Why not follow things on twitterGoogle+, subscribe  for email updates or RSS using the links on the right-hand column? And join our friendly Google Group – dedicated to the projects and related items on this website. Sign up – it’s free, helpful to each other –  and we can all learn something.

The following two tabs change content below.

John Boxall

Founder, owner and managing editor of tronixstuff.com.

16 Responses to “Quick Project – Arduino Backlit LCD shield”

  1. Andy Gelme says:

    The direct approach … Arduino digital output pins driving the LCD input is simple, quick and supported by the standard, bundled LCD library. However, it does use 6 digital output pins.

    If your project requires lots of digital pins, then you might like to consider using just 3 Arduino digital pins and an 8-bit latch to drive the LCD.

    As follows … http://www.arduino.cc/playground/Code/LCD3wires

  2. hlantz says:

    Here’s a post I did on the Adafruit forums of the Protoshielded version: http://forums.adafruit.com/viewtopic.php?f=31&t=15940 . I have done up a proper Eagle schem/board and had a prototype fabbed after that but I need to make some small adjustments to the board design (mainly modifying the silkscreen and adding a second header option) before releasing it; but it’s all based on the same design as in the post.

  3. hlantz says:

    To tag on – if you’re REALLY in a pin crunch, you can use a 74LS164 with a simple AND gate to take the used pin total down to TWO with the ShiftRegLCD library found on http://code.google.com/p/arduinoshiftreglcd/ . You need that extra gate (which can be constructed from a diode and a resistor), but you save a pin!

  4. Jamie Mackenzie says:

    John, the 0.1uF cap is not in the schematic. Does it just sit between +5V and GND, or does it control some aspect of the LCD?

  5. Alastair says:

    I’d be interested to see you do a project with the biggest backlit LCD on the market. I’ve seen 4 displays. Do they come bigger (without getting into iPad territory!) than 4 rows?

    I’m wondering if you could drive 2 rows to display text at double height for bigger text. Have to define your own bitmaps I guess, can special chars be downloaded to the display driver? I’d like to make something that displays basic Track info and Playhead position for an audio playback application on a Headless MacMini. Bonus points for handling inputs from a jog/shuttle kind of rew/fwd input control (not a pot a spring loaded dial) and nice play/pause momo button.

    • John Boxall says:

      It would be a lot easier to just use a smaller LCD monitor (you can get 5 and 7″ 16:9 ones with VGA input, get a mini-DVI adaptor) and have the audio software people take care of it. Hardware would be a fine, that stuff is already on the market

  6. Alastair says:

    Thanks John. The only problem with an LCD is that at certain times my software is also outputting a Video signal (at other times it’s outputting just audio in several languages).

    I’m not sure I can output to two separate displays (one for control display) one for Video Projector in the IDE I’m using (Quartz Builder made by Kineme to turn .qtz files into stand alone apps for OS X). Will look into it, it’s a good idea an I had wondered but never seen a 5″ LCD. A 5″ touchscreen (even B&W) would be ideal actually!

    As for loading custom bitmaps as characters on this project, is that possible?
    Are the bitmaps currently being used contained in library or the LCD itself? It wasn’t clear to me what data is being sent to the LCD —ASCII or bitmap.

    Thanks again, even though I’m yet to by a starters kit, I love reading the projects featured on this site.

    What starters kit would you recommend? (I made a kit synth with 1000s of components in the 80s but don’t really know that much about electronics). I’m interested in projects that can measure things like temperature from multiple points and log data. Also projects that can control environmental things like room lighting and so on.

    • Alastair says:

      Oh I’m in Melbourne, AUST if that helps with a kit recommendation!

    • John Boxall says:

      Hello Alastair
      Yes, you can load custom bitmaps onto the LCD, it is a real headache but can be done. But that’s my opinion! The data is stored in the sketch and sent to the LCD… have a look at the data sheet for any HD44780-interface LCD module and you will see how it works. If you were assembling synths in the 80s this will be a doddle. Here is the link to an ideal starter kit http://bit.ly/bw8Eyq plus you may want some other cheap components available from LBE or Altronics, etc. Once you spend some time tinkering with it you will get a better idea of what to do. We have covered temperature measurement in tutorial chapter two, and also in the microsd shield review http://wp.me/pQmjR-lB
      have fun

  7. CVBruce says:

    Cool! I’ll have to give this a try. Thanks


Leave a Reply

Subscribe via email

Receive notifications of new posts by email.

Arduino Tutorials

Click for Detailed Chapter Index

Chapters 0 1 2 3 4
Chapters 5 6 6a 7 8
Chapters 9 10 11 12 13
Ch. 14 - XBee
Ch. 15 - RFID - RDM-630
Ch. 15a - RFID - ID-20
Ch. 16 - Ethernet
Ch. 17 - GPS - EM406A
Ch. 18 - RGB matrix - awaiting update
Ch. 19 - GPS - MediaTek 3329
Ch. 20 - I2C bus part I
Ch. 21 - I2C bus part II
Ch. 22 - AREF pin
Ch. 23 - Touch screen
Ch. 24 - Monochrome LCD
Ch. 25 - Analog buttons
Ch. 26 - GSM - SM5100 Uno
Ch. 27 - GSM - SM5100 Mega
Ch. 28 - Colour LCD
Ch. 29 - TFT LCD - coming soon...
Ch. 30 - Arduino + twitter
Ch. 31 - Inbuilt EEPROM
Ch. 32 - Infra-red control
Ch. 33 - Control AC via SMS
Ch. 34 - SPI bus part I
Ch. 35 - Video-out
Ch. 36 - SPI bus part II
Ch. 37 - Timing with millis()
Ch. 38 - Thermal Printer
Ch. 39 - NXP SAA1064
Ch. 40 - Push wheel switches
Ch. 40a - Wheel switches II
Ch. 41 - More digital I/O
Ch. 42 - Numeric keypads
Ch. 43 - Port Manipulation - Uno
Ch. 44 - ATtiny+Arduino
Ch. 45 - Ultrasonic Sensor
Ch. 46 - Analog + buttons II
Ch. 47 - Internet-controlled relays
Ch. 48 - MSGEQ7 Spectrum Analyzer
First look - Arduino Due
Ch. 49 - KTM-S1201 LCD modules
Ch. 50 - ILI9325 colour TFT LCD modules
Ch. 51 - MC14489 LED display driver IC
Ch. 52 - NXP PCF8591 ADC/DAC IC
Ch. 53 - TI ADS1110 16-bit ADC IC
Ch. 54 - NXP PCF8563 RTC
Ch. 55 - GSM - SIM900
Ch. 56 - MAX7219 LED driver IC
Ch. 57 - TI TLC5940 LED driver IC
Ch. 58 - Serial PCF8574 LCD Backpacks
Ch. 59 - L298 Motor Control
Ch. 60 - DS1307 and DS3231 RTC part I
Arduino Yún tutorials
pcDuino tutorials

The Arduino Book

Arduino Workshop

Für unsere deutschen Freunde

Dla naszych polskich przyjaciół ...

Australian Electronics!

Buy and support Silicon Chip - Australia's only Electronics Magazine.

Use of our content…

%d bloggers like this: