Der Chip ist ja für Displays mit 32 Zeilen und 8 Spalten (32z×8s), oder
wahlweise auch 24 Zeilen und 16 Spalten (24z6s) gemacht.
Die Routine aus dem Eröffnungsbeitrag scheint für 8z×32s-Displays
vorgesehen zu sein:
1 | if ((x < 0) || (y < 0) || (x > 31) || (y > 7))
|
Am einfachsten wäre es, das 8z×32s-Display wie ein um 90° gedrehtes
32z×8s-Display zu behandeln (oben im Bild). Dann ist
1 | bitval = 1 << (x & 3);
|
2 | addr = (x << 1) + (y >> 2);
|
Möglicherweise hat es jemanden gestört, dass bei dieser Vorgehensweise
Zeilen zu Spalten und Spalten zu Zeilen werden, und das Display deswegen
so angeschlossen wie unten im Bild gezeigt. Dadurch wir die Berechnung
der Adresse etwas komplizierter.
Jan H. schrieb:
> Das ganze ist ein Teil für eine 8x8 Matrix
Wenn nur ein 8×8-Display angeschlossen ist, ist x<8, so dass
1 | addr = ((x>>3)<<4)+(y<<1)+((x&4)>>2);
|
vereinfacht werden kann zu
1 | addr = (y << 1) + (x >> 2);
|
was (mit vertauschten x und y) exakt dem Ausdruck von oben entspricht.