#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
uint8_t column_y[2] = {0,64};
void lcd_init(void);
void send_command(unsigned char command);
void send_data(unsigned char data);
void send_string(char *string);
void set_cursor(uint8_t x,uint8_t y);
int main(void)
{
lcd_init();
set_cursor(0,0);
send_string("anish");
while(1)
{
}
return 0;
}
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(0x0E);
send_command(0x06);
send_command(0x01);
_delay_ms(2);
}
void send_command(unsigned char command)
{
PORTD = ((PORTD & 0x03) | ((command & 0xF0) >> 2));
PORTD &= ~(1 << RS);
PORTD |= (1 << EN);
_delay_ms(1);
PORTD &= ~(1 << EN);
_delay_ms(200);
PORTD = ((PORTD & 0x03) | ((command & 0x0F) << 2));
PORTD |= (1 << EN);
_delay_ms(1);
PORTD &= ~(1 << EN);
_delay_ms(2);
}
void send_data(unsigned char data)
{
PORTD = ((PORTD & 0x03) | ((data & 0xF0) >> 2));
PORTD |= (1 << RS);
PORTD |= (1 << EN);
_delay_ms(1);
PORTD &= ~(1 << EN);
_delay_ms(200);
PORTD = ((PORTD & 0x03) | ((data & 0x0F) << 2));
PORTD |= (1 << EN);
_delay_ms(1);
PORTD &= ~(1 << EN);
_delay_ms(2);
}
void send_string(char *string)
{
while(*string != '\0')
{
send_data(*string++);
}
}
void set_cursor(uint8_t x,uint8_t y)
{
send_command(0x80 + x + column_y[y]);
}