Описание функций графической библиотеки для LCD-экрана от Nokia 1100

Решил сделать небольшое описание функций библиотеки или моя попытка как-то написать документацию к библиотеке.

Описание функций графической библиотеки для 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

Readme от 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 комментария

Присоединиться к обсуждению

Отправляя комментарий, вы принимаете .

Мы ценим аргументированное и конструктивное общение. Пожалуйста, соблюдайте эти простые правила:

  • Уважение к другим. Общайтесь вежливо. Оскорбления, нецензурная лексика, угрозы и разжигание розни недопустимы.
  • Тематика. Пишите по теме статьи. Спам, реклама и ссылки на сторонние ресурсы без согласования будут удалены.
  • Законность. Запрещены призывы к нарушению законов РФ, обсуждение наркотических веществ и любые формы экстремизма.
  • Оформление. Не используйте Caps Lock (ЗАГЛАВНЫЕ БУКВЫ) для написания всего текста комментария.
  • Профиль. В качестве имени (никнейма) запрещено использовать ключевые слова, рекламу и адреса сайтов.

Все комментарии проходят проверку. При нарушении правил или рассылке спама аккаунт блокируется без права восстановления.

    • Chiper

      13 лет назад

      К сожалению, у меня с CVAVR не сложилось… 🙁
      Но я думаю эту либу можно переделать для CVAVR с минимальными изменениями.

    • Chiper

      13 лет назад

      Нет, с 3310 работать не будет. Там немного другой контроллер экрана и другая система команд.

  • Mixan

    13 лет назад

    ув. Chiper, выложите пожалуйста сюда рабочий для компиляции проект под среду AVRStudio (у меня версия 4.19), никак не получается скомпилировать свой проект…

      • Mixan

        13 лет назад

        появляется единственная ошибка:
        Interrupts/Exception caught (code = 0xc00000fd, addr = 0x4227d3)
        и HEX файл не генерится..
        Я взял ваши библиотеки и собрал из них проект с расширением APS, названия хедеров брал те же, в окне «AVR-GCC» файл nokia1100_lcd_lib.c создавал в Other Files, хедеры — в Header Files.
        Как бы мне сюда выложить свой APS проект, может посмотрите почему не компилирует?

            • Chiper

              13 лет назад

              xsidmail [гаф-гаф] почтагугла.com

              [задумчиво]… надо бы сделать возможность пользователям добавлять файлы на сайт…[/задумчиво]

              • Mixan

                13 лет назад

                отослал, как всё получится вышлите мне проект тоже на емаил,
                спасибо большое!

              • Chiper

                13 лет назад

                Вечером посмотрю. Где бы еще Студию 4.19 взять…

              • Chiper

                13 лет назад

                Так и не получил письма. Может в спам улетело? У меня нигде его нет.

              • Chiper

                13 лет назад

                Все, нашел. Действительно в спам попало… Хз почему так гугл подумал…

        • Chiper

          13 лет назад

          Вы просто файл nokia1110_lcd_lib.c в проекте добавили не в ту секцию. Надо его добавлять в Source Files, а вы его добавили в Other Files.

          • Mixan

            13 лет назад

            ага, я ещё вчера так додумался сделать — всё заработало. 🙂
            В протеусе по крайней мере работает норм..соберу на макетке, отпишусь, спасибо за помощь!

  • demON

    13 лет назад

    Chiper, скажите пожалуйста,  можно ли инвертировать не весь экран, а строку?
    Спасибо

    • Chiper

      13 лет назад

      В библиотеке в том виде котором она сейчас, нельзя (я думал про это, но потом отказался). Существует 2 решения:

      — переписать процедуру вывода символа, введя, к примеру, дополнительный параметр, который будет задавать режим вывода, как в процедуре nlcd_Pixel
      — не переделывать библиотеку, а там где нужна инверсия строки, сначало вывесли текст, а потом поверх нарисовать закрашенный прямоугольник с параметром pixel_modePIXEL_INV

      Как поступить — решать вам. Результат будет одинаков.

      • demON

        13 лет назад

        Если получится попробую добавить еще одну функцию вывода, а если нет-буду рисовать прямоугольники:)

        • Chiper

          13 лет назад

          Та а че думать то… Процедура вывода символа может выглядеть примерно так:

          //******************************************************************************
          // Вывод символа на LCD-экран NOKIA 1100 в текущее место
          //  c: код символа
          void nlcd_Putc(unsigned char c, unsigned char pixel_mode)
          {
          	unsigned char datas;
          	
          	if (c>127) c=c-64; 	// Переносим символы кирилицы в кодировке CP1251 в начало второй
          						// половины таблицы ASCII (начиная с кода 0x80)
          	
          	for ( unsigned char i = 0; i < 5; i++ )
          	{
          		datas = pgm_read_byte(&(nlcd_Font[c-32][i]));
          		switch(pixel_mode)
          		{
          			case PIXEL_INV:
          				datas=datas xor $FF;			// Инвертируем выводимый байт
          				break;
          		}
          		nlcd_SendByte(DATA_LCD_MODE,datas);
              }
          	nlcd_SendByte(DATA_LCD_MODE,0x00); // Зазор между символами по горизонтали в 1 пиксель
          }
          

          Естественно, надо в остальной библиотеке поменять вызовы на этот вариант, с указанием pixel_mode.

          • demON

            13 лет назад

            Вылезает ошибка

            
            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: expected ';' before 'xor'c:/winavr-20100110/lib/gcc/../../avr/include/avr/nokia1100_lcd_lib_graph.c:173: error: stray '$' in program
              • demON

                13 лет назад

                 [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

              13 лет назад

              еще $FF надо заменить на 0xFF. Блин, запарился с разными стандартами написания шестнадцатеричных чисел…

  • Александр

    13 лет назад

    Подскажите совсем начинающему, как перейти на кодировку UTF8?
    Работаю под Linux.
    Или, если не трудно, сделайте соответствующую библиотеку.

  • Виталий

    13 лет назад

    Скачал библиотеку для ардуино, подключил запустил пример, и , контраста мало, изображениу по оси Х отзеркалено, что я только не пробовал, никак. Подскожите как исправить. Спасибо.

    • Chiper

      13 лет назад

      То, что отзеркалено — смотри процедуру инициализации, в ней все дело. Там и задается режим работы.

  • Виталий

    13 лет назад

    Спасибо разобрался. Еще хотел спросить, как свои символы выводить ? Если можно пример кода какого либо не стандартного символа.

    • Chiper

      13 лет назад

      Генерируете символ с помощью программы https://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])));
      

      • Виталий

        13 лет назад

        Не совсем понял, в програмирование только вникаю, начал с ардуины. Сгенерировал 5 чисел в HEX, куда их вставить, и в стоке Lcd.Putc(unsigned char c); что такое С ? Запутался в 3 березах. А сайту форум нужен наверное, для таких как я со своими вопросами.

        • Chiper

          13 лет назад

          Что то типа примера:

          //Гдето вне процедуры 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

            13 лет назад

            А сайту форум нужен наверное, для таких как я со своими вопросами.

            Я думал уже об этом, но пока на сайте не такая уж большая активность, что б делать форум. А смысла в «мертвом» форуме нет. Хотя я о форуме уже задумывался…

          • Виталий

            13 лет назад

            Сделал вот так

            #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); только как не пойму.

  • Виталий

    13 лет назад

    Еще бы узнать как вывести содержимое переменной на дисплей , если там например трехзначное число ?

    • Chiper

      13 лет назад

      Ну… Тут уж каждый использует те методы, которые ему больше подходят. Кто-то использует библиотечные функции printf, sprintf, snprintf и fprintf, кто-то пишет свои функции. Все зависит от задачи и требований к ресурсам и скорости работы.

      Вот пример функции преобразования целочисленного числа в строку:

      char* itoa(int value, char* result, int base)
      {
          // check that the base if valid
          if (base < 2 || base > 36) { *result = '\0'; return result; }
         
          char* ptr = result, *ptr1 = result, tmp_char;
          int tmp_value;
         
          do{
              tmp_value = value;
              value /= base;
              *ptr++ = "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz" [35 + (tmp_value - value * base)];
          } while ( value );
         
          // Apply negative sign
          if (tmp_value < 0) *ptr++ = '-';
          *ptr-- = '\0';
          while(ptr1 < ptr){
              tmp_char = *ptr;
              *ptr--= *ptr1;
              *ptr1++ = tmp_char;
          }
          return result;
      }
  • BIG-VL

    12 лет назад

    Скачал библиотеку для среды ардуино, так и не понял какие куда пины втыкать для Arduino Mega 2560 R3 кто говорит что пины переназначены кто говорит что их нужно переназначить. Мучаюсь третий день.
    Дисплей от Nokia 1112, подскажите какие пины куда втыкать.

    • igorok107

      12 лет назад

      По умолчанию, библиотека работает на аппаратном 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

  • Ян

    12 лет назад

    День или вечер добрый. Достался мне тут дисплейчик от нокии 1280(он же 1202). Как я понял этот дисплейчик работает на контроллере STE2007. Ваша библиотека корректно будет работать с этим дисплеем или надо будет переделывать? Прошу прощения если вопрос покажется вам банальным.

  • DJ_URAN

    12 лет назад

    Товарищи! Как впилить библиотеку без граф интерфейса в codevision?
    сломал всю голову уже!

  • Vov

    11 лет назад

    Раскомментировал #define FULL_CHARSET
    на lcd nokia 1202 отображается две английские буквы вместо одной русской буквы.
    в чем проблема?
    nlcd_GotoXY(0,0);
    nlcd_Print(«А»);
    дисплей выводит PP

  • ujin

    11 лет назад

    DJ_URAN — с библиотекой есть примерчик как фтыкать эту библу а также описаны основные моменты чтоб заработало всё….
    Vov- может проблема с русской кодировкой в среде в которой вы пишите программу?

  • ujin

    11 лет назад

    здравствуйте опять же с разрешения ув тов чипера, могу выложить адаптированную графическую библиотеку под кодвижен,конечно же если всё это актуально.(сам на 100 не уверен но кодвижен всё компилирует без сообщений об ошибках.тестово проверил работу в проте — при прогоне программы текст выводился «зеркально» в функции инициализации экранчика есть закоменченые команды отзеркаливания по х и у, при раскоменте дисплейчик стал выводить техт как положено, добавлю это всё только в проте как на реальном экранчике пока нет возможности проверить.Если нада то приложу и примерчик для прота,так же о чем упоминал чипер,что библиотека требовательна к озу мк и компилиться будет не на все мк ,условно компилятор кодвижена сожрал и показал расход в 1374 байтов из них 780 это видеоозу для лцд.то есть на мегу8 проект компилируется с выводом ошибки о нехватки озу.

  • Серга

    11 лет назад

    подкиньте пожалуйста текстовое меню
    хочется устройство сделать с меню ,а времени и ума катострофически мало на меню.
    Буду очень признателен!.

    • ujin

      11 лет назад

      видел на хабре статью с исходниками…название статьи «Реализация многоуровневого меню для Arduino с дисплеем»

  • christian

    10 лет назад

    русский{
    -хорошо, это я скачал 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.
    }

  • Deniss

    9 лет назад

    Это не библиотека а недоделанное гамницо с которым не возможно работать. Ошибка на ошибке. Заибался их исправлять и в этоге нихера не добился.

    • govnocoder

      9 лет назад

      оба варианта библиотеки (текстовая и графическая) работают, проверил лично. Проект в AVR студии компилируется без ошибок. Все функции библиотек не проверял, но в тех которыми пользовался ошибок не заметил.
      Единственное, что при использовании функций вывода текста нужно делать явное приведение типов, чтоб компилятор не надоедал предупреждениями. Также переменные видеобуфера и координат почему-то были обьявлены в заголовочном файле, и как результат еще одно предупреждение компилятора. Однако работает и так.
      СПАСИБО автору за труд.

      • govnocoder

        9 лет назад

        не отходя от кассы сам себя поправлю насчет видеобуфера, потому что ступил: где же ему еще быть обьявленным как не в заголовочном файле, чтобы к нему был ручной доступ …. Я его в тексте программы ни разу не упомянул, не нужен мне он был пока что, вот компилятор и выдал предупреждение про обьявленную но не использованную переменную 🙂 Так что все ОК

  • Алексей

    8 лет назад

    данная библиотека для Ардуино не первая ни вторая, к сожалению, не заработала на экране от нокии 1110i. Как ни старался.

  • Алескей

    8 лет назад

    Фух …. подключил все таки эту библиотеку к экрану 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»

  • Алескей

    8 лет назад

    Фух спустя месяц я подключил всетаки экран от 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

      8 лет назад

      Для экономии места в библиотеке нет функций для перевода значений переменных в текстовый вид. Lcd.Print выводит только строку символов.
      Если вам надо выводить переменные, то добавьте в ваш проект соответствующие функции для перевода значений переменных в строку.

      Вот, например функция для перевода целых (integer) в строку:

      char* itoa(int value, char* result, int base)
      {
      	// check that the base if valid
      	if (base < 2 || base > 36) { *result = '\0'; return result; }
       
      	char* ptr = result, *ptr1 = result, tmp_char;
      	int tmp_value;
       
      	do{
      		tmp_value = value;
      		value /= base;
      		*ptr++ = "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz" [35 + (tmp_value - value * base)];
      	} while ( value );
       
      	// Apply negative sign
      	if (tmp_value < 0) *ptr++ = '-';
      	*ptr-- = '\0';
      	while(ptr1 < ptr){
      		tmp_char = *ptr;
      		*ptr--= *ptr1;
      		*ptr1++ = tmp_char;
      	}
      	return result;
      }

      Использовать можно как-то так:

      int a = 57;
      char* result;
       
      result = itoa(a, result, 10)
       
      Lcd.GotoXY(10,6);
      Lcd.Print(result);