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
Lesezeichen