Валера Гончаренко продолжает работать над библиотекой вывода на lcd-экран Nokia 6610. Библиотека постепенно обновляется. Сейчас добавлены функции вывод текста и шрифт 8х8 пикселей. Скачать библиотеку, исходники демо-проекта, использующего эту библиотеку, а так же откомпилированную прошивку можно ниже.
На видео можно посмотреть, как работает вывод на экран, при использовании этой библиотеки:
Немного фотографий процесса:
Так можно реализовать прогресс-бар (в библиотеке этого нет, это сделано в демо-проекте).
Вывод текста разными цветами
Скачать файлы к статье
Вливайтесь в обсуждение
  34 комментария
Dimon
12 лет назадПривет,
я пытаюсь отсимулировать это дело в протеусе, выходит фигня со цветом
симулирую две модели одновременно
http://imageshost.ru/photo/67096/id2142367.html
http://imageshost.ru/photo/73837/id2142366.html
http://imageshost.ru/photo/65682/id2142365.html
тут фотки
Chiper
12 лет назадЭто вопрос к Валере. Валера, в чем может быть проблема?
-Валера-
12 лет назадПриветствую, в Протеусе не проверял- все сразу в железе. Сейчас попробую…
-Валера-
12 лет назадЗначит так. Попробую пролить немного света: в протеусе у меня также криво выводятся цвета, но текст корректен — не так как на скриншоте. При написании библиотеки — сильно не раскуривал этот вопрос, подал команду MADCTL и один байт данных 0х03 — все, включен режим 12 -бит,все работает. Первое что пришло на ум при некорректном выводе цвета (далее по тексту- проверки только в железе ) — модель для протеуса «собрана» с цветопередачей по умолчанию 8-бит. Я проштудировал даташит, по рекомендациям из него подал команду RGBSET и за ней 20 байтов таблицы цветов (это вкл. режим — 8 бит ), далее пляски с бубном -результат ноль. Собственно вывод текста и графики присутствует, но цветопередача не соответствует действительности. Затем я вспомнил, что где-то говорилось о том, что производители LCD ( зачастую NO NAME ) умышленно не вкл. в контроллерах LCD при их программировании некоторые команды. Аргумент таков — а зачем ? Если данный режим не будет использоваться. Так что, вполне вероятно ( к чему я склоняюсь) мой образец LCD НЕ оригинальный, и команда цветопередачи 8 бит- в нем не включена.
-Валера-
12 лет назадВо втором предложении- имел ввиду, что в протеусе кракозяблы, а на живом LCD- корректный текст с некорректной цветопередачей.
-Валера-
12 лет назадУ меня возник вопрос- может стоит добавить в библиотеку вывод текста БОльшим форматом ? Например 24х16 пикселей, или… Собственно, интересно мнение о востребованности текста большим форматом, если — да, то каким именно. А также интересует тип шрифта-ведь при большей величине будет наиболее заметно качество его прорисовки.
Chiper
12 лет назадИМХО, весть текст выводить большим шрифтом смысла нет. Цифры — да, текст — ни к чему.
-Валера-
12 лет назадПонятно, попробую чего-нибудь с цифрами сделать. Какой размер цифр сделать ?
Chiper
12 лет назадНу хз, попробуй 24х16. Может 24х10. Подбирай экспериментально, чтоб симпатично было.
Виталий
8 лет назадВалера, скажите, пожалуйста, что-нибудь получилось с большим цифрами?
Если да, то где можно посмотреть библиотеку?
П.С. У самого, к сожалению, не хватает знаний и моя стрельба наугад результата не дает…
Валерий
8 лет назадКонечно же- всё получилось! )
Давным давно ))Случайно оказался около компьютера- и вы написали. Что именно нужно? Функция вывода больших цифр? Или проблема в другом?
Валерий
8 лет назадЕсли у вас «запал» не пропал- напишите мне на почту в чём проблема ( gonch восьмёрка, дальше — собака и маилру ), постараюсь помочь!)
Виталий
8 лет назадДа, именно вывод цифр размером больше чем 8х8 точек.
Подробнее напишу на электронку. Спосибо, не ожидал ответ так быстро 🙂
Валерий
8 лет назад🙂
Никита
12 лет назадСделал всё как у Вас в iarе. Но не получилось с выводом текста. По первых он не берёт массив символов. Во вторых он не хочет работать вот с этой функцией. Как можно ешё вывести текст?
Я всё заключил в один лист main.c Чтоб не использовать отдельные библиотеки
void nlcd_Char(char c, unsigned char x, unsigned char y, int fColor, int bColor)
{
int i;
int j;
unsigned char nCols;
unsigned char nRows;
unsigned char nBytes;
unsigned char PixelRow;
unsigned char Mask;
unsigned int Word0;
unsigned char *pFont, *pChar;
pFont = (unsigned char *)Nokia6610_fnt8x8;
nCols = pgm_read_byte(pFont);
nRows = pgm_read_byte(pFont + 1);
nBytes = pgm_read_byte(pFont + 2);
pChar = pFont + (nBytes * (c — 0x1F));
for (i = 0; i<nRows; i++)
{
PixelRow = pgm_read_byte(pChar++);
Mask = 0x80;
for (j = 0; j < nCols; j += 1)
{
if ((PixelRow & Mask) == 0)
Word0 = bColor;
else
Word0 = fColor;
nlcd_Pixel( y+j,x+i, Word0);
Mask = Mask >> 1;
}
}
nlcd_SendByte(CMD_LCD_MODE,NOP);
}
Chiper
12 лет назадХз. Я с ИАРом не работаю. Почему то не сложилось… 🙁 Поэтому что-либо конкретное сказать не могу.
Михаил
12 лет назадhttp://s6.hostingkartinok.com/uploads/images/2013/03/f8e2b00d220835f5cb75dcae3c3d852f.jpg
Михаил
12 лет назадСпасибо за вашу статью и библиотеки! у меня проблема. текст выводится справа налево, как бы зеркально. вот тут фото http://s6.hostingkartinok.com/uploads/images/2013/03/f8e2b00d220835f5cb75dcae3c3d852f.jpg
помогите разобраться в чем дело.
также почему-то не горит подсветка
nikityan
12 лет назадУ тебя инверсии включены. (Всё наоборот). Посмотри команды и выключи инверсию. Также есть команды задаюшие начало и конец рисования пикселей.
Михаил
12 лет назадСпасибо, попробую
Chiper
12 лет назадДа, похоже на включенную инверсию.
А по поводу подсветки — смотри внимательно контакты — в них все дело.
Валера
12 лет назадПриветствую, проблему с выводом текста — решили? Я так понимаю при заливке демо-прошивки, неккоректно отображается текст? В чем собсно, вопросы? Инициализацию дисплея -(что-либо) меняли? Вроде бы все прокомментировал довольно подробно..)
Михаил
12 лет назадНеа, не получилось его одолеть. Текст отображается зеркально. Скачал дэмо прошивку и залил в мк, ничего в ней не меняя. за выключенную инверсию отвечает это «#define LCD_PHILLIPS_INVOFF»?
-Валера-
12 лет назадСейчас посмотрю…
-Валера-
12 лет назад«#define LCD_PHILLIPS_INVOFF — инвертирует цвет, блин, уже подзабыл все)) В Winavr- уже не работаю, юзаю студию, отсюда сложности..
Достал дисплей, установил Winavr- в общем за отображение отвечает команда nlcd_SendByte(CMD_LCD_MODE,MADCTL); для которой необходимо задать параметр 1 байт- в библиотеке ясно же прокомментировал- Внимательно курим даташит на стр. 43 !)
Не знаю, что за компилятор у вас- я изменил инициализацию- теперь мой дисплей отображает данные один в один как у вас на картинке)) Не могу здесь обновленную демо-прошивку выложить..
-Валера-
12 лет назадПосле команды MADCTL отправил данные 0х00 и дисплей стал отображать информацию как у вас на фото..
Михаил
12 лет назадОгромное спасибо! отправил 0x76 после MADCTL и все заработало как надо!
-Валера-
12 лет назадВот и отлично), только думаю что все же вы методом научного тыка данные отправили- младшие три байта не значащие поэтому, будет правильнее 0х70
-Валера-
12 лет назадСорри, младшие три — бита!
Chiper
12 лет назадВалера, без проблем, шли на мой-адрес, ты же знаешь его, я выложу.
Chiper
12 лет назадВсе, выложил поправленную прошивку от Валеры. Можно качать.
Михаил
12 лет назадПривет еще раз! Слушайте, а бороться с бледной подсветкой не подскажете?
halil
9 лет назадproject isis files ?
-Валера-
9 лет назадHello , isis project is not used , did immediately with a live display . If desired, you can download the network display model , only need to be borne in mind that the pixel output function — will have perepisat- otherwise displayed incorrectly in isis . Sorry for my English. ))