Arduino – 4 – Using LCD+Keypad Shield - HandsOn Tech

How to use 16×2 Character LCD + 6-buttons Keypad Shield ?

The LCD-Keypad Shield attaches to your Arduino board to provide a 16-character by 2-line display, white character, blue back light LCD with a keypad consisting of 5 keys > “select”, “up”, “right”, “down” and “left”. With this shield you will be able to move through menus and make selections straight from one board attached to your Arduino without requiring a massive tower of shields or wiring tangling around.

The LCD-Keypad Shield works perfectly in 4-bit mode with the “LiquidCrystal” library found in the Arduino IDE, using this library will allow you to control the LCD with only 6 digital I/O lines. This shield provides you with the capability of pushing multiple buttons at once and combining the results. No longer will you be restrained to only 5 inputs, now you have the ability to make use of 32 different button combinations!

This LCD Keypad Shield use total of 6-pins to control the LCD display which is pin-4, 5, 6, 7, 8, 9. For LCD Data, it use pin-4, 5, 6, 7, while for the RS and Enable pin, it use pin-8 and 9. The Arduino-LCD Keypad Shield are only required to plug into the Arduino main board and there was no soldering are required such as shown in figure below.

lcd-keypad-10Fig-1: Plug the LCD+Keypad Shield directly onto Arduino Board.

Pins Assignment

Arduino Pin Function
A0 Buttons ( Select, Up, Down, Left, Right)
4 LCD DB4
5 LCD DB5
6 LCD DB6
7 LCD DB7
8 LCD Register Select, RS
9 LCD Enable, En
10 PWM control for Backlight brightness

lcd-keypad-3

Application Ideas

The below code listing demonstrate the use of this LCD+Keypad shield.

//========================================================================== // Author : Handson Technology // Project : Arduino Uno // Description : Display "Hello World" and 6-keys press //========================================================================== //Include the LiquidCrystal header file which is inside the Arduino IDE #include <LiquidCrystal.h> /* ==== PINS ASSIGNMNET ========== * LCD RS pin to digital pin 8 * LCD EN pin to digital pin 9 * LCD D4 pin to digital pin 4 * LCD D5 pin to digital pin 5 * LCD D6 pin to digital pin 6 * LCD D7 pin to digital pin 7 * Backlight PWM control to Pin 10 * LCD R/W pin to ground */ // Set the I/O pin for LCD 4-bit mode following the library assignment: // LiquidCrystal(rs, en, d4, d5, d6, d7). LiquidCrystal lcd(8, 9, 4, 5, 6, 7); int analogPin = A0; //Define the A0 as analogPin as integer type. int adc_key_old; int adc_key_in; int NUM_KEYS = 5; int key=-1; int adc_key_val[5] ={30, 150, 360, 535, 760 }; //Define the value at A0 pin // when a key is pressed. // Define each key as character string type for keypress display. char msgs[5][15] = {"Right Key OK ", "Up Key OK ", "Down Key OK ", "Left Key OK ", "Select Key OK"}; /******************************************************************************* * PRIVATE FUNCTION: setup() * PARAMETERS:void * RETURN:void * DESCRIPTIONS: * Define of I/O pin as Input or Output * *******************************************************************************/ // The setup() method runs once, when the sketch starts void setup () { lcd.begin(16, 2); // set the lcd type: 16-character by 2-lines lcd.clear(); // LCD screen clear lcd.print(" HandsOn Tech "); // Send the ASCII code to the LCD for // displaying the message pinMode(10, OUTPUT); // sets backlight pin-10 as PWM output analogWrite(10, 125); // Set backlight to 50% brightness lcd.setCursor(0,1); // set the position of next message string: // 1st position at 2nd line lcd.print("LCD-Keypad Sh"); delay(5000); // delay for 3000ms lcd.clear(); lcd.setCursor(0,0); lcd.print(" HandsOn Tech "); lcd.setCursor(0,1); lcd.print("Pls press any"); adc_key_old = analogRead(analogPin);// store the unpress key value } /******************************************************************************* * PRIVATE FUNCTION: loop() * PARAMETERS: void * RETURN: void * DESCRIPTIONS: * Non-Stop looping *******************************************************************************/ void loop() { adc_key_in = analogRead(analogPin); // Read the value at analogPin A0 and store // the value in the adc_key_in register adc_key_in = get_key(adc_key_in); // Send the adc_key_in value to // get_key() subroutine. lcd.setCursor(0, 1); lcd.print(msgs[adc_key_in]); // Display message with msgs[] // according to adc_key_in value } /******************************************************************************* * PRIVATE FUNCTION: get_key * PARAMETERS: integer * RETURN:unsigned int input * DESCRIPTIONS: * convert the ADC value to number between 0 to 4 *******************************************************************************/ int get_key(unsigned int input) { int k; for (k = 0; k < NUM_KEYS; k++) { if (input < adc_key_val[k]) { return k; } } if (k >= NUM_KEYS) k = -1; // No valid key pressed return k; }

The code is self explanatory with the detail comments. Compile and upload the code into Arduino board and watch the result.

lcd-keypad-13Once the code is successfully compiled and upload into Arduino board, you should see the display as above shown.

Parts Used in this Tutorial

  • LCD+Keypad Shield
  • Arduino Uno

Documents

  • Complete Guide to Arduino LCD Interfacing (PDF)

Tag » Arduino Lcd Keypad Shield Hello World