#include <avr/io.h>
#include <util/delay.h>
#define RS PD0
#define EN PD1
#define D4 PD2
#define D5 PD3
#define D6 PD4
#define D7 PD5
void lcd_init(void)
{
DDRD |= (1 << RS) | (1 << EN) | (1 << D4) | (1 << D5) | (1 << D6) | (1 << D7);
_delay_ms(20);
send_command(0x33);
send_command(0x32);
send_command(0x28);
send_command(0x06);
send_command(0x0E);
send_command(0x01);
_delay_ms(2);
}
void peekaboo(void)
{
PORTD |= (1 << EN);
_delay_ms(2);
PORTD &= ~(1 << EN);
}
void send_command(unsigned char command)
{
PORTD = (PORTD & 0x03) | ((command & 0xF0) >> 2);
PORTD &= ~(1 << RS);
peekaboo();
_delay_ms(200);
PORTD = (PORTD & 0x03) | ((command & 0x0F) << 2);
peekaboo();
_delay_ms(2);
}
void send_data(unsigned char data)
{
PORTD = (PORTD & 0x03) | ((data & 0xF0) >> 2);
PORTD |= (1 << RS);
peekaboo();
_delay_ms(200);
PORTD = (PORTD & 0x03) | ((data & 0x0F) << 2);
peekaboo();
_delay_ms(2);
}
void send_string(char *string)
{
while(*string != '\0')
{
send_data(*string++);
}
}
void send_integer(int value)
{
char buffer[4];
itoa(value,buffer,10);
send_string(buffer);
}
int main(void)
{
lcd_init();
send_integer(69);
//send_string("anish");
while(1)
{
}
return 0;
}