#include <avr/io.h>     // Definitionen laden 
#include <util/delay.h> // Delay-Bibliothek laden 

#define KEYREADER ~PIND & 0b01111111 // Einlesen, invertieren, maskieren zurecht schieben
unsigned char keyOld = 0;       // alter Tasten-Zustand 
unsigned char keyEnter,keyExit; // gedrueckte und losgelassene Tasten 

void keyCheck(){                // Tastaturabfrage mit Flankendedektion  
  unsigned char keyTest,tmp; 
  keyEnter = 0, keyExit = 0; 
  keyTest = KEYREADER;          // Einlesen
  if (keyOld != keyTest){       // hat sich was getan 
    _delay_ms(10);              // Prellen abwarten 
    tmp = KEYREADER;            // noch mal Einlesen
    if (tmp == keyTest){        // ist es stabil? 
      keyEnter = (~keyOld) & keyTest; // steigende Flanke !alt und neu 
      keyExit = keyOld & (~keyTest);  // fallende Flanke alt und !neu 
      keyOld = keyTest; 
    } 
  } 
} 

int main(){         // Hauptprogramm 
  PORTB=0xff;       // alle LED aus 
  DDRB=0xff;        // PB als Ausgang 
  unsigned char zaehler = 0;
  while(1){         // Endlosschleife 
    keyCheck();     // Tastatur abfragen
    if(keyEnter&1){ // wenn Taste0 gedrueckt
      zaehler++;
      PORTB=~zaehler; // Ausgeben
    }
  } 
  return 0; 
}