#include <avr/io.h>
#include <util/delay.h>

int main(){
  DDRB=0x1F;    // PORTB als Ausgang
  PORTD = 0b01110000; // PullUps an
  while (1){
    if(~PIND&(1<<PD4)){ // PD4 gedrueckt?
      blinken(); // ein Blinkdurchlauf
    }
  }
}

void blinken(){
  while(PORTB<15){ // solange nicht alle
    PORTB = (PORTB<<1) +1; // eine weitere
    _delay_ms(150);
  }
  PORTB = 0; // LEDs aus
  _delay_ms(150);
}