Бегущая строка ардуино lcd

Имеется аналог Arduino Duemilanove (Freeduino 2009) c ATmega328 на борту,LCD индикатор WH1602B-YYH-CTK на базе HD44780, производства Тайваньской фирмы Winstar Display Co., LTD.

Возникла идея «прокрутить» текстовую строку, произвольной длины на LCD.
В данной статье не рассматриваю способ подключения LCD к Arduino, так как об этом написано много и на этом сайте тоже. Скажу только, что подключено по принципу максимальной экономии пинов. Использовались 7,6,5,4,3,2 пины. Вы, конечно, можете использовать любые другие, которые вам нравятся, с соответствующими изменениями в скетче.
Средствами штатной библиотеки «LiquidCrystalRus.h» ничего вразумительного не получилось. Google-ние в инете так же не дало результатов. ( Возможно плохо искал.) Решил попробовать, что-нибудь спрограммировать.
Скетч получился небольшой (Почти половина — текстовые данные). Конечно, с кириллицей, как всегда, проблемы. Поэтому пришлось добавить несколько, на первый взгляд, не нужных операторов. А с «американскими» буквами, всегда все замечательно.

Вот есть видео на RUTUB , иллюстрирующее работу скетча. Прошу сильно не возмущаться, т.к. качество видео весьма «телефонное» )).

В заключение, хотелось бы добавить, что настоятельно не рекомендую добавлять дополнительные строки. Лучше заменить существующие. Т.к. количество ОЗУ в микроконтроллере весьма ограничено. Добавление дополнительных данных приводит к полному забиванию памяти, как следствие, неправильной работе программы и даже к блокированию работы бутлоадера! Реанимировать МК штатными методами становится весьма проблематично !
Для 168 меги количество данных нужно уменьшить, как минимум, в два раза !
Для возможности работы с большим объемом данных можно попробовать использовать библиотеку , которая позволяет размещать данные в области программного кода и работать с ними.
Если кто имел подобный опыт программирования поделитесь. Конечно «Войну и мир» в Arduino зашить не получится, но раз в 15 объем текста увеличить будет можно.

Имеется аналог Arduino Duemilanove (Freeduino 2009) c ATmega328 на борту,LCD индикатор WH1602B-YYH-CTK на базе HD44780, производства Тайваньской фирмы Winstar Display Co., LTD.

Возникла идея «прокрутить» текстовую строку, произвольной длины на LCD.
В данной статье не рассматриваю способ подключения LCD к Arduino, так как об этом написано много и на этом сайте тоже. Скажу только, что подключено по принципу максимальной экономии пинов. Использовались 7,6,5,4,3,2 пины. Вы, конечно, можете использовать любые другие, которые вам нравятся, с соответствующими изменениями в скетче.
Средствами штатной библиотеки «LiquidCrystalRus.h» ничего вразумительного не получилось. Google-ние в инете так же не дало результатов. ( Возможно плохо искал.) Решил попробовать, что-нибудь спрограммировать.
Скетч получился небольшой (Почти половина — текстовые данные). Конечно, с кириллицей, как всегда, проблемы. Поэтому пришлось добавить несколько, на первый взгляд, не нужных операторов. А с «американскими» буквами, всегда все замечательно.

Вот есть видео на RUTUB , иллюстрирующее работу скетча. Прошу сильно не возмущаться, т.к. качество видео весьма «телефонное» )).

В заключение, хотелось бы добавить, что настоятельно не рекомендую добавлять дополнительные строки. Лучше заменить существующие. Т.к. количество ОЗУ в микроконтроллере весьма ограничено. Добавление дополнительных данных приводит к полному забиванию памяти, как следствие, неправильной работе программы и даже к блокированию работы бутлоадера! Реанимировать МК штатными методами становится весьма проблематично !
Для 168 меги количество данных нужно уменьшить, как минимум, в два раза !
Для возможности работы с большим объемом данных можно попробовать использовать библиотеку , которая позволяет размещать данные в области программного кода и работать с ними.
Если кто имел подобный опыт программирования поделитесь. Конечно «Войну и мир» в Arduino зашить не получится, но раз в 15 объем текста увеличить будет можно.

Текстовый экран 16×2 пригодится для вывода показаний датчиков, отображения простых меню, подсказок и приветствий.

Видеообзор

Подключение и настройка

Дисплей MT-16S2H предназначен для вывода текста на латинице и кириллице.

Экран имеет 16 контактов для питания логики, взаимодействия с управляющей электроникой и подсветки.

Вывод Обозначение Описание
1 GND Общий вывод (земля)
2 Vcc Напряжение питания (3,3—5 В)
3 Vo Управление контрастностью
4 RS Выбор регистра
5 R/W Выбор режима записи или чтения
6 E Разрешение обращений к индикатору (а также строб данных)
7 DB0 Шина данных (8-ми битный режим)(младший бит в 8-ми битном режиме)
8 DB1 Шина данных (8-ми битный режим)
9 DB2 Шина данных (8-ми битный режим)
10 DB3 Шина данных (8-ми и 4-х битные режимы)(младший бит в 4-х битном режиме)
11 DB4 Шина данных (8-ми и 4-х битные режимы)
12 DB5 Шина данных (8-ми и 4-х битные режимы)
13 DB6 Шина данных (8-ми и 4-х битные режимы)
14 DB7 Шина данных (8-ми и 4-х битные режимы)
15 +LED + питания подсветки
16 –LED – питания подсветки

Дисплей может работать в двух режимах:

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

Подключение дисплея к управляющей плате

В качестве примера подключим дисплей к управляющей плате Arduino Uno. Для подключения понадобится Breadboard Half и соединительные провода «папа-папа».

Вывод Обозначение Пин Arduino Uno
1 GND GND
2 Vcc 5V
3 Vo GND
4 RS 12
5 R/W GND
6 E 11
7 DB0
8 DB1
9 DB2
10 DB3
11 DB4 5
12 DB5 4
13 DB6 3
14 DB7 2
15 Vcc 5V
16 GND GND

Аналогично можно подключить дисплей к платформе Iskra JS.

Вывод Обозначение Пин Iskra JS
1 GND GND
2 Vcc 5V
3 Vo GND
4 RS P12
5 R/W GND
6 E P11
7 DB0
8 DB1
9 DB2
10 DB3
11 DB4 P5
12 DB5 P4
13 DB6 P3
14 DB7 P2
15 Vcc 5V
16 GND GND

Примеры работы для Arduino

Для упрощения работы с LCD-дисплеем используйте встроенную библиотеку Liquid Crystal. В ней вы найдёте примеры кода с подробными комментариями.

Библиотека подходит как для работы с контроллерами на AVR-платформе, так и с ARM-контроллерами.

Вывод текста

Для вывода первой программы приветствия, воспользуйтесь кодом вроде этого:

Кириллица

Существует два способа вывода кириллицы на текстовые дисплеи:

Рассмотрим оба способа более подробно.

Таблица знакогенератора

Дисплейный модуль хранит в памяти две страницы знакогенератора, которые состоят из различных символов и букв. Для вывода символа на дисплей необходимо передать его номер в шестнадцатеричной системе из таблицы знакогенератора.

Так букве Я соответствует код B1 в шестнадцатеричной системе. Чтобы передать на экран строку «Яndex», необходимо в явном виде с помощью последовательности x## встроить в строку код символа:

Вы можете смешивать в одной строке обычные символы и явные коды как угодно. Единственный нюанс в том, что после того, как компилятор в строке видит последовательность x , он считывает за ним все символы, которые могут являться разрядами шестнадцатеричной системы даже если их больше двух. Из-за этого нельзя использовать символы из диапазона 0-9 и A-F следом за двузначным кодом символа, иначе на дисплее отобразится неправильная информация. Чтобы обойти этот момент, можно использовать тот факт, что две записанные рядом строки склеиваются.

Сравните две строки кода для вывода надписи «Яeee»:

Используя полученную информацию выведем на дисплей сообщение «Привет, Амперка!»:

Переключение страниц знакогенератора

Дисплейный модуль хранит в памяти две страницы знакогенератора. По умолчанию установлена нулевая страница. Для переключения между страницами используйте методы:

Дисплей не может одновременно отображать символы разных страниц.

Рассмотрим пример, в котором одна и та же строка будет отображаться по-разному — в зависимости от выбранной страницы.

Полную таблицу символов с кодами можно найти в документации к экрану.

Использование библиотеки Liqu >

Совсем не обязательно мучатся со знакогенератором, чтобы вывести русский символ. Для решения проблемы скачайте и установите библиотеку LiquidCrystalRus.

Это копия оригинальной библиотеки LiquidCrystal с добавлением русского языка. Добавленный в библиотеку код трансформирует русские символы UTF8 в правильные коды для текстового экрана.

В качестве примера выведем фразу «Привет, Амперка» на дисплей.

Примеры работы для Iskra JS

Для работы с LCD-дисплеем из среды Espruino существует библиотека HD44780.

Вывод текста

Для вывода программы приветствия, воспользуйтесь скриптом:

Кирилица

Вывод кирилицы на дисплей с помощью платформы Iskra JS доступен через встроенную в дисплей таблицу знакогенератора.

Таблица знакогенератора

Дисплейный модуль хранит в памяти две страницы знакогенератора, которые состоят из различных символов и букв. Для вывода символа на дисплей необходимо передать его номер в шестнадцатеричной системе из таблицы знакогенератора.

Так букве Я соответствует код B1 в шестнадцатеричной системе. Чтобы передать на экран строку «Яndex», необходимо в явном виде с помощью последовательности x## встроить в строку код символа:

Вы можете смешивать в одной строке обычные символы и явные коды как угодно. Единственный нюанс в том, что после того, как компилятор в строке видит последовательность x , он считывает за ним все символы, которые могут являться разрядами шестнадцатеричной системы даже если их больше двух. Из-за этого нельзя использовать символы из диапазона 0–9 и A–F следом за двузначным кодом символа, иначе на дисплее отобразится неправильная информация. Чтобы обойти этот момент, можно использовать тот факт, что две строки записанные рядом склеиваются.

Сравните две строки кода для вывода надписи «Яeee»:

Используя полученную информацию выведем на дисплей сообщение «Привет, Амперка!»:

Переключение страниц знакогенератора

Дисплейный модуль хранит в памяти две страницы знакогенератора. По умолчанию установлена нулевая страница. Для переключения между страницами используйте методы:

Дисплей не может одновременно отображать символы разных страниц.

Рассмотрим пример, в котором одна и та же строка будет отображаться по-разному — в зависимости от выбранной страницы.

Полную таблицу символов с кодами можно найти в документации к экрану.

Комнатный термометр

Дисплей удобен для отображения показаний модулей и сенсоров. Сделаем задатки «Умного Дома», а именно «комнатный термометр».

Оцените статью
Topsamoe.ru
Добавить комментарий