В некоторых проектах на Arduino бывает необходимо отображать довольно большое количество информации, а покупать широкоформатные дисплеи довольно затратно, особенно при наличии нескольких недорогих ЖК-дисплеев 16x2.

В таком случае можно просто подключить эти несколько дисплеев к одной плате Arduino с помощью техники мультиплексирования. Как это сделать, будет рассмотрено в данном материале.
Дело в том, что ЖК-дисплеи для Arduino активируются импульсным сигналом, подводимого к линии выбора дисплея. В дополнение к стандартному вводу данных имеется также входной терминал частоты передачи данных дисплея. Благодаря этому можно управлять несколькими дисплеями. И в данном случае мы сделаем дисплей 16 × 8, задействовав четыре дисплея 16 × 2 и используя общие линии данных. Наиболее интересной частью этого проекта является то, что эти дисплеи совместно используют четыре линии передачи данных и при этом отображают разные данные. Схема мультиплексирования ЖК-дисплеев показана на рисунке ниже. Эта схема мультиплексирования LCD принимает любое 4-битное число и отображает букву.

Режим 4-битных данных достигается путем подключения старших линий ЖК-дисплеев (D4, D5, D6 и D7) к цифровым линиям платы Arduino Uno (контакты D7, D6, D5 и D4) соответственно, как показано на принципиальной схеме. При этом контакты RS и EN LCD-экранов подключены к разным выводам платы Arduino. Вы также можете использовать только один ЖК-дисплей, отключив вывод RS и EN других дисплеев. Вывод RW всех дисплеев заземлен для выполнения операции записи.
Ниже приведен скетч (код) для Arduino, позволяющий отображать данные на четырех дисплеях, которые в коде именуются как lcdA, lcdB, lcdC и lcdD.
LiquidCrystal lcdA(13,12,7,6,5,4); // определение линий для первого дисплея
LiquidCrystal lcdB(11,10,7,6,5,4); // определение линий для второго дисплея
LiquidCrystal lcdC(9,8,7,6,5,4); // определение линий для третьего дисплея
LiquidCrystal lcdD(3,2,7,6,5,4); // определение линий для четвертого дисплея
void setup()
{
lcdA.begin(16,2); // инициализация первого дисплея
lcdB.begin(16,2); // инициализация второго дисплея
lcdC.begin(16,2); // инициализация третьего дисплея
lcdD.begin(16,2); // инициализация четвертого дисплея
}
void loop()
{
lcdA.setCursor(0,0);
lcdA.print("Several 16x2 LCD Using");
delay(100);
lcdB.setCursor(0,0);
lcdB.print(" Test mode ");
delay(100);
lcdC.setCursor(0,0);
lcdC.print("Visit Website");
delay(100);
lcdD.setCursor(0,0);
lcdD.print("Digitrode.ru");
delay(100);
lcdA.setCursor(0,1);
lcdA.print("More Arduino");
delay(100);
lcdB.setCursor(0,1);
lcdB.print("Projects");
delay(100);
lcdC.setCursor(0,1);
lcdC.print("At Digitrode");
delay(100);
lcdD.setCursor(0,1);
lcdD.print("Thank You");
delay(100);
}