Решил сделать небольшое описание функций библиотеки или моя попытка как-то написать документацию к библиотеке.
Описание функций графической библиотеки для LCD-экрана от Nokia 1100
void nlcd_Init(void);
Инициализация контроллера PCF8814, очистка экрана, инициализация библиотеки.
void nlcd_Clear(void);
Очистка экрана. Очищает экран (и видеобуфер) и устанавливает текущие координаты в нулевые координаты (левый верхний угол).
void nlcd_SendByte(char mode,unsigned char c);
Отправляет байт в контроллер PCF8814. Если передаются данные, то они также сохраняются в видеобуфере.
Параметры:
mode:
— CMD_LCD_MODE — передается команда контроллеру
— DATA_LCD_MODE — передаются данные
с: передаваемый байт
void nlcd_Putc(unsigned char c);
Выводит знак с кодом C в текущее место
void nlcd_Print(char * message);
Выводит строку символов из оперативной памяти, начиная с текущего знакоместа.
void nlcd_PrintF(unsigned char * message);
Выводит строку символов из программной памяти, начиная с текущего знакоместа.
void nlcd_GotoXY(char x,char y);
Устанавливает текущие координаты. Отсчет идет в знакоместах 5×8.
Параметры:
x: 0..15 — координата по оси X
y: 0..7 — координата по оси Y
void nlcd_Inverse(unsigned char mode);
Устанавливает режим инверсии для всего экрана.
Параметры:
mode:
— INV_MODE_ON — инверсия включена
— INV_MODE_OFF — инверсия выключена
void nlcd_Pixel (unsigned char x,unsigned char y, unsigned char pixel_mode);
Выводит пиксель в указанные координаты.
Параметры:
x: 0..95 — координата по оси X
y: 0..64 — координата по оси Y
Отсчет ведется от верхнего левого угла.
pixel_mode:
— PIXEL_ON — пиксель устанавливается
— PIXEL_OFF — пиксель сбрасывается (стирается)
— PIXEL_INV — пиксель инвертируется
void nlcd_Line (unsigned char x1,unsigned char y1, unsigned char x2,unsigned char y2, unsigned char pixel_mode);
Рисует линию. Линия рисуется из точки с координатами x1, y1 в точку с координатами x2,y2.
Параметры:
x1, x2: 0..95
y1,y2: 0..64
pixel_mode: такой же как и в функции nlcd_Pixel.
void nlcd_Circle(unsigned char x, unsigned char y, unsigned char radius, unsigned char fill, unsigned char pixel_mode);
Рисует закрашенную или нет окружность с координатами центра x, y и радиусом radius.
Параметры:
x: 0..95
y: 0..64
fill:
— FILL_ON — заливка выполняется
— FILL_OFF — заливка не выполняется
pixel_mode: такой же как и в функции nlcd_Pixel.
void nlcd_Rect (unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, unsigned char fill, unsigned char pixel_mode);
Рисует прямоугольник. Пары значений x1, y1 и x2, y2 задают координаты противоположных углов по диагонали. Прямоугольник может иметь заливку.
Параметры:
x1, x2: 0..95
y1, y2: 0..64
fill: такой же как и в функции nlcd_Circle
pixel_mode: такой же как и в функции nlcd_Pixel.
AVR GCC
Файлы графического варианта библиотеки (версия 2.1):
nokia1100_lcd_lib.h
nokia1100_lcd_lib.c
nokia1100_lcd_font.h
nlcd11100_graph_2.1.zip — эти же файлы в zip-архиве
nokia1100_lib_all_v2.zip — оба варианта библиотеки (текстовый и графический) в zip-архиве. Версии 1.1 и 2.1.
CodeVision AVR
Адаптация библиотеки для компилятора CodeVision AVR: ujin, за что ему громаднейшее спасибо!
nokia1100_lcd_lib.h
nokia1100_lcd_lib.c
nokia1100_lcd_fnt.h
nokia1100_lcd_lib_cvavr.zip — эти же файлы в zip-архиве
Еще одна адаптация первого варианта библиотеки для CodeVision от ujin
в папку INC кидаем хидеры
в папку lib помещаем файл с расширением lib.
незабываем, если не заработает в реале, файл либ открываем блокнотом и редактируем задержки..+ естесвенно в хидере nokia.h
производим настройку пинов порта под каторый используете лсд.
nokia_lcd_lib.h
nokia_lcd_fnt.h
nokia_lcd.lib
nokia_lcd_cvavr2.zip — эти же файлы в zip-архиве
Arduino
Библиотеку на платформу Ардуино портировал igorok107, за что ему громаднейшее спасибо!
PCF8814-master.zip — версия библиотеки с графическими функциями (аналог версий 2.x). Так же доступно на GitHub.
PCF8814_light-master.zip — версия библиотеки без графических функций (аналог версий 1.x). Так же доступно на GitHub.
Дополнительно
VSM-модели экранов Nokia для Proteus
symbol generate.zip — генератор символов шрифта для библиотеки
image_generate.zip — генератор картинок для библиотеки
Вливайтесь в обсуждение
  62 комментария
MadmaN
12 лет назадспасибо за столь хорошо описанную библиотеку!
Chiper
12 лет назадПожалуйста
demON
12 лет назадУважаемый автор, а для cvavr у Вас не завалялось библиотеки?
Chiper
12 лет назадК сожалению, у меня с CVAVR не сложилось… 🙁
Но я думаю эту либу можно переделать для CVAVR с минимальными изменениями.
demON
12 лет назадИ еще вопрос, с экраном Nokia 3310 работать будет?
Chiper
12 лет назадНет, с 3310 работать не будет. Там немного другой контроллер экрана и другая система команд.
Mixan
11 лет назадув. Chiper, выложите пожалуйста сюда рабочий для компиляции проект под среду AVRStudio (у меня версия 4.19), никак не получается скомпилировать свой проект…
Chiper
11 лет назадА в чем у вас возникает проблема?
Mixan
11 лет назадпоявляется единственная ошибка:
Interrupts/Exception caught (code = 0xc00000fd, addr = 0x4227d3)
и HEX файл не генерится..
Я взял ваши библиотеки и собрал из них проект с расширением APS, названия хедеров брал те же, в окне «AVR-GCC» файл nokia1100_lcd_lib.c создавал в Other Files, хедеры — в Header Files.
Как бы мне сюда выложить свой APS проект, может посмотрите почему не компилирует?
Chiper
11 лет назадШлите архив мне на почту. Попробую помочь.
Mixan
11 лет назадкакой ваш емаил-то?
Chiper
11 лет назадxsidmail [гаф-гаф] почтагугла.com
[задумчиво]… надо бы сделать возможность пользователям добавлять файлы на сайт…[/задумчиво]
Mixan
11 лет назадотослал, как всё получится вышлите мне проект тоже на емаил,
спасибо большое!
Chiper
11 лет назадВечером посмотрю. Где бы еще Студию 4.19 взять…
Chiper
11 лет назадТак и не получил письма. Может в спам улетело? У меня нигде его нет.
Chiper
11 лет назадВсе, нашел. Действительно в спам попало… Хз почему так гугл подумал…
Chiper
11 лет назадВы просто файл nokia1110_lcd_lib.c в проекте добавили не в ту секцию. Надо его добавлять в Source Files, а вы его добавили в Other Files.
Mixan
11 лет назадага, я ещё вчера так додумался сделать — всё заработало. 🙂
В протеусе по крайней мере работает норм..соберу на макетке, отпишусь, спасибо за помощь!
Chiper
11 лет назад🙂
Пиши, будем ждать
demON
11 лет назадChiper, скажите пожалуйста, можно ли инвертировать не весь экран, а строку?
Спасибо
Chiper
11 лет назадВ библиотеке в том виде котором она сейчас, нельзя (я думал про это, но потом отказался). Существует 2 решения:
— переписать процедуру вывода символа, введя, к примеру, дополнительный параметр, который будет задавать режим вывода, как в процедуре nlcd_Pixel
— не переделывать библиотеку, а там где нужна инверсия строки, сначало вывесли текст, а потом поверх нарисовать закрашенный прямоугольник с параметром pixel_mode — PIXEL_INV
Как поступить — решать вам. Результат будет одинаков.
demON
11 лет назадЕсли получится попробую добавить еще одну функцию вывода, а если нет-буду рисовать прямоугольники:)
Chiper
11 лет назадТа а че думать то… Процедура вывода символа может выглядеть примерно так:
Естественно, надо в остальной библиотеке поменять вызовы на этот вариант, с указанием pixel_mode.
demON
11 лет назадВылезает ошибка
Chiper
11 лет назадЗамени xor на символ ^.
demON
11 лет назад[code] In file included from test.c:6:
c:/winavr-20100110/lib/gcc/../../avr/include/avr/nokia1100_lcd_lib_graph.c: In function ‘nlcd_Putc’:
c:/winavr-20100110/lib/gcc/../../avr/include/avr/nokia1100_lcd_lib_graph.c:173: error: stray ‘$’ in program
c:/winavr-20100110/lib/gcc/../../avr/include/avr/nokia1100_lcd_lib_graph.c:173: error: ‘FF’ undeclared (first use in this function)
c:/winavr-20100110/lib/gcc/../../avr/include/avr/nokia1100_lcd_lib_graph.c:173: error: (Each undeclared identifier is reported only once
c:/winavr-20100110/lib/gcc/../../avr/include/avr/nokia1100_lcd_lib_graph.c:173: error: for each function it appears in.)[/code]
Chiper
11 лет назадеще $FF надо заменить на 0xFF. Блин, запарился с разными стандартами написания шестнадцатеричных чисел…
Александр
11 лет назадПодскажите совсем начинающему, как перейти на кодировку UTF8?
Работаю под Linux.
Или, если не трудно, сделайте соответствующую библиотеку.
Виталий
11 лет назадСкачал библиотеку для ардуино, подключил запустил пример, и , контраста мало, изображениу по оси Х отзеркалено, что я только не пробовал, никак. Подскожите как исправить. Спасибо.
Chiper
11 лет назадТо, что отзеркалено — смотри процедуру инициализации, в ней все дело. Там и задается режим работы.
Виталий
11 лет назадСпасибо разобрался. Еще хотел спросить, как свои символы выводить ? Если можно пример кода какого либо не стандартного символа.
Chiper
11 лет назадГенерируете символ с помощью программы http://digitalchip.ru/uploads/proj_files/nokia1100_v2/symbol%20generate.zip и выводите его. Посмотрите как выводится символ в файле nokia1100_lcd_lib.c, изображение которого берется из nokia1100_lcd_font.h. Процедура void nlcd_Putc(unsigned char c), а в ней цикл:
for ( unsigned char i = 0; i < 5; i++ ) nlcd_SendByte(DATA_LCD_MODE,pgm_read_byte(&(nlcd_Font[c-32][i])));
Виталий
11 лет назадНе совсем понял, в програмирование только вникаю, начал с ардуины. Сгенерировал 5 чисел в HEX, куда их вставить, и в стоке Lcd.Putc(unsigned char c); что такое С ? Запутался в 3 березах. А сайту форум нужен наверное, для таких как я со своими вопросами.
Chiper
11 лет назадЧто то типа примера:
//Гдето вне процедуры main()
const unsigned char mySym[5] PROGMEM ={0x022, 0x33, 0x44, 0x55, 0x66}; // Твои сгенерированные HEX
...
//Процедура вывода твоих сгенерированных символов
nlcd_GotoXY(1,1);
for ( unsigned char i = 0; i < 5; i++ ) nlcd_SendByte(DATA_LCD_MODE,pgm_read_byte(&(mySym[i])));
Как-то так...
Chiper
11 лет назадЯ думал уже об этом, но пока на сайте не такая уж большая активность, что б делать форум. А смысла в «мертвом» форуме нет. Хотя я о форуме уже задумывался…
Виталий
11 лет назадСделал вот так
#include <PCF8814.h>
PCF8814 Lcd(13,11,10,9); // LCD sets SPI SCLK: 7 pin, SDA: 8 pin, CS: 9 pin. RESET: 6 pin
const unsigned char mySym[5] PROGMEM ={0xFF, 0xF9, 0xF9, 0xFF, 0x3C};
char i;
void setup() {
Lcd.Init();
}
void loop() {
Lcd.Clear();
Lcd.GotoXY(1,1);
for ( unsigned char i = 0; i < 5; i++ );
Lcd.SendByte(DATA_LCD_MODE,pgm_read_byte(&(mySym[i])));
delay (2000);
}
выводит одну строку из символа, что не так ?
Но по идее можно же это все заменить срочкой
Lcd.Putc(unsigned char c);
только как не пойму.
Виталий
11 лет назадВсе, понял.
Виталий
11 лет назадЕще бы узнать как вывести содержимое переменной на дисплей , если там например трехзначное число ?
Chiper
11 лет назадНу… Тут уж каждый использует те методы, которые ему больше подходят. Кто-то использует библиотечные функции printf, sprintf, snprintf и fprintf, кто-то пишет свои функции. Все зависит от задачи и требований к ресурсам и скорости работы.
Вот пример функции преобразования целочисленного числа в строку:
BIG-VL
11 лет назадСкачал библиотеку для среды ардуино, так и не понял какие куда пины втыкать для Arduino Mega 2560 R3 кто говорит что пины переназначены кто говорит что их нужно переназначить. Мучаюсь третий день.
Дисплей от Nokia 1112, подскажите какие пины куда втыкать.
igorok107
10 лет назадПо умолчанию, библиотека работает на аппаратном SPI, соответственно и сигналы подключаются к линиям SPI. Можно в файле PCF8814.h включить софтовый режим, для этого необходимо раскомментировать строку: #define SOFT_SPI
Инициализация осуществляется строчкой: PCF8814 Lcd(13,11,10,6); в которой и задаются пины для подключения. // LCD sets SPI SCLK: 13 pin, SDA: 11 pin, CS: 10 pin. RESET: 9 pin
Ян
10 лет назадДень или вечер добрый. Достался мне тут дисплейчик от нокии 1280(он же 1202). Как я понял этот дисплейчик работает на контроллере STE2007. Ваша библиотека корректно будет работать с этим дисплеем или надо будет переделывать? Прошу прощения если вопрос покажется вам банальным.
DJ_URAN
10 лет назадТоварищи! Как впилить библиотеку без граф интерфейса в codevision?
сломал всю голову уже!
Vov
10 лет назадРаскомментировал #define FULL_CHARSET
на lcd nokia 1202 отображается две английские буквы вместо одной русской буквы.
в чем проблема?
nlcd_GotoXY(0,0);
nlcd_Print(«А»);
дисплей выводит PP
Vov
10 лет назадКракозябры вместо русских букв
http://forum.cxem.net/?showtopic=136229
ujin
9 лет назадDJ_URAN — с библиотекой есть примерчик как фтыкать эту библу а также описаны основные моменты чтоб заработало всё….
Vov- может проблема с русской кодировкой в среде в которой вы пишите программу?
ujin
9 лет назадздравствуйте опять же с разрешения ув тов чипера, могу выложить адаптированную графическую библиотеку под кодвижен,конечно же если всё это актуально.(сам на 100 не уверен но кодвижен всё компилирует без сообщений об ошибках.тестово проверил работу в проте — при прогоне программы текст выводился «зеркально» в функции инициализации экранчика есть закоменченые команды отзеркаливания по х и у, при раскоменте дисплейчик стал выводить техт как положено, добавлю это всё только в проте как на реальном экранчике пока нет возможности проверить.Если нада то приложу и примерчик для прота,так же о чем упоминал чипер,что библиотека требовательна к озу мк и компилиться будет не на все мк ,условно компилятор кодвижена сожрал и показал расход в 1374 байтов из них 780 это видеоозу для лцд.то есть на мегу8 проект компилируется с выводом ошибки о нехватки озу.
Серга
9 лет назадподкиньте пожалуйста текстовое меню
хочется устройство сделать с меню ,а времени и ума катострофически мало на меню.
Буду очень признателен!.
ujin
9 лет назадвидел на хабре статью с исходниками…название статьи «Реализация многоуровневого меню для Arduino с дисплеем»
Серый
8 лет назада где версия 1.1 (только текст) ?
Chiper
8 лет назадВнизу поста — http://digitalchip.ru/opisanie-funktsiy-graficheskoy-biblioteki-dlya-lcd-ekrana-ot-nokia-1100
В разделе скачать под спойлерами. Под разные компиляторы.
christian
8 лет назадрусский{
-хорошо, это я скачал 2.2 библиотеку графических функций и copilar и записать Arduino не показывает мне ничего, ни один из примеров не является книжный магазин за другой книжный магазин, чтобы Arduino записанные в моменты моменты Это показывает мне, какой пример должен был писать на экране, и помещается на работу с другой библиотекой; правда заключается в том, что я хочу использовать эту библиотеку функций очень хорошо сделаны, и хотелось бы, чтобы помочь мне в этой проблеме.
-Спасибо.
}
English{
-Good, it turns out that I downloaded the library 2.2 of the graphic functions and copying and recording in the arduino does not show me anything, none of the examples that the library has, after I record another library to the Arduino, for moments of instants me Shows what the examples had to write on the screen, and set to work with the other library; The truth is that I want to use this library its functions are very well done and I would love to help me in this inconvenience.
-Thank you.
}
Español Latino{
-buenas, resulta que he descargado la librería 2.2 la de las funciones gráficas y al copilar y grabar en el arduino no me muestra nada, ninguno de los ejemplos que tiene la librería, luego de que grabo otra librería al arduino, por momentos de instantes me muestra lo que los ejemplo tenia que escribir en la pantalla, y se coloca en marcha a trabajar con la otra librería; la verdad es que quiero usar esta librería sus funciones están muy bien hechas y me encantaría que me ayudaran en este inconveniente.
-gracias.
}
Cyberdemon
8 лет назадразобрался уже
Deniss
7 лет назадЭто не библиотека а недоделанное гамницо с которым не возможно работать. Ошибка на ошибке. Заибался их исправлять и в этоге нихера не добился.
govnocoder
7 лет назадоба варианта библиотеки (текстовая и графическая) работают, проверил лично. Проект в AVR студии компилируется без ошибок. Все функции библиотек не проверял, но в тех которыми пользовался ошибок не заметил.
Единственное, что при использовании функций вывода текста нужно делать явное приведение типов, чтоб компилятор не надоедал предупреждениями. Также переменные видеобуфера и координат почему-то были обьявлены в заголовочном файле, и как результат еще одно предупреждение компилятора. Однако работает и так.
СПАСИБО автору за труд.
govnocoder
7 лет назадне отходя от кассы сам себя поправлю насчет видеобуфера, потому что ступил: где же ему еще быть обьявленным как не в заголовочном файле, чтобы к нему был ручной доступ …. Я его в тексте программы ни разу не упомянул, не нужен мне он был пока что, вот компилятор и выдал предупреждение про обьявленную но не использованную переменную 🙂 Так что все ОК
Chiper
7 лет назад🙂
Chiper
7 лет назадСпасибо за поддержку.
Алексей
6 лет назадданная библиотека для Ардуино не первая ни вторая, к сожалению, не заработала на экране от нокии 1110i. Как ни старался.
Алескей
6 лет назадФух …. подключил все таки эту библиотеку к экрану 1110i только после того как за комментировал в библиотеке в разделе void PCF8814::Init(void) такие строки :
//SendByte(CMD_LCD_MODE,0xE2); // *** SOFTWARE RESET
./SendByte(CMD_LCD_MODE,0x3A); // *** Use internal oscillator
//SendByte(CMD_LCD_MODE,0xEF); // *** FRAME FREQUENCY:
//SendByte(CMD_LCD_MODE,0x04); // *** 80Hz
//SendByte(CMD_LCD_MODE,0xD0); // *** 1:65 divider
//SendByte(CMD_LCD_MODE,0xEB); // Включить температурную компенсацию
//SendByte(CMD_LCD_MODE,0x20); // Запись в регистр Vop
после этоого инициализация прошла успешно.
ЗЫ: не получается выводить переменные почему-то. Может кто подскажет?
int counter = 10;
Lcd.Print(counter);
выводит какие-то крякозябры весто «10»
Алескей
6 лет назадФух спустя месяц я подключил всетаки экран от nokia 1110i. Дисплей инициализировался только после того как закоментировал в библиотеке в разделе void PCF8814::Init(void) { вот такие строки
//SendByte(CMD_LCD_MODE,0xE2); // *** SOFTWARE RESET
//SendByte(CMD_LCD_MODE,0x3A); // *** Use internal oscillator
//SendByte(CMD_LCD_MODE,0xEF); // *** FRAME FREQUENCY:
//SendByte(CMD_LCD_MODE,0x04); // *** 80Hz
//SendByte(CMD_LCD_MODE,0xD0); // *** 1:65 divider
//SendByte(CMD_LCD_MODE,0xEB); // Включить температурную компенсацию
//SendByte(CMD_LCD_MODE,0x20); // Запись в регистр Vop
теперь не получается выводить переменные почему-то, может кто подскажет.
int counter = 10;
Lcd.GotoXY(10,6);
Lcd.Print(counter);
выводит кракозябры и все.
Chiper
6 лет назадДля экономии места в библиотеке нет функций для перевода значений переменных в текстовый вид. Lcd.Print выводит только строку символов.
Если вам надо выводить переменные, то добавьте в ваш проект соответствующие функции для перевода значений переменных в строку.
Вот, например функция для перевода целых (integer) в строку:
Использовать можно как-то так: