d i g i t a l - salvage[dot]net Search Site
Home
Links / Recent / Tags / Cats
Twitter
About Me
Arduino and the LiquidCrystal Library Last Updated: October 20th, 2010 by Chris Filed under: Physical Computing Tags: Arduino
Synopsis: The Arduino software comes with a built in library for interfacing with Liquid Crystal Displays (LCD). The
LiquidCrystal library lets you drive a 4-bit or 8-bit parallel LCD display. This example shows how to wire and program an Arduino and a 16×2 4-bit LCD display (GDM1602K from SparkFun ).
Arduino with Adafruit Protoshield and 4Bit LCD from Sparkfun
SparkFun carries the cheap (cost, not necessarily quality) GDM1602K 16×2 LCD display (16 characters on 2 lines) with an LED backlight. It has multiple color options (red/black, white/blue, etc.) and runs at 5V (they also have 3.3V versions under a different model number). You need 6 pins on the Arduino to write to the display using 4-bit mode. As always, be sure to check the datasheet for your display. The pertinent information from the GDM1602K data sheet, and how it can be wired to an Arduino, is in the table below:
LCD Function
LC D Pin
Arduino
VSS
1
GND
VDD
2
+5V
VO
3
10k – 20k Potentiometer
RS
4
P in 1 1
RW
5
GND
Enable
6
Pi n 1 2
D0
7
Not needed for 4 -Bit
D1
8
Not needed for 4-Bit
D2
9
Not needed for 4 -Bit
D3
10
Not needed for 4 -Bit
D4
11
Pin 7
D5
12
Pin 8
D6
13
Pin 9
D7
14
Pin 10
A (Backlight +)
15
+4.2V
K (Backlight -)
16
GND
Wiring Diagram Note the position of Pin 1 on the LCD. The LCD is upside-down in the diagram below (the pins run along the top of the LCD). You do need to wire in a potentiometer. If you don’t then the screen does not display any characters. You can get some very faint characters on the screen by pulling down pin 3 on the LCD with a 15k resistor to ground, but the characters are very dim and can only be viewed at odd angles. The backlight LED calls for +4.2V. You should put a resistor in between pin 15 on the LCD and +5V to reduce the voltage. The LED on the GDM1602k has about 140mA of forward current. So, using trusty Ohm’s law (5V – 4.2V)/.140A we get a 5.7 Ohm resistor, black-blue-black-gold is 6 Ohms @ 5% (or just run it off of the +3.3V rail, it is a little dim, but it works).
Using the Liquid Crystal Library To use the LiquidCrystal library you first define a variable of type LiquidCrystal. The contents of the variable are the pins on the Arduino to which you have wired the corresponding pins on the LCD (rs, rw, enable, etc.). Since we are using the 4 bit version of this function, we do not need to define d1 – d4 (and we don’t need to wire those
pins on the LCD either). LiquidCrystal(rs, rw, enable, d4, d5, d6, d7)
As wired above this translates to: LiquidCrystal lcd(11, NULL, 12, 7, 8, 9, 10);
Note that the NULL above is for the pin used to defined the Read/Write function of the LCD. Since we are only writing to the LCD, and not reading from it, the RW pin (pin 5 in the LCD diagram above) is wired to ground and we just define that pin as null when we create the LiquidCrystal variable. Here is the classic example using print() to display Hello World! : #include
LiquidCrystal lcd(11, NULL, 12, 7, 8, 9, 10);
void setup() { lcd.print("Hello World!"); }
void loop() { }
The LiquidCrystal library also provides these functions:
n
clear() – clear all text on both lines of the LCD
n
home() – move the cursor to the to left of the display
n
setCursor(col, row) – place the cursor at col, row (0,0 is col 1, row 1 and 0,1 is col 1, row 2)
n
write(x) – write a single character
n
print(string) – print a string, long, int, etc.
Tip The cursor stays wherever the last command finished printing/writing. If you use successive print statements,
it will just print the content one after another on the LCD. The LCD is only 16 characters wide. But the first line is really 40 characters wide(!). It doesn’t “wrap” to the second line until you have hit the 41st character of the first line. So you can easily print “off the side” of the LCD and the library has no functions that allow for scrolling of the display. That is why setCursor() is your friend
. Use it to wrap the text.
Code Example Here is a silly program that prints out the first few lines of the Daft Punk song “Stronger”: #include
LiquidCrystal lcd(11, NULL, 12, 7, 8, 9, 10); //create the lcd variable
void setup() { lcd.clear();
//clear the LCD during setup
lcd.begin(16,2);
//define the columns (16) and rows (2)
}
void loop() { lcd.print("Work It");
//print...
delay(1000);
//wait...
lcd.setCursor(0,1);
//move the cursor to the 2nd line
lcd.print("Make It");
//print...
delay(1000);
//wait...
lcd.home();
//set the cursor to top left
lcd.print("Do it
");
delay(1000);
//print with extra spaces to overwrite //wait...
lcd.setCursor(4,1);
//move the cursor to 2nd line, 4th column
lcd.print("s Us");
//Make It becomes Makes Us
delay(3000);
//bust a groove for 3 seconds
lcd.home();
//cursor back home
lcd.print("Harder
");
delay(1000); lcd.setCursor(0,1); lcd.print("Better
//print... //wait... //cursor to 2nd line
");
//print with extra spaces to overwrite
... lcd.home();
//cursor back home
lcd.print("Fast");
//print Fast (er still on screen from before)
delay(1000);
//wait...
lcd.setCursor(0,1);
//cursor to 2nd line
lcd.print("Stronger");
//print...
delay(1000);
//wait...
for(int i = 0; i < 3; i++) {
//print out ... with 1 second delay
lcd.write('.'); delay(1000); } lcd.clear();
//clear LCD, since we are still on 2nd line...
lcd.home();
//set the cursor the top left
}
Additional Resources n
Lady Ada (from adafruit ) has a nice LCD Tutorial with plenty of pictures.
n
The Official LiquidCrystal documentation from the Arduino team.
As always, if you have a question, comment, correction, etc., then please utilize the comments form below.
Originally published Saturday, April 18th, 2009. You can follow any responses to this entry through the RSS 2.0 feed. You can skip to the end and leave a response. Pinging is currently not allowed.
Leave a Reply Name (required) Mail (will not be published) (required) Website
We need to make sure you are a human. Please solve the challenge below, and click the I'm a Human button to get a confirmation code. To make this process easier in the future, we recommend you enable Javascript.
Type the two words: Try another challenge Get an audio challenge Help I'mahuman
Submit Comment
Admin: Log in The content on this site is managed with WordPress.