Рассматриваем подключение буквенно-цифрового (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.