Forum: Compiler & IDEs LCD Umlaute - Wie anders darstellen


von Stefan (Gast)


Lesenswert?

Hallo,

wie kann ich umlaute direkt in lcd_string(); einfügen?

immoment mache ich das so:
1
const uint8_t MN100[] PROGMEM="1. Menü 1\0";
2
...
3
4
lcd_setcursor(0,1);
5
lcd_string("Hauptmen");
6
lcd_setcursor(8,1);
7
lcd_data(0b11110101);           // ü

Dies ist jedoch sehr umständlich und würde bei

copyStringtoLCD(MENU[state], 0, 2);  // auslesen des MN100

nicht funktionieren.

von holger (Gast)


Lesenswert?

Bau dir eine Übersetzungsfunktion in die Zeichenausgabe:

//######################################################
// Übersetzungstabelle für Sonderzeichen
//######################################################
char ConvertChar(char data)
{
 char ps;

 ps = data;

  //Standard Übersetzungstabelle Win zu LCD Sonderzeichen
 switch(ps)
  {
   case 'ä' : ps=0xE1; break; //Umlenkung auf neuen Zeichen Code
   case 'ö' : ps=0xEF; break;
   case 'ü' : ps=0xF5; break;
   case 'ß' : ps=0xE2; break;
   case '°' : ps=0xDF; break;
   case 'µ' : ps=0xE4; break;
//   case 'Ä' : ps=0x00; break; //Umlenkung ins Character RAM
//   case 'Ö' : ps=0x01; break;
//   case 'Ü' : ps=0x02; break;
  }

 return ps;
}

von Falk B. (falk)


Lesenswert?

@  Stefan (Gast)

>wie kann ich umlaute direkt in lcd_string(); einfügen?

So

1
//LCD code for german Umlaute
2
3
#define ue "\xF5"
4
#define oe "\xEF"
5
#define ae "\xE1"
6
7
const uint8_t MN100[] PROGMEM="1. Men" ue " 1";
8
...
9
lcd_string("Hauptmen" ue);

Nicht perfekt, aber brauchbar. Die Vollprofilösung wäre wahrscheinlich 
UTF-8 etc. Die zusammengestückelten Strings sind zu Sicherheit, damit 
die Hexzahl nicht aus Versehen durch einen nachfolgenden Buchstaben A-F 
verfälscht wird.

1
const uint8_t MN100[] PROGMEM="Frühstück";
2
// geht nicht, weil kein normales ASCII
3
4
const uint8_t MN101[] PROGMEM="Fr\xF5hst\xF5ck";
5
// geht nicht, weil nach der HEX F5 ein c kommt,
6
// was als 0xF5C interpretiert wird!
7
8
const uint8_t MN101[] PROGMEM="Fr" "\xF5" "hst" "\xF5" "ck";
9
// geht
10
11
const uint8_t MN101[] PROGMEM="Fr" ue "hst" ue "ck";
12
// geht, besser lesbar


MFg
Falk

P S die \0 braucht man nicht bei Stringdefinitionen, das macht der 
Compiler allein.

von Stefan (Gast)


Lesenswert?

@Falk Brunner

Danke funktioniert sehr gut!

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.