Жидкокристаллический дисплей (ЖК-дисплей), или по-английски 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