mikrocontroller.net

Forum: Compiler & IDEs LCD Umlaute - Wie anders darstellen


Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

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

immoment mache ich das so:
const uint8_t MN100[] PROGMEM="1. Menü 1\0";
...

lcd_setcursor(0,1);
lcd_string("Hauptmen");
lcd_setcursor(8,1);
lcd_data(0b11110101);           // ü

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

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

nicht funktionieren.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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;
}

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Stefan (Gast)

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

So

//LCD code for german Umlaute

#define ue "\xF5"
#define oe "\xEF"
#define ae "\xE1"

const uint8_t MN100[] PROGMEM="1. Men" ue " 1";
...
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.

const uint8_t MN100[] PROGMEM="Frühstück";
// geht nicht, weil kein normales ASCII

const uint8_t MN101[] PROGMEM="Fr\xF5hst\xF5ck";
// geht nicht, weil nach der HEX F5 ein c kommt,
// was als 0xF5C interpretiert wird!

const uint8_t MN101[] PROGMEM="Fr" "\xF5" "hst" "\xF5" "ck";
// geht

const uint8_t MN101[] PROGMEM="Fr" ue "hst" ue "ck";
// geht, besser lesbar


MFg
Falk

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

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Falk Brunner

Danke funktioniert sehr gut!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.