Hallo Decca,


Code:
//alle leds aus
PORTB=0xff; 

//fang an mit led1
i=0;

//fur immer...
for (; ;){

//plaziere invertiere tasten data in 'keys' ('1'-bit heisst jetzt taste gedruckt)
keys = ~PIND; 

//wenn taste 1 gedrukt...
if ( keys & 1 ) 

//mache led (1+i) an
PORTB |= ^(1<<PB0+i); //'^'=exclusive-oder benuzten und nicht '&'=und

} 
//warte hier bis alle tasten los gelassen sind
while(keys|=0xFF);
} 

//selectiere mahl nachste led die angehen soll
i++;

}//fang mahl wieder von vorne bei 'fur immer' an


7654 3210 bits

1111 1111 PORTB alle leds aus
0000 0001 X=(1<<PB0+i)  //i=0
1111 1110 'PORTB^=X' macht led1 an

1111 1110 PORTB = led1 an
0000 0010 X=(1<<PB0+i)  //i=1
1111 1100 'PORTB^=X' macht led2 dabei auch an

Ich weiss, es ist immer ein bischen schwer wenn mann '0' als 'eingeschaltet' betrachten soll und mann Exclusive-Or anwendet.

Exclusive-Or = nur die bits die beide bytes gleich haben werden im resultat byte getauchst nach '0'. Anders gesagt: nur wenn eine von beiden bits '1' is wird das resultatbit auch '1'.
0 + 0 = 0
1 + 0 = 1
0 + 1 = 1
1 + 1 = 0
Gruss

Henk