Hi friends,Welcome to my website!
I'm
a student of electronics and communication systems. My real interest focus around
Electronics and Computer programming. I enjoy micro-controller and computer programming.I'm familiar with micro-controllers, like 8051, AVR..I'm also interested in websites design especially blog template design..
Today we are going to discuss about the LCD interface with the atmega8 micro-controller.
|
Pin Configuration of ATMEGA8 |
|
16*2 LCD display |
|
Schematic diagram of LCD interface with ATMEGA8(click on image-full size view ) |
Configurations
Here,PORTB
(PB0-PB7) set as data port in 8 bit mode LCD display.Connect D0-D7
with the PORTB.
- Ground the first lead of the lcd(vss) display.
- Connect vcc to a 5v power supply.
- Conncet VEE with a pot.It's used to adjust the contrast of the LCD display
15th and 16th leads are used to power the back light of the LCD.Connect 15th with 5v and ground 16th lead.
C CODE
#define F_CPU 1000000
#include <avr/io.h>
void delay(unsigned char);
//Main Code
int main()
{
DDRB=0xff; //set PORTB as out put
DDRD=0b01110000; //Set PD.4,5 and 6 as Output
/*
RS=PD5
R/W=PD6
E=PD4 */
//Give Inital Delay for LCD to startup as LCD is a slower Device
delay(2);
init_lcd();
while(1)
{
lcd_cmd(0x80); //Goto Line-1,first position
lcd_send_string("WELCOME TO! ");
lcd_cmd(0xC0); //Goto Line-2, first position
lcd_send_string("EGLOB :) ");
lcd_cmd(0x01); //Clear the lcd
delay(1);
}
}
//LCD function
/*------------------------------------------------------------------------------------------------------------*/
//Function for sending commands to LCD
void lcd_cmd(unsigned char command)
{
//Put command on the Data Bus
PORTB = command;
//Enable LCD for command writing
PORTD = 0b00010000;
//Allow delay for LCD to read the databus
delay(1);
//Disable LCD again
PORTD = 0b00000000;
//Allow some more delay
delay(1);
}
//Function for sending Data to LCD
void lcd_data(unsigned char data)
{
//Put data on Data Bus
PORTB= data;
//Set R/S (Regiter Select) to High, and Enable to High
PORTD = 0b00110000;
//Allow for delay
delay(1);
//Disable LCD again
PORTD = 0b00100000;
//Allow for some more delay
delay(1);
}
//Function to send String to LCD
void lcd_send_string(char* string)
{
while(*string)
{
//Send value of pointer as data to LCD
lcd_data(*string);
//Increment string pointer
string++;
}
}
//Function to Initilise LCD
void init_lcd()
{
//Setup both lines of LCD
lcd_cmd(0x38);
//Set Cursor off - Enable LCD
lcd_cmd(0x0E);
//Clear Screen
lcd_cmd(0x01);
//Goto first position
lcd_cmd(0x80);
}
/*----------------------------------------------------------------------------------------------------------*/
//Delay function
void delay(unsigned char dtime)
{
int i,j;
for(i=0;i<=dtime;i++)
{
for(j=0;j<5000;j++);
}}
//You can use your own delay functions and replace this delay function with your code
/*-----------------------------------------------------------------------------------------------------------*/
Feel free to ask your doubts
..
ENJOY!
Read more »