vieleicht klappt folgendes
Code:
#include <avr/io.h> 
#include <util/delay.h> 
#include <stdint.h>        
  
int main () {    

   uint8_t start=1; 
  
   DDRB  = 0x00;   // B Eingänge          
    
   DDRD  = 0xFF;   // D Ausgänge 
   PORTD = 0x00;   //Standard: D0,D4 gesetzt 0x11 
    
   DDRA  = 0xFF;   // A Ausgänge      
   PORTA = 0x00; 
 // pb0 , pb1, pb2 oefner, also geben sie immer ne eins aus
 
   while(1) 
   {                
    
      if (PORTB==0b00000101) /*|| !(PORTB==0b00000011)*/) // Wenn B1 oder B2 == 0 dann ... 
      { 
         PORTD = 0x00;               // Alle D Ports auf 0 
         start=1; 
      } 
  
      if ( PORTB==0b00010111 )    // Wenn B4 == 1 dann 
									// die letxten 3 einser, weil die oefner immer einser liefern solang sie nicht betaetigt sind
      { 
         PORTD = 0x17;               //D0,D1,D2,D4 gesetzt 
      } 

      if ( PORTB==0b00001111 )    // Wenn B3 == 1 dann 
      { 
         PORTD = 0x19;               //D0,D1,D4 gesetzt 
      } 
      
      if (PORTB==0b00000110 )    // Wenn B0 == 0 dann 
      { 
         PORTD = 0x11;               //Standard: D0,D4 gesetzt 
         start=0; 
      } 
    
      if(start==0) 
     { 
     
     if((bit_is_set (PORTD,4)))   //2LEDs abwechselnd blinken      //Wenn PortD4 gesetzt 
        { 
          PORTD &= ~(1 << PD4);     //PortD4 auf 0 setzen PD4 statt nur 4 
          PORTD |= (1 << PD5);      //PortD5 auf 1 setzen 
         _delay_ms(40);  
        
        } 
        else 
        { 
          PORTD &= ~(1 << PD5);     //PortD5 auf 0 setzen PD5 statt nur 5 
          PORTD |= (1 << PD4); 
         _delay_ms(40); 
             
        } 
       
     }       
   }                
   return 0;                
}
gruss