Искал шрифт больших цифр, всё не нравилось. Сделал свой, может кому-то пригодится. Код прилагается.


















ну и код для тестирования прилагается, только подключение поменяй, у меня был не по I2C промышленный дисплей. Кстати, есть ещё 2 ячейки памяти свободных, можно напридумывать.
#include <LiquidCrystal.h>
// Подключение: RS-12, E-11, D4-5, D5-4, D6-3, D7-2
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// сегменты
byte BL[8] = {B11111, B11111, B11111, B11111, B11111, B11111, B11111, B11111}; // блок закрашенный целиком (не используется)
byte VB[8] = {B11111, B11111, B11111, B00000, B00000, B00000, B00000, B00000}; // верхний большой
byte NB[8] = {B00000, B00000, B00000, B00000, B00000, B11111, B11111, B11111}; // Нижний большой
byte VNM[8] = {B11111, B11111, B00000, B00000, B00000, B00000, B11111, B11111}; // верхний и нижний малый
byte VM[8] = {B11111, B11111, B00000, B00000, B00000, B00000, B00000, B00000}; // верхний малый
byte NM[8] = {B00000, B00000, B00000, B00000, B00000, B00000, B11111, B11111}; // нижний малый
byte BLK[8] = {B01110, B11111, B11111, B11111, B11111, B11111, B11111, B01110}; // блок целиком скруглённые углы
byte MB[8] = {B11111, B00000, B11011, B00000, B11011, B00000, B11011, B11111}; // может быть что угодно (не используется)
int hours = 12; // выставить часы
int minutes = 34; // выставить минуты
bool colonVisible = true; // переменная двоичная для смены точек
void setup() {
lcd.begin(16, 2); // инициализируем дисплей
// Регистрируем 8 символов
lcd.createChar(0, BL);
lcd.createChar(1, VB);
lcd.createChar(2, NB);
lcd.createChar(3, VNM);
lcd.createChar(4, VM);
lcd.createChar(5, NM);
lcd.createChar(6, BLK);
lcd.createChar(7, MB);
lcd.clear();
}
void showDigit(int digit, int pos) { // функция показывает цифру
switch (digit) {
case 0:
lcd.setCursor(pos, 0); lcd.write((byte)6); lcd.write((byte)1); lcd.write((byte)6); // 6-1-6 первоя строка заполнится
lcd.setCursor(pos, 1); lcd.write((byte)6); lcd.write((byte)2); lcd.write((byte)6);
break;
case 1:
lcd.setCursor(pos, 0); lcd.print(" "); lcd.write((byte)6); lcd.print(" ");
lcd.setCursor(pos, 1); lcd.print(" "); lcd.write((byte)6); lcd.print(" ");
break;
case 2:
lcd.setCursor(pos, 0); lcd.write((byte)1); lcd.write((byte)3); lcd.write((byte)6);
lcd.setCursor(pos, 1); lcd.write((byte)6); lcd.write((byte)5); lcd.write((byte)2);
break;
case 3:
lcd.setCursor(pos, 0); lcd.write((byte)1); lcd.write((byte)3); lcd.write((byte)6);
lcd.setCursor(pos, 1); lcd.write((byte)2); lcd.write((byte)5); lcd.write((byte)6);
break;
case 4:
lcd.setCursor(pos, 0); lcd.write((byte)6); lcd.write((byte)2); lcd.write((byte)6);
lcd.setCursor(pos, 1); lcd.print(" "); lcd.print(" "); lcd.write((byte)6);
break;
case 5:
lcd.setCursor(pos, 0); lcd.write((byte)6); lcd.write((byte)3); lcd.write((byte)1);
lcd.setCursor(pos, 1); lcd.write((byte)2); lcd.write((byte)5); lcd.write((byte)6);
break;
case 6:
lcd.setCursor(pos, 0); lcd.write((byte)6); lcd.write((byte)3); lcd.write((byte)1);
lcd.setCursor(pos, 1); lcd.write((byte)6); lcd.write((byte)2); lcd.write((byte)6);
break;
case 7:
lcd.setCursor(pos, 0); lcd.write((byte)1); lcd.write((byte)4); lcd.write((byte)6);
lcd.setCursor(pos, 1); lcd.print(" "); lcd.print(" "); lcd.write((byte)6);
break;
case 8:
lcd.setCursor(pos, 0); lcd.write((byte)6); lcd.write((byte)3); lcd.write((byte)6);
lcd.setCursor(pos, 1); lcd.write((byte)6); lcd.write((byte)2); lcd.write((byte)6);
break;
case 9:
lcd.setCursor(pos, 0); lcd.write((byte)6); lcd.write((byte)3); lcd.write((byte)6);
lcd.setCursor(pos, 1); lcd.write((byte)2); lcd.write((byte)5); lcd.write((byte)6);
break;
}
}
void loop() {
// Часы
// showDigit(1, 1);
// showDigit(6, 4);
showDigit(hours / 10, 0);
showDigit(hours % 10, 4); // Немного плотнее к краю
// Анимированные плюсики
if (colonVisible) {
lcd.setCursor(7, 0); lcd.print("* ");
lcd.setCursor(7, 1); lcd.print(" *");
} else {
lcd.setCursor(7, 0); lcd.print(" *");
lcd.setCursor(7, 1); lcd.print("* ");
}
// // Минуты
// showDigit(7, 9);
// showDigit(8, 12);
showDigit(minutes / 10, 9);
showDigit(minutes % 10, 13);
delay(1000);
colonVisible = !colonVisible;
minutes++;
if (minutes >= 60) { minutes = 0; hours++; }
if (hours >= 24) { hours = 0; }
}
У тебя получится!
