- Работа ЖК-дисплея 16x2
- Схема подключения ЖК-дисплея к микроконтроллеру STM8
- Библиотека ЖК-дисплея STM8 - файл заголовка для STM8S103F3P6
- ЖК-программа для микроконтроллера STM8S
- STM8 с ЖК-дисплеем - рабочий
Буквенно-цифровой ЖК-дисплей 16x2 - это наиболее часто используемый дисплей среди любителей и энтузиастов. Дисплей очень полезен, когда вы хотите отобразить основную информацию для пользователя, а также может помочь в тестировании или отладке нашего кода. Этот ЖК-модуль 16x2 легко доступен и пользуется популярностью уже долгое время. Вы можете узнать больше об основах ЖК-модуля 16x2 в связанной статье.
Чтобы продолжить нашу серию руководств по микроконтроллеру STM8, в этом руководстве мы узнаем, как связать ЖК-дисплей с микроконтроллером STM8. Ранее мы также сопоставляли ЖК-дисплей 16x2 со многими другими микроконтроллерами, руководства перечислены ниже, и вы можете проверить их, если хотите.
Если вы новичок в STM8, ознакомьтесь со статьей о микроконтроллере STM8, чтобы понять основы платы контроллера и среды программирования. Мы не будем рассматривать основы в этом руководстве.
Работа ЖК-дисплея 16x2
Как следует из названия, ЖК-дисплей 16x2 будет иметь 16 столбцов и 2 строки. Таким образом, в общей сложности мы сможем отобразить на этом дисплее 32 символа, и эти символы могут быть алфавитами, цифрами или даже символами. Простая распиновка ЖК-дисплея 16x2, которую мы используем в этом руководстве, показана ниже.
Как видите, дисплей имеет 16 контактов, и мы можем разделить его на пять категорий: выводы питания, выводы контраста, выводы управления, выводы данных и выводы подсветки, как показано в таблице ниже. Мы подробно рассмотрим каждый вывод при обсуждении принципиальной схемы в этом руководстве.
Категория | № контакта. | Имя контакта | Функция |
Контакты питания | 1 | VSS | Контакт заземления, подключенный к заземлению |
2 | VDD или Vcc | Вывод напряжения + 5В | |
Контрастный значок | 3 | V0 или VEE | Настройка контрастности, подключенная к Vcc через переменный резистор. |
Пины управления | 4 | RS | Пин выбора регистра, RS = 0 Командный режим, RS = 1 Режим данных |
5 | RW | Вывод чтения / записи, RW = 0 Режим записи, RW = 1 Режим чтения | |
6 | E | Включить, импульс от высокого к низкому, чтобы включить ЖК-дисплей | |
Выводы данных | 7-14 | D0-D7 | Выводы данных, хранит данные для отображения на ЖК-дисплее или командные инструкции. |
Контакты подсветки | 15 | LED + или A | Для питания подсветки + 5В |
16 | LED- или K | Подсветка Земля |
На задней стороне ЖК-дисплея, как показано на изображении ниже, вы найдете две черные точки, внутри которых находится ИС драйвера ЖК-дисплея HD44780 (обведена красным). Наш микроконтроллер должен взаимодействовать с этой ИС, которая, в свою очередь, будет контролировать то, что отображается на ЖК-дисплее. Если вам интересно узнать, как именно все это работает, вы должны проверить работу ЖК-дисплея 16x2, где мы уже подробно обсуждали, как работает ЖК-дисплей.
В этом руководстве мы обсудим принципиальную схему и код для отображения буквенных символов (букв и цифр) на ЖК-дисплее 16x2 с помощью простых команд LCD_print _char и LCD_print_string . Эти команды можно напрямую использовать в программе после включения нашего файла заголовка. Заголовочный файл имеет дело с большинством вещей за вас, поэтому не обязательно знать, как работает дисплей или ИС драйвера HD44780.
Схема подключения ЖК-дисплея к микроконтроллеру STM8
Полную схему ЖК-дисплея STM8 можно найти на изображении ниже. Как видите, подключение контроллера STM8S103F3P6 с ЖК-дисплеем очень простое, ЖК-дисплей напрямую подключен к нашей плате, а ST-link также подключен для программирования платы.
Контакты питания Vss и Vcc подключены к контакту 5V на плате STM8S, обратите внимание, что рабочее напряжение ЖК-дисплея составляет 5 В и он подключен для работы от 3,3 В. Таким образом, даже если микроконтроллер STM8S103F3P6 работает от 3,3 В, наличие питания 5 В для ЖК-дисплея обязательно, вы можете избежать этого, используя микросхему контроллера заряда, но мы не будем обсуждать это в этом руководстве.
Затем у нас есть контакт контраста, который используется для установки контрастности ЖК-дисплея, мы подключили его к потенциометру, чтобы мы могли контролировать контраст. Мы использовали потенциометр на 10 кОм, но вы также можете использовать другие близлежащие значения, потенциометр действует как делитель потенциала для подачи 0-5 В на вывод контраста, обычно вы также можете использовать резистор напрямую, чтобы обеспечить около 2,2 В для разумного контраста. значение. Затем у нас есть контакты сброса (RS), чтения / записи (RW) и включения (E). Контакт чтения-записи заземлен, потому что мы не будем ничего читать с ЖК-дисплея, мы будем выполнять только операции записи. Два других управляющих контакта Rs и E подключены к контактам PA1 и PA2 соответственно.
Затем у нас есть выводы данных от DB0 до DB7. ЖК-дисплей 16x2 может работать в двух режимах: один - это 8-битный режим работы, в котором мы должны использовать все 8 контактов данных (DB0-DB7) на ЖК-дисплее, а другой - 4-битный режим работы, в котором нам нужно только 4 выводы данных (DB4-DB7). Обычно используется 4-битный режим, поскольку он требует меньше выводов GPIO от контроллера, поэтому мы также использовали 4-битный режим в этом руководстве и подключили только выводы DB4, DB5, DB6 и DB7 к выводам PD1, PD2, PD3., и PD4 соответственно.
Последние два контакта BLA и BLK используются для питания внутреннего светодиода подсветки, мы использовали резистор 560 Ом в качестве токоограничивающего резистора. Программатор ST-Link подключается как всегда, как и в предыдущем уроке. Я выполнил полное подключение на макетной плате, и моя установка выглядит так, как показано на изображении ниже.
Библиотека ЖК-дисплея STM8 - файл заголовка для STM8S103F3P6
Прежде чем перейти к принципиальной схеме, давайте получим файл заголовка ЖК-дисплея STM8 с GitHub, используя следующую ссылку:
Заголовочный файл ЖК-дисплея STM8S 16x2
Вы можете либо загрузить полное репо и получить файл stm8s103_LCD_16x2.h, либо просто код из приведенной выше ссылки. При настройке проекта убедитесь, что вы включили все необходимые файлы заголовков в каталог inc вместе с этим файлом заголовка.
Если вы не знаете, как добавить файлы заголовков и скомпилировать программу, посмотрите видео внизу этой страницы. И если вам интересно, как работает код внутри файла заголовка, вы можете проверить PIC с помощью руководства по ЖК-дисплею. Заголовочный файл, используемый в этом проекте, очень похож на тот, что объясняется там, поэтому мы не будем вдаваться в подробности этого.
ЖК-программа для микроконтроллера STM8S
Для демонстрации мы запрограммируем наш контроллер STM8S для отображения простой строки, такой как «Circuit Digest», а затем мы будем увеличивать значение «Test» каждую секунду во второй строке. Полную программу можно найти внизу этой страницы. Объяснение таково.
Мы начинаем нашу программу с определения контактов и добавления необходимых файлов заголовков, как всегда. На нашей выше обсуждаемой принципиальной схеме мы подключили LCD_RS к PA1, поэтому мы определили его как LCD_RS GPIOA, GPIO_PIN_1. Точно так же мы проделали то же самое для других контактов. Если они используют другую схему, убедитесь, что вы соответствующим образом изменили эти значения.
#define LCD_RS GPIOA, GPIO_PIN_1 #define LCD_EN GPIOA, GPIO_PIN_2 #define LCD_DB4 GPIOD, GPIO_PIN_1 #define LCD_DB5 GPIOD, GPIO_PIN_2 #define LCD_DB6 GPIOD, GPIO_PIN_3 #define LCD_DB4 "GPIO_MIN_3 # GPIO_PIN_3 #define LCD_DB7_3 #define LCD_DBI_PIN_3 #define LCD_DBI_3 #define LCD_DB07.
Затем внутри нашей основной программы мы объявили переменные, необходимые для этого примера кода. У нас есть тестовая переменная с именем test_var, которая инициализирована нулем, мы увеличим переменную и отобразим ее на ЖК-дисплее. Символы с d1 по d4 представляют 4 цифры тестовой переменной, потому что наш ЖК-дисплей не может напрямую отображать значение int, мы должны преобразовать их в символы.
// Объявления переменных int test_var = 0; char d4, d3, d2, d1;
Функция LCD_Begin () используется для инициализации ЖК-дисплея. Эта функция инициализирует все необходимые контакты GPIO, а также установит ЖК-дисплей в режим ЖК-дисплея 16x2. Затем у нас есть функция LCD_Clear (), которая используется для очистки всех значений на ЖК-дисплее, она стирает все на ЖК-дисплее, чтобы было легко записывать новые значения. Затем у нас есть функция LCD_Set_Cursor (x, y), где x и y - позиции, в которых нам нужно написать наш новый символ. Например, (1,1) означает первую строку и первый столбец, аналогично (2,12) означает второй столбец строки 12, аналогично. Обратите внимание, что у нас здесь 2 строки и 16 столбцов, как мы обсуждали ранее.
Lcd_Begin (); Lcd_Clear (); Lcd_Set_Cursor (1,1);
Теперь ЖК-дисплей настроен, очищен, и курсор находится на месте. Следующее - что-нибудь напечатать на экране. Мы можем использовать LCD_Print_String («Sample String») для печати строки на LCD и LCD_Print_Char (a) для печати символьного значения на LCD. В нашей программе мы напечатали «STM8S103F3P3 LCD» и создали задержку в 5 секунд, используя приведенный ниже код.
Lcd_Print_String ("ЖК-дисплей STM8S103F3P3"); delay_ms (5000);
После 5-секундной задержки мы снова очищаем ЖК-дисплей и отображаем «Дайджест цепи» в первой строке и «Тест:» во второй строке.
Lcd_Clear (); Lcd_Set_Cursor (1,1); Lcd_Print_String («Дайджест схемы»); Lcd_Set_Cursor (2,1); Lcd_Print_String ("Тест:");
Внутри в то время цикла, мы разделим значение на целое число переменной test_var на отдельные символы, так что он может отображаться на ЖК - дисплее с помощью простого деления и модуля упругости операторов. Мы также добавили «0», чтобы преобразовать значение ASCII в символ.
d4 = test_var% 10 + '0'; d3 = (test_var / 10)% 10 + '0'; d2 = (test_var / 100)% 10 + '0'; d1 = (test_var / 1000) + '0';
Затем мы установили курсор на (2,6), потому что мы уже написали «Test:» во второй строке, которая состоит из 6 символов. Если мы перезапишем, существующий символ будет заменен новым символом на ЖК-дисплее. Мы также добавили задержку в 1 секунду и увеличили значение переменной.
Lcd_Set_Cursor (2,6); Lcd_Print_Char (d1); Lcd_Print_Char (d2); Lcd_Print_Char (d3); Lcd_Print_Char (d4); delay_ms (1000); test_var ++;
STM8 с ЖК-дисплеем - рабочий
Чтобы протестировать нашу программу, просто загрузите код в наш контроллер и включите его через порт micro-USB. Обратите внимание, что для работы ЖК-дисплея требуется 5 В, поэтому питание платы от порта USB обязательно. Ранее мы питали его напрямую от ST-link, потому что нам не требовалось питание 5 В.
Как вы можете видеть, ЖК-дисплей работает должным образом, значение тестовой переменной увеличивается примерно каждую секунду. Также обратите внимание, что мы не использовали таймеры и использовали только функцию задержки для создания этой задержки, поэтому не ожидайте, что длительность задержки будет точной, мы будем использовать таймеры позже в другом руководстве для этой цели.
Полную работу проекта можно посмотреть в видео по ссылке ниже. Надеюсь, вам понравился урок и вы узнали что-то полезное. Если у вас есть какие-либо вопросы, оставьте их в разделе комментариев или воспользуйтесь нашим форумом для других технических вопросов.