Перекодировка кириллицы utf в коды дисплея hd44780

Тема в разделе "Iskra JS, Espruino, Йодо", создана пользователем Konkery, 31 янв 2017.

  1. Konkery

    Konkery Гик

    Приветствую, народ !
    Подскажите есть ли библиотека на JS для перекодировки сообщений "на лету"
    на кириллице в коды lcd дисплея ?
    Дисплей Мэлт 20*4 (hd44780), кириллица прошита, плата Iskra JS.
    Если таковой нет, буду признателен за ссылку на библиотеку С/С++
    которая делает тоже, с целью переписать на JS.
     
  2. mcureenab

    mcureenab Гуру

    Сообщение на кириллице может быть в кодировке UTF-8, WIN1251, KOI8-R, PC866 и т.д. Ваши сообщения в какой кодировке?
     
  3. Protos911

    Protos911 Нерд

    Такой библиотеки нет, все програмеры пишут на английском и думаю, что весь мир пользуется только им! ;)
    Т.е. библиотека работает только с англоязычной частью знакосентизатора, а русский вы обязаны скармливать контроллеру дисплея в виде кодов таблицы знакосинтезатора http://files.amperka.ru/datasheets/MT-20S4A.pdf:D
    Библиотека под Андруино: http://arduino.cc/en/Reference/LiquidCrystal.
    ПС
    Сам нарвался и таких мелочей море, я по тому и поднял тему:
    http://forum.amperka.ru/threads/Обращение-к-Амперке-Необходимы-политические-изменения-в-работе-Вики-Форума-и-тех-поддержки.10548/#post-100183
     
    Последнее редактирование: 31 янв 2017
    sys нравится это.
  4. mcureenab

    mcureenab Гуру

    В МЭЛТ MT–16S2H (http://files.amperka.ru/datasheets/MT-16S2H.pdf) страница 1 кодировка Windows 1251. Страница 0 собственная кодировка. Из кириллической части таблицы убраны символы которые по начертанию можно заменить символами из латиницы. К сожалению коды оставшихся символов не совпадают с Windows 1251.
     
  5. Protos911

    Protos911 Нерд

    Так это всегда так, в ПЗУ знакогенератора ЖКИ место не резиновое.
    Библиотеку под JS и С++ дописывать надо, там просто кириллистическая часть кодов знакогенератора не используеться.
     
    Последнее редактирование: 31 янв 2017
  6. Konkery

    Konkery Гик

    Не помню где но где то видел информацию, что кириллица занимает 2 байта, соответственно
    получается utf-16. Вывод одного кириллического символа на мой дисплей приводит к отображению
    ровно двух кракозябр, например "гав" привет к выводу чего то типа ",т,я,й"
     
  7. Konkery

    Konkery Гик

    Что касается "скармливать контроллеру" это понятно, собственно я и спрашивал код готовой ф-и
    которая это делает.
    Приведенную вами библиотеку я ранее (правда по диогонали) смотрел, но то что мне нужно
    (перекодирование кириллицы в utf 16 -> код знакогенератора hd44780) я там не видел
    можно название ф-и ?
     
  8. mcureenab

    mcureenab Гуру

    2 байта не обязательно UTF-16. UTF-8 тоже многобайтовая кодировка. Из Windows приложения вполне возможно поступает UTF-16.
    Чтобы перекодировать все символы юникода в МК памяти не хватит.
     
    Konkery нравится это.
  9. Konkery

    Konkery Гик

    Что касается кодировки то здесь я наверное ошибаюсь, не utf16 а utf8
     
  10. mcureenab

    mcureenab Гуру

    http://www.cyberforum.ru/cpp-beginners/thread800577.html

    Пример кода функции convert_utf8_to_windows1251 и таблица g_letters есть. Если пользовать страницу 0, пропишите в таблицу g_letters в первой колонке нужные коды.
     
    sys и Konkery нравится это.
  11. Konkery

    Konkery Гик

    спасибо !, думаю немного сэкономит время на перекод
     
  12. Konkery

    Konkery Гик

    собственно ф-я готова, для удобства хочу переобределить класс hd44780, если кому нужно пишите в личку скину рабочий вариант
     
  13. Protos911

    Protos911 Нерд

    Выкладывайте прямо в теме плиз желательно на первую страницу, бо очень многим актуально!
    Амперка обещает нормальный FAQ пополняемый нами со временем перенесёте туда.
     
  14. Konkery

    Konkery Гик

    arkadyf нравится это.
  15. НАБ

    НАБ Нуб

    Пожалуйста, пришлите файл ещё раз.
     
  16. b707

    b707 Гуру

    а самому написать? - там кода буквально 5-7 строчек
    Вот пример перевода кодировки Ардуино ИДЕ в пользовательсткую, делайте по аналогии
    Код (C++):
    int utf8_rus(char* dest, const unsigned char* src) {
      uint8_t i, j;
      for ( i =0, j =0; src[i]; i++) {
       if ((src[i] == 0xD0 )&& src[i+1])  { dest[j++] = src[++i] - 0x10;}
        else if ((src[i] == 0xD1 )&& src[i+1]) {dest[j++] = src[++i] + 0x30;  }
        else dest[j++] = src[i];
      }
      dest[j] ='\0';
      return j;
    }