COMPLETE INTERFACING LCD WITH MICRO-CONTROLLER USING C-PROGRAMMING
STEPS
1. What is LCD? Which LCD are we going to use ? What is the LCD address bit ?
- Here I'm going to use is the 16*2 LCD .total of 16 pins. It has 8 bit data address(can also be used for 4 bit addressing ) i.e it can carry out the 8 bit data for displaying . 3 pins for power supply , ground and contrast . 3 pin for control register , read write and enable pin and remaining 2 pin for background light .
PIN DIAGRAM WITH FIGURE
Fig(a) : Connection of Microcontroller(8051 family) with LCD
Table 1: Complete LCD pin and its functions
Table 2: LCD command set instruction
2. CONNECT THE LCD WITH THE MICRO-CONTROLLER AS FIGURE BELOW :
- NOTE :- you can connect the data and control lines in any input / output port directly . But for
port-0 of 8051 family you have to connect with LCD only after connecting it with resistor of 8Kohm as in figure below:-
Figure : Pull-up resistors connection with atmel 8051 family microcontroller
3: If you are not using the port-0 for the data lines , then you can connect the pins of lcd to port 1,port2 and port3 because they donot need any pull-up resistors. For the figure below ,i have used port-2 as data lines. Here i have not given power supply to microcontroller and lcd because the proteus by default give the power supply and ground to each pin of lcd and microcontroller.
Fig: Proteus design sample for LCD interfacing
4. After all , we need the program to be load in microcontroller in order to interface with LCD. So for this , the microcontroller need the machine level code. And for this we have to convert the program in hex(.hex) file . i.e It represents al the code into the hexadecimal format which is understand by the microcontroller. For this i have the following code wriiten in Keil software which generate the hex file.
you can download the keil or mide software .
5. The code is given below :
#include<reg51.h>
#define data P2 //initialize port 2 as data lines
sbit rs=P3^7; // initialize port for rs
sbit rw=P3^6; //initialize port for rw
sbit e=P3^5; //initialize port for e
void delay(int x) // delay function
{
int i,j;
for(i=0;i<1275;i++)
for(j=0;j<x;j++);
}
void lcdcmd(unsigned char value) // lcd command function
{
rs=0;
rw=0;
P2=value;
e=1;
delay(25);
e=0;
}
void lcddata(unsigned char value) // lacd data function to write in lcd
{
rs=1;
rw=0;
P2=value;
e=1;
delay(2);
e=0;
}
void initlcd()
{
lcdcmd(0x38);
lcdcmd(0x0E);
lcdcmd(0x01);
}
void main()
{
int i;
int j;
char arr[]="my name is hari chalise"; // which is to be written in lcd , simply change // of your own wish
initlcd();
for(i=0;i<=(sizeof(arr)-1);i++)
{
lcddata(arr[i]);
delay(3);
if(i>=14) // to check if length of arr is greater than 14 then shift the display in left by 1 character so
{ // all the character are displayed how much the character is long
lcdcmd(0x07);
}
}
lcdcmd(0xC0);
while(1)
{
lcdcmd(0x18);
delay(2);
}
}
6. At last the hex code format of above code is :
:100975006D79206E616D65206973206861726920EB
:080985006368616C6973650091
:10094F00E4FDFCE4FBFAC3EB9FEE6480F8EA6480FD
:10095F009850070BBB00010A80EC0DBD00010CBCC9
:05096F0004E1BDFBDE08
:010974002260
:10098D00C2B7C2B68FA0D2B57F197E0012094FC271
:02099D00B52281
:10099F00D2B7C2B68FA0D2B57F027E0012094FC266
:0209AF00B5226F
:0F09B1007F3812098D7F0E12098D7F0102098D8B
:1008F600780A7C007D007BFF7A0979757E007F1877
:100906001208D01209B1900000AF82740A2FF8E6DF
:10091600FF12099F7F037E0012094FC3E582940EE2
:10092600E5836480948040057F0712098DA3E582E4
:100936006418458370D37FC012098D7F1812098D04
:090946007F027E0012094F80F2CD
:030000000209C032
:0C09C000787FE4F6D8FD7581210208F66E
:10080000E709F608DFFA8046E709F208DFFA803EDA
:1008100088828C83E709F0A3DFFA8032E309F608C7
:10082000DFFA8078E309F208DFFA807088828C832F
:10083000E309F0A3DFFA806489828A83E0A3F608E3
:10084000DFFA805889828A83E0A3F208DFFA804CBD
:1008500080D280FA80C680D4806980F28033801094
:1008600080A680EA809A80A880DA80E280CA8033FD
:1008700089828A83ECFAE493A3C8C582C8CCC58375
:10088000CCF0A3C8C582C8CCC583CCDFE9DEE78045
:100890000D89828A83E493A3F608DFF9ECFAA9F0C4
:1008A000EDFB2289828A83ECFAE0A3C8C582C8CC1A
:1008B000C583CCF0A3C8C582C8CCC583CCDFEADE33
:1008C000E880DB89828A83E493A3F208DFF980CC95
:1008D00088F0EF60010E4E60C388F0ED2402B4048E
:1008E0000050B9F582EB2402B4040050AF23234535
:0608F00082239008507302
:00000001FF
save this code in notepad as (.hex) file name and run through proteus .
If you find difficulty and if there are any mistake , comment are highly acknowledged. Thank you