Charola


Beschreibung

Um auf Displays wie einem GLCD oder auch einem TFT Texte anzeigen zu können, ist es sehr hilfreich, wenn man einen Satz an Buchstaben und Symbolen hat, der mit Hilfe einer Software-Bibliothek einfach als normaler Text nutzbar ist:

glcd_set_cursor(2,7);
glcd_send_string("Text 1234567890", FALSE);

Das führt beispielsweise zu einer Ausgabe von:

glcd.jpg

Es empfiehlt sich, für diese Art von Buchstaben und Symbolen eine feste Breite und Höhe einzustellen, damit zumindest eine ganze Anzahl von Zeilen auf den Bildschirm passt. Die Nutzung dieser Zeichen innerhalb eines Programms ist am besten durch eine Tabelle möglich. Diese Tabelle enthält dann bereits die Kodierung der Zeichen, die einfach als Nutzdaten an das Display gesendet werden. Diese Tabelle ist idealerweise in derselben Reihenfolge wie die ASCII-Tabelle aufgebaut, sodass die Konvertierungsfunktion nur noch den Dezimalwert des Zeichens plus einen eventuellen Offset nutzen muss, um die Kodierung dieses Zeichens in der Tabelle zu finden.
Ein Beispiel für eine solche Tabelle (Ausschnitt):

//font definitions
#define STD_FONT_WIDTH              6     //width of std font: 6 dots
#define STD_FONT_LENGTH            95     //number of items (length of table)
    
#define GLCD_ASCII_TABLE_OFFSET   0x20    //ASCII Table Offset for internal Font Table
    
///display related font definitions
#define GLCD_CHARS_PER_LINE   GLCD_X_RESOLUTION/STD_FONT_WIDTH   //number of characters per line



///ascii table for font
const unsigned char ascii_std_tab[STD_FONT_LENGTH][STD_FONT_WIDTH] PROGMEM = {

  {0x00, 0x00, 0x00, 0x00, 0x00, 0x00},       // " ", address 0x20
  {0x00, 0x00, 0x2f, 0x00, 0x00, 0x00},       // "!", address 0x21
  {0x00, 0x03, 0x00, 0x03, 0x00, 0x00},       // """, address 0x22
  {0x0a, 0x3a, 0x0f, 0x3a, 0x0f, 0x0a},       // "#", address 0x23
  {0x00, 0x04, 0x2a, 0x3f, 0x2a, 0x10},       // "$", address 0x24
  {0x00, 0x26, 0x16, 0x08, 0x34, 0x32},       // "%", address 0x25
  {0x10, 0x2a, 0x25, 0x2d, 0x12, 0x28},       // "&", address 0x26
  {0x00, 0x00, 0x03, 0x00, 0x00, 0x00},       // "'", address 0x27
  {0x00, 0x00, 0x1e, 0x21, 0x00, 0x00},       // "(", address 0x28
  {0x00, 0x00, 0x21, 0x1e, 0x00, 0x00},       // ")", address 0x29
  {0x00, 0x2a, 0x1c, 0x3e, 0x1c, 0x2a},       // "*", address 0x2a
  {0x00, 0x08, 0x08, 0x3e, 0x08, 0x08},       // "+", address 0x2b
  {0x00, 0x80, 0x60, 0x00, 0x00, 0x00},       // ",", address 0x2c
  {0x00, 0x08, 0x08, 0x08, 0x08, 0x00},       // "-", address 0x2d
  {0x00, 0x00, 0x20, 0x00, 0x00, 0x00},       // ".", address 0x2e
  {0x00, 0x30, 0x0c, 0x03, 0x00, 0x00},       // "/", address 0x2f
  {0x00, 0x1e, 0x23, 0x2d, 0x31, 0x1e},       // "0", address 0x30
  {0x00, 0x04, 0x22, 0x3f, 0x20, 0x00},       // "1", address 0x31
  {0x00, 0x22, 0x31, 0x29, 0x25, 0x22},       // "2", address 0x32
  {0x00, 0x12, 0x21, 0x25, 0x25, 0x1e},       // "3", address 0x33
  {0x00, 0x0c, 0x0a, 0x09, 0x3c, 0x08},       // "4", address 0x34
  {0x00, 0x27, 0x25, 0x25, 0x25, 0x19},       // "5", address 0x35
  {0x00, 0x1e, 0x25, 0x25, 0x25, 0x18},       // "6", address 0x36
  {0x00, 0x01, 0x01, 0x39, 0x05, 0x03},       // "7", address 0x37
  {0x00, 0x1a, 0x25, 0x25, 0x25, 0x1a},       // "8", address 0x38
  {0x00, 0x02, 0x25, 0x25, 0x25, 0x1e},       // "9", address 0x39
  {0x00, 0x00, 0x12, 0x00, 0x00, 0x00},       // ":", address 0x3a
  {0x00, 0x20, 0x1a, 0x00, 0x00, 0x00},       // ";", address 0x3b
  {0x00, 0x08, 0x14, 0x22, 0x00, 0x00},       // "<", address 0x3c
  {0x00, 0x14, 0x14, 0x14, 0x14, 0x00},       // "=", address 0x3d
  {0x00, 0x22, 0x14, 0x08, 0x00, 0x00},       // ">", address 0x3e
  {0x00, 0x02, 0x01, 0x29, 0x05, 0x02},       // "?", address 0x3f
  {0x00, 0x1e, 0x21, 0x2d, 0x35, 0x3d},       // "@", address 0x40
  {0x00, 0x3c, 0x0a, 0x09, 0x0a, 0x3c},       // "A", address 0x41
  {0x00, 0x3f, 0x25, 0x25, 0x25, 0x1a},       // "B", address 0x42
  {0x00, 0x1e, 0x21, 0x21, 0x21, 0x12},       // "C", address 0x43
  ...
}


Da die Erstellung solcher Tabellen sehr mühsam ist, entstand im Rahmen diverser Projekte zur Ansteuerung von Displays ein Tool namens "Charola", mit dem die Erstellung solcher Zeichentabellen deutlich leichter fällt:

charola.png

Dieses Tool ist in der Lage, Tabellen mit bis zu 500 Zeichen zu erstellen. Dabei sind die Breite und die Höhe frei einstellbar. Die Tabellen können in verschiedenen Kodierungen exportiert werden. Für die oben gezeigte Tabelle sind die folgenden Einstellungen notwendig, die Ausgabe für dieses Zeichen ist im Textfenster sichtbar:

charola_config.png

Quellen

Die Software wurde auf Basis von wxWidgets erstellt. Sie ist grundsätzlich unter Linux und unter Windows lauffähig. Getestet wurde sie nur unter Linux. Voraussetzung zum Kompilieren und Ausführen des Tools ist wxWidgets. Die Konfiguration der Build-Umgebung erfolgt mit cmake in dem Verzeichnis "bin":

cmake ../

Danach:

make

Die ausführbare Datei sollte dann in dem "bin"-Verzeichnis zu finden sein.
Alternativ befindet sich in dem Archiv auch ein Code::Blocks-Projekt.

Lizenz

Alle hier veröffentlichten Quellen stehen unter der LGPLv3.

Versionsinfo

Anregungen oder weitere Informationen

Hier kann ein Kommentar hinterlassen werden:

Name:

Kommentar: