In the recent years LCD, is finding in daily use replacing LEDís which may be Single, Seven Segment or Multi Segment LEDís Because of Declining Pricing of LCD and ability to display numbers, characters and graphics. Another advantage of LCD is that, Incorporation of refreshing controller in to LCD for relieving the CPU of the task of refreshing LCD.


Download Code   (KEIL Project) (Zip Format)
[Home] [Query] [FAQ] [Aboutus] [Contact us] [Sitemap] [Privacy Policy] [Advertise ]
Logos and brand names used in this site are belonging to their respected owners. We have used them here only for the purpose of information. Enable Active X control from internet options of internet explorer to view all element of this site.
Best viewed in 1024x768 pixels
RSS FEED
Liquid Crystal Display LCD 4-Bit Operation

Interface LCD in 4 bit mode, LCD in 4 bit mode, Interfacing LCD with microcontroller
 
because information matters                                                                                                                                                                                                    Tutorials   |   InfolettersNews  |  Search
 
Why LCD 4-Bit Operation?

You may be Surprised why we using LCD in 4-Bit Mode and How itís Possible? LCD in 4-Bit means we are 4 Lines of data bus instead of using 8 Line data bus. In this Method, we are Splitting Bytes of data in Nibbles. If you successfully interface Microcontroller with LCD with 4 Pins. Then we can save 4 Lines of Microcontroller, which pins we can used for other purpose. In this Article we are using 16 x 2 LCD. Same Process in Repeated For all Type of Character LCDs expect Minor Changes


Circuit






















                         Pic of circuit
















How to initialize LCD in 4 bit mode

Lcd is initialize in 4 bit mode. For that 0x30 is the be written 3 times on lcd.

LCD Pin Description




























Flow Chart



Pin No Symbol I/O Description
1 Vss - Ground
2 Vcc   +5V
3 Vee   Contrast Control
4 RS Input Command/Data Register
5 R/W Input Read/Write Register
6 E Input/Output Enable
7 DB0 Input/Output Not Used in 4-Bit Mode
8 DB1 Input/Output Not Used in 4-Bit Mode
9 DB2 Input/Output Not Used in 4-Bit Mode
10 DB3 Input/Output Not Used in 4-Bit Mode
11 DB4 Input/Output Data Bus in 4-Bit Mode
12 DB5 Input/Output Data Bus in 4-Bit Mode
13 DB6 Input/Output Data Bus in 4-Bit Mode
14 DB7 Input/Output Data Bus in 4-Bit Mode
15 Vcc - For LCD Back Light
16 Vss - For LCD Back Light
Code in C

#include<reg51.h>
#include<stdio.h>

#define LCDPORT P2
sbit RS=LCDPORT^0;
sbit RW=LCDPORT^1;
sbit E =LCDPORT^2;

bit  status=0;
#define lcd_delay 400

/*
*              Function Name       :               delay
*              Input                                       :               value
*              Output                                    :               None
*              Description                             :               This Function Gives Approximate Delay required For LCD Intilization
*/

void delay(unsigned int j)
{
                unsigned int i=0;
                for(i=0;i<j;i++);
}
/*
*              Function Name       :               lcd_init_write
*              Input                                       :               value
*              Output                                    :               None
*              Description                             :               Used For Initilize LCD
*/

void lcd_init_write(unsigned char a)
{
                RS=0;
                RW=0;
                LCDPORT=a;
                E=1;
                delay(lcd_delay);
                E=0;
}
/*
*              Function Name       :               lcd_com
*              Input                                       :               value
*              Output                                    :               None
*              Description                             :               For Sending Commands and Data by checking Status Bit
*/


void lcd_com(unsigned char a)
{
                unsigned char temp;
                if(status)
                {
                                status=0;
                                goto next;
                }
                RS=0;
                next:
                RW=0;                                                                   
                temp=a;                                                                  
                temp&=0xf0;                                                          // Mask Lower 4 Bits
                LCDPORT&=0x0f;                                                // Make No Affect on 0ther Port Pins
                LCDPORT|=temp;                                 // Send Higher Nibble to LCDPORT
                E=1;
                delay(lcd_delay);                    //Send Enable Signal to LCD
                E=0;                                                       
                temp=a<<4;                                                            //Left Shift Byte Four Times
                temp&=0xf0;                                                          // Mask Higher 4 Bits
                LCDPORT&=0x0f;                // Make No Affect on 0ther Port Pins
                LCDPORT|=temp;                                 // Send Lower Nibble to LCDPORT
                E=1;
                delay(lcd_delay);                    // Send Enable Signal to LCD
                E=0;
}
/*
*              Function Name       :               lcd_data
*              Input                                       :               value
*              Output                                    :               None
*              Description                             :               For Sending Data By Setting Status Bit=1
*/

void lcd_data(unsigned char a)
{
                status=1;
                RS=1;
                lcd_com(a);
}
/*
*              Function Name       :               lcd_init
*              Input                                       :               None
*              Output                                    :               None
*              Description                             :               For Intilization LCD in 4-Bit Mode
*/
void lcd_init(void)
{
                delay(lcd_delay);
                lcd_init_write(0x30);   //Special Sequence:Write Function Set.
                delay(lcd_delay);
                lcd_init_write(0x30);              //Special Sequence:Write Function Set.
                delay(lcd_delay);
                lcd_init_write(0x30);              //Special Sequence:Write Function Set.
                delay(lcd_delay);
                lcd_init_write(0x20);   // 0x20 for 4-bit
                delay(lcd_delay);
                lcd_com(0x28);         //Display Off, Cursor Off, Blink Off
                delay(lcd_delay);
                lcd_com(4);                                                // Clear Screen & Returns the Cursor Home
                delay(lcd_delay);
                lcd_com(0x85);      
                delay(lcd_delay);      
                lcd_com(6);           //Inc cursor to the right when writing and donít shift screen
                delay(lcd_delay);
                lcd_com(1);
                delay(lcd_delay);
}
/*
*              Function Name                       :               lcd_puts
*              Input                                       :               String
*              Output                                    :               String
*              Description                             :               Display String on LCD
*/
void lcd_puts(char *str)
{
                unsigned int i=0;
                for(;str[i]!=0;i++)
                                lcd_data(str[i]);
}
/*
*              Function Name                       :               Main
*              Input                                       :               None
                Output                                    :               None
*              Description                             :               Display Character on LCD at Proper Location
*/

void main()
{
                lcd_init();                                                //Intilize LCD in 4-Bit Mode
                lcd_com(0X80);      // Start Cursor From First Line
                lcd_puts("Hello");  //Print HELLO on LCD
                lcd_com(0XC0);         // Start Cursor From Second Line
                lcd_puts("World"); //Print HELLO on LCD
                while(1);                                  //Stay Forever Here
}
Download Code   (KEIL Project) (Zip Format)
 
 
 
 
 
mCard