Руссификация дисплея

Тема в разделе "Arduino & Shields", создана пользователем Андрей Васильев, 10 ноя 2017.

  1. И снова здравствуйте! Не подскажите как русифицируется дисплей JLX12864-086?
     
  2. sslobodyan

    sslobodyan Гик

    Так это вроде графический 128х64 дисплей. Что там русифицировать? Используйте шрифт с русским знакогенератором.
     
  3. Limoney

    Limoney Гик

    Контроллер не содержит страницы с русским знакогенератором, но кажется, можно самостоятельно рисовать нужные символы)
     
  4. Когда вводишь русские буквы то на дисплее получается какая то шляпа
     
  5. sslobodyan

    sslobodyan Гик

    А слабо вывести на экран все символы шрифта? Прям в несколько колонок - код символа в хексе и рядышком сам символ. Потом внимательно посмотреть - если видим хоть где-то русские буквы, то этот шрифт подходит, иначе ищем другой шрифт (или рисуем самостоятельно знакогенератор - в сети есть спецпрограммы). Нашли буквы - пишем функцию перекодировки, которая принимает строку в utf8 (стандртный чарсет в ардуине) и выдает эту строку в кодировке вашего шрифта.
     
  6. Только где искать этот HEX
     
  7. sslobodyan

    sslobodyan Гик

    это вывести номер этого символа в шестнадцатеричном формате. можете и в десятичном выводить, просто тогда разная ширина колонок будет
     
  8. Ок попробую
     
  9. sslobodyan

    sslobodyan Гик

    Вот вам перекодировщик из utf8 в ansi
    Код (C++):
    String utf8rus(String source)
    {
      int i, k;
      String target;
      unsigned char n;
      char m[2] = { '0', '\0' };

      k = source.length(); i = 0;

      while (i < k) {
        n = source[i]; i++;

        if (n >= 0xC0) {
          switch (n) {
            case 0xD0: {
                n = source[i]; i++;
                if (n == 0x81) {
                  n = 0xA8;
                  break;
                }
                if (n >= 0x90 && n <= 0xBF) n = n + 0x30;
                break;
              }
            case 0xD1: {
                n = source[i]; i++;
                if (n == 0x91) {
                  n = 0xB8;
                  break;
                }
                if (n >= 0x80 && n <= 0x8F) n = n + 0x70;
                break;
              }
          }
        }
        m[0] = n; target = target + String(m);
      }
      return target;
    }
    вызывать как tft.print(utf8rus("Привет"))
     
  10.  
  11. Спасибки огромное ни чего страшного не будет если в строке tft.print(utf8rus("Привет")); будет u8g.print(utf8rus("Привет"))
     
  12. Вот какой код получился
    Код (C++):
    /*
    * SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RST = 8
    */

    #include "U8glib.h"

    U8GLIB_NHD_C12864 u8g(13, 11, 10, 9, 8);

    String utf8rus(String source)
    {
      int i, k;
      String target;
      unsigned char n;
      char m[2] = { '0', '\0' };

      k = source.length(); i = 0;

      while (i < k) {
        n = source[i]; i++;

        if (n >= 0xC0) {
          switch (n) {
            case 0xD0: {
                n = source[i]; i++;
                if (n == 0x81) {
                  n = 0xA8;
                  break;
                }
                if (n >= 0x90 && n <= 0xBF) n = n + 0x30;
                break;
              }
            case 0xD1: {
                n = source[i]; i++;
                if (n == 0x91) {
                  n = 0xB8;
                  break;
                }
                if (n >= 0x80 && n <= 0x8F) n = n + 0x70;
                break;
              }
          }
        }
        m[0] = n; target = target + String(m);
      }
      return target;
    }

    void draw(void) {
      u8g.setFont(u8g_font_unifont);
      u8g.setPrintPos(0, 20);
      u8g.print(utf8rus("Привет"));
    }

    void setup() {
    u8g.setRot180();
    }

    void loop() {
      u8g.firstPage();
      do {
        draw();
      } while( u8g.nextPage() );
      delay(500);
    }

    Вот что получается
     

    Вложения:

    • jsfwnf-s_0g.jpg
      jsfwnf-s_0g.jpg
      Размер файла:
      38 КБ
      Просмотров:
      874
  13. Что здесь не так