Cheap Arduino 2 Wire LCD Display

Serial Displays are expensive, so lets use a paralell display and a shift register!

This circuit is based on the work of raron.
I just added a Potentiometer to regulate the Contrast. 

You need:

  • 74LS164 shift register
  • HD44780 Compatible Display
  • 1K Resistor
  • Diode
  • Wires (flexible preferred)
  • Stripboard (of cource you can do it on a breadboard/perfboard/whatever too)
  • 10k PCB Potentiometer (could be replaced by a single resistor, but thats specific to the display)

This is how you solder together the parts:

Dont forget to cut the copper lanes beneath the shift register along the red line.
If your done with it it will probably look like this:

Now you have to choose a library, there are at least 2 availabe:

At time of this writing ShiftRegLCD was not compatible with Arduino 1.0, so if you want a compatible version you can get it from here
But i would recomend using new LiquidCrystal.

Go to the download section and grab V 1.1.5 or later.
Earlier versions migt also work but 1.1.5 introduces some performane tweak for the Shiftregister Class.
if you need advice on installing the library check out its documentaton here.

Here is a code example:

Creative Commons Lizenzvertrag


shift register
2 wire
new LiquidCrystal_SR
LCD and shift register soldered
Frinzing layout
Testing LiquidCrystal_SR


I've been working with the folks responsible for the shift register code to talk to LCD (3 different sources) and we're integrating all the work in one place (soon to be in NewLiquidCrystal hopefully). could I ask you to update your blog post to point people to I give my code for people who have latching shift registers, and code from Ragnar, now integrated by Francisco for non latching shift registers (along with a 2 wire only hack). If you could help repoint people, it will help reduce confusion and let people chose the most appropriate of the 2 wiring setups and get arduino 1.0 compatible code. Thanks, Marc

100% Works on Arduino Duemilanove. Thanks.

Hey Flo, I did a 2-wire connection and works like a charm, thanks for the post. My next task is to connect up to 4 LCDs to same arduino. I found this forum post -,5014.0.html - that explains that you may use same RS, R/W & Data lines if you change the Enable Line. Just have to declare a new instance of the function (i.e.: lcd1 & lcd2). I was wondering, If its possible to use the same shift register or I need to double the design? If I have to X2, using a shift reg for 4 LCDs will require 8 pins, 4 shift regs, 4 diodes and 4 resistors instead of just 9 wires, so its a waste of money... may I know what would you do?