Introduction: Beginning LCDs

Picture of Beginning LCDs

NOTE: I finally got my camera figured out so there should only be 1 or 2 blurry images. On with the Instructable!

LCDs are one of the coolest things to add to any project right now. You can use them to display things from the speed of your bike, to the amount of room being used up on your RAM. This Instructable will give you a general description on how LCDs work, and how to get started using them. The information provided here will give you enough information to even develop control circuits on any Microcontroller. LCDs are a lot simpler than you think!

Step 1: How They Work

Picture of How They Work

Most LCDs have a HD44780 LCD driver in them. The HD44780 is the most common LCD driver and is very easy to connect to. A LCD with this driver typically has 14 or 16 pin, with the first being ground and the second being 5V+. This is the only LCD type I will cover today being it is so common. Very common. LCDs of this type are parallel devices. That means that 8 bits of data are sent side by side (or parallel to each other) instead of in line. This is also the way parallel printer ports work which is why it such a popular decision to connect a LCD to a parallel port. Data is sent to LCD screens in a kind of 8-bit Binary ASCII code. For example: 01000001 translates to a capital a. 01000001=A. There are special symbols too like: 11110100=the Pi sign. In the instance of HD44780 driven LCDs, the first bit of data is the 14th pin and the last bit of data is the 7th pin. Unless you haven't figured it out already, this means that building a test rig, or interfacing to a microcontroller would be very simple.

Step 2: Building a Test Rig

Picture of Building a Test Rig

Based on the previous information, I will show you how to make a very simple manual LCD test rig that allows you to enter text and symbols which in turn teaches you exactly how they work. Below is the schematic. The jumpers (switches 1-8) have pull-up resistors so that a missing jumpers gives a logic 1 or high.


printed circuit board with individual contacts
10 4.7k resistors
14 wire ribbon cable
any wire to use for wire jumpers
10k potentiometer
pushbutton momentary switch
2x8 jumper assembly (an eight switch DIP switch would be better. I recommend that actually)
8 jumpers
SPST switch
1 wire for power and 1 for ground to your LCD
LM7805 5v DC regulator (or other 5v regulator)
2 small alligator clips
9V battery clip
9V battery

Optional if you have an LCD wired to a male parallel port:

female parallel port


Soldering iron
Electrical tape
Wire strippers
Helping hand (optional but very useful)

Step 3: Wire the Jumpers

Picture of Wire the Jumpers

Solder your jumper assembly to the board leaving a little bit of room for other components. Solder together the first line. This will be you ground line.

Step 4: Add the Switches

Picture of Add the Switches

There are 2 switches in this testing circuit. The first is a SPST switch connected to the Register Select line of the LCD. This switch is used to tell the LCD whether you are sending a command or a character signal. The second is a momentary switch connected to the Enable line. This switch is used tell the LCD to accept the command. Both switches will have pull-up resistors.

Step 5: Resistors

Picture of Resistors

Each jumper and each switch has a 4.7k pull-up resistor. This is so that any closed circuit through a jumper or switch generates a logic 0 (or low). leave a space between each switch/jumper and its resistor. This space is where you will put your ribbon cable connecting the LCD. One side of the line of resistors should be connected together. This will be the positive rail.

Step 6: Contrast and R/W

Picture of Contrast and R/W

On my LCD I have already wired it up for parallel connection, so the contrast adjustment is on the screen. If your LCD is not hooked up to anything, this potentiometer is here to adjust the contrast. I have no completely wired it as I have no use for it as of yet, but here is how it goes together. The slider pin should be connected to the wire that will go to pin 3 of the LCD. The other two ends should be connected to 5V+ and Ground. OH yeah, the potentiometer is 10k. The only reason I used a slide potentiometer is because I liked it. You can use a rotational one. Lastly, the R/W connection will be connected to ground, so ad a jumper wire from the ground rail for the pin 5 R/W line on the LCD.

Step 7: Power

Picture of Power

Now for the power. LCDs of almost every kind run off five volts DC. for convenience, we will use a 9 volt battery. Solder the ground wire of the 9V battery clip to the ground rail by the jumpers, solder the positive wire a little distance away. Solder the left pin of the 5V regulator (input pin) to the positive wire from the battery clip. This should be the only connection to the positive battery clip wire. Solder a jumper wire from the middle pin of the regulator (ground) to the ground rail. Next solder a jumper wire from the right pin of the regulator (output) to the positive rail. Now it is time to build the alligator clips. solder one clip to the wire for positive and the other to the wire for ground. I mentioned these wires in the parts list. They have nothing to do with the battery clip. solder the positive wire to the positive rail and the ground wire to the ground rail. You will use these alligator clips to power the LCD screen. If you like you could send the power over the ribbon cable to the LCD. Pin 1 on the LCD is ground and pin 2 is Positive. Some LCDs have a 2x7 or 2x8 connection (depending on whether you have a 14 or 16 pin model). You can identify pin one simply since it its ground. It will generally have a thicker PCB trace and connect to the metalwork at some point.

Step 8: The Connector

Picture of The Connector

Since my LCD is wired to a male parallel port connector, I had to connect my ribbon cable to a female parallel port connector. If you are wiring directly to the LCD, pin 14 will be connected to the first jumper and pin 3 to the contrast. Pin 1&2 will be connected to power. look at the schematic for details. The reason we made the whole thing backwards (if you look at the location of pin on on you LCD which is generally the left pin) was so that when we send signals, we are making them the right way around. Pin 7-14 on the LCD are actually what is backwards. If you want to connect your LCD to a parallel port, you will have to follow the below schematic for this. The schematic is a back view of a male parallel port connector. The connections from the tester to the female parallel port is a mirror image. Either way you connect your LCD, this part is necessary. That space between the resistors and the jumpers/switches is where you will connect the ribbon cable. Pin 14-7 connects to the jumper spaces, Pin 6 to the momentary switch space, and pin 4 to the SPST switch space. Pin 5 is connected to ground, and pin 3 is connected to the slider pin of the potentiometer. IMPORTANT: Those space must be filled in! the jumpers/switches and according ribbon cable wires and resistors should all be connected as one.

Step 9: Finished Test Rig

Picture of Finished Test Rig

That's it! You got it built. Go on to the next step to learn how to use it.

Update 06/13/2008: I added some pictures of a miniature LCD tester that fits in an Altoids tin. This tester has no contrast control. I will simply solder contrast to ground during tests.

Step 10: Using the Test Rig

Picture of Using the Test Rig

As I mentioned in step one, LCDs use a 8-bit ASCII code. To use this tester, first connect the LCD and then the power. Oh no it's broken! There's a bunch of black squares! Don't panic. Those square are supposed to be there, that means it's on. Those squares (technically rectangles but oh well) mean the LCD is on but not yet activated. To activate it we must send a signal that tells the LCD to turn on, give a cursor, and blink for good measure. How do we do that? Easy. First set the Register Select switch to Command mode (the switch is on/logic 1). This is so the LCD knows we are sending a command and not a letter(character mode). Now on the line of jumpers, any removed jumper represents a 1, and any connected jumper represents a 0. The code for what I described earlier is 00001111 (A full list of commands is below). So the first 4 jumpers should be connected. and the last 4 removed. Nothing happened. Nothing should have happened. You should still have black squares. Now you have to tell the LCD to accept the command. Sooo.... HIT THE BIG RED BUTTON!!! Okay, not really, but you can imagine. push the momentary switch. Hey, there's a cursor, now I want some letters. Alright, that's easy. switch the Register Select switch to character mode (the switch is off). Now will send the letter A in capital. The code for capital a (A) is 01000001. Move the jumpers accordingly and hit the button. Hey, Now there's a letter a. A full chart of letters and symbols is below. Play around a bit. The Upper bits are the left 4 jumpers and the lower bits are the right 4. When you fill up you screen, you will need to clear it. To do this, switch the tester to command mode and enter 00000001. This is the clear command. don't forget to hit the button! So now you have a simple controller for LCDs and abroader knowledge of LCDs. In the future, I may ad an update on making custom characters, but that's all for now. Hope this helped!
Attached are some videos of initializing, entering text, and clearing.

UPDATE 06/15/2008:
You might notice that several characters will pop up instead of one when the switch is pressed, to fix this, you need a Debounce circuit. This prevents this from happening by use of 2 NAND gates in a 74LS00 quad NAND gate and a SPDT switch. Below is the schematic.

As for the parallel port, try LCD Smartie. It is a great open source program with a lot of support and great forums. There is an attached video of me using it. The video opens with windows media player.


FrancoisNel (author)2016-08-15

Good day Folks

Any idea on how to read data from a 2x16 LCD screen and display it on another screen.

I have a problem where I have a device that displays the room temperature, but it does not log the data, so now I want to read the data from that screen if possible (Cant see why not) Naturally if I can read it I can do with it what ever I want. I have tried to look for links etc, but had no luck.


mgingerich (author)2012-03-02

No need for a debounce circuit. A transistor and 100 ohm resistor did the trick for me. I connected the output pin of a microcontroller to the base, wired one gate to the LCD's enable pin, and put a 100 ohm resistor between the last pin and ground.

mgingerich (author)mgingerich2012-03-02

Oh, and by the way, nice instructable. You really helped me figure out my LCD

mazoo (author)2011-08-07

Hi could you please advise using the following on how to connect the lcd as per pics.?
this is a v5 shield which is supposed to handle this.

just not 100 percent sure on how to proceed!
Are you able to advise

gimmelotsarobots (author)mazoo2011-08-08

There's an example picture of the hookup on that ebay page you posted,and example code on the manufacturer's website. The manufacturer's website says it uses I2C protocol (that's actually pronounced I squared C), which means addressing it should be pretty simple. There are plenty of tutorials across the internet in regards to I2C on the arduino.  Try starting off on adafruit's forum.

mazoo (author)gimmelotsarobots2011-08-08

Thanks for your prompt input!

I had already tried the sketch from the mnfrs. site but get errors. The unit is connected correctly onto the board and I get a "blue lit' screen so that works. when you mention "addressing" should the original code registers ? this is the original code error.

I am fighting with this and have checked out all the I2C tuts...
much appreciated in advance any further input will be appreciated !

gimmelotsarobots (author)2011-08-08

Did that come out of a PSP? If it did, you can find some information about those at PSP screens are odd, they have a 24-bit interface.

rahimkv (author)2010-05-21

how can i add bigger lcd to a mp3 modulators used in cars lighter socket? anybody has some idea?

KentaGrace (author)2009-10-14

My LCD has a backlight, but only 14 pins.  The model number isRT0802B, its got 8 characters per line, and 2 lines.
This is what the unit looks like on the bottom.  I'm not quite surehow the wiring is different on this one?  Can you help me out?

I have something similar.IF YOU ARE SURE that there is a backlight, try to find the power pins. I have some LCDs with seperate wires for the baclight. You will need a driver if it is the flourescent kind.

akatsuki666 (author)2009-10-14

i <3 u!!!!!!!!!!!!!!i <3 u!!!!!!!!!!!!!!i <3 u!!!!!!!!!!!!!!i<3 u!!!!!!!!!!!!!!

Colonel88 (author)2009-09-12

That is so complicated O.o

Wait until I publish my followup with graphic LCDs. Then eventually, color serial graphic LCDs. LCDs are a fundamental part of any electronic hobby.

macattackct (author)2009-08-31

How can i use a computer keyboard to type on an LCD display?

Sandisk1duo (author)macattackct2009-08-31

if you program it right

macattackct (author)Sandisk1duo2009-09-07

Yes, but how? what code, serial inputs...?

Sandisk1duo (author)macattackct2009-09-08

that i'm not sure ask
klee27x, he is an experienced PIC programmer

robot+more (author)2009-07-19

mine is off a couculater and hase 28

Then it is just the LCD w/ no driver. Calculators have the LCD driver built into the main MCU.

Chewy1993 (author)2009-04-13

Anyone know how to connect the LCD that's in a kodak easyshare c330? I've had this piece of crap camera for years, and it's been sitting in a drawer for half that (new camera!) It's a color AU a015an03 screen. I was trying to convert the camera to only see near IR/ IR. I put in the wrong filter (don't use floppies, they turn out very red, and it's quality isn't great.). I went in again, to take it out/wait for later, and broke a ribbon cable -.- so i salvaged parts (capacitors, etc) and the screen was one of the parts i took. :D

a_d777 (author)2009-02-12

Hey nice instructable... well, i am having some problem out here with my projects... i just entered into the world of LCD and discovered there are 2 types of 'em...i.e. Common cathode and common anode. which LCD is better and most widely used?? also ,i want to make a temp/humidity sensor using pic16f628a and a sensirion sensor that shows the data on an LCD...which LCD do i use(common cathode or anode??) ... if anyone has the compiled code+schematic for this project, plzzzz mail it to me! Thanks

gimmelotsarobots (author)a_d7772009-04-03

I think you're thinkin of LED displays, easy to mistype. If that is the case, common cathode is probably the easiest route. LED displays don't have much of a standard so determining the code would be tricky. VFDs also come in common anode or cathode. Those are a little easier and are sometimes similar in use to LCDs, just at a hight voltage (about 12-14 volts).

bman22 (author)a_d7772009-03-25

I'm sorry, but that didn't make much sense. common cathode and common anode sound like LED's to me. There are different kinds of lcd's (different controllers and interface types), but neither of those are them. Also, this has no code. It is for directly controlling the LCD. If you want code for controlling the lcd via a microcontroller, well, it depends on the kind of controller you are using.

Mario1 (author)2009-03-02

So pin 4 of the lcd display puts it in write mode right?

geoper2 (author)2009-02-12

when u r soldering in this board wats the best way to solder them together cause i tried like that and i saw that it needs much solder

l96470fps (author)2009-02-01

please could could you give me any tips or information on changing lcd's, eg. take green lcd from sky/ virgin media box and change it with the screen on a calculator?

Typically devices have their LCD drivers built in to the main board. The driver may or may not be the HD44780 or similar. In a calculator the LCD driver is always part of the main chip and I don't know how I could hack it unless it didn't have the black glob over it. The TI graphing calculator I took apart had a LCD with a HD44780 resembling chip in it but I accidenatly broke the chip off (ther is no board underneath the chip so when I touched it it fell through). Too bad though, it was a big LCD

bman22 (author)2008-12-21

i have a 3.3 volt lcd. do i still use the 4.7k resistors, or should i use something else.

gimmelotsarobots (author)bman222008-12-22

The 4.7k resistors are pull up resitors. That is, they keep the pins in a positive voltage. You should probably use a lower resistor value as 4.7k may be to high and not allow enough voltage through to pull up the pins.

bman22 (author)gimmelotsarobots2008-12-24

can you recommend a value to try. I don't really have any resistors lying around, so I have to buy them. It would be nice to only have to buy what I need

8bit (author)2008-12-09

This will help a lot! Thanks!

median (author)2008-10-01

can someone please tell me where to buy a LCD screen? one that is used in this project

gimmelotsarobots (author)median2008-10-01

Any LCD with a HD44780 drive will work. Try HERE. That's where I go for cheap, high quantity surplus. They're my favorite supplier.

yeah i couldnt find that driver

pretty mush any LCD with 14-16 pins will have the HD44780 chipset. Or at least be compatible.

cool thanx then i know exactly which one to buy

turtleshane (author)2008-10-19

sooo i was thinkin bout making this thing like a texting device, the general idea would be to send the binary code to another rigs lcd (rig being this lcd project)
would these work yeah the link long but i think it could work but im a little confused how

Well, it may work if you have a couple of serial LCDs and some MCUs to encode and translate keystrokes.

ok i was just thinkin the other day that it would be cool to have a texting system in school in my locker and some of my friends but then i thought bout putting the texting system in an altoids tin to make a portable texting walkie talkie type them just im not 100% sure on how to do it. i think it will be a experiment until u succeed type of deal

ilias (author)2008-09-09

R U using a 4 pin momentary button? And something off topic... can someone explain me how can i use a photocell in a 9v circuit? please help.

gimmelotsarobots (author)ilias2008-09-09

What are you doing with a photocell?

ilias (author)gimmelotsarobots2008-09-13

I want to make a light that opens at night.

MACKattacksnipe (author)2008-09-10


MACKattacksnipe (author)2008-07-09

kool great instructable

i almost baught a dipswitch once

puffyfluff (author)2008-07-17

If I had this Instructable a year ago, my electronics life would be much farther than it is. Great info. Love it!

Orchestrapit (author)2008-06-14

hey, really well done instructable. i followed instructions buy for some reason my display (1 x 16) will only display 8 characters, and on top of that when i push "the button" to input a character, it will make several instead of just 1 appear on the screen.

MY 1x16 does that too. It only displays 8 characters, but for what reason I don't know, It even does it under computer and microcontroller 4 pin control. As for the multiple letters you have 2 options: Hit the button really fast or make a debounce circuit. Here is a schematic. It uses 2 NAND gates of a 74LS00 and a SPDT switch.

gimme, Did you try setting the function register to 2 line mode? If you do, try setting the position to address 40h for the second set of 8 characters. Most displays initialize for a single line, but you could try setting it to single line just in case. I've never run across an LCD that did this, but it could be the way your LCD is wired up.

Like I said, It does it under computer and microcontroller control.

About This Instructable




Bio: Making a better tomorrow, tomorrow.
More by gimmelotsarobots:4.8 Watt LED Steampunk LampSteampunk Razor ScooterBeginning LCDs
Add instructable to: