Вопрос по русским буква для моно-дисплея
- Войдите на сайт для отправки комментариев
Пт, 25/12/2015 - 13:40
Добрый день!
Подскажите, пожалуйста, еще один момент по программированию
Так как на моно-дисплей можно выводить русские буквы только кодированием (как я понял), попытался написать небольшой код с переключением (кнопкой) двух простых слов.
Одно слово выводится нормально, а второе - не получается... Вместо второго слова выходит какая-то абракадабра, состоящая из букв предыдущего слова...
Вот сам код:
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
bool x;
byte p[8] = {
B11111,
B10001,
B10001,
B10001,
B10001,
B10001,
B10001,
B10001,
};
byte r[8] = {
B11111,
B10001,
B11111,
B10000,
B10000,
B10000,
B10000,
B10000,
};
byte i[8] = {
B10001,
B10001,
B10011,
B10101,
B11001,
B10001,
B10001,
B10001,
};
byte v[8] = {
B11110,
B10001,
B10001,
B11110,
B10001,
B10001,
B10001,
B11110,
};
byte e[8] = {
B11111,
B10000,
B10000,
B11111,
B10000,
B10000,
B10000,
B11111,
};
byte t[8] = {
B11111,
B00100,
B00100,
B00100,
B00100,
B00100,
B00100,
B00100,
};
byte ij[8] = {
B10001,
B10001,
B10001,
B10001,
B11101,
B10101,
B10101,
B11101,
};
byte j[8] = {
B10101,
B10001,
B10011,
B10101,
B11001,
B10001,
B10001,
B10001,
};
byte ju[8] = {
B10111,
B10101,
B10101,
B11101,
B10101,
B10101,
B10101,
B10111,
};
byte sh[8]= {
B10101,
B10101,
B10101,
B10101,
B10101,
B10101,
B10101,
B11111,
};
byte c[8]= {
B01110,
B10001,
B10000,
B10000,
B10000,
B10000,
B10001,
B01110,
};
byte k[8]= {
B10001,
B10010,
B10100,
B11000,
B11000,
B10100,
B10010,
B10001,
};
byte a[8]= {
B00100,
B01010,
B10001,
B10001,
B11111,
B10001,
B10001,
B10001,
};
int P=0;
int R=1;
int I=2;
int V=3;
int E=4;
int T=5;
int IJ=6;
int J=7;
int JU=8;
int SH=9;
int C=10;
int K=11;
int A=12;
void setup() {
lcd.begin(16, 2);
lcd.createChar(0,p);
lcd.createChar(1,r);
lcd.createChar(2,i);
lcd.createChar(3,v);
lcd.createChar(4,e);
lcd.createChar(5,t);
lcd.createChar(6,ij);
lcd.createChar(7,j);
lcd.createChar(8,ju);
lcd.createChar(9,sh);
lcd.createChar(10,c);
lcd.createChar(11,k);
lcd.createChar(12,a);
pinMode(7, INPUT);
pinMode(8, INPUT);
}
void loop() {
if (digitalRead (7)==HIGH)
{
x=true;
}
if (digitalRead (8)==HIGH)
{
x=false;
}
if (x==true)
{
lcd.setCursor(0, 0);
lcd.clear();
lcd.write(K);
lcd.write(C);
lcd.write(JU);
lcd.write(SH);
lcd.write(A);
}
else
{
lcd.setCursor(0, 0);
lcd.clear();
lcd.write(P);
lcd.write(R);
lcd.write(I);
lcd.write(V);
lcd.write(E);
lcd.write(T);
//lcd.print(" ");
//delay(1000);
}
delay(1000);
}
8-мь заказных символов возможно записать в индикатор
8 всего???
А какой тогда лучше использовать недорогой дисплей, чтоб русские символы были?
8 всего???
А какой тогда лучше использовать недорогой дисплей, чтоб русские символы были?
в дисплеях типа 1602 зашиты два шрифта, обычно латиница и любой другой на выбор заказчика-покупателя
т.е. купить дисплей с кириллицей.
попробуй печать "Привет мир" - внезапно, ты везучий.
забыл: библиотеку дисплея, поддерживающую кириллицу нужно пользовать.
или купи российский дисплей МЭЛТ - он с кириллицей, правда дорогой
Да я уже посмотрел у них, честно говоря, жаба немного душит 540 рублей отдать, когда на алиэкспрессе они по 100-150 рублей продаются. В общем, я приноровился, смешиваю доступные 8 символов с английскими буквами, вроде пока получается))
Спасибо за помощь, ребята! Выручаете прям очень!)
Kruppa, а что мешает перепрограммировать цифры по мере надобности? Так можно и весь алфавит выводить:)
А это как?)) Прям в теле функции Loop? Разве так можно/получится?))
Kruppa, ну я пока предположил, может и не получиться. Пробовать нужно..
Kruppa, ну я пока предположил, может и не получиться. Пробовать нужно..
была у меня библиотека-приблуда к LiquidCrystal псевдо графику рисующая по координатам - но, ограничение у неё было квадрат 4Х4 символа т.е. 8-мь
думаю, не взлетит больше 8-ми никак
Клапауций 321, одновременно больше 8 наверное да, никак. Но поочереди то можно. В общем при необходимости выкрутится можно) Счас попробую, дисплей под рукой..
Клапауций 321, одновременно больше 8 наверное да, никак. Но поочереди то можно. В общем при необходимости выкрутится можно) Счас попробую, дисплей под рукой..
я тоже так думал, но зачем та библиотека, если можно дисплей в графический пару строками превратить?
попробуй - я завтра подтянусь к дисплею
нашёл потеряшку - нафига я её удалял?
https://bitbucket.org/teckel12/arduino-lcd-bitmap/wiki/Home
Kruppa, в общем по-очереди можно выводить буфер из 8 знаков, вот пример на основе вашего массива букв.
#include <LiquidCrystal.h> LiquidCrystal lcd(12, 11, 5, 4, 3, 2); byte p[8] = { B11111, B10001, B10001, B10001, B10001, B10001, B10001, B10001, }; byte r[8] = { B11111, B10001, B11111, B10000, B10000, B10000, B10000, B10000, }; byte i[8] = { B10001, B10001, B10011, B10101, B11001, B10001, B10001, B10001, }; byte v[8] = { B11110, B10001, B10001, B11110, B10001, B10001, B10001, B11110, }; byte e[8] = { B11111, B10000, B10000, B11111, B10000, B10000, B10000, B11111, }; byte t[8] = { B11111, B00100, B00100, B00100, B00100, B00100, B00100, B00100, }; byte ij[8] = { B10001, B10001, B10001, B10001, B11101, B10101, B10101, B11101, }; byte j[8] = { B10101, B10001, B10011, B10101, B11001, B10001, B10001, B10001, }; byte ju[8] = { B10111, B10101, B10101, B11101, B10101, B10101, B10101, B10111, }; byte sh[8]= { B10101, B10101, B10101, B10101, B10101, B10101, B10101, B11111, }; byte c[8]= { B01110, B10001, B10000, B10000, B10000, B10000, B10001, B01110, }; byte k[8]= { B10001, B10010, B10100, B11000, B11000, B10100, B10010, B10001, }; byte a[8]= { B00100, B01010, B10001, B10001, B11111, B10001, B10001, B10001, }; void setup() { lcd.begin(16, 2); } void loop() { lcd.setCursor(0, 0); lcd.createChar(0,p); lcd.createChar(1,r); lcd.createChar(2,i); lcd.createChar(3,v); lcd.createChar(4,e); lcd.createChar(5,t); lcd.begin(16, 2); lcd.write(byte(0)); lcd.write(1); lcd.write(2); lcd.write(3); lcd.write(4); lcd.write(5); delay(2000); lcd.setCursor(0, 0); lcd.createChar(0,ij); lcd.createChar(1,j); lcd.createChar(2,ju); lcd.createChar(3,sh); lcd.createChar(4,k); lcd.createChar(5,a); lcd.begin(16, 2); lcd.write(byte(0)); lcd.write(1); lcd.write(2); lcd.write(3); lcd.write(4); lcd.write(5); delay(2000); }Из особенностей -нужно инитить дисплей после создания символов, иначе они не попадают в память дисплея
Ого, спасибо!
Сейчас буду разбираться!!
Спасибо еще раз!)
Вместо русских букв можно использовать английские буквы, сходные по написанию. Например: в слове BTOPHИK нужно добавить лишь одну букву И, а CPEDA пишется полностью из английских букв.
А можно слово "ВТОРНИК" вместо "и" поставить английскую "u". Получиться "BTopHuk". Всё английскими.