Для объявления кириллической таблицы шрифтов найдите в файле начало функции void LiquidCrystal::begin. Там, внутри оператора if (lines > 1), имеется строка номер 87: _displayfunction |= LCD_2Line;. Сразу после нее (перед замыкающей операторной скобкой «}») вставьте еще одну строку:

_displayfunction |= 0x02; //russian codetable

Она устанавливает биты FT в состояние 1:0, соответствующее таблице ENGLISH_RUSSIAN. Сами коды кириллических символов одинаковы и для старого варианта HD44780 с «прошитой» русской таблицей, и для нового WS0010 (табл. 22.1). Подогнать под кодировку UTF-8 здесь их не удастся (и исправить перечеркнутый ноль тоже). В отличие от таблицы ASCII, в этих таблицах указаны только кириллические символы, отличающиеся от английских, потому в функции print () совпадающие буквы в обоих языках можно указывать напрямую, как обычно, а кириллические придется вставлять указанием их числового кода.

В табл. 22.1 приведены шестнадцатеричные коды символов (в строке записываются с предваряющим ), а также восьмеричные. В тексте программ на основе и без того совершенно нечитаемого языка С, на мой взгляд, восьмеричные выглядят компактнее, потому что требуют одного лишь предваряющего обратного слэша.

Обычные символы и коды можно писать вперемешку. Например, процедура замены английских названий дней недели на русские при выводе показаний часов DS1307 (см. далее) будет выглядеть, как показано в листинге далее. Сами часы выдают дни недели в цифровом виде, а соответствующие им англоязычные константы MON, TUE и т. п. уже определены в файле ds1307.h.

Подключение библиотеки LiquidCrystal

После подключения библиотеки LiquidCrystal к программе ее необходимо инициализировать, причем с указанием реальных контактов, к которым присоединяются выводы выбора индикатора RS, разрешения Е и линии данных. Индикаторы на базе HD44780 могут подключаться как по восьмипроводной, так и по четырехпроводной линии данных. Все реальные библиотеки в целях экономии числа соединений, естественно, выбирают второй способ. В нашем случае таких индикаторов два: четыре линии данных у них будут общие, а линии RS и Е различаются — ими мы будем обеспечивать выбор текущего дисплея.

Таким образом, тестовая программа для двух дисплеев WEH001602В, подключенных согласно схеме на рис. 22.1, будет выглядеть следующим образом:

Часы реального времени DS-1307

Модуль часов реального времени RTC на основе микросхемы DS-1307, предлагаемый в «Амперке», имеет один недостаток — к нему требуется батарейка редко встречающегося в продаже типоразмера CR1225, которую придется приобретать отдельно. Проблемой в дальнейшем это, однако, не станет: согласно спецификации, DS-1307 потребляют ток 0,5 мкА, так что в теории этой батарейки при ее емкости 48 мА-ч должно хватать примерно лет на десять — больше, чем ее гарантийный срок хранения. Надо учесть, что без установленной батарейки часы неработоспособны, и их не удастся даже запрограммировать.

Сам модуль представляет собой практически «голую» микросхему DS-1307 с установленными резисторами «подтяжки» для интерфейса 12С. К Arduino модуль подключается через штатные выводы аппаратного I2C (TWI) MK AVR, т. е. через контакты платы Arduino А4 (SDA) и А5 (SCL). Доступ к этому интерфейсу реализован в стандартной библиотеке Wire.h, поставляемой вместе со средой Arduino IDE. Подробно об интерфейсе I2С (другое название интерфейса: TWI, Two Wire Interface) можно прочесть в моей книге [21], здесь мы только укажем, что к нему одновременно могут подключаться до 128 устройств (различаются они программно по индивидуальному адресу). Поэтому на схеме к тем же выводам подключен еще и барометр, который мы рассмотрим позднее.

* * *

Перейти на страницу:

Поиск

Похожие книги