LCD 1602: свои символы и прогресс-бар
createChar рисует восемь собственных знаков — из них собирается плавная полоса.

Что понадобится
Как подключить
| Откуда | Куда | |||
|---|---|---|---|---|
| Arduino Uno | 5V | → | LCD 1602 | VDD |
| Arduino Uno | GND | → | LCD 1602 | VSS |
| Arduino Uno | GND | → | LCD 1602 | RW |
| Arduino Uno | D12 | → | LCD 1602 | RS |
| Arduino Uno | D11 | → | LCD 1602 | E |
| Arduino Uno | D5 | → | LCD 1602 | D4 |
| Arduino Uno | D4 | → | LCD 1602 | D5 |
| Arduino Uno | D3 | → | LCD 1602 | D6 |
| Arduino Uno | D2 | → | LCD 1602 | D7 |
Скетч
#include <LiquidCrystal.h>
// У дисплея есть 8 своих знакомест: рисуем «столбики» шириной 1…5 точек
// и собираем из них прогресс-бар с шагом в пятую часть символа.
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
byte bar1[8] = { 0b10000, 0b10000, 0b10000, 0b10000, 0b10000, 0b10000, 0b10000, 0b10000 };
byte bar2[8] = { 0b11000, 0b11000, 0b11000, 0b11000, 0b11000, 0b11000, 0b11000, 0b11000 };
byte bar3[8] = { 0b11100, 0b11100, 0b11100, 0b11100, 0b11100, 0b11100, 0b11100, 0b11100 };
byte bar4[8] = { 0b11110, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110, 0b11110 };
byte bar5[8] = { 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111, 0b11111 };
int percent = 0;
void setup() {
lcd.begin(16, 2);
lcd.createChar(1, bar1);
lcd.createChar(2, bar2);
lcd.createChar(3, bar3);
lcd.createChar(4, bar4);
lcd.createChar(5, bar5);
lcd.print("Загрузка");
}
void drawBar(int pct) {
int cells = pct * 16 / 100; // сколько знакомест закрашено целиком
int rest = (pct * 16 * 5 / 100) % 5; // и сколько столбиков в следующем
lcd.setCursor(0, 1);
for (int i = 0; i < 16; i++) {
if (i < cells) lcd.write(byte(5));
else if (i == cells && rest > 0) lcd.write(byte(rest));
else lcd.print(" ");
}
}
void loop() {
drawBar(percent);
lcd.setCursor(10, 0);
lcd.print(percent);
lcd.print("% ");
percent += 2;
if (percent > 100) percent = 0;
delay(200);
}
Коротко о детали: LCD 1602
Знакосинтезирующий дисплей: две строки по 16 символов. Данные передаются по шине D0–D7 (чаще используют только D4–D7) плюс линии RS и E. Контрастность задаётся напряжением на выводе V0 — обычно через подстроечный резистор.
Ещё примеры с деталью «LCD 1602»
Попробуйте сами
Симулятор работает прямо в браузере: схему можно менять, код — править, а результат видно сразу. Бесплатно, без установки и регистрации.
Открыть «LCD 1602: свои символы и прогресс-бар» в симуляторе