Graph. LCD lib пишу [fixed]

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Graph. LCD lib пишу [fixed]

Сообщение Vooon » 14 дек 2007, 11:17

пишу собственную библу для работы с MT-12232

вобщем-то большую часть передрал с других библиотек,
сложности возникли со своими: lcd::bitmap();
никак не пойму почему так происходит:


чтоб не качать все исходники привожу куски кода.

Код: Выделить всё
namespace bitmaps
{
   /* 6x8
    * [*   **]
    * [*  * *]
    * [* *  *]
    * [**   *]
    * [**   *]
    * [* *  *]
    * [*  * *]
    * [*   **]
    */
   uint8_t PROGMEM c1_bmp__data[] = {
      0xff, 0x18, 0x24, 0x42, 0x81, 0xff
   };
   bitmap_pt c1_bmp = {6, 8, c1_bmp__data};
   
   /* 6x16
    * [*   **]
    * [*  * *]
    * [* *  *]
    * [**   *]
    * [**   *]
    * [* *  *]
    * [*  * *]
    * [*   **]
    * [**   *]
    * [* *  *]
    * [*  * *]
    * [*   **]
    * [*   **]
    * [*  * *]
    * [* *  *]
    * [**   *]
    */
   uint8_t PROGMEM c2_bmp__data[] = {
      0xff, 0x18, 0x24, 0x42, 0x81, 0xff,
      0xff, 0x81, 0x42, 0x24, 0x18, 0xff
   };
   bitmap_pt c2_bmp = {6, 16, c2_bmp__data};
}

lcd glcd;

int main(void)
{
   glcd.bitmap(0,   0,   &bitmaps::c2_bmp);
   glcd.bitmap(6,   1,   &bitmaps::c2_bmp);
   glcd.bitmap(12,   2,   &bitmaps::c2_bmp);
   glcd.bitmap(18,   3,   &bitmaps::c2_bmp);
   glcd.bitmap(24,   4,   &bitmaps::c2_bmp);
   glcd.bitmap(30,   5,   &bitmaps::c2_bmp);
   glcd.bitmap(36,   6,   &bitmaps::c2_bmp);
   glcd.bitmap(42,   7,   &bitmaps::c2_bmp);
   glcd.bitmap(48,   8,   &bitmaps::c2_bmp);
   glcd.bitmap(54,   9,   &bitmaps::c2_bmp);
   glcd.bitmap(60,   10,   &bitmaps::c2_bmp);
   glcd.bitmap(66,   11,   &bitmaps::c2_bmp);
   glcd.bitmap(72,   12,   &bitmaps::c2_bmp);
   glcd.bitmap(78,   13,   &bitmaps::c2_bmp);
   glcd.bitmap(84,   14,   &bitmaps::c2_bmp);
   glcd.bitmap(90,   15,   &bitmaps::c2_bmp);
   glcd.bitmap(96,   16,   &bitmaps::c2_bmp);
   glcd.update();

   while(1)
      wdt_reset();
   return 0;
};


Код: Выделить всё
void lcd::bitmap(uint8_t left, uint8_t top, bitmap_t *bmp, operation_t op)
{
   uint8_t *dat, *p1, *p2;
   uint8_t x, y;
   uint8_t tt;
   uint16_t t1, t2;
   
   tt = top % 8;
   dat = bmp->data;
   
   for(y=(top>>3); y <= ((top+bmp->heigth-1)>>3); y++)
      for(x=left; x <= (left+bmp->width-1); x++)
      {
         t1 = pgm_read_byte(dat++);
         t2 = 0xff;
         switch(op)
         {
            case OP_NORMALL:
               break;
            case OP_INV:
               t1 = 0xff & ~t1;
               break;
            case OP_SET:
            case OP_OR:
            case OP_CLEAR:
            case OP_AND:
            case OP_XOR:
               break;
         }
         if(tt)
         {
            t1 <<= tt;
            t2 <<= tt;
            t2 = ~t2;
            p1 = (uint8_t*) &t1;
            p2 = (uint8_t*) &t2;
            rmw(x, y,   *p1,      *p2);
            rmw(x, y+1,   *(p1+1),   *(p2+1));
         }
         else
         {
            rmw(x, y, (uint8_t)t1, 0x00);
         }
      }
}


Код: Выделить всё
      /**
       * Изменить набор пикселей ( \a x ; \a 0+8*y ) -> ( \a x ; \a 7+8*y )
       * \f[ w = (r \and clear_mask) \or mask \f]
       * \param x
       * \param y range(4) -> (0, 1, 2, 3)
       * \param mask
       * \param clear_mask
       * \return pixels state
       */
      uint8_t rmw(uint8_t x, uint8_t y, uint8_t mask, uint8_t clear_mask);
Linux user | Firefox user
Аватара пользователя
Vooon
Site Admin
 
Сообщения: 3339
Зарегистрирован: 09 фев 2006, 15:36
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков

Re: GLCD lib пишу

Сообщение Master » 16 дек 2007, 20:20

А что должно получиться?
Аватара пользователя
Master
 
Сообщения: 4468
Зарегистрирован: 21 дек 2006, 19:56
Откуда: Украина, г.Одесса
прог. языки: Delphi и С

Re: GLCD lib пишу

Сообщение Myp » 18 дек 2007, 16:48

наверно должно получится библиотека для рисования всякой графики на графическом дисплее =)
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Re: GLCD lib пишу

Сообщение Сергей » 22 дек 2007, 17:50

Могу я узнать почему название библиотеки GLCD? Просто както странно совпадает с названиями моих библиотек начинающихся на G.
Сергей
 
Сообщения: 3744
Зарегистрирован: 29 дек 2004, 23:15
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей

Re: GLCD lib пишу

Сообщение Виталий » 22 дек 2007, 17:55

Да, да.. и Google тоже на G =)
Все новости о моих проектах http://savethebest.ru
Аватара пользователя
Виталий
 
Сообщения: 2114
Зарегистрирован: 08 окт 2004, 16:43
Откуда: St. Petersburg
Skype: quark-bot
ФИО: Клебан Виталий

Re: GLCD lib пишу

Сообщение Vooon » 22 дек 2007, 18:38

от сокращения Graphical LCD т.к. библа для графических дисплеев, чего тут странного?
также как и библа для работы с USART'ом у меня называется USART и дает два неймспейса usart0 и usart1

Добавлено спустя 5 минут 27 секунд:
а вобще ближе к теме плиз.
редакция пока таже, у меня сейчас работы полно, некогда...
Linux user | Firefox user
Аватара пользователя
Vooon
Site Admin
 
Сообщения: 3339
Зарегистрирован: 09 фев 2006, 15:36
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков

Re: GLCD lib пишу

Сообщение Сергей » 22 дек 2007, 18:44

Виталий писал(а):Да, да.. и Google тоже на G =)
+1
Нужно зараннее расшифровывать)
Сергей
 
Сообщения: 3744
Зарегистрирован: 29 дек 2004, 23:15
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей

Re: Graph. LCD lib пишу [fixed]

Сообщение Vooon » 24 дек 2007, 01:56

немного переписал копию под ПК GCC(G++)
добавил debug_driver и начал колдовать...
получилось и упростить и главное заставить работать правильно.

Код: Выделить всё
Display:
{
#...##....................................................................................................................
#..#.##...##..............................................................................................................
#.#..##..#.##...##........................................................................................................
##...##.#..##..#.##...##..................................................................................................
##...###...##.#..##..#.##...##............................................................................................
#.#..###...###...##.#..##..#.##...##......................................................................................
#..#.##.#..###...###...##.#..##..#.##...##................................................................................
#...###..#.##.#..###...###...##.#..##..#.##...##..........................................................................
##...##...###..#.##.#..###...###...##.#..##..#.##...##....................................................................
#.#..###...##...###..#.##.#..###...###...##.#..##..#.##...##..............................................................
#..#.##.#..###...##...###..#.##.#..###...###...##.#..##..#.##...##........................................................
#...###..#.##.#..###...##...###..#.##.#..###...###...##.#..##..#.##...##..................................................
#...###...###..#.##.#..###...##...###..#.##.#..###...###...##.#..##..#.##...##............................................
#..#.##...###...###..#.##.#..###...##...###..#.##.#..###...###...##.#..##..#.##...##......................................
#.#..##..#.##...###...###..#.##.#..###...##...###..#.##.#..###...###...##.#..##..#.##...##................................
##...##.#..##..#.##...###...###..#.##.#..###...##...###..#.##.#..###...###...##.#..##..#.##...##..........................
......##...##.#..##..#.##...###...###..#.##.#..###...##...###..#.##.#..###...###...##.#..##..#.##...##....................
............##...##.#..##..#.##...###...###..#.##.#..###...##...###..#.##.#..###...###...##.#..##..#.#....................
..................##...##.#..##..#.##...###...###..#.##.#..###...##...###..#.##.#..###...###...##.#..#....................
........................##...##.#..##..#.##...###...###..#.##.#..###...##...###..#.##.#..###...###...#....................
..............................##...##.#..##..#.##...###...###..#.##.#..###...##...###..#.##.#..###...#....................
....................................##...##.#..##..#.##...###...###..#.##.#..###...##...###..#.##.#..#....................
..........................................##...##.#..##..#.##...###...###..#.##.#..###...##...###..#.#....................
................................................##...##.#..##..#.##...###...###..#.##.#..###...##...##....................
......................................................##...##.#..##..#.##...###...###..#.##.#..###...#....................
............................................................##...##.#..##..#.##...###...###..#.##.#..#....................
..................................................................##...##.#..##..#.##...###...###..#.#....................
........................................................................##...##.#..##..#.##...###...##....................
..............................................................................##...##.#..##..#.##...##....................
....................................................................................##...##.#..##..#.#....................
..........................................................................................##...##.#..#....................
................................................................................................##...#....................
}


потом, когда доделаю вывод шрифтов (+конвертор)
наверно выложу в паблик
Linux user | Firefox user
Аватара пользователя
Vooon
Site Admin
 
Сообщения: 3339
Зарегистрирован: 09 фев 2006, 15:36
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков

Re: Graph. LCD lib пишу [fixed]

Сообщение SSG » 24 дек 2007, 12:22

А что это в окошке с кодом? :shock:
Очень похоже на слабозаполненную ленточную матрицу. Может её можно упаковать?
I live My life!
Аватара пользователя
SSG
 
Сообщения: 1058
Зарегистрирован: 15 янв 2007, 19:23
Откуда: Беларусь, Барановичи
прог. языки: С для МК, Delphi для ПК

Re: Graph. LCD lib пишу [fixed]

Сообщение Vooon » 24 дек 2007, 14:16

это отладочный вывод фрейм-буффера в stdout
Linux user | Firefox user
Аватара пользователя
Vooon
Site Admin
 
Сообщения: 3339
Зарегистрирован: 09 фев 2006, 15:36
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков

Re: Graph. LCD lib пишу [fixed]

Сообщение SSG » 25 дек 2007, 10:59

Ёклмн. Это ASCII скриншот! :) И как я сразу не догадался. :(
I live My life!
Аватара пользователя
SSG
 
Сообщения: 1058
Зарегистрирован: 15 янв 2007, 19:23
Откуда: Беларусь, Барановичи
прог. языки: С для МК, Delphi для ПК

Re: Graph. LCD lib пишу [fixed]

Сообщение Vooon » 25 дек 2007, 11:10

я немного подправил его - убрал номера строк, из-за них на маленьких разрешениях экрана строки расползались
и ессно что было непонятно.
Linux user | Firefox user
Аватара пользователя
Vooon
Site Admin
 
Сообщения: 3339
Зарегистрирован: 09 фев 2006, 15:36
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков

Re: Graph. LCD lib пишу [fixed]

Сообщение Vooon » 27 дек 2007, 04:35

Начал писать конверторы, но есть проблема - как наилучшим образом преобразовать серый RGB в BW 1 бит?

2.png
исходник
2.png (1.72 КиБ) Просмотров: 1966
i2_png.png
скрин результата
i2_png.png (1.33 КиБ) Просмотров: 1963
image2bitmap.py
конвертор
(3.13 КиБ) Скачиваний: 253
Linux user | Firefox user
Аватара пользователя
Vooon
Site Admin
 
Сообщения: 3339
Зарегистрирован: 09 фев 2006, 15:36
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков

Re: Graph. LCD lib пишу [fixed]

Сообщение SSG » 27 дек 2007, 14:13

Для сглаживания буквов можно попробовать утолщение-утончение, но для этого придется изображение векторизовать. Если нужно уменьшить кол-во мусора без векторизации, то используют математическую морфологию, логическую фильтрацию, замыкание-отмыкание и пр. Но чтоб написать такой фильтр самому нужно посидеть. Может лучше в каком-нибудь готовом редакторе перед бинаризацией с контрастностью побаловаться, да потом вручную подчистить? Ведь изображения-то наверняка загружаются не оптом.
I live My life!
Аватара пользователя
SSG
 
Сообщения: 1058
Зарегистрирован: 15 янв 2007, 19:23
Откуда: Беларусь, Барановичи
прог. языки: С для МК, Delphi для ПК

Re: Graph. LCD lib пишу [fixed]

Сообщение Strijar » 27 дек 2007, 17:17

Vooon писал(а):Начал писать конверторы, но есть проблема - как наилучшим образом преобразовать серый RGB в BW 1 бит?


Рисовать сразу в BW. Для текста выбрать более подходящий шрифт, например Tahoma. А для преобразования можно взять ImageMagic. Картинки можно хранить например в xpm ;) Тогда инклюдить в код вообще не проблема
Аватара пользователя
Strijar
 
Сообщения: 664
Зарегистрирован: 28 авг 2006, 17:09
Откуда: Всеволожск (СПб)
прог. языки: С, C++, Python, Lua, VHDL, Verilog, Forth
ФИО: Олег Белоусов

След.

Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: Bing [Bot] и гости: 12