LCD (Liquid Crystal
Display):
LCD screen is an electronic display
module and find a wide range of applications. A 16x2 LCD display is very basic
module and is very commonly used in various devices and circuits. These modules
are preferred over seven segment and other multi segment LED's. The
reasons being: LCDs are economical; easily programmable; have no limitation of
displaying special & even custom character (unlike in seven segments),
animation and so on. A 16x2 LCD means it can display 16
characters per line and there are 2 such lines. In this LCD each character is
displayed in 5x7 pixel matrix. This LCD has two registers, namely, Command and
Data.
The command register stores the command instructions given to the LCD. A
command is an instruction given to LCD to do a predefined task like
initializing it, clearing its screen, setting the cursor position, controlling
display etc. The data register stores the data to be displayed on the LCD. The
data is the ASCII value of the character to be displayed on the LCD. Click to
learn more about internal structure of a LCD.
Block Diagram of LCD:
LCD stands for liquid
crystal display. They come in many sizes 8x1 , 8x2 ,10x2, 16x1 , 16x2 , 16x4 ,
20x2 , 20x4 ,24x2 , 30x2 , 32x2 , 40x2 etc . Many multinational companies
like Philips Hitachi Panasonic make their own special kind
of lcd's to be used in their products. All the lcd’s performs the same
functions (display characters numbers special
characters ASCII characters etc).Their programming is also same
and they all have same 14 pins (0-13) or 16 pins (0 to 15).
ALL LCDs have
- Eight(8) Data pins
- VCC (Apply 5v here)
- GND (Ground this pin)
- RS (Register select)
- RW (read - write)
- EN (Enable)
- V0 (Set Lcd contrast)
8-Data pins carries
8-bit data or command from an external unit such as microcontroller.
1) Command Register
2) Data Register
1) Command Register:
When we send commands to lcd these commands go to Command register and are
processed there. Commands with their full description are given in the
picture below.When RS=0 Command Register is Selected.
2) Data Register: When we send Data to lcd it goes to data register and is processed their.
When RS=1 Data Register is selected.
Pin diagram of LCD:
Pin description:
Pin No:
|
Name
|
Function
|
1
|
VSS
|
This pin must be connected to the
ground
|
2
|
VCC
|
Positive supply voltage pin
(5V DC)
|
3
|
VEE
|
Contrast adjustment
|
4
|
RS
|
Register selection
|
5
|
R/W
|
Read or write
|
6
|
E
|
Enable
|
7
|
DB0
|
Data
|
8
|
DB1
|
Data
|
9
|
DB2
|
Data
|
10
|
DB3
|
Data
|
11
|
DB4
|
Data
|
12
|
DB5
|
Data
|
13
|
DB6
|
Data
|
14
|
DB7
|
Data
|
15
|
LED+
|
Back light LED+
|
16
|
LED-
|
Back light LED-
|
16×2 LCD module commands:
16×2 LCD module has a
set of preset command instructions. Each command will make the module to do a
particular task. These commands are very important
for displaying data in LCD. The list of commands given below:
Command
|
Function
|
0F
|
For switching on LCD, blinking the
cursor.
|
1
|
Clearing the screen
|
2
|
Return home.
|
4
|
Decrement cursor
|
6
|
Increment cursor
|
E
|
Display on and also cursor on
|
80
|
Force cursor to beginning of the
first line
|
C0
|
Force cursor to beginning of
second line
|
38
|
Use two lines and 5x7 matrix
|
83
|
Cursor line 1 position 3
|
3C
|
Activate second line
|
0C3
|
Jump to second line position 3
|
0C1
|
Jump to second line position1
|
LCD initialization:
The steps that has to
be done for initializing the LCD display is given below and these steps are
common for almost all applications.
§ Send 38H to the 8 bit data line for initialization
§ Send 0FH for making LCD ON, cursor ON and cursor blinking ON.
§ Send 06H for incrementing cursor position.
§ Send 01H for clearing the display and return the cursor.
Sending data to the LCD:
The steps for sending
data to the LCD module is given below. I have already said that the LCD module
has pins namely RS, R/W and E. It is the logic state of these pins that make
the module to determine whether a given data input is a command or data
to be displayed.
- Make
R/W low.
- Make
RS=0 if data byte is a command and make RS=1 if the data byte is a data to be
displayed.
- Place data byte on the data register.
- Pulse
E from high to low.
- Repeat above steps for sending another data.
Interfacing of LCD with LPC2148 (4
bit mode):
#include<lpc214x.h>
#define rs 0
#define rw 1
#define en 2
void lcd_init();
void lcdcmdwrite();
void lcddatawrite();
void lcdcmd(char);
void lcddata(char);
void delay(int );
void lcdstring(char *);
void display();
int main()
{
PINSEL0=0x00000000;
//PINSEL1=0x00000000;
//PINSEL2=0x00000000;
lcd_init();
while(1)
{
display();
}
return 0;
}
void display()
{
lcdcmd(0x80);
lcdstring("ABCDEFGHIJKLM");
lcdcmd(0xc0);
lcdstring("NOPQRSTUVWXYZ");
lcdcmd(0x01);
}
void lcd_init()
{
IO0DIR=IO0DIR|0x7f;
lcdcmd(0x02);
lcdcmd(0x28);
lcdcmd(0x0E);
lcdcmd(0x06);
}
void lcdstring(char *x)
{
while( *x != '\0')
{
lcddata(*x);
x++;
}
}
void lcddata(char x)
{
IO0SET=IO0SET|((x&0xf0)>>1);
lcddatawrite();
IO0CLR=IO0CLR|((x&0xf0)>>1);
IO0SET=IO0SET|(((x<<4)&0xf0)>>1);
lcddatawrite();
IO0CLR=IO0CLR|(((x<<4)&0xf0)>>1);
}
void lcdcmd(char x)
{
IO0SET=IO0SET|((x&0xf0)>>1);
lcdcmdwrite();
IO0CLR=IO0CLR|((x&0xf0)>>1);
IO0SET=IO0SET|(((x<<4)&0xf0)>>1);
lcdcmdwrite();
IO0CLR=IO0CLR|(((x<<4)&0xf0)>>1);
}
void lcdcmdwrite()
{
IO0CLR=IO0CLR|(1<<rs);
IO0CLR=IO0CLR|(1<<rw);
IO0SET=IO0SET|(1<<en);
delay(1);
IO0CLR=IO0CLR|(1<<en);
delay(2);
}
void lcddatawrite()
{
IO0SET=IO0SET|(1<<rs);
IO0CLR=IO0CLR|(1<<rw);
IO0SET=IO0SET|(1<<en);
delay(1);
IO0CLR=IO0CLR|(1<<en);
delay(2);
}
void delay(int k)
{
int i,j;
for(i=0;i<k;i++)
for(j=0;j<=59999;j++);
}
#define rs 0
#define rw 1
#define en 2
void lcd_init();
void lcdcmdwrite();
void lcddatawrite();
void lcdcmd(char);
void lcddata(char);
void delay(int );
void lcdstring(char *);
void display();
int main()
{
PINSEL0=0x00000000;
//PINSEL1=0x00000000;
//PINSEL2=0x00000000;
lcd_init();
while(1)
{
display();
}
return 0;
}
void display()
{
lcdcmd(0x80);
lcdstring("ABCDEFGHIJKLM");
lcdcmd(0xc0);
lcdstring("NOPQRSTUVWXYZ");
lcdcmd(0x01);
}
void lcd_init()
{
IO0DIR=IO0DIR|0x7f;
lcdcmd(0x02);
lcdcmd(0x28);
lcdcmd(0x0E);
lcdcmd(0x06);
}
void lcdstring(char *x)
{
while( *x != '\0')
{
lcddata(*x);
x++;
}
}
void lcddata(char x)
{
IO0SET=IO0SET|((x&0xf0)>>1);
lcddatawrite();
IO0CLR=IO0CLR|((x&0xf0)>>1);
IO0SET=IO0SET|(((x<<4)&0xf0)>>1);
lcddatawrite();
IO0CLR=IO0CLR|(((x<<4)&0xf0)>>1);
}
void lcdcmd(char x)
{
IO0SET=IO0SET|((x&0xf0)>>1);
lcdcmdwrite();
IO0CLR=IO0CLR|((x&0xf0)>>1);
IO0SET=IO0SET|(((x<<4)&0xf0)>>1);
lcdcmdwrite();
IO0CLR=IO0CLR|(((x<<4)&0xf0)>>1);
}
void lcdcmdwrite()
{
IO0CLR=IO0CLR|(1<<rs);
IO0CLR=IO0CLR|(1<<rw);
IO0SET=IO0SET|(1<<en);
delay(1);
IO0CLR=IO0CLR|(1<<en);
delay(2);
}
void lcddatawrite()
{
IO0SET=IO0SET|(1<<rs);
IO0CLR=IO0CLR|(1<<rw);
IO0SET=IO0SET|(1<<en);
delay(1);
IO0CLR=IO0CLR|(1<<en);
delay(2);
}
void delay(int k)
{
int i,j;
for(i=0;i<k;i++)
for(j=0;j<=59999;j++);
}
Simulation of LCD (4 bit):
How to change pins from p0.16 to 0.22
ReplyDeleteAnother fascinating thing with respect to LCD innovation that gives perplexity is its three sorts, each is particular from alternate kinds. The main sort is a flat board LCD, it contends with the plasma TVs. Second is the back projection LCD that contends with DLPs or advanced light projection TVs.Best 24 inch tvs
ReplyDeleteIts gathered on your site even though reducing popularity merely quite a few tid tiny bit submits. Enjoyable technique for impending, I'll be book-marking before starting purchase products and solutions final result spgs up right up. 24 inch tv
ReplyDelete