LCD Umlaute - Wie anders darstellen

Gast #1899960
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.
Gast #1899977
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;
}
#1900056
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren