Главная arrow Программирование arrow ARM arrow Как делать шрифты для устройств на микроконтроллерах Wednesday, March 29 2017  
ГлавнаяКонтактыАдминистрированиеПрограммированиеСсылки
UK-flag-ico.png English Version
GERMAN-flag-ico.png Die deutsche Version
map.gif карта сайта
нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

Поделиться:

Как делать шрифты для устройств на микроконтроллерах Версия для печати
Написал microsin   
03.01.2009

В статье рассмотрены методы изготовления простых растровых шрифтов, предназначенных для вывода на графические индикаторы (как, например, WG240128A-FFH-V или экран от NOKIA6610 - Epson S1D15G00).

Если коротко, то основные известные мне методы такие:
    1. Воспользоваться программой BitFontCreator Pro 2.3. Позволяет делать растровые шрифты из шрифтов, встроенных в Windows.
    2. Нарисовать символы в графическом редакторе в виде bmp-картинок и потом конвертнуть их в C-дамп или ASM-дамп (чтобы подсунуть компилятору).

[BitFontCreator Pro 2.3]

Программа интуитивно-понятна, позволяет импортировать TrueType и растровые шрифты Windows, преобразовывать их в ASM- или C-дамп, экспортировать шрифт в набор BMP-картинок. Процесс создания шрифта предполагает 5 стандартных шагов (представлены в меню кнопками) - import font (тут выбираете Windows-шрифт), edit characters table (редактируете таблицу символов и изображения символов - если это нужно), configure data format (изменяете метод, каким графическая информация распределяется по байтам знакогенератора), export bitmap data (получаете текстовый дамп знакогенератора, который можно подсунуть компилятору). Несколько замечаний по использованию программы:

1. Если программа нелицензионная, то Вас ожидают определенные неудобства - половина символов из шрифта представлена пустым дампом. Поэтому чтобы сгенерировать дампы для всех символов в таблице, приходится извращаться - делать дампы символов по частям, удалять из таблицы символов те, чей дамп Вы уже получили. При этом "пустоты" в таблице символов смещаются, и Вы получаете возможность делать дампы остальных символов (которые до этого были испорченные, пустые).

2. Удобнее всего использовать пропорциональные шрифты - у которых постоянная ширина, так как для них проще написать программное обеспечение, выводящее символ на графический индикатор. К пропорциональным шрифтам относятся, например, Courier New и Terminal (к сожалению, шрифт Terminal нерусифицирован, но зато самый маленький из пропорциональных). Недостаток пропорциональных шрифтов - они некрасивые и некомпактные, много драгоценного свободного места на экране будет тратиться впустую. Из шрифтов с переменной шириной стоит присмотреться к MS Serif и Small Fonts - они изначально рассчитаны на маленький размер.

3. Так как экраны у устройств с микроконтроллерами обычно маленькие, для импортируемых шрифтов нужно выбирать самый маленький размер 8 (иногда можно выбрать 6 или даже 5).

4. Кодировку символов лучше выбрать стандартную ANSI Windows 1251 (её удобно использовать потому, что она позволяет использовать строковые константы на русском языке в среде программирования IAR Embedded Workbench). Вот она:

 код  симв.     код  симв.     код  симв.     код  симв.  
    00
    01
    02
    03
    04
    05
    06
    07
    08  'BS'
    09
    0a  'LF'
    0b
    0c
    0d  'CR'
    0e
    0f
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    1a
    1b
    1c
    1d
    1e
    1f
    20  ' '
    21  '!'
    22  '"'
    23  '#'
    24  '$'
    25  '%'
    26  '&'
    27  '''
    28  '('
    29  ')'
    2a  '*'
    2b  '+'
    2c  ','
    2d  '-'
    2e  '.'
    2f  '/'
    30  '0'
    31  '1'
    32  '2'
    33  '3'
    34  '4'
    35  '5'
    36  '6'
    37  '7'
    38  '8'
    39  '9'
    3a  ':'
    3b  ';'
    3c  '<'
    3d  '='
    3e  '>'
    3f  '?'
      40  '@'
    41  'A'
    42  'B'
    43  'C'
    44  'D'
    45  'E'
    46  'F'
    47  'G'
    48  'H'
    49  'I'
    4a  'J'
    4b  'K'
    4c  'L'
    4d  'M'
    4e  'N'
    4f  'O'
    50  'P'
    51  'Q'
    52  'R'
    53  'S'
    54  'T'
    55  'U'
    56  'V'
    57  'W'
    58  'X'
    59  'Y'
    5a  'Z'
    5b  '['
    5c  '\'
    5d  ']'
    5e  '^'
    5f  '_'
    60  '`'
    61  'a'
    62  'b'
    63  'c'
    64  'd'
    65  'e'
    66  'f'
    67  'g'
    68  'h'
    69  'i'
    6a  'j'
    6b  'k'
    6c  'l'
    6d  'm'
    6e  'n'
    6f  'o'
    70  'p'
    71  'q'
    72  'r'
    73  's'
    74  't'
    75  'u'
    76  'v'
    77  'w'
    78  'x'
    79  'y'
    7a  'z'
    7b  '{'
    7c  '|'
    7d  '}'
    7e  '~'
    7f  '' 
      80    'Ђ'
    81    'Ѓ'
    82    '‚'
    83    'ѓ'
    84    '„'
    85    '…'
    86    '†'
    87    '‡'
    88    '€'
    89    '‰'
    8a    'Љ'
    8b    '‹'
    8c    'Њ'
    8d    'Ќ'
    8e    'Ћ'
    8f    'Џ'
    90    'ђ'
    91    '‘'
    92    '’'
    93    '“'
    94    '”'
    95    '•'
    96    '–'
    97    '—'
    98    '�'
    99    '™'
    9a    'љ'
    9b    '›'
    9c    'њ'
    9d    'ќ'
    9e    'ћ'
    9f    'џ'
    a0    ' '
    a1    'Ў'
    a2    'ў'
    a3    'Ј'
    a4    '¤'
    a5    'Ґ'
    a6    '¦'
    a7    '§'
    a8    'Ё'
    a9    '©'
    aa    'Є'
    ab    '«'
    ac    '¬'
    ad    '­'
    ae    '®'
    af    'Ї'
    b0    '°'
    b1    '±'
    b2    'І'
    b3    'і'
    b4    'ґ'
    b5    'µ'
    b6    '¶'
    b7    '·'
    b8    'ё'
    b9    '№'
    ba    'є'
    bb    '»'
    bc    'ј'
    bd    'Ѕ'
    be    'ѕ'
    bf    'ї'
      c0    'А'
    c1    'Б'
    c2    'В'
    c3    'Г'
    c4    'Д'
    c5    'Е'
    c6    'Ж'
    c7    'З'
    c8    'И'
    c9    'Й'
    ca    'К'
    cb    'Л'
    cc    'М'
    cd    'Н'
    ce    'О'
    cf    'П'
    d0    'Р'
    d1    'С'
    d2    'Т'
    d3    'У'
    d4    'Ф'
    d5    'Х'
    d6    'Ц'
    d7    'Ч'
    d8    'Ш'
    d9    'Щ'
    da    'Ъ'
    db    'Ы'
    dc    'Ь'
    dd    'Э'
    de    'Ю'
    df    'Я'
    e0    'а'
    e1    'б'
    e2    'в'
    e3    'г'
    e4    'д'
    e5    'е'
    e6    'ж'
    e7    'з'
    e8    'и'
    e9    'й'
    ea    'к'
    eb    'л'
    ec    'м'
    ed    'н'
    ee    'о'
    ef    'п'
    f0    'р'
    f1    'с'
    f2    'т'
    f3    'у'
    f4    'ф'
    f5    'х'
    f6    'ц'
    f7    'ч'
    f8    'ш'
    f9    'щ'
    fa    'ъ'
    fb    'ы'
    fc    'ь'
    fd    'э'
    fe    'ю'
    ff    'я'
 
 

Такая кодировка (ANSI Windows 1251) лучше всего подходит, поскольку большинство программ используют именно её. Например, такая кодировка позволяет напрямую задавать и выводить русский текст в IAR Embedded Workbench.

5. Есть возможность экспортировать весь набор символов в BMP-картинки (File -> Export -> Bitmap Files of All Chars). Эта возможность хороша тем, что изображения всех символов экспортируются неиспорченные даже для нелицензионной программы (нет таких искуственных ограничений, как на создание текстового дампа символов). Поэтому если у Вас есть конвертор bmp -> текст (например, текст-дамп, понятный для C-компилятора), то создание шрифта сильно упрощается. Если Вы знакомы с программированием на Windows, то написать такой конвертор можно самому, так как формат BMP достаточно прост. Предлагаю готовый конвертор, который я написал самостоятельно, скачать можно здесь (вместе с примерами использования).

[Генерирование маленького шрифта]

В примере показана генерация миниатюрного цифрового шрифта, который я использовал для вывода напряжения питания прибора рядом с графикой "батарейки" (показывающей степень разряда аккумулятора). 10 символов шрифта (цифры от 0 до 9) подготовлены в удобном для редактирования виде - как единая монохромная картинка 090226small_digits.bmp (легко правится графическим редактором mspaint), и сконвертирована в C-текст с помощью утилиты bmptoc.exe (см. Ссылки).

090226small_digits.GIF

Каждый символ цифры поместился в матрицу 4X6 точек, причем крайний правый столбец используется для пробела между символами (можно было бы и его убрать, но тогда неудобно было бы редактировать символы в картинке). Выводится символ на экран с помощью процедуры void DrawSmallDigit (u8 x, u8 y, char sym), детали вывода точек (процедура put_pixel) не рассматриваются - это зависит от применяемого графического индикатора.

Скачать пример small_digits можно здесь.

[Ссылки]

1Программы и утилиты, упомянутые в статье, примеры использования.
2Сайт программы BitFontCreator.
3BMP to PIC table for graphic LCD assembly utility.
4TypeFace / Character Set Image Data - работа со шрифтами для микроконтроллеров.
5Charset Extractor from Images.
6Графический интерфейс пользователя с применением микроконтроллеров Microchip.
7. IAR EW ARM: как перенаправить вывод printf и putchar (в статье описан пример подключения индикатора ЖКИ Winstar WG240128B со схемой и исходниками).
8. Утилита bmptoc.exe для конвертирования BMP-картинок и бинарных файлов в C-дамп (вместе с исходниками).

Последнее обновление ( 06.07.2011 )
 

Комментарии  

  1. #1 Мими заходил
    2011-07-0612:35:27 Пропорциональны е шрифты одно и тоже, что и шрифты с переменной длинной. Правильнее сказать моноширинные.

Добавить комментарий

:D:lol::-);-)8):-|:-*:oops::sad::cry::o:-?:-x:eek::zzz:P:roll::sigh:

Защитный код
Обновить

< Пред.   След. >

Top of Page
 
microsin © 2017