реклама на сайте
подробности

 
 
> AVRLib, графический LCD: как заюзать русский шрифт?
firetrap
сообщение Mar 19 2008, 19:47
Сообщение #1





Группа: Новичок
Сообщений: 8
Регистрация: 5-03-08
Пользователь №: 35 650



только начинаю юзать си и atmel
в AVRLib есть библиотека для работы с графическим дисплеем,
но в файле font5x7.h только английский шрифт, пробовал дописать туда коды для русских символов - выводит мусор..

описание функции которая выводит символ странное какое-то

Код
void glcdWriteChar(unsigned char c)
{
    u08 i = 0;
    
    for(i=0; i<5; i++)
    {
        glcdDataWrite(pgm_read_byte(&Font5x7[((c - 0x20) * 5) + i]));
    }

    // write a spacer line
    glcdDataWrite(0x00);
    glcdStartLine(0);
}


зачем там умножается на 5?

ЗЫ. пробовал при с >= 0x90 вычитать 0x60 вместо 0x20 - не помогает
спасибо..
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
AHTOXA
сообщение Mar 20 2008, 20:51
Сообщение #2


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Ну про 5 байт на символ вроде понятно объяснили:-) Попробую поподробнее про кодировки.
Вот кодировка Windows-1251:
Код
╔══════ ACSII chart (ext) ═══════╗
║           CP: Windows-1251     ║
╟────────────────────────────────╢
║ ☺☻♥♦♣♠•◘○◙♂♀♪♫☼►◄↕‼¶§▬↨↑↓→←∟↔▲▼║
║ !"#$%&'()*+,-./0123456789:;<=>?║
║@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_║
║`abcdefghijklmnopqrstuvwxyz{|}~⌂║
║__'_":┼╪_%_<_____''""•--_T_>____║
║ Ўў_¤_│§ЁcЄ<┐-RЇ°+___ч¶·ё№є>___ї║
║АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ║
║абвгдежзийклмнопрстуфхцчшщъыьэюя║
╟────────────────────────────────╢


Первая строчка (символы с кодами 0 - 0x1F) - непечатные символы, их выкинули. Поэтому теперь код символа на 0x20 меньше. Это касательно английских буковок. Теперь русские. Пятую и шестую строчки тоже выкинем, там ничего полезного кроме буквы Ё. Но Ё мы прилепим в конце. Итак, русские буквы будут начинаться с кода 0x60, там будет располагаться буква 'А' (0xC0). То есть, при отображении русских букв надо отнимать уже не 0x20, а (0xC0-0x60) = 0x60.
Ё будет иметь код 0xA0, а ё - 0xA1.
Таким образом, процедура вывода символа на дисплей будет выглядеть так:
Код
void glcdWriteChar(unsigned char ch)
{
    int pos;

    if (ch == 'Ё')
        ch = 0xA0;
    else if (ch == 'ё')
        ch = 0xA1;
    else if (ch >= 'A')  // это русская 'А'
        ch -= 0x60;
    else
        ch -= 0x20;
    pos = ch * 5;

    for (ch = 5; ch; ch--)
        glcdDataWrite(pgm_read_byte(&Font5x7[pos++]));

    glcdDataWrite(0);
}


В приложении - файл шрифта.
Прикрепленные файлы
Прикрепленный файл  font_5x7_win1251.inc.txt ( 5.73 килобайт ) Кол-во скачиваний: 387
 


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
firetrap
сообщение Mar 21 2008, 07:48
Сообщение #3





Группа: Новичок
Сообщений: 8
Регистрация: 5-03-08
Пользователь №: 35 650



Цитата(AHTOXA @ Mar 20 2008, 23:51) *
Ну про 5 байт на символ вроде понятно объяснили:-) Попробую поподробнее про кодировки.
В приложении - файл шрифта.



Большое спасибо, теперь всё понятно, и заработало наконец biggrin.gif
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 22:25
Рейтинг@Mail.ru


Страница сгенерированна за 0.01371 секунд с 7
ELECTRONIX ©2004-2016