A Liquid Crystal Display commonly abbreviated as LCD is basically a
display unit built using Liquid Crystal technology. When we build real
life/real world electronics based projects, we need a medium/device to
display output values and messages. The most basic form of electronic
display available is 7 Segment display – which has its own
limitations. The next best available option is Liquid Crystal
Displays which comes in different size specifications. Out of all
available LCD modules in market, the most commonly used one
is 16×2 LCD Module which can display 32 ASCII characters in 2 lines
(16 characters in 1 line). Other commonly used LCD displays are 20×4
Character LCD, Nokia 5110 LCD module, 128×64 Graphical LCD
Display and 2.4 inch TFT Touch screen LCD display.
In this article, we are going to learn how to interface lcd to arduino
with 2 examples – one being interfacing a 16×2 LCD module to
Arduino and the other being interfacing a 20×4 LCD module to
Arduino.
Interfacing 16×2 LCD to Arduino uno
LCD modules form a very important part in many arduino based
embedded system designs. So the knowledge on interfacing LCD
module to arduino is very essential in designing embedded systems.
This section of the article is about interfacing an Arduino to 16×2 LCD.
JHD162A is the LCD module used here. JHD162A is a 16×2 LCD module
based on the HD44780 driver from Hitachi. The JHD162A has 16
pins and can be operated in 4-bit mode (using only 4 data lines) or 8-
bit mode (using all 8 data lines). Here we are using the LCD module in
4-bit mode. First, I will show you how to display a plain text messages
on the LCD module using arduino and then I have designed a useful
project using LCD and arduino – a digital thermometer. Before going
in to the details of the project, let’s have a look at the JHD162A LCD
module.
16×2 LCD Module Pin Out Diagram
The name and functions of each pin of the 16×2 LCD module is given
below.
Pin1(Vss):Ground pin of the LCD module.
Pin2(Vcc): Power to LCD module (+5V supply is given to this pin)
Pin3(VEE):Contrast adjustment pin. This is done by connecting the
ends of a 10K potentimeter to +5V and ground and then connecting
the slider pin to the VEE pin. The voltage at the VEE pin defines the
contrast. The normal setting is between 0.4 and 0.9V.
Pin4(RS):Register select pin.The JHD162A has two registers
namely command register and data register. at Logic HIGH RS pin
selects data register and logic LOW at RS pin selects command
register. If we make the RS pin HIGH and feed an input to the data
lines (DB0 to DB7), this input will be treated as data to display on LCD
screen. If we make the RS pin LOW and feed an input to the data lines,
then this will be treated as a command ( a command to be written to
LCD controller – like positioning cursor or clear screen or scroll).
Pin5(R/W): Read/Write modes. This pin is used for selecting between
read and write modes. Logic HIGH at this pin activates read mode and
logic LOW at this pin activates write mode.
Pin6(E): This pin is meant for enabling the LCD module. A HIGH to
LOW signal at this pin will enable the module.
Pin7(DB0) to Pin14(DB7): These are data pins. The commands and
data are fed to the LCD module though these pins.
Pin15(LED+): Anode of the back light LED. When operated on 5V, a
560 ohm resistor should be connected in series to this pin. In arduino
based projects the back light LED can be powered from the 3.3V
source on the arduino board.
Pin16(LED-): Cathode of the back light LED.
RS pin of the LCD module is connected to digital pin 12 of the arduino.
R/W pin of the LCD is grounded. Enable pin of the LCD module is
connected to digital pin 11 of the arduino. In this project, the LCD
module and arduino are interfaced in the 4-bit mode. This
means only four of the digital input lines( DB4 to DB7) of the LCD are
used. This method is very simple, requires less connections and you
can almost utilize the full potential of the LCD module. Digital lines
DB4, DB5, DB6 and DB7 are interfaced to digital pins 5, 4, 3 and 2 of
the Arduino. The 10K potentiometer is used for adjusting the contrast
of the display. 560 ohm resistor R1 limits the current through the back
light LED. The arduino can be powered through the external power jack
provided on the board. +5V required in some other parts of the circuit
can be tapped from the 5V source on the arduino board.
Program – Arduino to LCD
#include<LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // sets the
interfacing pins
void setup()
lcd.begin(16, 2); // initializes the 16x2 LCD
void loop()
{
lcd.setCursor(0,0); //sets the cursor at row 0
column 0
lcd.print("16x2 LCD MODULE"); // prints 16x2 LCD MODULE
lcd.setCursor(2,1); //sets the cursor at row 1
column 2
lcd.print("HELLO WORLD"); // prints HELLO WORLD
About the program.
To facilitate communication between Arduino and LCD module, we
make use of a built in library in Arduino <LiquidCrystal.h> – which is
written for LCD modules making use of the Hitachi HD44780 chipset
(or a compatible chipset). This library can handle both 4 bit mode and
8 bit mode wiring of LCD.
IoT lab assignment-10
Q. Interfacing DHT11 sensor with Arduino Uno with Output to the LCD(16x2) Module .
#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
void setup() {
lcd.init();
lcd.backlight();
dht.begin();
void loop() {
delay(2000);
float h = dht.readHumidity();
float t = dht.readTemperature();
float f = dht.readTemperature(true);
float hif = dht.computeHeatIndex(f, h);
float hic = dht.computeHeatIndex(t, h, false);
lcd.setCursor(0,0);
lcd.print("Humidity: ");
lcd.print(h);
lcd.print("%")
lcd.setCursor(0,1);
lcd.print("Temperature: ");
lcd.print(t);
lcd.print(" *C ");