1. Du musst die Pausen auch aktivieren, sonst leuchten sie so kurz, dass
du es nicht siehst. Versuchs mit 5-10 ms. Je nachdem wieviele Elemente
du durchschaltest, die Zeiten verkürzen.
2. Du kannst dir die ganze switch() Anweisung komplett sparen. Du
übergibst ja der Funktion sowieso schon welches Feld du ansteuern
willst.
Änder die Feldansteuerung einfach so:
PORTC |= (1 << field); //Zeile 1
Natürlich muss die Zahl des Feldes, am entsprechenden Pin sein, sonst
musst du davor noch einen verschobenen Wert hinzufügen oder abziehen.
Bsp: Zeile 1 an Pin 3: immer field +2
3. Für if Anweisungen gibt es auch die else Anweisung.
if (prüfwert)
// WIRD AUSGEFÜHRT WENN WAHR
else
// WENN AUSGEFÜHRT WENN UNWAHR
void set_field(int field, int color)
{
PORTC |= (1 << field); //Zeile 1
if(color==0) {
PORTB |= (1 << PB0); // Spalte 1
_delay_ms(10);
PORTB &= ~(1 << PB0);}
} else {
PORTB |= (1 << PB2); // Spalte 3
_delay_ms(10);
PORTB &= ~(1 << PB2);}
}
PORTC &= ~(1 << field);
}