Ранее на нашем сайте мы уже рассматривали основы работы с платой MSP430G2 и управление последовательностью светодиодов с ее помощью. В данной статье мы продолжим серию обучающих статей про данную плату и рассмотрим подключение к ней ЖК дисплея 16×2.
ЖК дисплей 16×2, который мы будем рассматривать в этой статье, является обычным алфавитно-цифровым дисплеем, имеющим 2 строки и 16 столбцов. Он находит широкое применение во многих проектах встраиваемой электроники. Подключение его к плате MSP430G2 достаточно простое благодаря наличию специализированной библиотеки для работы с ним.
Ранее на нашем сайте мы уже рассматривали подключение ЖК дисплея 16×2 к следующим микроконтроллерам (платам):
- к микроконтроллеру AVR;
- к микроконтроллеру PIC;
- к плате Arduino;
- к плате Raspberry Pi;
- к плате Raspberry Pi Pico;
- к плате Raspberry Pi Zero;
- к плате STM32 Blue Pill;
- к модулю ESP32.
Необходимые компоненты
- Плата MSP430G2 LaunchPad (купить на AliExpress).
- ЖК дисплей 16×2 (купить на AliExpress).
- Соединительные провода.
Общие принципы работы ЖК дисплея 16×2
Обозначение 16×2 в названии дисплея подразумевает что он содержит 16 столбцов и 2 строки, которые вместе формируют 32 (16*2) знакоместа. Структура одного такого знакоместа показана на следующем рисунке.
Одно такое знакоместо состоит из 40 пикселов (точек), упорядоченных в форме матрицы размером 5 строк на 8 столбцов, предназначенной для отображения одного символа. 32 символа можно одновременно отобразить на дисплее, используя эти знакоместа.
Распиновка (назначение контактов) ЖК дисплея 16×2 показана на следующем рисунке.
ЖК дисплей 16×2 содержит 16 контактов, которые объединены в следующие функциональные группы:
Служебные контакты (1, 2 и 3) – с их помощью на дисплей подается питание и производится регулировка его контрастности.
Контакты управления (4, 5 и 6) – с помощью этих контактов устанавливаются режимы работы дисплея.
Контакты передачи данных/команд (с 7 по 14) – с помощью этих контактов на дисплей передаются данные для отображения на его экране. Также с их помощью на дисплей можно передавать различные команды. Более подробно об этом написано в статье про подключение ЖК дисплея 16×2 к микроконтроллеру AVR (!!!!!!!!!!!!!!).
Контакты светодиода (15 и 16) – данные контакты используются для включения фоновой подсветки ЖК дисплея (опционально).
Из всех этих 16 контактов только 10 контактов являются обязательными для корректной работы ЖК дисплея, остальные можно оставить неподключенными.
Схема проекта
Схема подключения ЖК дисплея 16×2 к плате MSP430G2 представлена на следующем рисунке.
По умолчанию плата MSP430G2 не содержит контакта +5V, но мы можем сделать небольшой лайфхак чтобы получить это напряжение от USB порта. Если вы внимательно присмотритесь к USB порту, то вы обнаружите на нем контакт TP1 – этот контакт и обеспечивает напряжение +5V. Все, что нам необходимо сделать, это припаять к нему небольшой разъем типа «папа» как показано на следующем рисунке чтобы его можно было потом просто подключать к ЖК дисплею.
Примечание: не подключайте к этому контакту 5V нагрузку, которая потребляет ток более 50mA, это может повредить ваш USB порт.
Если вы не хотите заморачиваться с припаиванием данного разъема к плате MSP430G2 просто используйте для подачи питания на ЖК дисплей внешний источник питания напряжением +5V, при этом не забудьте подключить общий провод (землю) данного источника питания к общему проводу платы MSP430G2.
Как только вы решите вопрос с подачей питания на ЖК дисплей подключение всех остальных контактов дисплея к плате, как следует из представленной схемы, исключительно прозрачно.
Объяснение кода программы
Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты. Программировать плату MSP430G2 мы будем с помощью Energia IDE.
Перед тем как приступать к программированию платы необходимо, прежде всего, изучить контакты платы, которые мы будем использовать. На следующем рисунке представлена распиновка платы MSP430G2.
Контакт ЖК дисплея | Контакт платы MSP430G2 |
Vss | Ground |
Vdd | +5V USB pin |
Rs | Pin 2 of MSP |
R/W | Ground |
Enable | Pin 3 of MSP |
D4 | Pin 4 of MSP |
D5 | Pin 5 of MSP |
D6 | Pin 6 of MSP |
D7 | Pin 7 of MSP |
Первым делом в программе зададим осмысленные имена используемым контактам платы.
1 2 3 4 5 6 |
#define RS 2 #define EN 3 #define D4 4 #define D5 5 #define D6 6 #define D7 7 |
Представленная запись обозначает что, к примеру, вместо указания номера контакта 2 мы можем обращаться к нему по заданному нами его условному наименованию, то есть RS. Аналогично и для других 6 контактов.
Далее подключим библиотеку для работы с ЖК дисплеем. Эта библиотека установится автоматически при установке Energia IDE. Поэтому просто подключим ее использование в программе с помощью следующей строчки кода:
1 |
#include <LiquidCrystal.h> |
Затем объявим объект для работы с ЖК дисплеем, при объявлении которого мы в качестве его параметров укажем контакты платы MSP430G2, к которым подключен ЖК дисплей.
1 |
LiquidCrystal lcd(RS, EN, D4, D5, D6, D7); |
Далее, в функции void setup() инициализируем объект для работы с ЖК дисплеем. Поскольку ЖК дисплеи выпускаются данных размеров, то при его инициализации необходимо явно указать количество его столбцов и строк, то есть в нашем случае это будет 16 и 2.
1 |
lcd.begin(16, 2); |
Чтобы начать что то выводить на экран ЖК дисплея прежде всего необходимо указать позицию на экране, с которой мы начнем этот вывод. Сделаем это с помощью функции lcd.setCursor():
1 |
lcd.setCursor (0,0); |
Аналогичным образом мы можем указать и другую позицию для курсора, например:
1 |
lcd.setCursor(0, 1); // set the cursor to 1st column 2nd row |
Если на экране ЖК дисплея уже содержится какая либо информация, то перед новым выводом на него информации желательно очистить его экран с помощью команды:
1 |
lcd.clear(); |
В результате полный код функции void setup() будет выглядеть следующим образом.
1 2 3 4 5 6 7 8 9 |
void setup() { lcd.begin(16, 2); //We are using a 16*2 LCD display lcd.setCursor (0,0); //Place the cursor at 1st row 1st column lcd.print("MSP430G2553"); //Display a intro message lcd.setCursor(0, 1); // set the cursor to 1st column 2nd row lcd.print("-CircuitDigest"); //Display a intro message delay(2000); //Wait for display to show info lcd.clear(); //Then clean it } |
Внутри функции void loop() мы будем инкрементировать число каждые 500 мс и отображать это число на экране ЖК дисплея. Вначале присвоим этому числу значение равное 1.
1 |
int test =1; |
Для формирования задержки в 500 мс используем функцию delay().
1 |
delay(500); |
Инкрементировать нашу переменную мы будем с помощью команды test++, все остальные команды в функции void loop() вам уже известны.
1 2 3 4 5 6 7 8 |
void loop() { lcd.print("LCD with MSP"); //Display a intro message lcd.setCursor(0, 1); // set the cursor to column 0, line 1 lcd.print(test); //Display a intro message delay(500); lcd.clear(); //Then clean it test++; } |
Тестирование работы проекта
Когда аппаратная часть проекта будет у вас готова, просто подключите плату MSP430G2 к компьютеру и загрузите в нее код программы. После этого вы должны увидеть как на экране ЖК дисплея отобразится приветственное сообщение.
Через две секунды после этого на экран ЖК дисплея начнет выводиться последовательно увеличивающееся число как показано на следующем рисунке.
Более подробно работу проекта вы можете посмотреть на видео, приведенном в конце статьи.
Исходный код программы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
/* * Interfacing 16*2 LCD with MSP430G2553 in 4-bit mode using Energia */ #define RS 2 #define EN 3 #define D4 4 #define D5 5 #define D6 6 #define D7 7 #include <LiquidCrystal.h> //эта библиотека устанавливается по умолчанию вместе с IDE LiquidCrystal lcd(RS, EN, D4, D5, D6, D7); //Let the librarey know how we have connected the LCD void setup() { lcd.begin(16, 2); //мы используем ЖК дисплей 16*2 lcd.setCursor (0,0); //устанавливаем курсор в 1-й столбец 1-й строки lcd.print("MSP430G2553"); //показываем на экране дисплея приветственное сообщение (1-я строка) lcd.setCursor(0, 1); // перемещаем курсор на 2-ю строку lcd.print("-CircuitDigest"); // показываем на экране дисплея приветственное сообщение (2-я строка) delay(2000); //задержка в 2 секунды lcd.clear(); //очищаем экран дисплея } int test =1; void loop() { lcd.print("LCD with MSP"); // показываем на экране дисплея приветственное сообщение (1-я строка) lcd.setCursor(0, 1); // перемещаем курсор на 2-ю строку lcd.print(test); //показываем на экране дисплея наше инкрементируемое число delay(500); lcd.clear(); // очищаем экран дисплея test++; } |