Рассматриваем подключение буквенно-цифрового (16 символов в 2 строки) индикатора МТ-16S2H к плате Arduino с помощью сдвигового регистра 74HC595B1. В примерах программ используется библиотека LiquidCrystal_74HC595.

Индикатор МТ-16S2H российского производства (Завод МЭЛТ) позволяет отображать 2 строки по 16 символов. Символы отображаются в матрице 5х8 точек. Между символами имеются интервалы шириной в одну отображаемую точку. Индикатор имеет 2 страницы знакогенератора по 256 символов, с возможностью вывода на экран текста на русском языке.

Индикатор МТ-16S2H имеет 8-ми битную шину данных и, как минимум 2 линии управления. Справедливости ради, необходимо отметить, что индикатором возможно управлять, используя 4-х битную шину данных и 2 линии управления. Итого, для подключения индикатора МТ-16S2H к плате Arduino требуется, как минимум, 6 портов на плате Arduino. С целью сокращения издержек занятости портов Arduino при подключении индикатора МТ-16S2H и ему подобных (LCD 1602, например) используют дополнительные интерфейсные платы.

Нам представляется рациональным для подключения индикатора МТ-16S2H к плате Arduino использовать сдвиговый регистр 74HC595B1.

Рис. 1. Схема подключения буквенно-цифрового индикатора МТ-16S2H к плате Arduino с помощью сдвигового регистра 74HC595B1.

Подключая индикатор по схеме представленной на рис. 1 мы решаем две задачи. 1 подключаем индикатор МТ-16S2H к плате Arduino всего по трём проводам. Меньше на 1 порт может быть только с использованием i2c интерфейса. 2 микросхема SN74HC595B1 в 10 раз дешевле любой интерфейсной платы.

Рис. 2. Макет схемы с Arduino NANO и МТ-16S2H

#include <LiquidCrystal_74HC595.h>

#define SER 4     // pin Arduino к которому подключена 14 ножка микросхемы 595
#define SRCLK 3   // pin Arduino к которому подключена 11 ножка микросхемы 595
#define RCLK 2    // pin Arduino к которому подключена 12 ножка микросхемы 595
#define RS 1      // ножка микросхемы к которой подключена 4 ножка индикатора
#define E 2       // ножка микросхемы к которой подключена 6 ножка индикатора
#define D4 3      // ножка микросхемы к которой подключена 11 ножка индикатора
#define D5 4      // ножка микросхемы к которой подключена 12 ножка индикатора
#define D6 5      // ножка микросхемы к которой подключена 13 ножка индикатора
#define D7 6      // ножка микросхемы к которой подключена 14 ножка индикатора

LiquidCrystal_74HC595 lcd(SER, SRCLK, RCLK, RS, E, D4, D5, D6, D7);

void setup() {
  lcd.begin(16, 2);
  //  lcd.command(0b101000);      // устанавливаем 0 станицу знакогенератора (0 по умолчанию)
  lcd.print(" Hello, World!");
  lcd.setCursor(0, 1);
  //  lcd.command(0b101010);      // устанавливаем 1 станицу знакогенератора
  lcd.print("\xa8""p""\xb8\xb3""e\xbF,"" Me\xe3\xb3""e\xe3!");
}

void loop() {
}

Листинг 1. Демонстрационная программа для Arduino.

Табл. 1. Страница 0 встроенного знакогенератора.

Табл. 2. Страница 1 встроенного знакогенератора.

Рис. 3. Макет схемы с Arduino UNO и МТ-16S2H/

В библиотеке LiquidCrystal_74HC595 определены следующие публичные методы:

class LiquidCrystal_74HC595 : public Print {
    public:
        LiquidCrystal_74HC595(uint8_t ds, uint8_t shcp, uint8_t stcp,
                uint8_t rs, uint8_t e, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3);
        void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS);
        void clear();                                         // Очистка экрана
        void home();                                          // Позиция 0, 0
        void noDisplay();
        void display();
        void noCursor();
        void cursor();                                        // Курсор подчёркивание
        void noBlink();
        void blink();                                         // Мигание курсора
        void scrollDisplayLeft();
        void scrollDisplayRight();
        void leftToRight();
        void rightToLeft();
        void autoscroll();
        void noAutoscroll();
        void createChar(uint8_t location, uint8_t charmap[]); // Создать символ
        void setCursor(uint8_t col, uint8_t row);             // Установить курсор
        void command(uint8_t value);
        virtual size_t write(uint8_t value);                  // Напечатать символ
        using Print::write;
};

Листинг 2. Публичные методы библиотеки LiquidCrystal_74HC595.