Жидкокристаллический дисплей (ЖК-дисплей), или по-английски Liquid Crystal
Display (LCD) построен на технологии жидких кристаллов. Из всех доступных
LCD дисплеев на рынке, наиболее популярным является LCD 1602, который может
отображать ASCII символы в 2 строки по 16 знаков в каждой. Управляет работой
дисплея специальный контроллер HD44780, который находится на плате индикатора.
Назначение выводов:
GND - минус питания (общий вывод).
VCC - питание для ЖК-дисплея, +5В.
V0 (LCD Contrast) - вывод для регулировки контрастности ЖК-дисплея.
RS (Register Select) - вывод, который позволяет сообщать ЖК-дисплею,
отправляются команды или данные. Например, когда на выводе RS установлено
значение LOW, мы отправляем команды на ЖК-дисплей (например, установить курсор
в определенном месте, очистить дисплей, сдвинуть дисплей вправо и т. д.).
Когда вывод RS установлено значение HIGH, мы отправляем данные/символы на
ЖК-дисплей.
R/W (Read/Write) - для контроля того, что необходимо сделать - считать
данные или передать их на ЖК-дисплей. Если R/W=1 считываем, если R/W=0 -
записывать.
EN (Enable) - для включения дисплея. Это означает, что когда на этом
выводе установлено значение LOW ЖК-дисплей не реагирует на то, что происходит
с R/W, RS и линиями шины данных. Когда же на этом выводе HIGH ЖК-дисплей
обрабатывает входящие данные.
D0-D7 (Data Bus) - это выводы, по которым передаются 8-битные данные на
дисплей.
AK (Anode & Cathode) используются для управления подсветкой LCD дисплея.
Для передачи данных у дисплея есть 8 выводов (D0-D7). Но, ЖК-дисплеи на HD44780
разработаны таким образом, что позволяют общаться с ЖК-дисплеем, используя
только 4 вывода данных (4-разрядный режим) вместо 8 (8-разрядный режим).
8-битный режим быстрее, чем 4-битный. Это связано с тем, что в 8-битном
режиме мы передаем данные за один раз, а в 4-битном режиме мы должны разделить
байт на 2 части, сдвинуть один из них на 4 бита вправо и выполнить 2 операции
записи. Поэтому, 4-битный режим часто используется для экономии выводов
микроконтроллера, а 8-битный режим лучше всего использовать, когда требуется
высокая скорость и при этом есть как минимум 10 свободных выводов ввода/вывода
микроконтроллера.
В память LCD дисплея мы можем записывать не только данные, которые будут
отображаться на дисплее, но и некоторые команды, которые будут управлять
работой дисплея. Кстати, память в которую мы пишем, называется DDRAM, все что
мы запишем в эту память выведется на дисплей, ещё есть CGROM, в которой
хранится таблица знакогенератора:
Подключить LCD к Ардуино можно и не используя библиотеку. Можно использовать как 4-битное подключение, так и 8-ми битное.
Работа с LCD-дисплеем начинается с инициализации дисплея, которая состоит
из ряда команд, позволяющих настроить дисплей для правильной работы.
Для 8-ми битного подключения, блок инициализации может выглядеть так:
void setup() { pinMode(3, OUTPUT); //Вывод RS(Register selection), если передаем команду, то подаем 0 на этот вывод, а если символ то 1 pinMode(4, OUTPUT); //Вывод R/W(Read/Write), если надо записать информацию, то 0, а если считываем то 1 pinMode(5, OUTPUT); //Вывод E(Enable), в начале передачи или приема подаем 1, в конце 0 pinMode(6, OUTPUT); //Вывод DB0(Data bit 0) - младший бит pinMode(7, OUTPUT); //Вывод DB1(Data bit 1) - младший бит pinMode(8, OUTPUT); //Вывод DB2(Data bit 2) - младший бит pinMode(9, OUTPUT); //Вывод DB3(Data bit 3) - младший бит pinMode(10, OUTPUT); //Вывод DB4(Data bit 4) - cтарший бит pinMode(11, OUTPUT); //Вывод DB0(Data bit 5) - cтарший бит pinMode(12, OUTPUT); //Вывод DB0(Data bit 6) - cтарший бит pinMode(13, OUTPUT); //Вывод DB0(Data bit 7) - cтарший бит // БЛОК ИНИЦИАЛИЗАЦИИ ДИСПЛЕЯ //Выбоор числа линий, ширины шины и размера символа digitalWrite(3, 0); digitalWrite(4, 0); digitalWrite(5, 1); digitalWrite(6, 0); digitalWrite(7, 0); digitalWrite(8, 0); // ращзмер символа: 0 - 5x8, 1 - 5x10 digitalWrite(9, 1); // число строк: 0 - одна строка, 1 - две строки digitalWrite(10, 1); // ширина шины: 1 - 8-бит, 0 - 4 бит digitalWrite(11, 1); digitalWrite(12, 0); digitalWrite(13, 0); digitalWrite(5, 0); delay(1000); //Пауза перед следующей командой // Настройка режима отображения digitalWrite(3, 0); digitalWrite(4, 0); digitalWrite(5, 1); digitalWrite(6, 0); // если 1, то сдвигать курсор в виде мигающего черного квадрата, иначе 0 digitalWrite(7, 1); // если 1, то включить курсор в виде прочерка, иначе 0 digitalWrite(8, 1); // если 1, то включить дисплей, иначе 0 digitalWrite(9, 1); digitalWrite(10, 0); digitalWrite(11, 0); digitalWrite(12, 0); digitalWrite(13, 0); digitalWrite(5, 0); delay(50); //Пауза перед следующей командой //Очистка дисплея digitalWrite(3, 0); digitalWrite(4, 0); digitalWrite(5, 1); digitalWrite(6, 1); digitalWrite(7, 0); digitalWrite(8, 0); digitalWrite(9, 0); digitalWrite(10, 0); digitalWrite(11, 0); digitalWrite(12, 0); digitalWrite(13, 0); digitalWrite(5, 0); delay(50); }Блок инициализации полностью размещается внутри функции void setup()
void loop() { //Конец блока отчистки дисплея sp(); sp(); H(); e(); l(); l(); o(); sp(); W(); o(); r(); l(); d(); ep(); sp(); sp(); for (int i=0; i <24; i++) { //Цикл для того чтобы перейти на следующую строчку sp(); } sp(); sp(); sp(); sp(); L(); C(); D(); hy(); one(); six(); zero(); two(); sp(); sp(); sp(); sp(); delay(10000); //Пауза, чтобы дисплей обновлялся каждые 10 секунд иначе он будет постоянно обновляться. }Видно, что программа состоит из последовательности вызываемых подпрограмм, каждая из которых отправляет в дисплей определенный символ. И, наконец, самая большая часть - набор подпрограмм.
void sp() { //Начало блока символа пробел (0000 0010) digitalWrite(3, 1); //RS digitalWrite(4, 0); //RW digitalWrite(5, 1); //E digitalWrite(6, 0); //D0 digitalWrite(7, 0); //D1 digitalWrite(8, 0); //D2 digitalWrite(9, 0); //D3 digitalWrite(10, 0); //D4 digitalWrite(11, 1); //D5 digitalWrite(12, 0); //D6 digitalWrite(13, 0); //D7 digitalWrite(5, 0); //E delay(50); //Пауза перед следующим символом } //Конец блока символа пробел void H() { //Начало блока символа H (0100 1000) digitalWrite(3, 1); //RS digitalWrite(4, 0); //RW digitalWrite(5, 1); //E digitalWrite(6, 0); //D0 digitalWrite(7, 0); //D1 digitalWrite(8, 0); //D2 digitalWrite(9, 1); //D3 digitalWrite(10, 0); //D4 digitalWrite(11, 0); //D5 digitalWrite(12, 1); //D6 digitalWrite(13, 0); //D7 digitalWrite(5, 0); //E delay(50); //Пауза перед следующим символом } //Конец блока символа H void e() { //Начало блока символа e (0110 0101) digitalWrite(3, 1); //RS digitalWrite(4, 0); //RW digitalWrite(5, 1); //E digitalWrite(6, 1); //D0 digitalWrite(7, 0); //D1 digitalWrite(8, 1); //D2 digitalWrite(9, 0); //D3 digitalWrite(10, 0); //D4 digitalWrite(11, 1); //D5 digitalWrite(12, 1); //D6 digitalWrite(13, 0); //D7 digitalWrite(5, 0); //E delay(50); //Пауза перед следующим символом } //Конец блока символа e void l() { //Начало блока символа l (0110 1100) digitalWrite(3, 1); //RS digitalWrite(4, 0); //RW digitalWrite(5, 1); //E digitalWrite(6, 0); //D0 digitalWrite(7, 0); //D1 digitalWrite(8, 1); //D2 digitalWrite(9, 1); //D3 digitalWrite(10, 0); //D4 digitalWrite(11, 1); //D5 digitalWrite(12, 1); //D6 digitalWrite(13, 0); //D7 digitalWrite(5, 0); //l delay(50); //Пауза перед следующим символом } //Конец блока символа l void o() { //Начало блока символа o (0110 1111) digitalWrite(3, 1); //RS digitalWrite(4, 0); //RW digitalWrite(5, 1); //E digitalWrite(6, 1); //D0 digitalWrite(7, 1); //D1 digitalWrite(8, 1); //D2 digitalWrite(9, 1); //D3 digitalWrite(10, 0); //D4 digitalWrite(11, 1); //D5 digitalWrite(12, 1); //D6 digitalWrite(13, 0); //D7 digitalWrite(5, 0); //l delay(50); //Пауза перед следующим символом } //Конец блока символа o void W() { //Начало блока символа W (0101 0111) digitalWrite(3, 1); //RS digitalWrite(4, 0); //RW digitalWrite(5, 1); //E digitalWrite(6, 1); //D0 digitalWrite(7, 1); //D1 digitalWrite(8, 1); //D2 digitalWrite(9, 0); //D3 digitalWrite(10, 1); //D4 digitalWrite(11, 0); //D5 digitalWrite(12, 1); //D6 digitalWrite(13, 0); //D7 digitalWrite(5, 0); //l delay(50); //Пауза перед следующим символом } //Конец блока символа W void r() { //Начало блока символа r (0111 0010) digitalWrite(3, 1); //RS digitalWrite(4, 0); //RW digitalWrite(5, 1); //E digitalWrite(6, 0); //D0 digitalWrite(7, 1); //D1 digitalWrite(8, 0); //D2 digitalWrite(9, 0); //D3 digitalWrite(10, 1); //D4 digitalWrite(11, 1); //D5 digitalWrite(12, 1); //D6 digitalWrite(13, 0); //D7 digitalWrite(5, 0); //l delay(50); //Пауза перед следующим символом } //Конец блока символа r void d() { //Начало блока символа d (0110 0100) digitalWrite(3, 1); //RS digitalWrite(4, 0); //RW digitalWrite(5, 1); //E digitalWrite(6, 0); //D0 digitalWrite(7, 0); //D1 digitalWrite(8, 1); //D2 digitalWrite(9, 0); //D3 digitalWrite(10, 0); //D4 digitalWrite(11, 1); //D5 digitalWrite(12, 1); //D6 digitalWrite(13, 0); //D7 digitalWrite(5, 0); //l delay(50); //Пауза перед следующим символом } //Конец блока символа d void ep() { //Начало блока символа ! (0010 0001) digitalWrite(3, 1); //RS digitalWrite(4, 0); //RW digitalWrite(5, 1); //E digitalWrite(6, 1); //D0 digitalWrite(7, 0); //D1 digitalWrite(8, 0); //D2 digitalWrite(9, 0); //D3 digitalWrite(10, 0); //D4 digitalWrite(11, 1); //D5 digitalWrite(12, 0); //D6 digitalWrite(13, 0); //D7 digitalWrite(5, 0); //l delay(50); //Пауза перед следующим символом } //Конец блока символа ! void L() { //Начало блока символа L (1100 0100) digitalWrite(3, 1); //RS digitalWrite(4, 0); //RW digitalWrite(5, 1); //E digitalWrite(6, 0); //D0 digitalWrite(7, 0); //D1 digitalWrite(8, 1); //D2 digitalWrite(9, 1); //D3 digitalWrite(10, 0); //D4 digitalWrite(11, 0); //D5 digitalWrite(12, 1); //D6 digitalWrite(13, 0); //D7 digitalWrite(5, 0); //l delay(50); //Пауза перед следующим символом } //Конец блока символа L void C() { //Начало блока символа C (0100 0011) digitalWrite(3, 1); //RS digitalWrite(4, 0); //RW digitalWrite(5, 1); //E digitalWrite(6, 1); //D0 digitalWrite(7, 1); //D1 digitalWrite(8, 0); //D2 digitalWrite(9, 0); //D3 digitalWrite(10, 0); //D4 digitalWrite(11, 0); //D5 digitalWrite(12, 1); //D6 digitalWrite(13, 0); //D7 digitalWrite(5, 0); //l delay(50); //Пауза перед следующим символом } //Конец блока символа C void D() { //Начало блока символа D (0100 0100) digitalWrite(3, 1); //RS digitalWrite(4, 0); //RW digitalWrite(5, 1); //E digitalWrite(6, 0); //D0 digitalWrite(7, 0); //D1 digitalWrite(8, 1); //D2 digitalWrite(9, 0); //D3 digitalWrite(10, 0); //D4 digitalWrite(11, 0); //D5 digitalWrite(12, 1); //D6 digitalWrite(13, 0); //D7 digitalWrite(5, 0); //l delay(50); //Пауза перед следующим символом } //Конец блока символа D void hy() { //Начало блока символа дефис (0010 1101) digitalWrite(3, 1); //RS digitalWrite(4, 0); //RW digitalWrite(5, 1); //E digitalWrite(6, 1); //D0 digitalWrite(7, 0); //D1 digitalWrite(8, 1); //D2 digitalWrite(9, 1); //D3 digitalWrite(10, 0); //D4 digitalWrite(11, 1); //D5 digitalWrite(12, 0); //D6 digitalWrite(13, 0); //D7 digitalWrite(5, 0); //l delay(50); //Пауза перед следующим символом } //Конец блока символа дефис void one() { //Начало блока символа 1 (0011 0001) digitalWrite(3, 1); //RS digitalWrite(4, 0); //RW digitalWrite(5, 1); //E digitalWrite(6, 1); //D0 digitalWrite(7, 0); //D1 digitalWrite(8, 0); //D2 digitalWrite(9, 0); //D3 digitalWrite(10, 1); //D4 digitalWrite(11, 1); //D5 digitalWrite(12, 0); //D6 digitalWrite(13, 0); //D7 digitalWrite(5, 0); //l delay(50); //Пауза перед следующим символом } //Конец блока символа 1 void two() { //Начало блока символа 2 (0011 0010) digitalWrite(3, 1); //RS digitalWrite(4, 0); //RW digitalWrite(5, 1); //E digitalWrite(6, 0); //D0 digitalWrite(7, 1); //D1 digitalWrite(8, 0); //D2 digitalWrite(9, 0); //D3 digitalWrite(10, 1); //D4 digitalWrite(11, 1); //D5 digitalWrite(12, 0); //D6 digitalWrite(13, 0); //D7 digitalWrite(5, 0); //l delay(50); //Пауза перед следующим символом } //Конец блока символа 2 void six() { //Начало блока символа 6 (0011 0110) digitalWrite(3, 1); //RS digitalWrite(4, 0); //RW digitalWrite(5, 1); //E digitalWrite(6, 0); //D0 digitalWrite(7, 1); //D1 digitalWrite(8, 1); //D2 digitalWrite(9, 0); //D3 digitalWrite(10, 1); //D4 digitalWrite(11, 1); //D5 digitalWrite(12, 0); //D6 digitalWrite(13, 0); //D7 digitalWrite(5, 0); //l delay(50); //Пауза перед следующим символом } //Конец блока символа 6 void zero() { //Начало блока символа 0 (0011 0000) digitalWrite(3, 1); //RS digitalWrite(4, 0); //RW digitalWrite(5, 1); //E digitalWrite(6, 0); //D0 digitalWrite(7, 0); //D1 digitalWrite(8, 0); //D2 digitalWrite(9, 0); //D3 digitalWrite(10, 1); //D4 digitalWrite(11, 1); //D5 digitalWrite(12, 0); //D6 digitalWrite(13, 0); //D7 digitalWrite(5, 0); //l delay(50); //Пауза перед следующим символом } //Конец блока символа 0
Для 4-х битного подключения, блок инициализации может выглядеть так:
void setup() { pinMode(3, OUTPUT); //Вывод RS(Register selection), если передаем команду, то подаем 0 на этот вывод, а если символ то 1 pinMode(4, OUTPUT); //Вывод R/W(Read/Write), если надо записать информацию, то 0, а если считываем то 1 pinMode(5, OUTPUT); //Вывод E(Enable), в начале передачи или приема подаем 1, в конце 0 pinMode(10, OUTPUT); //Вывод DB4(Data bit 4) - Старший бит pinMode(11, OUTPUT); //Вывод DB5(Data bit 5) - Старший бит pinMode(12, OUTPUT); //Вывод DB6(Data bit 6) - Старший бит pinMode(13, OUTPUT); //Вывод DB7(Data bit 7) - Старший бит // БЛОК ИНИЦИАЛИЗАЦИИ ДИСПЛЕЯ // Выбор числа линий, шины, размера символа digitalWrite(3, 0); //RS 0 - указывает дисплею на то, что отправляем команду. digitalWrite(4, 0); //RW 0 - указывает на то, что будет записывать в дисплей. digitalWrite(5, 1); //E 1 - разрешает запись в дисплей данных, записываем 0010 digitalWrite(10, 0); //D4 0 - так как подключаем по 4 битам digitalWrite(11, 1); //D5 digitalWrite(12, 0); //D6 digitalWrite(13, 0); //D7 digitalWrite(5, 0); //E 0 - запрещает запись данных в дисплей. delay(1); digitalWrite(5, 1); //E 1 - разрешает запись в дисплей данных, записываем 0010 digitalWrite(10, 0); //D4 0 - так как подключаем по 4 битам digitalWrite(11, 1); //D5 digitalWrite(12, 0); //D6 digitalWrite(13, 0); //D7 digitalWrite(5, 0); //E 0 - запрещает запись данных в дисплей. delay(1); digitalWrite(5, 1); //E 1 - разрешает запись в дисплей данных, записываем 1100 digitalWrite(10, 0); //D4 digitalWrite(11, 0); //D5 digitalWrite(12, 0); //D6 N = 0, размер символа 5x8 точек digitalWrite(13, 1); //D7 F = 1, так как у нас две строки digitalWrite(5, 0); //E delay(5); //Пауза, после записи команды. // Настройка режима отображения digitalWrite(3, 0); //RS 0 - указывает дисплею на то, что отправляем команду. digitalWrite(4, 0); //RW 0 - указывает на то, что будет записывать в дисплей. digitalWrite(5, 1); //E 1 - разрешает запись в дисплей данных, записываем 0000 digitalWrite(10, 0); //D4 digitalWrite(11, 0); //D5 digitalWrite(12, 0); //D6 digitalWrite(13, 0); //D7 digitalWrite(5, 0); //E 0 - запрещает запись данных в дисплей. delay(1); digitalWrite(5, 1); //E 1 - разрешает запись в дисплей данных, записываем 1100 digitalWrite(10, 0); //D4 B - 0 - мигающий квадратный курсор выключен digitalWrite(11, 0); //D5 С = 0 - курсор выключен digitalWrite(12, 1); //D6 D = 1 - дисплей включен. digitalWrite(13, 1); //D7 digitalWrite(5, 0); //E 0 - запрещает запись данных в дисплей. delay(50); //Пауза, после записи команды. // очистка дисплея digitalWrite(3, 0); //RS 0 - указывает дисплею на то, что отправляем команду. digitalWrite(4, 0); //RW 0 - указывает на то, что будет записывать в дисплей. digitalWrite(5, 1); //E 1 - разрешает запись в дисплей данных digitalWrite(10, 0); //D4 записываем 0000 digitalWrite(11, 0); //D5 digitalWrite(12, 0); //D6 digitalWrite(13, 0); //D7 digitalWrite(5, 0); //E 0 - запрещает запись данных в дисплей delay(1); digitalWrite(5, 1); //E 1 - разрешает запись в дисплей данных digitalWrite(10, 1); //D4 записываем 0001 digitalWrite(11, 0); //D5 digitalWrite(12, 0); //D6 digitalWrite(13, 0); //D7 digitalWrite(5, 0); //E 0 - запрещает запись данных в дисплей delay(50); //Пауза, чтобы была анимация // конец очистки дисплея }
void loop() { sp(); sp(); H(); e(); l(); l(); o(); sp(); W(); o(); r(); l(); d(); ep(); sp(); sp(); for (int i=0; i <24; i++) { //Цикл для того чтобы перейти на следующую строчку sp(); } sp(); sp(); sp(); sp(); L(); C(); D(); hy(); one(); six(); zero(); two(); sp(); sp(); sp(); sp(); delay(10000); //Пауза, чтобы дисплей обновлялся каждые 10 секунд иначе он будет постоянно обновляться. }
void sp() { // символ пробел (0000 0010) digitalWrite(3, 1); //RS 1 - указывает дисплею на то, что отправляем символ. digitalWrite(4, 0); //RW 0 - указывает на то, что будет записывать в дисплей. digitalWrite(5, 1); //E 1 - разрешает запись в дисплей данных digitalWrite(10, 0); //D4 записываем 0000 digitalWrite(11, 1); //D5 digitalWrite(12, 0); //D6 digitalWrite(13, 0); //D7 digitalWrite(5, 0); //E 0 - запрещает запись данных в дисплей delay(1); digitalWrite(5, 1); //E 1 - разрешает запись в дисплей данных digitalWrite(10, 0); //D4 записываем 0001 digitalWrite(11, 0); //D5 digitalWrite(12, 0); //D6 digitalWrite(13, 0); //D7 digitalWrite(5, 0); //E 0 - запрещает запись данных в дисплей delay(50); //Пауза } // конец символа пробел void H() { //Начало блока символа H (0100 1000) digitalWrite(3, 1); //RS 1 - указывает дисплею на то, что отправляем символ. digitalWrite(4, 0); //RW 0 - указывает на то, что будет записывать в дисплей. digitalWrite(5, 1); //E 1 - разрешает запись в дисплей данных digitalWrite(10, 0); //D4 digitalWrite(11, 0); //D5 digitalWrite(12, 1); //D6 digitalWrite(13, 0); //D7 digitalWrite(5, 0); //E 0 - запрещает запись данных в дисплей delay(1); digitalWrite(5, 1); //E 1 - разрешает запись в дисплей данных digitalWrite(10, 0); //D4 digitalWrite(11, 0); //D5 digitalWrite(12, 0); //D6 digitalWrite(13, 1); //D7 digitalWrite(5, 0); //E 0 - запрещает запись данных в дисплей delay(50); //Пауза } //Конец блока символа H void e() { //Начало блока символа e (0110 0101) digitalWrite(3, 1); //RS 1 - указывает дисплею на то, что отправляем символ. digitalWrite(4, 0); //RW 0 - указывает на то, что будет записывать в дисплей. digitalWrite(5, 1); //E 1 - разрешает запись в дисплей данных digitalWrite(10, 0); //D4 digitalWrite(11, 1); //D5 digitalWrite(12, 1); //D6 digitalWrite(13, 0); //D7 digitalWrite(5, 0); //E 0 - запрещает запись данных в дисплей delay(1); digitalWrite(5, 1); //E 1 - разрешает запись в дисплей данных digitalWrite(10, 1); //D4 digitalWrite(11, 0); //D5 digitalWrite(12, 1); //D6 digitalWrite(13, 0); //D7 digitalWrite(5, 0); //E 0 - запрещает запись данных в дисплей delay(50); //Пауза } //Конец блока символа e void l() { //Начало блока символа l (0110 1100) digitalWrite(3, 1); //RS 1 - указывает дисплею на то, что отправляем символ. digitalWrite(4, 0); //RW 0 - указывает на то, что будет записывать в дисплей. digitalWrite(5, 1); //E 1 - разрешает запись в дисплей данных digitalWrite(10, 0); //D4 digitalWrite(11, 1); //D5 digitalWrite(12, 1); //D6 digitalWrite(13, 0); //D7 digitalWrite(5, 0); //E 0 - запрещает запись данных в дисплей delay(1); digitalWrite(5, 1); //E 1 - разрешает запись в дисплей данных digitalWrite(10, 0); //D4 digitalWrite(11, 0); //D5 digitalWrite(12, 1); //D6 digitalWrite(13, 1); //D7 digitalWrite(5, 0); //E 0 - запрещает запись данных в дисплей delay(50); //Пауза } //Конец блока символа l void o() { //Начало блока символа o (0110 1111) digitalWrite(3, 1); //RS 1 - указывает дисплею на то, что отправляем символ. digitalWrite(4, 0); //RW 0 - указывает на то, что будет записывать в дисплей. digitalWrite(5, 1); //E 1 - разрешает запись в дисплей данных digitalWrite(10, 0); //D4 digitalWrite(11, 1); //D5 digitalWrite(12, 1); //D6 digitalWrite(13, 0); //D7 digitalWrite(5, 0); //E 0 - запрещает запись данных в дисплей delay(1); digitalWrite(5, 1); //E 1 - разрешает запись в дисплей данных digitalWrite(10, 1); //D4 digitalWrite(11, 1); //D5 digitalWrite(12, 1); //D6 digitalWrite(13, 1); //D7 digitalWrite(5, 0); //E 0 - запрещает запись данных в дисплей delay(50); //Пауза } //Конец блока символа o void W() { //Начало блока символа W (0101 0111) digitalWrite(3, 1); //RS 1 - указывает дисплею на то, что отправляем символ. digitalWrite(4, 0); //RW 0 - указывает на то, что будет записывать в дисплей. digitalWrite(5, 1); //E 1 - разрешает запись в дисплей данных digitalWrite(10, 1); //D4 digitalWrite(11, 0); //D5 digitalWrite(12, 1); //D6 digitalWrite(13, 0); //D7 digitalWrite(5, 0); //E 0 - запрещает запись данных в дисплей delay(1); digitalWrite(5, 1); //E 1 - разрешает запись в дисплей данных digitalWrite(10, 1); //D4 digitalWrite(11, 1); //D5 digitalWrite(12, 1); //D6 digitalWrite(13, 0); //D7 digitalWrite(5, 0); //E 0 - запрещает запись данных в дисплей delay(50); //Пауза } //Конец блока символа W void r() { //Начало блока символа r (0111 0010) digitalWrite(3, 1); //RS 1 - указывает дисплею на то, что отправляем символ. digitalWrite(4, 0); //RW 0 - указывает на то, что будет записывать в дисплей. digitalWrite(5, 1); //E 1 - разрешает запись в дисплей данных digitalWrite(10, 1); //D4 digitalWrite(11, 1); //D5 digitalWrite(12, 1); //D6 digitalWrite(13, 0); //D7 digitalWrite(5, 0); //E 0 - запрещает запись данных в дисплей delay(1); digitalWrite(5, 1); //E 1 - разрешает запись в дисплей данных digitalWrite(10, 0); //D4 digitalWrite(11, 1); //D5 digitalWrite(12, 0); //D6 digitalWrite(13, 0); //D7 digitalWrite(5, 0); //E 0 - запрещает запись данных в дисплей delay(50); //Пауза } //Конец блока символа r void d() { //Начало блока символа d (0110 0100) digitalWrite(3, 1); //RS 1 - указывает дисплею на то, что отправляем символ. digitalWrite(4, 0); //RW 0 - указывает на то, что будет записывать в дисплей. digitalWrite(5, 1); //E 1 - разрешает запись в дисплей данных digitalWrite(10, 0); //D4 digitalWrite(11, 1); //D5 digitalWrite(12, 1); //D6 digitalWrite(13, 0); //D7 digitalWrite(5, 0); //E 0 - запрещает запись данных в дисплей delay(1); digitalWrite(5, 1); //E 1 - разрешает запись в дисплей данных digitalWrite(10, 0); //D4 digitalWrite(11, 0); //D5 digitalWrite(12, 1); //D6 digitalWrite(13, 0); //D7 digitalWrite(5, 0); //E 0 - запрещает запись данных в дисплей delay(50); //Пауза } //Конец блока символа d void ep() { //Начало блока символа ! (0010 0001) digitalWrite(3, 1); //RS 1 - указывает дисплею на то, что отправляем символ. digitalWrite(4, 0); //RW 0 - указывает на то, что будет записывать в дисплей. digitalWrite(5, 1); //E 1 - разрешает запись в дисплей данных digitalWrite(10, 0); //D4 digitalWrite(11, 1); //D5 digitalWrite(12, 0); //D6 digitalWrite(13, 0); //D7 digitalWrite(5, 0); //E 0 - запрещает запись данных в дисплей delay(1); digitalWrite(5, 1); //E 1 - разрешает запись в дисплей данных digitalWrite(10, 1); //D4 digitalWrite(11, 0); //D5 digitalWrite(12, 0); //D6 digitalWrite(13, 0); //D7 digitalWrite(5, 0); //E 0 - запрещает запись данных в дисплей delay(50); //Пауза } //Конец блока символа d void L() { //Начало блока символа L (1100 0100) digitalWrite(3, 1); //RS 1 - указывает дисплею на то, что отправляем символ. digitalWrite(4, 0); //RW 0 - указывает на то, что будет записывать в дисплей. digitalWrite(5, 1); //E 1 - разрешает запись в дисплей данных PORTB = B010000; // Выводим значение 010000 в порт B digitalWrite(5, 0); //E 0 - запрещает запись данных в дисплей delay(1); digitalWrite(5, 1); //E 1 - разрешает запись в дисплей данных PORTB = B110000; // Выводим значение 110000 в порт B digitalWrite(5, 0); //E 0 - запрещает запись данных в дисплей delay(50); //Пауза } //Конец блока символа L void C() { //Начало блока символа C (0100 0011) digitalWrite(3, 1); //RS 1 - указывает дисплею на то, что отправляем символ. digitalWrite(4, 0); //RW 0 - указывает на то, что будет записывать в дисплей. digitalWrite(5, 1); //E 1 - разрешает запись в дисплей данных PORTB = B010000; // Выводим значение 010000 в порт B digitalWrite(5, 0); //E 0 - запрещает запись данных в дисплей delay(1); digitalWrite(5, 1); //E 1 - разрешает запись в дисплей данных PORTB = B001100; // Выводим значение 001100 в порт B digitalWrite(5, 0); //E 0 - запрещает запись данных в дисплей delay(50); //Пауза } //Конец блока символа C void D() { //Начало блока символа D (0100 0100) digitalWrite(3, 1); //RS 1 - указывает дисплею на то, что отправляем символ. digitalWrite(4, 0); //RW 0 - указывает на то, что будет записывать в дисплей. digitalWrite(5, 1); //E 1 - разрешает запись в дисплей данных PORTB = B010000; // Выводим значение 0100000 в порт B digitalWrite(5, 0); //E 0 - запрещает запись данных в дисплей delay(1); digitalWrite(5, 1); //E 1 - разрешает запись в дисплей данных PORTB = B010000; // Выводим значение 0100000 в порт B digitalWrite(5, 0); //E 0 - запрещает запись данных в дисплей delay(50); //Пауза } //Конец блока символа D void hy() { //Начало блока символа - (0010 1101) digitalWrite(3, 1); //RS 1 - указывает дисплею на то, что отправляем символ. digitalWrite(4, 0); //RW 0 - указывает на то, что будет записывать в дисплей. digitalWrite(5, 1); //E 1 - разрешает запись в дисплей данных PORTB = B001000; // Выводим значение 001000 в порт B digitalWrite(5, 0); //E 0 - запрещает запись данных в дисплей delay(1); digitalWrite(5, 1); //E 1 - разрешает запись в дисплей данных PORTB = B110100; // Выводим значение 110100 в порт B digitalWrite(5, 0); //E 0 - запрещает запись данных в дисплей delay(50); //Пауза } //Конец блока символа - void zero() { //Начало блока символа 0 (0011 0000) digitalWrite(3, 1); //RS 1 - указывает дисплею на то, что отправляем символ. digitalWrite(4, 0); //RW 0 - указывает на то, что будет записывать в дисплей. digitalWrite(5, 1); //E 1 - разрешает запись в дисплей данных PORTB = B001100; // Выводим значение 001100 в порт B digitalWrite(5, 0); //E 0 - запрещает запись данных в дисплей delay(1); digitalWrite(5, 1); //E 1 - разрешает запись в дисплей данных PORTB = B000000; // Выводим значение 000000 в порт B digitalWrite(5, 0); //E 0 - запрещает запись данных в дисплей delay(50); //Пауза } //Конец блока символа 1 void one() { //Начало блока символа 1 (0011 0001) digitalWrite(3, 1); //RS 1 - указывает дисплею на то, что отправляем символ. digitalWrite(4, 0); //RW 0 - указывает на то, что будет записывать в дисплей. digitalWrite(5, 1); //E 1 - разрешает запись в дисплей данных PORTB = B001100; // Выводим значение 001100 в порт B digitalWrite(5, 0); //E 0 - запрещает запись данных в дисплей delay(1); digitalWrite(5, 1); //E 1 - разрешает запись в дисплей данных PORTB = B000100; // Выводим значение 000100 в порт B digitalWrite(5, 0); //E 0 - запрещает запись данных в дисплей delay(50); //Пауза } //Конец блока символа 1 void two() { //Начало блока символа 2 (0011 0010) digitalWrite(3, 1); //RS 1 - указывает дисплею на то, что отправляем символ. digitalWrite(4, 0); //RW 0 - указывает на то, что будет записывать в дисплей. digitalWrite(5, 1); //E 1 - разрешает запись в дисплей данных PORTB = B001100; // Выводим значение 001100 в порт B digitalWrite(5, 0); //E 0 - запрещает запись данных в дисплей delay(1); digitalWrite(5, 1); //E 1 - разрешает запись в дисплей данных PORTB = B001000; // Выводим значение 001000 в порт B digitalWrite(5, 0); //E 0 - запрещает запись данных в дисплей delay(50); //Пауза } //Конец блока символа 2 void six() { //Начало блока символа 6 (0011 0110) digitalWrite(3, 1); //RS 1 - указывает дисплею на то, что отправляем символ. digitalWrite(4, 0); //RW 0 - указывает на то, что будет записывать в дисплей. digitalWrite(5, 1); //E 1 - разрешает запись в дисплей данных PORTB = B001100; // Выводим значение 001100 в порт B digitalWrite(5, 0); //E 0 - запрещает запись данных в дисплей delay(1); digitalWrite(5, 1); //E 1 - разрешает запись в дисплей данных PORTB = B011000; // Выводим значение 011000 в порт B digitalWrite(5, 0); //E 0 - запрещает запись данных в дисплей delay(50); //Пауза } //Конец блока символа 6