#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

#define DB7 PC3
#define DB6 PC2
#define DB5 PC1
#define DB4 PC0
#define RS  PC4
#define RW  PC5
#define EN  PC6

void toggle_EN()
{

	PORTC|=(1<<EN);
	_delay_ms(500);
	PORTC&= ~(1<<EN);
}

void lcd_init()
{
	DDRC=0xFF;			
	_delay_ms(100000);
	PORTC|=(1<<DB5);	//Function set
	_delay_ms(1000);
	toggle_EN();
	_delay_ms(10);		//Wiederhole Befehl
	toggle_EN();
	PORTC&= ~(1<<DB5);
	_delay_ms(1000);
	PORTC|=(1<<DB7)|(1<<DB6);	//2-line mode, 5*10 dots
	_delay_ms(1000);
	toggle_EN();
	
	_delay_ms(500);		//DISPLAY ON/OFF Control
	PORTC=0x00;
	_delay_ms(1000);
	toggle_EN();
	PORTC|=(1<<DB7)|(1<<DB6)|(1<<DB5);	//display on, cursor on, cursor blinking
	_delay_ms(1000);
	toggle_EN();
	
	PORTC=0x00;			//CLEAR DISPLAY
	_delay_ms(1000);
	toggle_EN();
	PORTC|=(1<<DB4);
	_delay_ms(1000);
	toggle_EN();
	
	PORTC=0x00;			//Entry mode set
	_delay_ms(1000);
	toggle_EN();
	_delay_ms(1000);
	PORTC|=(1<<DB6)|(1<<DB5)|(1<<DB4);
	_delay_ms(1000);
	toggle_EN();
	PORTC=0x00;
}   //INIT END

void main()
{
	lcd_init();
	while(1)
	{}
}
