Piszę sterownik pod matrycę LED. Napisałem sobie funkcje rysujące litery od lewej do prawej(przykład na końcu), kolejna litera rysowana od miejsca przesun.
Wywołanie w main() wygląda przykładowo:
Zmienne i powoduje, że litery 'wędrują' po matrycy od prawej do lewej. t[15] jest tablicą adresów dla portu: { 0x00, 0x01, ... , 0x0A }
Wszystko działa jak sobie zażyczyłem, ALE chcę stworzyć obsługę wpisywania liter poprzez mikroswitche bez późniejszej ingerencji w kod programu i przydała by mi się tablica funkcji, już piszę co mam na myśli
char litery[30]={A(i,t[15]) , B (i,t[15]), C(i,t[15]), D(i+5,t[15]), ... }
wtedy wybór litery polegał by głównie na inkrementacji jakiejś zmiennej przy użyciu µswitcha np. wywołanie litery[2]; litery[1]; litery[0]; powodowało by wyświetlenie napisu 'CBA'
... czego niestety w C zrobić nie można, tu moja prośba o podsunięcie pomysłu rozwiązania tego problemu w inny sposób, bo nie mam pomysłu ;/
Wywołanie w main() wygląda przykładowo:
{
for(i=10;i>-20;i--)
A(i,t[15]); //litera A na starcie w miejscu 10
B(i+5,t[15]); // litera B na starcie w miejscu 15
C(i+10,t[15]); // litera C ... 20
...
}Zmienne i powoduje, że litery 'wędrują' po matrycy od prawej do lewej. t[15] jest tablicą adresów dla portu: { 0x00, 0x01, ... , 0x0A }
Wszystko działa jak sobie zażyczyłem, ALE chcę stworzyć obsługę wpisywania liter poprzez mikroswitche bez późniejszej ingerencji w kod programu i przydała by mi się tablica funkcji, już piszę co mam na myśli
char litery[30]={A(i,t[15]) , B (i,t[15]), C(i,t[15]), D(i+5,t[15]), ... }
wtedy wybór litery polegał by głównie na inkrementacji jakiejś zmiennej przy użyciu µswitcha np. wywołanie litery[2]; litery[1]; litery[0]; powodowało by wyświetlenie napisu 'CBA'
... czego niestety w C zrobić nie można, tu moja prośba o podsunięcie pomysłu rozwiązania tego problemu w inny sposób, bo nie mam pomysłu ;/
void A(char przesun, char t[])
{
if(przesun>15 || przesun <=0){PORTD=0xFF;PORTC=0x00;}
else{
PORTD=0X01;
PORTC=t[1+przesun];
_delay_us(750);
PORTD=0xFA;
PORTC=t[2+przesun];
_delay_us(750);
PORTD=0xFA;
PORTC=t[3+przesun];
_delay_us(750);
PORTD=0x01;
PORTC=t[4+przesun];
_delay_us(750);
}
}
void B(char przesun, char t[])
{
if(przesun>15 || przesun <=0){PORTD=0xFF;PORTC=0x00;}
else{
PORTD=0X00;
PORTC=t[1+przesun];
_delay_us(750);
PORTD=0x0A;
PORTC=t[2+przesun];
_delay_us(750);
PORTD=0x0A;
PORTC=t[3+przesun];
_delay_us(750);
PORTD=0xF5;
PORTC=t[4+przesun];
_delay_us(750);
}
}