A large number of embedded project require some type of user interface. This
includes displaying numerical, textual and graphical data to user. For very
simple numerical display we can use 7
segment displays
. If the requirement is little more than that, like displaying
some alphanumeric text, we can use LCD
. They are cheap enough to be used in low cost projects. They come
in various sizes for different requirement. A very popular one is 16×2 model.
It can display 2 lines of 16 characters. Other models are 16×4,20×4, 8×1,8×2

In this tutorial we will learn how we can use such modules with Microchip
Microcontrollers. Here I will present my LCD library which you can use
to create LCD based application/projects quickly. For demo I will use PIC18F4520
Microcontroller but you can use any PIC18 MCU. But you have to calculate the
CONFIG values for correct setting and CPU clock selection etc. That means the
chip should be configured correctly. See datasheet for more info on CONFIG bytes.

MPLAB Project Creation

First create a MPLAB project as described in this
. Name the project LCD. Also add a main file called "lcd_test.c".
To use my LCD library you need to add it to your project. Just copy/paste the
following files to your project folder.

Header Files

  • lcd.h
  • myutils.h

Source File

  • lcd.c

How to add files to MPLAB Project is described here.

Now you are ready to the library functions to interact with the LCD module.

Sample Program (lcd_test.c)




A testing program for our LCD library.

Easy to use library for interfacing 16x2 lcd in 4 bit mode.
MCU: PIC18FXXXX Series from Microchip.
Compiler: HI-TECH C Compiler for PIC18 MCUs (http://www.htsoft.com/)

Copyrights 2008-2009 Avinash Gupta
eXtreme Electronics, India

For More Info visit

Mail: me@avinashgupta.com

#include <htc.h>

#include "lcd.h"

//Chip Settings

//Simple Delay Routine
void Wait(unsigned int delay)

void main()
   //Let the Module start up


   //Initialize the LCD Module

   //Clear the Module

   //Write a string at current cursor pos
   LCDWriteString("Good Is Great !!");


   //Now Clear the display


   LCDWriteString("God Bless all !!");

   //Goto POS (X=0,Y=1 i.e. Line 2)
   //And Write a string


   //Write Some Numbers

   for(char i=0;i<100;i++)

   LCDWriteString("    The  End    ");

   //Loop Forever



The First thing you should do is to Initialize the LCD Module by calling the
fuction LCDInit(). This will setup the LCD module. Now you can use the various
functions like…

  • LCDClear() – For Clearing the screen.
  • LCDWriteString(unsigned char *) – For Writing Text Message
    at Current cursor position.
  • LCDWriteStringXY(x,y,msg) – For Writing Text Message at
    position x,y
  • LCDWriteInt() – For printing integer numbers at Current
    cursor position.
  • LCDWriteIntXY() – For printing integer numbers at position

For detailed information on these functions please refer to this
. It is for the AVR microcontrollers but the functions are same
for PIC mcus also.

Hardware Connections

Connect the LCD Module with PIC Microcontroller as shown below.

LCD Interface with PIC microcontroller schematic

Fig.: LCD Module Interface with PIC Microcontroller.

If you are using our PIC
development board
then you don’t need to care for crystal or power supply
(they are already on board). You just need to connect the LCD to PIC micro by
using 7 i/o lines. 5v supply for LCD and Variable Resistor (10K) can be easily
drawn from the board.

LCD Module Interface with PIC Microcontroller

Fig.: LCD Module Interface with PIC Microcontroller.


Fig.: LCD Module Interface with PIC Microcontroller.

Program the Micro controller with the HEX code using the
ICSP method described here
. Then adjust the Variable resistor until the
display is clearly visible.


Coming Up !!!


All files required for this experiment.

Microchip PIC Essential Tutorials