ЖК-дисплей отображает не все символы
Обновлено: 21.11.2024
Хотите, чтобы ваши проекты Arduino отображали сообщения о состоянии или показания датчиков? Тогда эти ЖК-дисплеи могут идеально подойти. Они чрезвычайно распространены и являются быстрым способом добавить читабельный интерфейс в ваш проект.
В этом учебном пособии вы найдете все, что вам нужно знать, чтобы приступить к работе с символьными ЖК-дисплеями. Не только 16×2(1602), но и любые символьные ЖК-дисплеи (например, 16×4, 16×1, 20×4 и т. д.), которые основаны на микросхеме контроллера ЖК-дисплея с параллельным интерфейсом от Hitachi под названием HD44780. Потому что сообщество Arduino уже разработало библиотеку для работы с ЖК-дисплеями HD44780; так что мы быстро подключим их.
Знаете ли вы?
ЖК-дисплей — это сокращение от "жидкокристаллический дисплей". По сути, это дисплей, в котором для создания видимого изображения используются жидкие кристаллы.
При подаче тока на этот особый тип кристалла он становится непрозрачным, блокируя подсветку, расположенную за экраном. В результате эта конкретная область станет темнее по сравнению с другими. Именно так символы отображаются на экране.
Обзор оборудования
Эти ЖК-дисплеи идеально подходят для отображения только текста/символов, отсюда и название «Символьный ЖК-дисплей». Дисплей имеет светодиодную подсветку и может отображать 32 символа ASCII в два ряда по 16 символов в каждом ряду.
Если присмотреться, то можно увидеть маленькие прямоугольники для каждого символа на дисплее и пиксели, из которых состоит символ. Каждый из этих прямоугольников представляет собой сетку размером 5 × 8 пикселей.
Хотя они отображают только текст, они бывают разных размеров и цветов: например, 16 × 1, 16 × 4, 20 × 4, с белым текстом на синем фоне, с черным текстом на зеленом и многими другими.< /p>
Хорошей новостью является то, что все эти дисплеи можно заменять. Если вы создаете свой проект с одним из них, вы можете просто отключить его и использовать ЖК-дисплей другого размера/цвета по вашему выбору. Ваш код, возможно, придется приспособить к большему размеру, но, по крайней мере, проводка останется прежней!
Распиновка ЖК-дисплея 16×2
Прежде чем перейти к подключению и примерам кода, давайте сначала взглянем на разводку ЖК-дисплея.
GND должен быть подключен к земле Arduino.
VCC — это источник питания для ЖК-дисплея, который мы подключаем к 5-вольтовому контакту на Arduino.
Vo (контрастность ЖК-дисплея) управляет контрастностью и яркостью ЖК-дисплея. Используя простой делитель напряжения с потенциометром, мы можем точно настроить контрастность.
Вывод RS (выбор регистра) позволяет Arduino сообщать ЖК-дисплею, отправляет ли он команды или данные. В основном этот контакт используется для того, чтобы отличать команды от данных.
Например, если для вывода RS установлено значение LOW, мы отправляем команды на ЖК-дисплей (например, установить курсор в определенное место, очистить дисплей, прокрутить дисплей вправо и т. д.). И когда на выводе RS установлен ВЫСОКИЙ уровень, мы отправляем данные/символы на ЖК-дисплей.
Контакт R/W (чтение/запись) на ЖК-дисплее управляет тем, читаете ли вы данные с ЖК-дисплея или записываете данные на ЖК-дисплей. Поскольку мы используем этот ЖК-дисплей только как устройство вывода, мы собираемся связать этот контакт НИЗКИМ. Это переводит его в режим записи.
Вывод E (Enable) используется для включения дисплея. Это означает, что когда этот вывод установлен на НИЗКИЙ уровень, ЖК-дисплей не заботится о том, что происходит с R/W, RS и линиями шины данных; когда этот контакт установлен в состояние HIGH, ЖК-дисплей обрабатывает входящие данные.
D0-D7 (шина данных) — это контакты, которые передают 8-битные данные, которые мы отправляем на дисплей. Например, если мы хотим видеть на дисплее заглавную букву «А», мы установим эти контакты на 0100 0001 (в соответствии с таблицей ASCII) для ЖК-дисплея.
Выводы A–K (анод и катод) используются для управления подсветкой ЖК-дисплея.
Тестирование ЖК-дисплея
Теперь мы переходим к самому интересному. Давайте проверим ваш ЖК-дисплей.
Сначала подключите контакты 5V и GND от Arduino Uno к шинам питания макетной платы и подключите ЖК-дисплей к макетной плате.
Теперь мы включим ЖК-дисплей. ЖК-дисплей имеет два отдельных разъема питания; Один (контакт 1 и контакт 2) для самого ЖК-дисплея и еще один (контакт 15 и контакт 16) для подсветки ЖК-дисплея. Подключите контакты 1 и 16 ЖК-дисплея к GND, а контакты 2 и 15 ЖК-дисплея к 5 В.
Подавляющее большинство ЖК-дисплеев имеют встроенный последовательный резистор для светодиодной подсветки. Если у вас есть ЖК-дисплей без резистора, вам нужно добавить его между 5 В и контактом 15.
Чтобы рассчитать номинал последовательно включенного резистора, найдите максимальный ток подсветки и типичное падение напряжения подсветки в листе технических данных. А используя простой закон Ома, вы можете рассчитать номинал резистора.
Если вы не можете найти спецификацию, используйте резистор на 220 Ом, однако такое высокое значение может сделать подсветку немного тусклой.
Далее мы подключим контакт 3 на ЖК-дисплее, который управляет контрастностью и яркостью дисплея. Для точной настройки контрастности мы подключим потенциометр 10K между 5V и GND; подключите центральный штырь (движок) потенциометра к контакту 3 на ЖК-дисплее.
Вот оно! Теперь включите Arduino, вы увидите, как загорится подсветка. И когда вы вращаете ручку потенциометра, вы должны заметить появление первой линии прямоугольников. Если это произойдет, поздравляем! С ЖК-дисплеем все в порядке.
Проводка — подключение символьного ЖК-дисплея 16×2 к Arduino Uno
Прежде чем мы перейдем к загрузке кода и отправке данных на дисплей, давайте подключим ЖК-дисплей к Arduino.
ЖК-дисплей имеет много контактов (всего 16 контактов), которые мы покажем вам, как подключить. Но хорошая новость заключается в том, что не все эти контакты необходимы нам для подключения к Arduino.
Подводя итог, мы будем подключаться к ЖК-дисплею в 4-битном режиме, поэтому нам нужно всего 6 контактов: RS, EN, D7, D6, D5 и D4 для связи с ЖК-дисплеем.
На следующей схеме показано, как все подключить.
Подключение проводки ЖК-дисплея 16×2 символа и Arduino UNO
После этого вы готовы загрузить некоторый код и получить дисплейную печать.
Код Arduino
В следующем тестовом скетче на ЖК-дисплее будет напечатано сообщение «Hello World!». Попробуйте набросок, а затем мы рассмотрим его более подробно.
Если все сделано правильно, вы должны увидеть что-то подобное на дисплее.
Пояснение кода:
Эскиз начинается с включения библиотеки LiquidCrystal. Как упоминалось ранее в этом руководстве, у сообщества Arduino есть библиотека LiquidCrystal, которая упрощает программирование ЖК-модуля. Вы можете узнать больше о библиотеке на официальном сайте Arduino.
Далее нам нужно создать объект LiquidCrystal. Этот объект использует 6 параметров и указывает, какие контакты Arduino подключены к контакту RS ЖК-дисплея, контакту включения и контактам данных: d4, d5, d6 и d7.
Теперь, когда вы объявили объект LiquidCrystal, вы можете получить доступ к специальным методам (также называемым функциями), специфичным для ЖК-дисплея.
В функции setup: мы будем использовать две функции: первая функция — begin() . Это используется для указания размеров дисплея, т. е. количества столбцов и строк на дисплее. Если вы используете ЖК-дисплей с разрешением 16×2 символа, передайте параметры 16 и 2; Если вы используете ЖК-дисплей 20×4, передайте параметры 20 и 4. Вы поняли!
Вторая функция — clear(). Она очищает ЖК-экран и перемещает курсор в верхний левый угол.
В функции «цикл»: мы будем использовать функцию print(), которая отображает сообщение, которое мы видим в первой строке экрана.
После этого мы установим позицию курсора на вторую строку, вызвав функцию setCursor(). Позиция курсора указывает место, где вам нужно, чтобы новый текст отображался на ЖК-дисплее. Верхний левый угол считается col=0, row=0
Другие полезные функции в библиотеке LiquidCrystal
Есть несколько полезных функций, которые вы можете использовать с объектом LiquidCrystal. Некоторые из них перечислены ниже:
- Если вы хотите просто поместить курсор в левый верхний угол ЖК-дисплея, не очищая изображение, используйте функцию home().
- Существует множество приложений, таких как турбо-компилятор C++ или notepad++, в которых нажатие клавиши "insert" на клавиатуре изменяет курсор. Точно так же вы можете изменить курсор на ЖК-дисплее, используя blink() или lcd.cursor() .
- функция blink() отображает мигающий блок размером 5×8 пикселей, а lcd.cursor() отображает подчеркивание (строку) в позиции, в которой будет записан следующий символ.
- Вы можете использовать функцию noBlink(), чтобы отключить мигающий ЖК-курсор, и функцию lcd.noCursor(), чтобы скрыть ЖК-курсор.
- Вы можете прокручивать содержимое дисплея на одну позицию вправо с помощью lcd.scrollDisplayRight() или на одну позицию влево с помощью lcd.scrollDisplayLeft() . Если вы хотите непрерывно прокручивать текст, вам нужно использовать эти функции внутри цикла for.
Генерация пользовательских символов для ЖК-дисплея 16×2
Если вы находите символы на дисплее скучными и неинтересными, вы можете создать свои собственные символы (глифы) и символы для ЖК-дисплея. Они чрезвычайно полезны, когда вы хотите отобразить символ, который не является частью стандартного набора символов ASCII.
CGROM и CGRAM
Все ЖК-дисплеи на базе контроллера Hitachi HD44780 имеют два типа памяти, в которых хранятся определенные символы: CGROM и CGRAM (ПЗУ и ОЗУ генератора символов). Память CGROM энергонезависима и не может быть изменена; Память CGRAM энергозависима и может быть изменена в любое время.
CGROM используется для хранения всех постоянных шрифтов, которые могут отображаться с использованием их кода ASCII. Например, если мы напишем 0x41, то на дисплее появится символ «А». CGRAM — это еще одна память, которую можно использовать для хранения пользовательских символов.
Эта оперативная память ограничена 64 байтами. Значение для ЖК-дисплея с разрешением 5 × 8 пикселей; в CGRAM можно сохранить до 8 определяемых пользователем символов. А для ЖК-дисплея с разрешением 5×10 пикселей можно сохранить только 4 определяемых пользователем символа.
Как мы обсуждали ранее в этом руководстве, символ на дисплее формируется в матрице пикселей 5 × 8, поэтому вам нужно определить свой собственный символ в этой матрице. Чтобы определить символ, вы будете использовать функцию createChar() библиотеки LiquidCrystal.
Чтобы использовать createChar(), вы должны сначала настроить массив из 8 байтов. Каждый байт (учитываются только 5 бит) в массиве определяет одну строку символа в матрице 5×8. Принимая во внимание, что нули и единицы в байте указывают, какие пиксели в строке должны быть включены, а какие выключены.
Генератор пользовательских символов
Создать собственного персонажа до сих пор было непросто! Мы создали небольшое приложение под названием Пользовательский генератор символов для символьного ЖК-дисплея. Видите синюю сетку внизу? Вот и все. Это приложение. Вы можете нажать на любой из пикселей 5×8, чтобы установить/очистить этот конкретный пиксель. И когда вы нажимаете на пиксели, рядом с сеткой генерируется код для символа. Этот код можно использовать непосредственно в скетче Arduino.
Если сообщение не появляется, возможно, необходимо отрегулировать контрастность. Для этого поворачивайте потенциометр до тех пор, пока не появится надпись «hello, world!», пока вы не увидите символы на экране. Отрегулируйте контраст, поворачивая потенциометр. Если он неправильно отрегулирован, вы не сможете четко прочитать текст. Также проверьте потенциометр и убедитесь, что он правильно подключен. Если вы по-прежнему ничего не видите, дважды проверьте проводку, чтобы убедиться, что провода полностью подключены. Кроме того, проверьте паяные соединения, чтобы убедиться в достаточном контакте.
Совсем не работает
Перепроверьте проводку цепи. В этой цепи много проводов, и легко перепутать один или два.
Прямоугольники в первой строке и случайные символы
Если вы видите 16-кратные прямоугольники (например, «█») или случайные символы в первой строке, это может быть связано с ослаблением перемычек на макетной плате. Это нормально и может произойти с другими ЖК-дисплеями, подключенными параллельно микроконтроллеру. Убедитесь, что провода полностью вставлены в макетную плату, затем попробуйте нажать кнопку сброса и отрегулировать контраст с помощью потенциометра. Кроме того, убедитесь, что определенные контакты соответствуют вашим текущим настройкам.
Все еще не работает?
К сожалению, перемычки могут выйти из строя из-за слишком сильного изгиба. Медный провод внутри может оборваться, оставив разомкнутое соединение в вашей цепи. Если вы уверены, что ваша схема подключена правильно, а ваш код не содержит ошибок и загружен, но вы по-прежнему сталкиваетесь с проблемами, попробуйте заменить одну или несколько перемычек для неработающего компонента. Возможно, вам придется переделать паяные соединения для надежного соединения.
Можно ли подключить ЖК-дисплей с базовыми символами к макетной плате ESP8266 Thing?
Да. Тем не менее, ESP8266 Thing Dev составляет 3,3 В. Вам пришлось бы использовать два преобразователя логических уровней (например, четырехканальный двунаправленный преобразователь логических уровней) для преобразования как минимум 6x контактов, если вы использовали базовый символьный дисплей 5 В. Это много проводов. Обязательно избегайте использования контактов D0, D16, Tx и Rx. Существуют проблемы с отображением символов с использованием этих контактов, поскольку они связаны с другими функциями, такими как сброс или глубокий сон. Определения контактов могут быть определены следующим образом.
Эта статья содержит все, что вам нужно знать об использовании символьного ЖК-дисплея I2C с Arduino. Я включил схему подключения и множество примеров кодов, чтобы помочь вам начать работу.
В первой части этой статьи рассматриваются основы отображения текста и чисел.
Во второй половине я более подробно расскажу о том, как отображать пользовательские символы и как вы можете использовать другие функции библиотеки LiquidCrystal_I2C.
Как только вы научитесь отображать текст и числа на ЖК-дисплее, я предлагаю вам ознакомиться со статьями ниже.Из этих руководств вы узнаете, как измерять и отображать данные датчика на ЖК-дисплее.
Рекомендуемые статьи
Если у вас есть какие-либо вопросы, оставьте комментарий ниже.
Принадлежности
Компоненты оборудования
Инструменты
Программное обеспечение
Основы ЖК-дисплея I2C
ЖК-дисплей такого типа идеально подходит для отображения текста и чисел, отсюда и название «символьный ЖК-дисплей».
ЖК-дисплей I2C, который мы используем в этом руководстве, поставляется с небольшой дополнительной схемой, установленной на задней панели модуля.
Этот модуль оснащен чипом PCF8574 (для связи I2C) и потенциометром для регулировки светодиодной подсветки.
Преимущество ЖК-дисплея I2C заключается в простоте подключения. Вам нужно всего два вывода данных для управления ЖК-дисплеем.
Стандартные ЖК-дисплеи обычно требуют около 12 подключений, что может быть проблемой, если у вас не так много доступных контактов GPIO.
К счастью, вы также можете купить дополнительную схему I2C отдельно на Amazon, так что вы также можете легко обновить стандартный ЖК-дисплей.
Обучающее руководство и схему подключения стандартных символьных ЖК-дисплеев см. в следующей статье:
Если вы внимательно посмотрите на ЖК-дисплей, вы увидите маленькие прямоугольники, которые образуют отдельные символы на ЖК-дисплее.
Каждый прямоугольник состоит из сетки размером 5×8 пикселей. Позже в этом руководстве я покажу вам, как можно управлять отдельными пикселями для отображения пользовательских символов на ЖК-дисплее.
Технические характеристики
Характеристики ЖК-дисплеев 16 x 2, 20 x 4 и других размеров в основном одинаковы.
Все они используют один и тот же ЖК-контроллер Hitachi HD44780, поэтому их можно легко поменять местами. Вам нужно будет только изменить спецификации размера в коде Arduino.
Технические характеристики типичного I2C-дисплея 16 x 2 приведены в таблице ниже.
Технические характеристики ЖК-дисплея 16×2 I2C
Рабочее напряжение | 5 В |
Контроллер | Контроллер Hitachi HD44780 LCD< /td> |
Адрес по умолчанию | 0x27 |
Разрешение экрана | 2 строки × 16 символов |
Разрешение символов | 5 × 8 пикселей |
Размеры модуля | < td>80 × 36 × 12 мм|
Размеры области просмотра | 64,5 × 16,4 мм |
Стоимость | Проверить цену |
Дополнительную информацию можно найти в таблицах ниже.
В спецификациях 16 x 2 и 20 x 4 указаны размеры ЖК-дисплея. Дополнительную информацию о драйвере ЖК-дисплея Hitachi можно найти в техпаспорте HD44780.
Чип PCF8574 используется в модуле I2C на задней панели ЖК-дисплея.
Как подключить ЖК-дисплей I2C к Arduino UNO
Приведенная ниже схема подключения показывает, как подключить ЖК-дисплей I2C к Arduino.
Подключение ЖК-дисплея I2C намного проще, чем подключение стандартного ЖК-дисплея. Вам нужно всего лишь подключить 4 контакта вместо 12.
ЖК-дисплей I2C со схемой подключения Arduino
Подключения также приведены в таблице ниже.
Подключение ЖК-дисплея I2C
Если вы не используете Arduino Uno, контакты SDA и SCL могут находиться в другом месте.
Обратите внимание, что Arduino Uno с компоновкой R3 (распиновка 1.0) также имеет разъемы контактов SDA (линия данных) и SCL (линия синхронизации), близкие к контакту AREF. Подробнее см. в таблице ниже.
Плата | SDA | SCL |
---|---|---|
Arduino Uno< /td> | A4 | A5 |
Arduino Nano | A4 | A5 |
Arduino Micro | 2 | 3 |
Arduino Mega 2560 | 20 | 21 |
Ардуино Леонардо | 2 | 3 | tr>
Arduino Due | 20 | 21 |
Регулировка контрастности ЖК-дисплея
После того, как вы подключили ЖК-дисплей, вам нужно будет отрегулировать контрастность дисплея. На модуле I2C вы найдете потенциометр, который можно поворачивать с помощью небольшой отвертки.
Подключите USB-разъем Arduino для питания ЖК-дисплея. Вы должны увидеть, как загорается подсветка.
Теперь вращайте потенциометр, пока не появится один (ЖК-экран 16 × 2) или 2 ряда (ЖК-экран 20 × 4) прямоугольников.
При необходимости контрастность можно настроить позже.
Как только это будет сделано, мы можем приступить к программированию ЖК-дисплея.
Установка библиотеки LiquidCrystal_I2C Arduino
В этом руководстве я буду использовать библиотеку LiquidCrystal_I2C. Эта библиотека имеет множество встроенных функций, упрощающих программирование ЖК-дисплея.
Последнюю версию этой библиотеки можно найти здесь, на GitHub, или нажмите кнопку загрузки ниже.
Убедитесь, что у вас установлена именно эта библиотека, и удалите все другие библиотеки с таким же именем (LiquidCrystal_I2C).
Другие библиотеки, вероятно, будут работать так же, но могут использовать немного другие имена для разных функций.
Библиотека LiquidCrystal_I2C работает в сочетании с библиотекой Wire.h, которая позволяет взаимодействовать с устройствами I2C. Эта библиотека предустановлена вместе с Arduino IDE.
Чтобы установить эту библиотеку, выберите Инструменты > Управление библиотеками (Ctrl + Shift + I в Windows) в Arduino IDE. Менеджер библиотек откроет и обновит список установленных библиотек.
Теперь найдите «liquidcrystal_i2c» и найдите библиотеку Франка де Брабандера. Выберите последнюю версию и нажмите «Установить».
Установка библиотеки LiquidCrystal_I2C Arduino
В библиотеке есть несколько примеров, которые вы можете использовать, но вам придется изменить их в соответствии с настройкой вашего оборудования.
Ниже я включил много примеров кодов, которые вы можете использовать с проводкой, показанной ранее.
Сначала я покажу вам базовый пример кода, а затем более подробно объясню функции.
Как найти I2C-адрес моего ЖК-дисплея?
Большинство ЖК-дисплеев I2C поставляются с адресом по умолчанию «0x27», но он может отличаться в зависимости от партии/производителя.
В этом случае вам нужно будет найти фактический адрес ЖК-дисплея, прежде чем вы сможете начать его использовать.
На веб-сайте Arduino вы можете найти простой пример скетча, который сканирует шину I2C на наличие устройств.
Если устройство найдено, оно отобразит адрес в последовательном мониторе.
Вы можете скопировать код, нажав кнопку в правом верхнем углу поля кода.
Если вы загрузите этот скетч в Arduino и запустите его, вы должны увидеть следующий вывод в Serial Monitor (Ctrl + Shift + M).
Вывод последовательного монитора сканера адресов I2C
Запишите найденный адрес, он понадобится вам позже при программировании ЖК-дисплея.
Пример базового кода Arduino для I2C LCD
Вы можете загрузить следующий пример кода в Arduino с помощью Arduino IDE.
В этом руководстве я использовал символьный ЖК-дисплей I2C 16×2, но вы также можете использовать другие ЖК-дисплеи I2C разных размеров.
В этом примерном скетче классическая надпись «Hello World!» отображается в первой строке ЖК-дисплея, а «Учебник по ЖК-дисплею» — во второй.
Далее я объясню, как работает этот код.
Вы должны увидеть следующий вывод на ЖК-дисплее:
Как работает код
Во-первых, включены необходимые библиотеки. Как упоминалось ранее, нам нужны и wire.h*, и библиотека LiquidCrystal_I2C.
В оставшейся части этого руководства я расскажу больше о встроенных функциях этой библиотеки.
*При использовании последней версии библиотеки LiquidCrystal_I2C больше не требуется включать в эскиз библиотеку wire.h. Другая библиотека автоматически импортирует wire.h.
Следующий шаг — создать ЖК-объект с классом LiquidCrystal_I2C и указать адрес и размеры.
Для этого мы используем функцию LiquidCrystal_I2C(адрес, столбцы, строки).
Здесь вам нужно будет изменить адрес по умолчанию на адрес, который вы нашли ранее, если он отличается.
При использовании ЖК-дисплея 20 × 4 измените эту строку на LiquidCrystal_I2C(0x27,20,4);
Обратите внимание, что мы назвали дисплей «ЖК». Вы можете дать ему другое имя, например, «menu_display».
Вам нужно будет изменить «lcd» на новое имя в остальной части скетча.
В настройках ЖК-дисплей запускается с помощью lcd.init(), а подсветка включается с помощью lcd.backlight().
В циклической части кода курсор устанавливается в третий столбец и первую строку ЖК-дисплея с помощью lcd.setCursor(2,0) .
Обратите внимание, что отсчет начинается с 0, а первый аргумент определяет столбец. Таким образом, lcd.setCursor(2,1) устанавливает курсор в третьем столбце и во второй строке.
Далее строка «Hello World!» печатается с помощью lcd.print("Hello World!") .Обратите внимание, что вам нужно поместить текст в кавычки (" "), так как мы печатаем текстовую строку.
Если вы хотите напечатать числа, кавычки не нужны. Например, lcd.print(12345) .
Если вы хотите увидеть пример отображения (изменения) переменных на ЖК-дисплее, ознакомьтесь с моим руководством по ультразвуковому датчику расстояния HC-SR04:
Другие полезные функции библиотеки LiquidCrystal_I2C
В приведенном выше примере показаны основы отображения текста на ЖК-дисплее. Теперь мы рассмотрим другие функции библиотеки LiquidCrystal_I2C.
очистить()
Очищает ЖК-экран и помещает курсор в верхний левый угол (первая строка и первый столбец) дисплея.
Эту функцию можно использовать для отображения разных слов в цикле.
Помещает курсор в верхний левый угол ЖК-дисплея. Используйте clear(), если вы также хотите очистить дисплей.
курсор()
Отображает ЖК-курсор: подчеркивание (строку) в позиции следующего печатаемого символа.
нетКурсор()
Скрывает ЖК-курсор. В следующем примере создается мигающий курсор в конце «Hello World!».
мигать()
Создает ЖК-курсор в виде мигающего блока: мигающий прямоугольник в позиции следующего печатаемого символа.
не мигать()
Отключает блочный ЖК-курсор. В следующем примере курсор отображается мигающим в течение 5 секунд, а затем отключается на 2 секунды.
отображение()
Эта функция включает ЖК-экран и отображает любой текст или курсоры, которые были напечатаны на дисплее.
нет отображения()
Эта функция отключает любой текст или курсоры, выводимые на ЖК-дисплей. Текст/данные не удаляются из памяти ЖК-дисплея.
Это означает, что он будет отображаться снова при вызове функции display().
В следующем примере создается эффект мерцания текста.
написать()
Эту функцию можно использовать для записи символа на ЖК-дисплей. Дополнительные сведения см. в разделе о создании и отображении пользовательских символов ниже.
scrollDisplayLeft()
Прокручивает содержимое дисплея (текст и курсор) на одну позицию влево.
Эту функцию можно использовать в циклической части кода в сочетании с delay(500) для создания анимации прокрутки текста.
scrollDisplayRight()
Прокручивает содержимое дисплея (текст и курсор) на одну позицию вправо.
автопрокрутка()
Эта функция включает автоматическую прокрутку ЖК-дисплея. Это приводит к тому, что каждый символ, выводимый на дисплей, смещает предыдущие символы на один пробел.
Если текущим направлением текста является слева направо (по умолчанию), дисплей прокручивается влево, если текущим направлением является справа налево, дисплей прокручивается вправо.
Это приводит к выводу каждого нового символа в одно и то же место на ЖК-дисплее.
Следующий пример эскиза включает автоматическую прокрутку и печатает символы от 0 до 9 в позиции (16,0) ЖК-дисплея.
Измените это значение на (20,0) для ЖК-дисплея 20 × 4.
нет автопрокрутки()
Отключает автоматическую прокрутку ЖК-дисплея.
слева направо()
Эта функция заставляет текст перемещаться вправо от курсора, как если бы дисплей был выровнен по левому краю (по умолчанию).
справа налево()
Эта функция заставляет текст перемещаться влево от курсора, как если бы дисплей был выровнен по правому краю.
Как создавать и отображать собственные символы?
С помощью функции createChar() можно создавать и отображать пользовательские символы на ЖК-дисплее.
Это особенно полезно, если вы хотите отобразить символ, который не является частью стандартного набора символов ASCII.
CGROM и CGRAM
ЖК-дисплеи на основе ЖК-контроллера Hitachi HD44780 имеют два типа памяти: CGROM и CGRAM (ПЗУ и ОЗУ генератора символов).
Для дисплеев 5 x 8 точек CGRAM может записывать до 8 пользовательских символов, а для дисплеев 5 x 10 точек — 4. Дополнительные сведения см. в техническом описании.
Пример кода пользовательского символа
Следующий пример эскиза создает и отображает восемь пользовательских символов (пронумерованных от 0 до 7).
Вы можете скопировать код, нажав кнопку в правом верхнем углу поля кода.
Вы должны увидеть следующий вывод на ЖК-дисплее:
Как работает код
После включения библиотеки и создания ЖК-объекта определяются массивы пользовательских символов.
Каждый массив состоит из 8 байтов (учитываются только 5 бит).
На каждую строку матрицы 5 x 8 светодиодов приходится 1 байт. В этом примере создается 8 пользовательских символов.
При внимательном рассмотрении массива вы увидите следующее.Каждая строка состоит из 5 чисел, соответствующих 5 пикселям символа 5 x 8 точек.
0 означает, что пиксель выключен, а 1 – включен. Префикс «B» — это специальный форматировщик двоичных файлов Arduino.
Каждую строку можно редактировать вручную, но я рекомендую использовать этот визуальный инструмент на GitHub.
Это приложение автоматически создает массив символов, и вы можете щелкнуть по пикселям, чтобы включить или выключить их.
В настройках пользовательские символы создаются с помощью lcd.createChar(num, data) .
Первый аргумент этой функции — это номер пользовательского символа (0–7), а второй аргумент — созданный нами массив символов.
В цикле все символы отображаются с помощью lcd.write(). В качестве аргумента мы используем номер пользовательского символа, который мы хотим отобразить.
Заключение
В этой статье я показал вам, как использовать символьный ЖК-дисплей I2C с Arduino.
Надеюсь, вы нашли его полезным и информативным. Если да, поделитесь ей с другом, который тоже любит электронику и мастерить разные вещи!
Мне бы хотелось узнать, какие проекты вы планируете реализовать (или уже построили) с этими ЖК-дисплеями. Если у вас есть какие-либо вопросы, предложения или вы считаете, что чего-то не хватает в этом руководстве, оставьте комментарий ниже.
Жидкокристаллические дисплеи. очень полезно, без сомнения, но и немного скучно. Один шрифт, один формат для символов 5 x 8 пикселей.
Я наткнулся на дешевый дисплей 4 x 16 и начал с ним экспериментировать.
В этом пособии рассказывается об этих экспериментах по кодированию. Большая часть контента будет посвящена программированию визуальных эффектов для небольших экранов.
В конце концов я завернул идеи в ткань и отправил это омиягэ друзьям в Берлин, см. шаг "результаты".
Некоторые элементы кодирования специфичны для дисплея 4 x 16, но большинство идей, таких как случайные волны и буфер, можно использовать и с другими ЖК-дисплеями.
Я начал со специальных символов, сценария библиотеки жидких кристаллов Arduino «CustomCharacters». Забавно видеть движущегося персонажа, но этот единственный символ (5 на 8 пикселей) остается таким маленьким. Делать больше этих прыгающих фигур? Но у вас есть только 8 специальных символов для игры.
- случайные наборы специальных символов
- "буфер"
- "большие шрифты"
- грубые геометрические формы, такие как эллипс или синусоида
- падающий снег
Буфер
С помощью буфера вы можете создавать больше эффектов, чем просто смещение (прокрутка) влево или вправо. Фактически, поскольку у вас есть текст внутри массива, вы можете выбрать, какую строку поместить в какую строку (прокручивая вверх и вниз) или «случайно».
Также можно сделать красивый переход, случайным образом заменив символы экрана на символы буфера.
Большие шрифты
Создание букв из более крупных блоков пикселей создает слово размером с экран. Чередование этого с «обычным» текстом делает ЖК-дисплей намного интереснее.
Геометрические фигуры.
Сначала вычислив форму, затем округлив ее и поместив символ на этом месте, вы можете создавать грубые «большие» фигуры. Он «просто» работает на этом ЖК-дисплее с разрешением букв 4 на 16: например, что-то вроде эллипса в виде рамки вокруг текста.
Снег
Используя последовательность (горизонтальную или вертикальную) специальных символов и используя последовательность (скажем, 4) как непрерывный массив, вы можете непрерывно "отбрасывать" простую маленькую фигуру, квадрат или круг. р>
Вот некоторые идеи, которые все еще возможны с этим простым ЖК-дисплеем. Конечно, вы можете перейти к графическим экранам, где можно использовать все пиксели, а линий между точками символов не существует. Но иногда интересно узнать, что вы все еще можете делать в более ограниченных ситуациях.
Исследуйте!
Шаг 1. Создание собственных персонажей
Создавать собственных персонажей весело, и пример пользовательского персонажа в ЖК-библиотеке Arduino объясняет все.
Проблема
В текущей библиотеке Liquid Crystal (2014, Arduino 1.0.5)
выдает ошибку:
Вы можете создать собственного персонажа, но не показывать его?
Оказывается, вы можете напечатать этот первый специальный символ также, как:
Тогда вы можете получить свой специальный первый символ без ошибки.
Проверка
Если вы посмотрите на специальные символы с помощью цикла:
Вы видите, что специальные символы отображаются два раза (в первых 16 слотах памяти). Мне все еще интересно, есть ли способы извлечь из этого больше пользы.
Я хотел больше визуальных эффектов, переходов и начал создавать случайные символы на лету вот так:
- один случайный пиксель в каждой из 8 строк (менее плотных),
- полностью случайные числа в каждой строке (плотность 50%).
Есть и третий заманчивый вариант: вставка больших "блоков" внутрь этих массивов для получения случайного эффекта в более "большом" формате.
Большие специальные символы
Создав блок, скажем, из 2 x 4 специальных символов (здесь получается 16 x 20 пикселей), вы можете сделать "рисунок" большего размера. Вы должны разбить рисунок, чтобы он соответствовал отдельным специальным символам, и это может быть утомительно.
Я подготовил это «изображение» в Photoshop, используя изображение размером 16 x 20 пикселей. Либо вы можете перекодировать это до 8 специальных символов вручную, либо использовать для этого скетч обработки, который сканирует изображение и выводит байты в формате массивов. Вы можете скопировать и вставить этот код непосредственно в код Arduino.
Шаг 2. Использование буфера экрана
Стандартные эффекты ограничены. Конечно, вы можете расширить код библиотеки. Использование буфера внутри вашего скрипта наиболее понятно и побуждает к дальнейшим экспериментам.
Просто инициализируйте массив 4 на 17:
Почему 17 вместо 16? Потому что массив символов нуждается в так называемом терминаторе.
Будьте осторожны, чтобы изменить один символ внутри экрана следующим образом:
Потому что это массив символов. Последняя строка пытается поместить строку внутри этого символа, что приводит к ошибке. (Строка представляет собой символ с завершающим символом, поэтому длина не менее 2 символов.)
Заполнение буфера выполняется с помощью настраиваемой функции stringCopy:
Нам нужно заполнить строки буфера в определенных позициях, поэтому мы не можем использовать strCopy.
Этот «код копирования» можно сделать более похожим на C с помощью указателей, но вам нужно больше разбираться в указателях и символах. Вы должны использовать указатель в параметрах для arraySource и arrayDest. Затем это работает без создания копий массивов и необходимости возврата измененных массивов. Это немного похоже на работу с глобальными переменными.
Чтобы получить хороший эффект перехода, содержимое буфера передается на экран случайным образом, вызывая любопытство у публики. Сообщение отображается, а не выводится на экран.
С вашим текстом в буфере вы можете придумать множество других эффектов.
На данный момент буфер не содержит специальных символов.
Шаг 3. Увеличьте шрифт
Используя специальные символы, вы можете увеличить размер шрифта на экране.
Больше используются слоты размером 5 x 8 пикселей.
Основным строительным блоком является специальный символ, полностью черный и один полностью белый.
В Photoshop символы подготовлены. Смотрите фотографии.
(Предложение для изучения: можем ли мы использовать " " или пробел для всего белого? Это избавит нас от определения специального символа. Как мы можем называть обычный символ как специальный символ? Ответ: lcd.print(char( 32)); )
Необходимы дополнительные строительные блоки, поскольку на ЖК-дисплее всего 4 строки. Таким образом, "H" или "S" нуждаются в специальной "половине" строительного блока, верхней и нижней.
Сценарий большой, но очень понятный, вы начинаете с определения строительных блоков.
Все лайки:
После этого вы создаете массив (4 на 16) и определяете в этом массиве числа для ваших строительных блоков.
пример:
Затем вы выбираете этот массив и записываете специальные символы на экран.
Творчество необходимо, чтобы иметь достаточно строительных блоков внутри ваших возможных 8 специальных символов!
Значит, в какой-то момент вам не по нраву все 26 доступных букв алфавита.
Шаг 4. Набросайте геометрические фигуры
Шаг 5. Анимированные снежинки
Используя последовательность из 4 специальных символов и непрерывно меняя содержимое символов в коде, вы можете заставить небольшой рисунок (снежинка) упасть:
строительные блоки кода:
создание массива из 32 байт,
создание флейка из 4 байт,
очистка массива из 32
создание цикла падения
>вставка флейка в массив 32
разбивка этого массива 32 на 4 специальных символа
запись символов на экран
Он действительно падает!
Для этого ЖК-дисплея 16 x 4 характерна только функция SetCursor: (можно изменить для других экранов)
Если вам нужно больше хлопьев, просто скопируйте
для других мест.
Я использую модуль, чтобы быть уверенным, что он окажется в позиции 0,1,2,3. +4 гарантирует, что результат будет положительным.
Отщепление вставляется сверху, поэтому для отщепов, находящихся в другом положении, это создает небольшой скачок в анимации.
Шаг 6: Результат и загрузка
Я провел тестирование с Arduino, макетной платой и ЖК-дисплеем, см. рисунок. Позже я скопировал скрипт на Arduino Pro Mini (см. следующий шаг).
Важна библиотека жидких кристаллов, которую я использовал, потому что эта библиотека, как программная среда Arduino, будет обновляться. Библиотека, которую я использовал (с проблемой lcd.createChar(0, )) включена в репозиторий GITHUB.
Шаг 7. Пример приложения
Эти эксперименты я использовал для создания "Новогоднего объекта". Этот предмет должен иметь «мягкий» вид, пригодный для носки, поэтому для его заворачивания используется кусок ткани. Снаружи есть кнопка (из металла). Соединение двух частей — это переключатель.
Измените текст, сделайте из него необычный объект, и вы также можете отправить его другу!
Моя идея заключается в том, что они могут перерабатывать детали и делать из них что-то другое. Это означает экран "Утилизировать меня!" на шаге "Большие шрифты"
Шаг 8. Альтернативы
ЖК-экраны бывают разных размеров. Цвета могут быть зелеными, синими, черными. У некоторых есть подсветка, которую можно использовать неожиданным образом (или просто ночью).
Если вам наскучили эти экраны, вы также можете использовать графические ЖК-экраны.
Еще один вид "сырого" дисплея — светодиодная матрица. 8 x 8, а также более крупные, такие как 16 x 16 или даже 32 x 32, вдохновляют, потому что вам действительно нужно искать, что еще возможно для шрифтов или рисунков такой ширины и высоты - ситуация с очень небольшим разрешением.
Одним из примеров является светодиодный матричный дисплей 32 x 32, который я запрограммировал, содержащий примитивный «фильм». Я использовал эскиз обработки, чтобы просмотреть эффект в пикселях и понять, какие изображения все еще распознаются в ситуации с таким низким разрешением.
Читайте также: