Graphics LCD Interfacing With Armv7 LPC 2148: Embedded System Design Mini Project
Graphics LCD Interfacing With Armv7 LPC 2148: Embedded System Design Mini Project
Graphics LCD Interfacing With Armv7 LPC 2148: Embedded System Design Mini Project
Mini Project
Asst.professor,cbit
BATCH MEMBERS:
Vedavyas :- 1601-16-735-178
Navya :- 1601-16-735-334
Lecturer sign:-__________________
ABSTRCT
The real world devices such as Liquid crystal displays (LCDs), Stepper motor,
Analog to Digital converter and Digital to Analog converter and sensors can be
interfaced with the ARM processor. LCDs are extensively used in today’s world to
display numbers, characters as well as graphics. Whenever the user wants to get
the directions or data values the microprocessors and microcontrollers play a vital
role in displaying the letters of the alphabet and numbers. Whenever there is a
need for large amount of data to be displayed Cathode ray tube (CRT) is a good
option to display the data. On the other hand when a small amount of data is to
be displayed, simple digit type graphical displays are generally used. The graphical
displays use various technologies.Higher performance microcontrollers is the need
of the hour and has a significant impact on the industry’s changing needs, such as
the case where microcontrollers are needed to handle bulk of the work without
increasing a product’s frequency or power. Now a days ARM controllers are
drawing attention owing to its numerous advantages.
The state of the art presented in this paper is the interfacing of GRAPHICAL
LCD with ARM controller LPC2148 to display a suitable images and text on it. Here
we used a 128*64 GLCD to interface. We can display any image on glcd in black
and white colour. The GLCD is controlled by ks0108 driver controller which is
drives the GLCD to display the given binary data as image.
INTRODUCTION
Description of GLCD:
The GLCD is divided into two parts which are controlled by two different
controllers. Each of these parts is divided into rows and columns.To interface this
GLCD with microcontroller, two registers (Input and Output register) are provided
in the LCD. These registers are selected by the combination of RS and RW signals.
These combinations are given in the following Table1.
Input Register:
Input Register is used while giving instructions and writing data to LCD. It holds
the data/instruction temporarily before writing to DDRAM (Data Display
RAM).When the LCD is in active mode (CS1 and CS2 high), the Input register can
be selected by sending bits on RS and RW pins as shown in the following table.
The data of input register is latched in at the falling edge (from high to low) of EN
(Enable) signal and written into DDRAM automatically through internal operation.
Output Register:
Output Register is used to read data from DDRAM and to check status data (busy
check). When the LCD is in active mode (CS1 and CS2 high), the Output register
can be selected by sending bits on RS and RW pins as shown in the following
table. When R/W and RS are high, data is latched into output register and when
R/W=H, RS=L, status data (busy check) can be read out.
The basic operation with graphical LCD requires following steps:
1. LCD Initialization
2. Page Selection
3. Column Selection
4. Data Display
All these steps have been explained in the following sections with corresponding
instruction sets.
1. LCD Initialization
Before displaying
anything on graphics LCD, it must be initialized, i.e., display must be put on and
column/page selection be made. This is achieved by giving proper instructions to
the LCD. To make Display On\Off the following set of instructions must be
followed in order:
Data appears when D=1 and disappears when D=0. When the display is off, there
is no effect on the data which is stored in DDRAM.
d) EN=1
e) Delay
2. Page selection
Before writing any data, the page of LCD must be selected. Page can be selected
through following steps:
Since there are a total of 8 pages (0–7), a particular page is selected by setting
three bits (X1-X3).
d) EN=1
e) Delay
For example, if X3=0, X2=1 and X1=0, and then the second page is selected.
Reading or writing operation is done on this page until next page is set. Depending
on the column selection, the page is selected from either left or right half of the
graphics LCD.
3. Column selection
There are 128 [64 (=26) columns per half] in graphics LCD and they are
b) RS=0,
R/W=0
c) EN=1
d) Delay
4. Display data
After page and column selection, data can be sent to LCD for display. The
programming steps for display data are as given below:
a) Put the data values in Data Register. With every write cycle, data is written in
one column and the column then gets auto-incremented. A high data bit (DBx = 1)
corresponds to activated (dark) pixel and low data bit (DBx = 0) corresponds to
deactivated (light) pixel. Here MSB corresponds to 8th row in column and LSB to
1st row of column.
d) EN=1
e) Delay
If data port is given value ‘0x99’ or ‘10011001’ then column takes the values as
shown below.The following points can be included in above programming steps
for efficient programming:
1. While sending data to be written with array, one can specify the array limit as
well. This limit signifies the number of columns one wants to write at once. If the
limit is 8, eight columns will be written at once and if it is 7, seven columns will be
written in one go.
2. The condition ‘if (column >127)’ can be used to return the control back to the
main function if the limit exceeds the number of columns present in the LCD.
3. The function for setting column should be called again if array limit condition
doesn’t fit in left page and has to be extended to right page too.
4. Though column address increases itself by one but one variable shoul be taken
to check the conditions (ii) & (iii) explained above
Timing diagrams of glcd
Hardware used:
1. Lpc2148
2. 128*64 GLCD MODULE
Software used:
1. Keil uvision
2. Proteus
3. LCD assistant (for converting images into hex file)
Interface diagram:
Source code:
Source code consists of two program files: Main program file and one header file.
The header file is used to store the images data.
Main program:
#include<lpc21xx.h>
#include"image.h"
#define d0 1<<16
#define d1 1<<17
#define d2 1<<18
#define d3 1<<19
#define d4 1<<20
#define d5 1<<21
#define d6 1<<22
#define d7 1<<23
#define rs 1<<8
#define en 1<<12
#define rw 1<<15
#define totalpage 8
void delay(int k)
int a,b;
for(a=0;a<=k;a++)
for(b=0;b<100;b++);
{
IO0CLR=(d0|d1|d2|d3|d4|d5|d6|d7);
command=command<<16;
IO0SET=command;
IO0CLR=rs;
IO0CLR=rw;
IO0SET=en;
delay(5);
IO0CLR=en;
IO0CLR=(d0|d1|d2|d3|d4|d5|d6|d7);
data<<16;
IO0SET=data;
IO0SET=rs;
IO0CLR=rw;
IO0SET=en;
delay(5);
IO0CLR=en;
}
void glcd_init()
PINSEL0=0X00000000;
PINSEL1=0X00000000;
IO0DIR=(d0|d1|d2|d3|d4|d5|d6|d7|rs|rw|en|cs1|cs2);
IO0SET=(cs1|cs2);
delay(20);
glcd_command(0x3e);
glcd_command(0x40);
glcd_command(0xb8);
glcd_command(0xc0);
glcd_command(0x3f);
void glcd_clearall()
int column,page;
for(page=0;page<8;page++)
IO0SET=cs1;
IO0CLR=cs2;
glcd_command(0x40);
glcd_command((0xb8+page));
for(column=0;column<128;column++)
if(column=64)
IO0CLR=cs1;
IO0SET=cs2;
glcd_command(0x40);
glcd_command((0xb8+page));
glcd_data(0);
int column,page;
for(page=0;page<8;page++)
{
IO0CLR=cs1;
IO0SET=cs2;
glcd_command(0x40);
glcd_command((0xb8+page));
for(column=0;column<128; columnist++)
if(column=64)
IO0SET=cs1;
IO0CLR=cs2;
glcd_command(0x40);
glcd_command((0xb8+page));
glcd_data(*image++);
int main()
glcd_init();
glcd_clearall();
glcd_string(img);