Forum: Mikrocontroller und Digitale Elektronik versch. Zeichsätze setzen


von Thomas (Gast)


Lesenswert?

Hallo,

Ich habe folgendes Problem: Ich habe eine Software, die in mehreren 
Sprachen verfügbar ist. Nun möchte ich diese so erweitern, dass sie z.B. 
auch in Russisch also in Kyrillisch verfügbar ist. Dazu sind 
verschiedene Zeichensätze nötig.
Die Sprachumschaltung mache ich mit Switch Befehlen. Nun die Frage ist 
wie ich die Zeichensätze innerhalb der Switch Anweisungen "Setzen" kann.


Hier der Auszug aus meinem Programm:
1
char Textregister(unsigned char Sprache, unsigned char Textnummer)
2
{
3
 char character = 0;
4
  switch(Sprache)
5
  {
6
     case ENGLISCH:
7
    {// special character Ä=x8E;ä=x84;Ö=x99;ö=x94;Ü=x9A;ü=x81;ß=xE1;µ=xE6
8
      switch(Textnummer)
9
      {
10
        case T_number1:                display_write_char(0x40);      break;
11
        case T_number2:              display_write_char(0x50);      break;
12
        case T_number3:               display_write_char(0x60);      break;
13
      
14
      }
15
    }
16
     case RUSSISCH:      
17
    {
18
      
19
      switch(Textnummer)
20
      {
21
        
22
        case T_number1:                display_write_char(0x40);      break;
23
        case T_number2:              display_write_char(0x41);      break;
24
        case T_number3:               display_write_char(0x42);      break;
25
      
26
      }
27
    }
28
    
29
    
30
  }
31
32
 return character;
33
}

Um den entsprechenden Zeichensatz zu setzen habe ich manuell mit #define 
FONT2 gearbeitet, das funktioniert aber leider nicht innerhalb der 
switch anweisung.

hier noch ein Teilauszug aus dem Zeichensatz
1
#if defined FONT2
2
    #define FONT_WIDTH 7
3
    #define FONT_HEIGHT 8  //8, 16, 32, 64, 128
4
5
    PROGMEM char font[256][7]={  
6
    {0x60, 0x3C, 0x22, 0x3C, 0x60, 0x00, 0x00},  // 0x00 Code for char 
7
        {0x7E, 0x52, 0x20, 0x00, 0x00, 0x00, 0x00},  // Code for char 
8
        {0x00, 0x7E, 0x4A, 0x34, 0x00, 0x00, 0x00},  // Code for char 
9
        {0x00, 0x7E, 0x02, 0x02, 0x00, 0x00, 0x00},  // Code for char

Vielen Dank im Voraus für Eure Hilfe

gruß Thomas

: Verschoben durch User
von Patrick (Gast)


Lesenswert?

Hm, naja, die Frage ist ja, ob Du wirklich nur den Zeichensatz 
umschalten willst - oder nicht auch die Texte als String-Arrays ablegst.

Wenn Du veränderbare Werte auf dem Display hast (d. h. Du benötigst z. 
B. die Zahlen von 0 bis 9), dann macht es Sinn, diese in jedem 
Zeichensatz an derselben Position abzulegen.
Die einzelnen Zeichen in den Strings wiederum verweisen auf das 
entsprechende Zeichen im Font.

z. B. (auf die Schnelle hingeklatscht):
1
    PROGMEM char font[NUM_LANGUAGES][256][7]={
2
      {
3
        {0x60, 0x3C, 0x22, 0x3C, 0x60, 0x00, 0x00},  // 0x00 Code for char 
4
        {0x7E, 0x52, 0x20, 0x00, 0x00, 0x00, 0x00},  // Code for char 
5
        {0x00, 0x7E, 0x4A, 0x34, 0x00, 0x00, 0x00},  // Code for char 
6
        {0x00, 0x7E, 0x02, 0x02, 0x00, 0x00, 0x00},  // Code for char 
7
      }
8
    };
9
10
const char str11[] PROGMEM = "\x01\x27\x43"; // deutscherstring1
11
const char str12[] PROGMEM = "..."; // englishstring1
12
const char str13[] PROGMEM = "..."; // xxxstring1
13
const char str21[] PROGMEM = "..."; // deutscherstring2
14
const char str22[] PROGMEM = "..."; // englishstring2
15
const char str23[] PROGMEM = "..."; // xxxstring2
16
 
17
const char * const strarray1[NUM_LANGUAGES][] PROGMEM = {
18
   { str11, str21 },
19
   { str12, str22 },
20
   { str13, str23 }
21
};

... und dann einfach entsprechend dereferenzieren.

Geht das in die Richtung der Fragestellung?

von Patrick (Gast)


Lesenswert?

... bzw. würde es Sinn machen, für Sprachen, die den gleichen 
Zeichensatz benutzen, noch ein weiteres Array einzuführen, damit man die 
Zeichensätze nicht redundant vorhalten muss.

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.