
#include <avr/io.h>
#include <stdint.h>
#include <avr/delay.h>


void vInitPorts ();
void vEnableLcd ();
void vLcdInit();
void vLcdSchreibeZeile ( char *);
void vLcdSchreibeZeichen (char );
void vLcdLoeschen();
void vLcdEin();



#define HOCH 0
#define RUNTER 1
#define RECHTS 2
#define LINKS 3
#define ESC 4
#define SEL 5
#define RS 6
#define EN 7
#define LCDPORT PORTD







int main(void)
{



/////////////////
//Initialisierung	
	vInitPorts  ();
	vLcdInit();
	


	//vLcdEin(); //hier oben hatte ich es auch nochmal zur sicherheit reingemacht, aber ohne erfolg

	_delay_ms(200);
	PORTA |= ( 1 << RS );
	_delay_ms(200);
	PORTA |= ( 1 << EN );

	_delay_ms(200);

	LCDPORT =  0x41;
	_delay_ms(200);

	PORTA &= ~( 1 << EN );
		
	vLcdEin();	//wenn ich diese Zeile auskommentiere, bleibt das Display aus
				//aber die Buchstaben sind schon im Datenspeicher vorhanden
return 1;
}




void vLcdInit(){



	_delay_ms (200);
	PORTA &= ~( 1 << RS );
	PORTA &= ~( 1 << EN );
	LCDPORT = 0x30;
	vEnableLcd ();
	_delay_ms (20);

	LCDPORT = 0x30;
	vEnableLcd ();
	_delay_ms (20);


	LCDPORT = 0x30;
	vEnableLcd ();
	_delay_ms (20);


//8-BitModus einschalten
	LCDPORT = 0x38;
	vEnableLcd ();
	_delay_ms (20);


//display aus
	LCDPORT = 0x08;
	vEnableLcd ();
	_delay_ms (20);


//display löschen
	LCDPORT = 0x01;
	vEnableLcd ();
	_delay_ms (20);
	



//Eingabemodus
	_delay_ms (20);
	LCDPORT = 0x06;
	vEnableLcd ();
	_delay_ms (20);

//cursorcontrol
	LCDPORT = 0x0C;
	vEnableLcd ();
	_delay_ms (20);
}



//Initialisierung Ports
void vInitPorts ()  {
	DDRA = 0xc0;
	DDRC = 0xFF;
	DDRD = 0xFF;
}

//Gibt Enable-Puls für Lcd aus
void vEnableLcd(){
	_delay_ms (10);
	PORTA |= ( 1 << EN );
 	_delay_ms (20);
	 PORTA &= ~( 1 << EN );
}

void vLcdLoeschen(){
	//lösche Display
	PORTA &= ~( 1 << RS );
		LCDPORT = 0x01;
	vEnableLcd ();
	_delay_ms (5);
}



void vLcdEin(){
//display an, cursor nicht, blinken aus
	PORTA &= ~( 1 << RS );
	LCDPORT = 0x0C;
	vEnableLcd ();
	_delay_us (200);
}
