You are on page 1of 4

Ref: http://www.electro-tech-online.com/avr/39781-4-bit-lcdinterfacing-avr.

html
#define F_CPU 1600000UL
#include <avr/io.h>
#include <util/delay.h>

#define LCD_PORT

PORTC

#define LCD_BUSY 3

//DB4-C0, DB5-C1, DB6-C2, DB7-C3


//RS C4

#define LCD_CMD 4
#define LCD_RW 5

//RW C5

#define LCD_LED 6
#define LCD_SEL 7

// Enable D.7

void lcd_init(void);
void lcd_writeCommand(unsigned char);
void lcd_writeData(unsigned char);
int main()
{
_delay_ms(5);
lcd_init();
lcd_writeCommand(0xC9);
lcd_writeCommand(0x0E);
lcd_writeData(0x48);

lcd_writeData(0x41);
return 0;

}
void lcd_init(void)
{
DDRC=0xff;

//Port C is output

DDRD|=(1<<LCD_SEL);

//Port D.7 is Output

PORTD&=~(1<<LCD_SEL);

//E->Low.

LCD_PORT&=~(1<<LCD_RW);

//Write

LCD_PORT&=~(1<<LCD_CMD);//Command
PORTD|=(1<<LCD_SEL);

//E->High.

LCD_PORT=(LCD_PORT&0xF0)|0x03;//8 Bit interface.


PORTD&=~(1<<LCD_SEL);

//E->Low.

_delay_ms(20);
PORTD|=(1<<LCD_SEL); //E->High.
_delay_ms(20);
PORTD&=~(1<<LCD_SEL);

//E->Low.

_delay_ms(20);
PORTD|=(1<<LCD_SEL);

//E->High.

_delay_ms(20);
PORTD&=~(1<<LCD_SEL);

//E->Low.

_delay_ms(20);
PORTD|=(1<<LCD_SEL);

//E->High.

LCD_PORT=(LCD_PORT&0xF0)|0x02;//4 Bit interface.


PORTD&=~(1<<LCD_SEL);

//E->Low.

_delay_ms(20);
PORTD|=(1<<LCD_SEL);

//E->High.

_delay_ms(20);

//4 Bit as 4 bit.

PORTD&=~(1<<LCD_SEL);

//E->Low.

_delay_ms(20);

PORTD|=(1<<LCD_SEL);

//E->High.

LCD_PORT=(LCD_PORT&0xF0)|0x08;//
PORTD&=~(1<<LCD_SEL);

//E->Low.

_delay_ms(20);

lcd_writeCommand(0x08);
lcd_writeCommand(0x01);
lcd_writeCommand(0x06);
}

void lcd_writeCommand(unsigned char data)


{
LCD_PORT&=~(1<<LCD_RW);

//Write

LCD_PORT&=~(1<<LCD_CMD);//Command
PORTD|=(1<<LCD_SEL);

//E->High.

LCD_PORT=((LCD_PORT&0xF0)|((data&0xF0)>>4));
PORTD&=~(1<<LCD_SEL);

//E->Low.

_delay_ms(20);
PORTD|=(1<<LCD_SEL);

//E->High.

LCD_PORT=((LCD_PORT&0xF0)|(data&0x0F));
PORTD&=~(1<<LCD_SEL);
_delay_ms(20);
}

//E->Low.

void lcd_writeData(unsigned char data)


{
LCD_PORT&=~(1<<LCD_RW);

//Write

LCD_PORT|=(1<<LCD_CMD); //ASCII
PORTD|=(1<<LCD_SEL);

//E->High.

LCD_PORT=((LCD_PORT&0xF0)|((data&0xF0)>>4));
PORTD&=~(1<<LCD_SEL);

//E->Low.

_delay_ms(20);
PORTD|=(1<<LCD_SEL);

//E->High.

LCD_PORT=((LCD_PORT&0xF0)|(data&0x0F));
PORTD&=~(1<<LCD_SEL);
_delay_ms(20);
}

//E->Low.

You might also like