Изменил немного исходник этого титанического автора.
…но нет гармонии.
Это если нумератор этажа в лифте делать ![]()
Как нет?
Вот, пожалуйста:
Так нет, 4 и 7 не тумбятся.
Фломастеры
А так было бы достаточно.
Я понимаю, спортивный интерес и все такое, но, по-моему, это попытка впихнуть невпихуамое.
Ну не так оказывается всё грустно. Да не больше 8 знакомест своих, НО!, это же одновременно на дисплее. То-есть с теми же часами по классике 6 цифр через точки - можно напридумывать тем по стилю-размерам, забить данные в прогмем и просто их кнопкой перещёлкивать.
Взять LCD с русским шрифтом.
На китайцах, особенно на инверсных, достаточно неприятно(писал про шлейф).
Ну вот :), а в симуляторе хелло бодро бегает.
Не, тут другой принцип, не надо вшивать буквы. Буквы вообще не важны. Это графическая бегущая строка, она выводит как бы картинку, не важен алфавит и язык.
…не могу это кодом изобразить ![]()
Попробуйте вручную(на листке ручкой) написать ноль, шесть и девять.
Но, может это ИМХОшное, а не вдолбленное
Это то, что я вкладываю в понятие читабельность.
Страдальцы)
А я по принципу отбежал и смотришь, различаешь цифры - хорошо значит.
//макет часов LCD1602
#include <Wire.h>
#include "LiquidCrystal_I2C.h"
// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);
byte fragm_1[] = {
B11000,
B10100,
B10010,
B10010,
B10010,
B10010,
B10100,
B11000
};
byte fragm_2[] = {
B00011,
B00101,
B01001,
B01001,
B01001,
B01001,
B00101,
B00011
};
byte fragm_3[] = {
B01111,
B01001,
B01001,
B01001,
B01001,
B01001,
B01001,
B01111
};
byte fragm_4[] = {
B11111,
B10001,
B11111,
B00000,
B00000,
B00000,
B00000,
B11111
};
byte fragm_5[] = {
B11111,
B01101,
B00011,
B00000,
B00000,
B00000,
B00000,
B00000
};
byte fragm_6[] = {
B11111,
B00000,
B00000,
B00000,
B00000,
B11111,
B10001,
B11111
};
byte fragm_7[] = {
B00000,
B00000,
B00000,
B00000,
B00000,
B00011,
B01101,
B11111
};
byte fragm_8[] = {
B11000,
B10100,
B11100,
B01100,
B00100,
B00000,
B00000,
B00000
};
struct {
byte *bitmap;
}
fragm_1_8[]={fragm_1,fragm_2,
fragm_3,fragm_4,
fragm_5,fragm_6,
fragm_7,fragm_8,
};
byte perehodnik[]={1,4,0,1,6,0, //0
6,2,254,254,2,254,//1
4,3,0,2,5,6, //2
4,3,0,6,5,0, //3
1,6,2,254,254,2, //4
2,3,4,6,5,0, //5
1,3,7,1,5,0, //6
4,3,0,254,1,254, //7
1,3,0,1,5,0, //8
1,3,0,6,5,0 //9
};
int tschas=23;//
int minuta=50;//
int sekundi=0;//
///
void setup() {
lcd.init();
lcd.backlight();
for(byte i=0;i<8;i++){
lcd.createChar(i,fragm_1_8[i].bitmap );
}
//исходная отрисовка
zifra(1,0);zifra(3,3);
lcd.setCursor(6, 0);lcd.write(161);lcd.setCursor(6, 1);lcd.write(161);
zifra(5,7);zifra(9,10);
lcd.setCursor(13, 1);lcd.write(58);
lcd.setCursor(14, 1);lcd.write(4+48);
lcd.setCursor(15, 1);lcd.write(7+48);
}
void loop() {
sekundi++;
if(sekundi>=60||sekundi<0){sekundi=0;minuta++;}
if(minuta>=60||minuta<0){minuta=0;tschas++;}
if(tschas>=24||tschas<0){tschas=0;}
zifra(tschas/10,0);//
zifra(tschas%10,3);//
zifra(minuta/10,7);//
zifra(minuta%10,10);//
lcd.setCursor(14, 1);lcd.write(sekundi/10+48);
lcd.setCursor(15, 1);lcd.write(sekundi%10+48);
delay(1000);//подбор опытным путём
}
///////////////////////
void zifra(byte zif,byte poz){// функция вывода цифры по позиции
lcd.setCursor(poz, 0);
lcd.write(perehodnik[6*zif]);
lcd.setCursor(poz+1, 0);
lcd.write(perehodnik[6*zif+1]);
lcd.setCursor(poz+2, 0);
lcd.write(perehodnik[6*zif+2]);
lcd.setCursor(poz, 1);
lcd.write(perehodnik[6*zif+3]);
lcd.setCursor(poz+1, 1);
lcd.write(perehodnik[6*zif+4]);
lcd.setCursor(poz+2, 1);
lcd.write(perehodnik[6*zif+5]);
}
///////////////////////
А какое? Я вот такое нашёл, но не очень оно аналогично LCD 1602, ещё меньше в размере, а стоит дороже.
@lilik чисто эстетическая просьба - не дублируйте линий одновременно в двух знакоместах - вот как тут
Вообще конечно тема самописных символов весьма спорна с точки зрения читабельности - эстетики, но границ совершенства нет. Вот в журнале нашёл вариант кириллицы на семи сегментные индикаторы