LCD Key Shield

Jump to: navigation, search


LCD Key Shield is an LCD expansion board with a 1602 LCD display , a five-way key, a rotary encoder. It is fully compatible with the Arduino UNO board. You can achieve the desired display function only by connecting it with the Arduino UNO board, and then programming the corresponding code . In addition, we extended a five-way key and a rotary encoder, and (D13-D11) Digital IO, (A0-A5) Analog IO containing SPI, I2C interface, so you can achieve key function on LCD1602 screen and encoder function, and you can also assemble the electronic bricks and many other modules with our LCD Key Shield, therefore, you can display the results you need on the LCD.

LCD Key Shield A.JPG LCD Key Shield B.jpg

Model: EF02006


  • Operating Voltage: 5V
  • Can achieve six key functions, a rotary encoder function
  • 3 Digital IO and 5 Analog IO interface


LCD Key Shield SCH.jpg



Hardware Installation


Includes important code snippet. Demo code like : <syntaxhighlight lang="php">

Demo code: //Sample using LiquidCrystal library

  1. include <LiquidCrystal.h>

/******************************************************* This program will test the LCD panel and the buttons Mark Bramwell, August 2013

                                                                                                                • /

// select the pins used on the LCD panel

void Encoder_san(); //============================================== //Set Encoder pin //============================================== const int Encoder_A = 3; // Incremental Encoder singal A is PD3 const int Encoder_B = 2; // Incremental Encoder singal B is PD2 //const int ledPin = 13; unsigned int Encoder_number=0;

int state=0;

LiquidCrystal lcd(8, 9, 4, 5, 6, 7); // define some values used by the panel and buttons int lcd_key = 0; int adc_key_in = 0;

  1. define btnRIGHT 0
  2. define btnUP 1
  3. define btnDOWN 2
  4. define btnLEFT 3
  5. define btnSELECT 4
  6. define btnNONE 5
  7. define btnEncodeOK 6

// read the buttons int read_LCD_buttons() { adc_key_in = analogRead(0); // read the value from the sensor // my buttons when read are centered at these valies: 0, 144, 329, 504, 741 // we add approx 50 to those values and check to see if we are close //if(digitalRead(11)==0) return EncodeOK; if (adc_key_in > 1000) return btnNONE; // We make this the 1st option for speed reasons since it will be the most likely result // For V1.1 us this threshold if (adc_key_in < 50) return btnLEFT; if (adc_key_in < 150) return btnUP; if (adc_key_in < 250) return btnRIGHT; if (adc_key_in < 450) return btnSELECT; if (adc_key_in < 700) return btnDOWN; if (adc_key_in < 850) return btnEncodeOK; // For V1.0 comment the other threshold and use the one below: /* if (adc_key_in < 50) return btnRIGHT; if (adc_key_in < 195) return btnUP; if (adc_key_in < 380) return btnDOWN; if (adc_key_in < 555) return btnLEFT; if (adc_key_in < 790) return btnSELECT;

  • /

return btnNONE; // when all others fail, return this... } void setup() { lcd.begin(16, 2); // start the library pinMode(10,OUTPUT); digitalWrite(10, 1); lcd.setCursor(0,0); lcd.print("Push the buttons"); // print a simple message //========================================


// digitalWrite(11, 1);

 pinMode(Encoder_A, INPUT); 
 pinMode(Encoder_B, INPUT); 
 digitalWrite(Encoder_A, 1);
 digitalWrite(Encoder_B, 1);
 attachInterrupt(1, Encoder_san, FALLING);        //interrupts: numbers 0 (on digital pin 2) and 1 (on digital pin 3).

} void loop() {

// lcd.print(millis()/1000); // display seconds elapsed since power-up

   lcd.setCursor(9,1);            // move cursor to second line "1" and 9 spaces over  
   lcd.setCursor(0,0);            // move cursor to second line "1" and 9 spaces over  
   lcd.print("Push the buttons"); // print a simple message 
lcd.setCursor(0,1);            // move to the begining of the second line  
lcd_key = read_LCD_buttons();  // read the buttons    
switch (lcd_key)               // depending on which button was pushed, we perform an action  
case btnRIGHT:   
lcd.print("RIGHT ");      
case btnLEFT:     
  lcd.print("LEFT   ");  
  case btnUP: 
  lcd.print("UP    "); 
case btnDOWN:     
lcd.print("DOWN  ");     
case btnSELECT:    
 case btnEncodeOK:   
break;     } 

case btnNONE:   
lcd.print("NONE  ");   
break;     } 


void Encoder_san()






The projects and application examples.

LCD Key Shield C.jpg

LCD Key Shield D.jpg

LCD Key Shield E.jpg

Bill of Materials (BOM) /parts list

All the components used to produce the product.

Version Tracker

Revision Descriptions Release
v0.9b Initial public release date

Bug Tracker

Bug Tracker is the place you can publish any bugs you think you might have found during use. Please write down what you have to say, your answers will help us improve our products.

Additional Idea

The Additional Idea is the place to write your project ideas about this product, or other usages you've found. Or you can write them on Projects page.


How to buy

Click here to buy:

See Also

Other related products and resources.


This documentation is licensed under the Creative Commons Attribution-ShareAlike License 3.0 Source code and libraries are licensed under GPL/LGPL, see source code files for details.

External Links

Links to external webpages which provide more application ideas, documents/datasheet or software libraries