A więc problem jest taki: piszę sobie program w C na mikrokontroler ATmega8A. Mam taki wyświetlacz 5x8 i nie wiem jak napisać kod, żeby wygodnie dostać się do każdego LED'a. Początkowo zrobiłem to tak, że napisałem 40 #define'ów dla każdego LED'a np.
#define led11 "D6C5" / 11 oznacza 1 rząd i 1 kolumnę, a D6C5 to tak naprawdę porty PD6 i PC5 które muszą być ustawione, żeby dany LED zaświecił.
no i mam też funkcję:
void high(char ports[4])
{
switch(ports[0])
{
case 'B': PORTB |= (1<<(ports[1]-'0')); break;
case 'C': PORTC |= (1<<(ports[1]-'0')); break;
case 'D': PORTD |= (1<<(ports[1]-'0')); break;
}
switch(ports[2])
{
case 'B': PORTB &= ~(1<<(ports[3]-'0')); break;
case 'C': PORTC &= ~(1<<(ports[3]-'0')); break;
case 'D': PORTD &= ~(1<<(ports[3]-'0')); break;
}
}
Ta funkcja patrzy po tych literkach i cyferkach i ustawia odpowiedni port na 1, a inny na 0.
OK, działa, ale nie mogę (albo po prostu nie umiem ) zrobić na przykład prostej gry Pong, bo trzeba by było zmieniać o jeden coś w stylu led11+01, a tak raczej się nie da przy define'ach. Ktoś coś?