Высказывания и цитаты:

В камне расположение атомов очень простое, поэтому и жизнь в камне настолько проста, что мы не можем её видеть. Кошка представляет собой очень сложное расположение атомов – следовательно, жизнь в ней вполне очевидна.
Робертс Грегори. Шантарам

  • 30Ноя

    Урок№3. В этом уроке мы научимся выводить русские символы на дисплей.

    Если Вы купили себе плату разработчика STM32, то, я думаю, заметили, что эти платы произведены в Китае, и соответственно догадались, что примеры, которые есть на диске к платам (если нет диска — можете скачать в интернете), тоже написаны китайскими программистами.

    Откройте проект из Урока 2 — TouchPanel для платы HY-Mini STM32. Откомпилируйте проект, если проект ни разу не компилировался. Найдите в main функцию TouchPanel_Calibrate(), в ней есть другая GUI_Text(), в которой PutChar(), и наконец GetASCIICode(). Как искать функцию мы уже знаем из урока 2 — правой кнопкой мыши нажимаем на функции и выбираем go Difinition of… . Так мы доходим до файла AsciiLib.c, в котором хранится таблица символов кодировки Ascii кода  —  static unsigned char const AsciiLib[95][16] — 95 букв из 16 байт каждая.

    Каждая буква, которая отображается на дисплее, должна быть описана в таблице, потому что дисплей не знает, какие буквы вообще бывают. Вот таблица Ascii
    ascii2

    Это значит, что поддержки русского языка здесь нет. Я полазил по интернету в поисках русских символов размером 8 пикселей по горизонтали и 16 пикселей по вертикали – мне ничего не попалось. Поэтому я нарисовал свои символы, используя кодировку Windows 1251, как раз такую использует Windows.
    cp1251

    Например, маленькая буква «у» рисуется следующим образом:

    00000000 = 0x00
    00000000
    00000000
    01100110 = 0x66
    01100110
    01100110
    01100110
    01111110 = 0x7E
    00000110 = 0x06
    00000110
    01100110 = 0x66
    01111100 = 0x7C
    00000000
    00000000
    00000000

    А маленькая «б» так:

    00000000
    00000000
    00000000
    01111100 = 0x7C
    01100110 = 0x66
    01100000 = 0x60
    01100000
    01111100 = 0x7C
    01100110 = 0x66
    01100110
    01100110
    01111100 = 0x7C
    00000000
    00000000

    и немного переделав функцию GetASCIICode(), получаем

    void GetASCIICode(unsigned char* pBuffer,unsigned char ASCII)
    {
    if (ASCII<0x80)// если символы английские
    {memcpy(pBuffer, AsciiLib[(ASCII - 32)] ,16);}
    if (ASCII==0xA8)// если буква Ё
    {memcpy(pBuffer, ELib[(ASCII - 0xA8)] ,16);}

    if (ASCII>0xB7)
    {memcpy(pBuffer, RusLib[(ASCII - 0xB8)] ,16);} // иначе кодировка Windows-1251
    // 0xB8 - это буква ё
    }

    Файл AsciiLib.c Вы можете заменить на тот, что у Вас в программе  —  появится возможность печатать русские буквы.
    Ищем текст GUI_Text() и вместо английских букв вставляем кириллицу. Хочу обратить внимание, что Keil иногда сбоит и не печатает русские буквы, тогда напечатайте русский текст в блокноте и вставьте в Keil.

    В проекте в папке GLCD присутствует файл HzLib.c – это файл китайских иероглифов, он содержит символы размером 16×16, его можно удалить или переделать под смайлики размером 16×16, тогда этот урок я допишу в другой раз.

1 комментарий

WP_Cloudy
  • Сергей пишет:

    Чем вы конвертировали картинку?
    Все перепробовал,но такого формата не получил.
    На экране только цветные полоски.

Ваш ответ

Внимание: Модератор оставляет за собой право редактировать или удалять комментарии.

Подтвердите, что Вы не бот — выберите человечка с поднятой рукой: