Hallo zusammen,
ich habe folgende Situation:
An einem ATMega8 sind insgesamt 10 LED's angeschlossen. Diese sind über alle drei Ports verteilt (PD2-PD5, PB4-PB5, PC0-PC3).
Jetzt möchte ich über die 10 LED's ein Lauflicht programmieren. Bis jetzt löse ich das Ganze, indem ich mitzähle bei welcher LED ich gerade bin und dann die entsprechend nächste LED per |= einschalte. Das schaut aber ehrlich gesagt nicht so wirklich toll aus
Den Code finde ich nicht besonders toll wenn ich ehrlich sein darf. Gibt es eine Möglichkeit das Ganze eleganter zu machen? Optimal wäre natürlich, wenn ich einfach nur mit links- bzw. rechtsshift arbeiten könnte...Code:void Lauflicht1(void) { //schaltet das Lauflicht eine Position weiter switch (zaehler) { case 0: //->erste weiße LED ist an PORTD &= 0xfb; PORTD |= 0x8; break; case 1: //->zweite weiße LED ist an PORTD &= 0xf7; PORTD |= 0x10; break; case 2: //->dritte weiße LED ist an PORTD &= 0xef; PORTD |= 0x20; break; case 3: //->vierte weiße LED ist an PORTD &= 0xc3; PORTB |= 0x10; break; case 4: //->erste grüne LED ist an PORTB &= 0xef; PORTB |= 0x20; break; case 5: //->zweite grüne LED ist an PORTB &= 0xdf; PORTC |= 0x1; break; case 6: //->erste der weißen LED's ist an PORTC &= 0xfe; PORTC |= 0x2; break; case 7: //->zweite der weißen LED's ist an PORTC &= 0xfd; PORTC |= 0x4; break; case 8: //->dritte der weißen LED's ist an PORTC &= 0xfb; PORTC |= 0x8; break; case 9: //->letzte der weißen LED's ist an->zurückgehen PORTC &= 0xf0; PORTC |= 0x4; break; case 10: //->dritte der weißen LED's ist an PORTC &= 0xfb; PORTC |= 0x2; break; case 11: //->zweite der weißen LED's ist an PORTC &= 0xfd; PORTC |= 0x1; break; case 12: //->erste der weißen LED's ist an PORTC &= 0xfe; PORTB |= 0x20; break; case 13: //->zweite der grünen LED's ist an PORTB &= 0xdf; PORTB |= 0x10; break; case 14: //->erste der grünen LED's ist an PORTB &= 0xef; PORTD |= 0x20; break; case 15: //->vierte der weißen LED's ist an PORTD &= 0xdf; PORTD |= 0x10; break; case 16: //->dritte der weißen LED's ist an PORTD &= 0xef; PORTD |= 0x8; break; case 17: //->zweite der weißen LED's ist an PORTD &= 0xf7; PORTD |= 0x4; break; } if (zaehler < 17) { zaehler++; } else { zaehler = 0; } }
Vielen Dank im voraus schonmal fürs lesen und viele Grüße
Lesezeichen