Hier
1 | for( i = 0; i < 8; i++ )
|
2 | {
|
3 | if (c&(128>>i))
|
4 | {
|
5 | GLCD_SetPixel( x1+i, y+j, 1, layer );
|
6 | }
|
7 | else
|
8 | {
|
9 | GLCD_SetPixel( x1+i, y+j, 0, layer );
|
10 | }
|
11 | }
|
steckt noch einiges Potential. Schieben um eine variable Anzahl an
Stellen ist immer eine schlechte Idee auf einem AVR.
Anstatt mit einer variablen Maske abzufragen, fragst du immer dasselbe
Bit ab und schiebst dufür das Byte in c sukzessive um 1 Stelle weiter.
1 | if(font==1) c = pgm_read_byte( &data_table[ offset + o + byteOffset ] );
|
2 | if(font==2) c = pgm_read_byte( &data_table1[ offset + o + byteOffset ] );
|
3 | if(font==3) c = pgm_read_byte( &data_table2[ offset + o + byteOffset ] );
|
schreib dir halt erst mal eine Funktion, die 1 Zeichen ausgeben kann,
wobei du die Startadresse im Flash (ergo den Font) dieser Funktion
mitgibst. Dann brauchst du nicht bei jedem Zeichen eine
Fallunterscheidung machen, welcher Font zu benutzen ist. Die
Fontstartadresse stellst du dann 1 mal pro String fest und gibst alle
Zeichen mit dieser Fontstartadresse aus.
Ausserdem ist so eine Funktion, die 1 Zeichen ausgeben kann, sowieso
immer eine gute Idee.