#define 	F_CPU 1000000	// Frequenzteiler 1MHz
#include	<avr\io.h>		// AVR Register und Konstantendefinitionen
#include 	<util\delay.h>	// Bibliothek mit Warteroutinen
#include 	<inttypes.h>
#include 	<stdint.h>
//----------------------------------------------------------------------



//---------------------------Hauptprogramm-------------------------------

int main (void) {
	
	int a;

	uint8_t PortB;
	uint8_t PortC;

	DDRB=0x00;											//PortB = Eingang
	DDRC=0x00;               							//PortC = Eingang
	DDRD=0xf1;											//PORTD = Ausgang, PD1-PD3 = Eingang
	PORTB=0xff;											//PORTD = Pullup
	PORTC=0x31;											//PortC = Pullup
	PORTD=0x00;											//PORTD = 0e

	_delay_ms(500);

	while(1) {											//Beginn Endlosschleife

	a=0;	

	while (a!=1) { 										//Solange nichts tun, bis a = 1
							
		

		PortB = PINB;									//Variable "PortB" = Wert von PortB	
		PortC = PINC;									//Variable "PortC" = Wert von PortC

		if (PortB!=0xff || PINC & (1<<PINC0) || PINC & (1<<PINC3) || PortC==0x32 || PortC==0x34) {	
		
			a++;
		
		}
	
	}

	

	if (PortB==0xfe) {									//Wenn PortB = fe, dann alle runter

		DDRD=0xf1;										//PORTD = Ausgang, PD1-PD3 = Eingang
		PORTD=0x0f;									
		_delay_ms(1000);
		DDRD=0xdf;										//PORTD = Ausgang; PD5 = Eingang
		PORTD=0x11;
		_delay_ms(50);
		PORTD=0x1f;
	}

	if (PortB==0xfd) {									//Wenn PortB = fd, dann 1 runter

		DDRD=0xf1;										//PORTD = Ausgang, PD1-PD3 = Eingang
		PORTD=0x0f;									
		_delay_ms(1000);
		DDRD=0xdf;										//PORTD = Ausgang; PD5 = Eingang
		PORTD=0x1d;
		_delay_ms(50);
		PORTD=0x1f;
	}

	if (PortB==0xfb) {									//Wenn PortB = fb, dann 2 runter

		DDRD=0xf1;										//PORTD = Ausgang, PD1-PD3 = Eingang
		PORTD=0x0f;									
		_delay_ms(1000);
		DDRD=0xdf;										//PORTD = Ausgang; PD5 = Eingang
		PORTD=0x1b;
		_delay_ms(50);
		PORTD=0x1f;
	}

	if (PortB==0xf7) {									//Wenn PortB = f7, dann 3 runter
		
		DDRD=0xf1;										//PORTD = Ausgang, PD1-PD3 = Eingang
		PORTD=0x0f;									
		_delay_ms(1000);
		DDRD=0xdf;										//PORTD = Ausgang; PD5 = Eingang
		PORTD=0x17;
		_delay_ms(50);
		PORTD=0x1f;
	}

	if (PortB==0xef) {									//Wenn PortB = ef, dann alle hoch
		
		DDRD=0xf1;										//PORTD = Ausgang, PD1-PD3 = Eingang
		PORTD=0x0f;									
		_delay_ms(1000);
		DDRD=0xdf;										//PORTD = Ausgang; PD5 = Eingang
		PORTD=0x11;
		_delay_ms(300);
		PORTD=0x1f;
	}

	if (PortB==0xdf) {									//Wenn PortB = df, dann 1 hoch
		
		DDRD=0xf1;										//PORTD = Ausgang, PD1-PD3 = Eingang
		PORTD=0x0f;									
		_delay_ms(1000);
		DDRD=0xdf;										//PORTD = Ausgang; PD5 = Eingang
		PORTD=0x1d;
		_delay_ms(300);
		PORTD=0x1f;
	}

	if (PortB==0xbf) {									//Wenn PortB = bf, dann 2 hoch

		DDRD=0xf1;										//PORTD = Ausgang, PD1-PD3 = Eingang
		PORTD=0x0f;									
		_delay_ms(1000);
		DDRD=0xdf;										//PORTD = Ausgang; PD5 = Eingang
		PORTD=0x1b;
		_delay_ms(300);
		PORTD=0x1f;
	}

	if (PortB==0x7f) {									//Wenn PortB = 7f, dann 3 hoch
		
		DDRD=0xf1;										//PORTD = Ausgang, PD1-PD3 = Eingang
		PORTD=0x0f;									
		_delay_ms(1000);
		DDRD=0xdf;										//PORTD = Ausgang; PD5 = Eingang
		PORTD=0x17;
		_delay_ms(300);
		PORTD=0x1f;
	}

	if (PINC & (1<<PINC0)) {							//Wenn PC0 = 1, dann PORTD = 0x0e

		DDRD=0xf1;										//PORTD = Ausgang, PD1-PD3 = Eingang
		PORTD=0x00;									
	
	}

	if (PINC & (1<<PINC3)) {							//Wenn PC3 = 1, dann PORTD = 0x0e

		DDRD=0x31;										//PORTD = Ausgang, PD1-PD3 = Eingang
		PORTD=0x00;									
	
	}

	if (PortC==0x32) {									//Wenn PortC = 32, dann alle runter

		DDRD=0xf1;										//PORTD = Ausgang, PD1-PD3 = Eingang
		PORTD=0x0f;									
		_delay_ms(1000);
		DDRD=0xdf;										//PORTD = Ausgang; PD5 = Eingang
		PORTD=0x11;
		_delay_ms(50);
		PORTD=0x1f;
	}

		if (PortC==0x34) {								//Wenn PortC = 34, dann alle hoch

		DDRD=0xf1;										//PORTD = Ausgang, PD1-PD3 = Eingang
		PORTD=0x0f;									
		_delay_ms(1000);
		DDRD=0xdf;										//PORTD = Ausgang; PD5 = Eingang
		PORTD=0x11;
		_delay_ms(300);
		PORTD=0x1f;
	}




	} return(0);										//Ende Endlosschleife
	
}

