Итак, в прошлой статье мы на скорую руку сварганили некий прибор, который измеряет температуру, а также показывает нам текущие дату-время. Когда пройдет первая эйфория от того, что все работает более-менее так, как мы и задумывали, то начинаешь обращать внимание уже на детали. Например - зачем нам сдались надписи на английском? Не то, чтобы я противник иностранных языков, но все же - нельзя ли сделать надписи на индикаторе по-русски? Или, например, вывести на экран еще какие-нибудь значки, кроме букв и цифр?

В этом месте у меня для вас, мальчики и девочки, есть новости как хорошие, так и плохие.

Во-первых, что касается собственно индикаторов - они могут иметь в своей памяти (знакогенераторе) набор русских букв, а могут и не иметь. То есть, как правило - если вы покупали индикатор у нас, в России, то он руссифицирован. А если заказывали откуда-ниьудь с Алиэкспресса, то - возможны варианты. Приведу пример:

rus

 

Вот это таблица, показывающая содержимое ячеек памяти русифицированного дисплея.

rus1

А вот это - нерусифицированный. Заметьте, что левая часть таблиц, там где английские буквы, цифры и другие символы, повторяется один к одному. Но русских букв во втором случае нет, вместо них - какие-то кракозяблы. Для владельцев таких индикаторов, конечно, существуют некие изощренные способы русификации, но сейчас они для нас слишком сложны, поэтому в этой статье рассматриваться не будут.

Теперь вернемся к первому, русифицированному дисплею. Обратите внимание, что все символы расположены в ячейках, которые имеют свой адрес (или код). Когда мы пишем в скетче что-то типа lcd.print("Temper");, то среда программирования Arduino IDE воспринимает (вернее, ретранслирует Ардуине) выводимую строку не в виде строки символов, а в виде набора адресов (кодов) ячеек индикатора, в которых лежат нужные нам символы.

То есть, присутствует цепочка: мы пишем на экране строку символов, среда программирования переводит эту строку в набор адресов ячеек памяти индикатора, индикатор, читая эти коды, роется у себя в памяти и выводит себе на экран то, что мы ему передали. Все прекрасно!

Прекрасно, если только мы пишем по-английски. Не буду вдаваться в рассуждения про стандартные таблицы кодировок символов, только скажу, что Arduino IDE, сама по себе, воспринимает (и передает в кодах индикатору) только английские символы. И передаваемые коды символов точно соответствуют адресам индикатора, в которых эти символы хранятся. То есть - написал в компьютере строку - точно такая же строка появилась в индикаторе.

Теперь плохая новость - русские буквы таким способом не вывести, так как адреса ячеек, в которых они лежат в индикаторе, не соответствуют тем кодам, которые передаст Arduinо IDE, если ей прямо в скетче написать русскую букву. Можете сами попробовать, изменив немного скетч из прошлой статьи.

Снова хорошие новости - большое количество символов латиницы и кириллицы имеют одинаковое начертание, а оставшиеся - можно добыть, прямо в скетче указав адреса ячеек индикатора, в которых они находятся. 

Как же опрелелить нужный нам адрес? Смотрим верхнюю таблицу, самую левую колонку. Каждая строка зашифрована кодом типа HHLH. Таким же способом обозначен и каждый столбец. Давайте выберем русскую букву, которую нам нужно показать. Допустим, это будет буква "П" для слова "АПР" (апрель, значит). Обозначение строки, на которой лежит буква "П" - HLLL,  а столбец - HLHL. Теперь, вместо "Н" подставляем "1", а вместо "L" - "0" и получаем адрес в двоичной записи 10101000 (сначала - адрес столбца, потом - строки).

Теперь откроем "Калькулятор" Windows, переключим его в режим "Bin" (двоичные числа) и вставим в окошко полученный адрес.

rus2

Затем, тут же переключим в режим восьмеричного отображения "Oct".

rus3

Вот этот полученный код и будем использовать для отображения буквы "П". Например, вот в этом кусочке кода из прошлой статьи:

 switch(tm.Month) {
    ...........................
      case 4:
      lcd.print("A\250P");
      break;

 .............................

Как видим, для отображения слова "АПР" ("апрель"), мы использовали две английские буквы соответствующего начертания и русскую букву "П", которую вызвали, прямо указав ее адрес в памяти индикатора.

Вот что получилось в итоге:

 rus5

 

Аналогичным способом можно вывести на индикатор любой символ, который присутствует в первой таблице (для русифицированного варианта). 

На этом - все про дисплеи на основе HD44780. Вернее, все необходимое для первоначального знакомства. На самом деле там еще есть что покопать, но это - отдельная большая тема. 

Добавить комментарий