#define E PB0
#define RS PB1
void lcd_init(void);
void lcd_data(char*);
void lcd_char(uint8_t);
int main()
{
lcd_init();
lcd_data("Hallo AVR!");
while(1);
return 0;
}
void lcd_init(void)
{
DDRD = 0xFF; //8-bit Datenport auf Ausgang
DDRB |= (1<<E) | (1<<RS); //E und RS auf Ausgang
PORTB &= ~((1<<E) | (1<<RS)); //E=0, RS=0
lcd_command(0x01); //Anzeige leeren
lcd_command(0x38); //8-bit Modus, 2 zeilig, 5x8 Matrix (Function set)
lcd_command(0x0E); //Anzeige an und Cursor an (Display control)
lcd_command(0x06); //Adresse inkrementieren und Cursor nach rechts verschieben (Entry Mode set)
}
void lcd_command(uint8_t cmd)
{
PORTB &= ~(1<<RS); //RS=0
PORTD = cmd;
PORTB |= (1<<E); //E=1
_delay_us(1);
PORTB &= ~(1<<E); //E=0
}
void lcd_data(char *str)
{
while((*str) != '\0')
{
lcd_char(*str);
++str;
}
}
void lcd_char(uint8_t ch)
{
_delay_ms(500);
PORTB |= (1<<RS); //RS=1
PORTD = ch;
PORTB |= (1<<E); //E=1
_delay_us(1);
PORTB &= ~(1<<E); //E=0
}