Forum: Mikrocontroller und Digitale Elektronik Fontmap und Assembler


von Jochen H. (Firma: freier [VENTUZ] Operator) (joschy)


Lesenswert?

Hallo,
ich hab mal eine Frage bezüglich Fontmaps und Assembler. Mit dem 
FontCreator von Maximilian Thiele kann man sich ja schön die einzelnen 
Zeichen als Bitmuster generieren:

static uint8_t new_Font[] PROGMEM = {
 ...
...
    // font data
    0xFE, 0x01, 0x01, 0x01, 0xFE, 0x00, 0x80, 0x80, 0x80, 0x00, // 48
    0x04, 0x02, 0xFF, 0x00, 0x00, 0x80, // 49
    0x02, 0x81, 0x41, 0x31, 0x0E, 0x80, 0x80, 0x80, 0x80, 0x80, // 50
    0x82, 0x01, 0x11, 0x11, 0xEE, 0x00, 0x80, 0x80, 0x80, 0x00, // 51
    0x60, 0x58, 0x46, 0xFF, 0x40, 0x00, 0x00, 0x00, 0x80, 0x00, // 52
    0x9C, 0x0B, 0x09, 0x09, 0xF1, 0x00, 0x80, 0x80, 0x80, 0x00, // 53
    0xFE, 0x11, 0x09, 0x09, 0xF2, 0x00, 0x80, 0x80, 0x80, 0x00, // 54
    0x01, 0xC1, 0x39, 0x05, 0x03, 0x00, 0x80, 0x00, 0x00, 0x00, // 55
    0xEE, 0x11, 0x11, 0x11, 0xEE, 0x00, 0x80, 0x80, 0x80, 0x00 // 56
....
Um auf die einzelnen Zeichen zuzugreifen brauche ich aber doch einen 
Offset zur Speicheradresse, z.B. für "1":
static uint8_t new_Font +9; um auf die zweite Zeile zuzugreifen.
Demendsprechend brauche ich wohl noch eine Liste in der die Offsets 
stehen, oder?

Hat man z.B. die Zahl 1200 - 0b0000 0100 1011 0000, konvertiere ich die 
einzelnen Stellen.
Ziffer 1 = Liste_Offsets zweite Position
Ziffer 2 = Liste_Offsets dritte Position
Ziffer 0 = Liste_Offset erste Position
Ziffer 0 = Liste_Offset erste Position

Wie macht ihr das?

von Rahul, der Trollige (Gast)


Lesenswert?

>Demendsprechend brauche ich wohl noch eine Liste in der die Offsets
>stehen, oder?

Entweder eine Tabelle, oder eine Berechnung, wenn die Ziffern alle die 
gleiche "Breite" haben.

von OliverSo (Gast)


Lesenswert?

Deshalb gibt es in den erzeugten Daten ja auch noch den Bereich
// char widths

Wie sich daraus der Offset auf ein Zeichen berechnet, entnimmst du am 
besten der dazugehörigen ks108-library.

Oliver

von Jochen H. (Firma: freier [VENTUZ] Operator) (joschy)


Lesenswert?

ahhhh,

    // char widths
    0x05, 0x03, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,

Auf obiges Bitmuster bezogen; Pos = Char widths * 2 = Anzahl der 
Bitmuster.


Ist für ein ein OLED, SSD1303...

Merci,
Jochen

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.