Вы находитесь на странице: 1из 13

2-1/2. Создание отдельного элемента картинки и ее кода.

Создание картинки
1-го "кадра" (для случая "сплошного" заполнения обеих кристаллов), ее кода и
подготовка кода к "врезке" в текст программы.

С "глобальной" стратегией вывода картинки на индикацию более – менее определились.


В принципе, в ней нет ничего особо сложного, за исключением того, что придется
"ваять" нестандартную картинку и работать с большим массивом байтов.
Это и есть основной "тормоз коммунизма", который сильно сдерживает благие порывы
страждущих вкусить этот "райский плод".
Значит нужно устранить этот "тормоз".
Выдаю образ графического модуля: амбал с "горой мышц", квадратной челюстью,
куриными мозгами, тупыми глазами и изяществом слона в посудной лавке (если не
заниматься его воспитанием).
Вывод: нужен "погоняло c хорошим кнутом" и хорошими мозгами.
В результате "скрещивания" типа "погоняло/амбал", получится, что недостатки одного
cкомпенсируются достоинствами другого. В итоге - масса достоинств.
В противном же случае, будет иметь место быть могучий, строптивый дебил (какой
ужас!), общение с которым может превратиться в мучение. Это как минимум.
А как максимум, можно оказаться в жесточайшем нокауте.
Ведь это же дебил (рефлексы заменяют мозги), да к тому же еще и амбал
повышенной весовой категории.
Поэтому, при работе с подобными "личностями", нужно быть хитрым, осторожным,
расчетливым и соблюдать "правила техники безопасности".
В переводе всего этого словоблудия на нормальный язык, нужно:
1. Создать картинку, а затем и ее код (большой массив данных),
2. Программно реализовать вывод "объемного" кода на индикацию.
Это и есть те текущие, "животрепещущие" задачи, которые нужно решить.
Начну по-порядку. То есть, с первого пункта.
Предположим, что в первом "кадре", происходит "сплошное" заполнение дисплея.
В этом случае, нужно вывести на индикацию аж 128х8=1024 байта данных.
И не абы каких, а с заранее и конкретно просчитанными числовыми значениями.
Если "вручную" просчитывать каждый байт, то это очень трудоемко & муторно.
И ошибиться можно. Значит, нужно искать "помощника".
А он тут как тут. "Лежит" в подразделе 4/22 "Обмена…".
Имя этому помощнику - программа ABC.exe:

Красным цветом выделены комментарии.

1
Для обеспечения соблюдения принципа "от простого к сложному", изначально, нужно
поработать с привычными символами, то есть, с буквами, цифрами.
Программа ABC.exe представляет собой "конструктор" элементов картинки, с
возможностью их "оптовой" конвертации (преобразования) в код картинки.
То есть, работа происходит в 2 этапа: сначала создается один или несколько
символов, являющихся элементами картинки (проще говоря, формируется картинка), а
затем, легким движением руки, картинка преобразуется (мозги отдыхают) в ее
двоичный код.
Необходимость наличия такого кода должна быть понятна, ведь картинка в тексте
программы - нонсенс.
А вот "эквивалент" этой картинки, в виде "набора" байтов, имеющих строго
определенные числовые значения (код) - совсем другое дело.
Если мыслить "глобально", то речь идет о следующей последовательности действий:
создание и преобразование картинки в код (в программе ABC.exe) - обработка
кода в "связке" ПИК/графический модуль - преобразование кода в картинку
(дисплей).
Код картинки это массив данных, состоящий из определенного количества
байтов, расположенных в строго определенном порядке, каждый из которых (из
байтов) имеет вполне определенное числовое значение.
В таком же строго определенном порядке, они будут выводиться на индикацию.
Программа ABC.exe обслуживает графические модули на основе м/контроллеров
KS0107 или KS0108. Это стандартные м/контроллеры, которые являются основой
различных типов графических модулей, в том числе и рассматриваемого (KS0108).
В этой программе, картинка создается в "поле" "объемом" 128х128 точек, что
позволяет "нарисовать" 2 различные картинки "объемом" по 128х64 точки каждая.
Этого пока не нужно (но может пригодиться в дальнейшем).
Пока достаточно и одной половины. Например, верхней.
Нижнюю, для наглядности, я перечеркнул и написал "Не используется".
"Поле" разбито на квадраты.
Каждый квадрат это матрица 8х8 точек. Для ее полного заполнения нужно 8 байтов.
Такое разделение достаточно условно, так как можно перейти и на матрицы другого
"объема" (об этом позже), но данная программа, в первую очередь, ориентирована на
"конструирование" символов в условной матрице 8х8 точек.
Пока "не до жиру". Спасибо и на том.
Для более конкретной "привязки" к графическому модулю МТ-12864.., на рис. 1
показано разделение на кристаллы и страницы.
Например, нужно сконструировать символ "E". Это делается так:

2
Выбор квадрата, в котором нужно создать символ, производится с помощью мыши.
Квадрат, на который наведен указатель мыши, окрашивается в светло-синий цвет.
В данном случае, символ создается в первом квадрате.
Собственно говоря, объяснять нечего, так как действия и их последовательность
"расписаны" на рис. 2.
Нужно только отметить, что после вызова окна Symbol, оно откроется вне окна
программы (ниже), но его можно стандартно перетащить мышью в любое место.
В данном случае, окно Symbol я перетащил в окно программы, но можно и рядышком
"прислонить".
В окне Symbol можно сконструировать не только букву, цифру, знак препинания, но и
нечто нестандартное.
Тут уж, как говорится, кто во что горазд.
После создания символа и щелчка по кнопке "ОК", окно Symbol закроется, а
созданный в нем символ "E" будет помещен в выбранный квадрат:

Примечание: графические модули компании МЭЛТ имеют не круглые, а квадратные


точки.
Теперь можно создать код картинки.
Для этого нужно щелкнуть по кнопке Convert (конвертация).
После этого, справа от "поля", появится таблица результата, в которой и содержится
код картинки.
Конвертируется (преобразуется) содержимое всего "поля".
Если в квадрате ничего не "нарисовано", то соответствующая строка таблицы
результата будет состоять из 8-ми чисел равных нулю (все точки квадрата
"погашены").
Ранее созданному символу "E" соответствует самая верхняя строка таблицы
результата.
Таблица результата состоит из 16-ти блоков по 128 байтов каждый.
Все содержимое таблицы результата (или часть его) можно просмотреть, осуществив
прокрутку.
При работе с "полем" 128х64 точки, используются только первые 8 блоков, а
остальные 8 блоков не используются (см. клетки выделенные серым цветом).
Каждый блок имеет заголовок (*****Chars …*****).
По нему можно идентифицировать ту строку "поля", содержимое которой (128 байтов)
отображается ниже заголовка.
В данном случае, код символа "E" находится в 1-й строке 1-го блока.

3
Выделив эту строку, можно, через буфер обмена, скопировать код символа "E",
например, в "Винворд" или в текстовый редактор MPLAB:

.db $00, $00, $FE, $92, $92, $82, $00, $00 (скопировано в "Винворд")

db - директива, с помощью которой производится побайтное сохранение данных в


памяти программ.
Это "указивка" на то, что эти данные нужно сохранить в энергонезависимой памяти.
В данном случае, это намек на память программ (с этим разберемся позднее).
В более привычном виде, это выглядит так:

00h, 00h, 0FEh, 92h, 92h, 82h, 00h, 00h


А можно и так:
0х00, 0х00, 0хFE, 0х92, 0х92, 0х82, 0х00, 0х00

Примечание: последнее выгодно применять, если нужен "аккуратный" вид текста


программы (в части касающейся оформления таблиц данных), ведь все числовые
значения байтов отображаются одинаковым количеством символов (4).
Так как все символы применяемого, при оформлении текста программ, шрифта имеют
одинаковую ширину (в текстовом редакторе MPLAB), то можно сформировать строки
одинаковой ширины, и соответственно составить "аккуратную" таблицу, которая радует
глаз своей "прямоугольностью" (или "квадратностью").
Это - на любителя.
Таким же образом можно выделить, скопировать и обработать любое количество строк
таблицы результата.
При этом, не нужно "забивать себе голову" проверкой правильности составления кода
картинки, так как программа ABC.exe работает достаточно надежно.
Содержимое таблицы результата (или ее части) можно скопировать только через
буфер обмена.
Если же, для дальнейшего использования, требуется сохранить не содержимое
таблицы результата, а картинку, то нужно щелкнуть по "кнопке" File, затем по строке
Save LCD Font, выбрать место сохранения файла (расширение *.chr) и щелкнуть по
"Сохранить".
Сохраняется содержимое всего "поля" (128х128).
Нулевое содержимое "поля" (картинки нет) тоже сохраняется.
Код картинки не сохраняется.
Но это абсолютно не страшно, так как, после открытия файла (Open LCD Font) и
щелчка по "кнопке" Convert, производится преобразование картинки в ее код.
К этому подразделу прилагается файл E.chr.
Его можно открыть в программе ABC.exe и убедиться в правоте сказанного.
Точно таким же образом можно предварительно (про запас, заранее) создать картинки
символов алфавита, цифр, знаков препинания, каких-нибудь нестандартных символов и
вообще, любых "кракозябр" (со смыслом или без), вплоть до "черепа с костями"
(конечно же я утрирую, но смысл должен быть понятен).
К примеру, алфавитов (шрифтов) может быть несколько видов: под разные размеры
букв, под разную их толщину и стиль написания.
То же самое касается и всех остальных символов (отдельных или в "наборе").
При этом нужно учесть то, что "вышележащее" разделение "поля", на матрицы 8х8
точек, условно.
Можно "привязаться" и к другому размеру матрицы, вплоть до ее "дислокации" в
нескольких строках.
Мало того, размеры матрицы могут быть даже "плавающими" (изменяющимися от
символа к символу). И т.д., и т.п.
Короче, простора для творчества - "выше крыши".
Лишь бы желание и терпение было.
Все это (предварительно "нарытое") можно (и нужно) скомпановать в библиотеки
(наборы файлов) по образу и подобию, например, библиотек радиоэлементов P-CAD (и
т.п.), а затем, по мере возникновения необходимости, пользоваться их содержимым.

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

Ну хорошо, с отдельным, простеньким элементом картинки, в части касающейся его


"стряпни", более-менее понятно (надеюсь на это).
Вопрос: "Как состряпать картинку, состоящую из нескольких элементов"?
Ответ: молча. Рисуйте то, что в голову взбредёт. Мне взбрело вот это:

И что самое интересное, я этот "маразм" позднее выведу на индикацию, и ничего мне
за это не будет.
Что хочу, то и вывожу.
Хорошо еще что Бабу-ягу, в ступе, с реактивным движком, не нарисовал.
Но это уже выше моих художественных способностей (поэтому и не нарисовал).
А пока, присваиваю этому художеству "статус" картинки 1-го "кадра".
То есть, ее нужно вывести на индикацию в 1-м цикле вывода данных на индикацию.
Не трудно догадаться, что этот цикл будет самым "массивным", так как в нем нужно
вывести на индикацию все фиксированные элементы картинки.
С динамикой определюсь позднее, хотя одно могу сказать точно: птички будут махать
крыльями.
Ведь нужно же доказать Вам, что это именно птички, а не самолеты?
Иначе спать плохо буду.
Ну ладно, все это лирика. Ближе к делу.
К этому подразделу прилагается файл PROBA.chr.
Откройте его в программе ABC.exe, и Вы увидите картинку, изображенную на
"вышележащем" рисунке.
После щелчка по кнопке "Convert", Вы получите код картинки.
После его предварительной, "канцелярской" обработки, получается это:

5
БЛОК 1 Chars 0..15:
КРИСТАЛЛ 1
0x00, 0x00, 0xFE, 0x02, 0x02, 0xFE, 0x00, 0x00
0x00, 0x00, 0xFC, 0x24, 0x24, 0x18, 0x00, 0x00
0x00, 0x00, 0x78, 0x84, 0x84, 0x78, 0x00, 0x00
0x00, 0x00, 0xFC, 0x94, 0x94, 0x64, 0x00, 0x00
0x00, 0x00, 0xF8, 0x24, 0x24, 0xF8, 0x00, 0x00
0x10, 0x38, 0x54, 0x92, 0x10, 0x10, 0x10, 0x10
0x81, 0x42, 0x24, 0x18, 0x18, 0x24, 0x42, 0x81
0x00, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00
КРИСТАЛЛ 2
0x00, 0x00, 0x00, 0x3C, 0x42, 0x42, 0x24, 0x00
0x3C, 0x42, 0x42, 0x3C, 0x00, 0x40, 0x3C, 0x02
0x7E, 0x00, 0x00, 0x7E, 0x08, 0x08, 0x7E, 0x00
0x7E, 0x40, 0x40, 0xFE, 0x00, 0x00, 0x7E, 0x4A
0x42, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10
0x10, 0x10, 0x10, 0x10, 0x92, 0x54, 0x38, 0x10
0x00, 0x00, 0x04, 0x08, 0x10, 0x20, 0x80, 0x5C
0x40, 0x80, 0x20, 0x90, 0x88, 0x84, 0x00, 0x00
БЛОК 2 Chars 16..31:
КРИСТАЛЛ 1
0x00, 0x00, 0xFC, 0x04, 0x04, 0x04, 0x04, 0x04
0x04, 0x04, 0x04, 0x04, 0x04, 0xFC, 0x00, 0x00
0x00, 0x00, 0xFC, 0x04, 0x04, 0x04, 0x04, 0x04
0x04, 0x04, 0x04, 0x04, 0x04, 0xF8, 0x00, 0x00
0x00, 0x00, 0xF8, 0x04, 0x04, 0x04, 0x04, 0x04
0x04, 0x04, 0x04, 0x04, 0x04, 0xF8, 0x00, 0x00
0x00, 0x00, 0xF8, 0x04, 0x04, 0x04, 0x04, 0x04
0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00
КРИСТАЛЛ 2
0x00, 0x00, 0xC0, 0x30, 0x0C, 0x04, 0x04, 0x04
0x04, 0x04, 0x04, 0x04, 0x04, 0xF8, 0x00, 0x00
0x00, 0x00, 0x02, 0x01, 0x51, 0x09, 0x06, 0x00
0x00, 0x08, 0x08, 0x10, 0x08, 0x08, 0x00, 0x00
0x04, 0x04, 0x08, 0x10, 0x08, 0x04, 0x04, 0x00
0x00, 0x00, 0x08, 0x08, 0x10, 0x08, 0x08, 0x00
0x00, 0x00, 0x21, 0x11, 0x09, 0x04, 0x01, 0x02
0x3A, 0x01, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00
БЛОК 3 Chars 32..47:
КРИСТАЛЛ 1
0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00
0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00
0x00, 0x00, 0xFF, 0x08, 0x08, 0x08, 0x08, 0x08
0x08, 0x08, 0x08, 0x08, 0x08, 0x07, 0x00, 0x00
0x00, 0x00, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x80
0x80, 0x80, 0x80, 0x80, 0x80, 0x7F, 0x00, 0x00

6
0x00, 0x00, 0x7F, 0x81, 0x81, 0x81, 0x81, 0x81
0x81, 0x81, 0x81, 0x81, 0x81, 0x7E, 0x00, 0x00
КРИСТАЛЛ 2
0x00, 0x00, 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01
0x01, 0x01, 0x01, 0x01, 0x01, 0xFF, 0x00, 0x00
0x00, 0x00, 0x00, 0x02, 0x7F, 0x00, 0x00, 0x00
0x01, 0x01, 0x42, 0x24, 0xF2, 0x21, 0x41, 0x00
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0
0xF0, 0xF8, 0xFC, 0xFE, 0xFE, 0xFC, 0xF8, 0xF0
0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00
0x00, 0x00, 0x04, 0x04, 0x08, 0x04, 0x04, 0x00
БЛОК 4 Chars 48..63:
КРИСТАЛЛ 1
0x00, 0x00, 0xFC, 0xFC, 0x0C, 0x0C, 0x0C, 0x0C
0x0C, 0x0C, 0x0C, 0x0C, 0xFC, 0xFC, 0x00, 0x00
0x00, 0x00, 0xFC, 0xFC, 0x0C, 0x0C, 0x0C, 0x0C
0x0C, 0x0C, 0x0C, 0x0C, 0xFC, 0xF8, 0x00, 0x00
0x00, 0x00, 0xF8, 0xFC, 0x0C, 0x0C, 0x0C, 0x0C
0x0C, 0x0C, 0x0C, 0x0C, 0xFC, 0xF8, 0x00, 0x00
0x00, 0x00, 0xFC, 0xFC, 0x8C, 0x8C, 0x8C, 0x8C
0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x00, 0x00, 0x00
КРИСТАЛЛ 2
0x00, 0x00, 0x80, 0xC0, 0xE0, 0x70, 0x38, 0x1C
0x0C, 0x0C, 0x0C, 0x0C, 0xFC, 0xFC, 0x00, 0x00
0x00, 0x00, 0x62, 0x51, 0x49, 0x46, 0x00, 0x00
0x00, 0x00, 0x52, 0x96, 0x9A, 0x52, 0x00, 0x00
0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00
0x00, 0x00, 0x38, 0x24, 0x24, 0x38, 0x20, 0x00
0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00
0x00, 0x08, 0x0C, 0x0E, 0xFF, 0x0E, 0x0C, 0x08
БЛОК 5 Chars 64..79:
КРИСТАЛЛ 1
0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00
0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00
0x00, 0x00, 0xFF, 0xFF, 0x0C, 0x0C, 0x0C, 0x0C
0x0C, 0x0C, 0x0C, 0x0C, 0x0F, 0x07, 0x00, 0x00
0x00, 0x00, 0x7F, 0xFF, 0xC0, 0xC0, 0xC0, 0xC0
0xC0, 0xC0, 0xC0, 0xC0, 0xFF, 0x7F, 0x00, 0x00
0x00, 0x00, 0xFF, 0xFF, 0xC1, 0xC1, 0xC1, 0xC1
0xC1, 0xC1, 0xC1, 0xC1, 0xFF, 0x7F, 0x00, 0x00
КРИСТАЛЛ 2
0x00, 0x00, 0xFF, 0xFF, 0x06, 0x06, 0x06, 0x06
0x06, 0x06, 0x06, 0x06, 0xFF, 0xFF, 0x00, 0x00
0x00, 0x00, 0x22, 0x41, 0x49, 0x36, 0x00, 0x00
0x00, 0x00, 0x55, 0xD5, 0x5D, 0x45, 0x00, 0x00
0x00, 0x00, 0x04, 0x06, 0x07, 0xFF, 0x00, 0x00

7
0x00, 0x00, 0x8F, 0x10, 0x10, 0x10, 0x8F, 0x00
0x00, 0x00, 0xFF, 0x07, 0x06, 0x04, 0x00, 0x00
0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00
БЛОК 6 Chars 80..95:
КРИСТАЛЛ 1
0x04, 0x74, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54
0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54
0x50, 0x54, 0x50, 0x54, 0x50, 0x54, 0x50, 0x54
0x50, 0x54, 0x50, 0x54, 0x50, 0x54, 0x50, 0x54
0x50, 0x54, 0x50, 0x54, 0x50, 0x54, 0x70, 0x04
0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04
0x00, 0x74, 0x70, 0x74, 0x70, 0x74, 0x70, 0x74
0x70, 0x74, 0x70, 0x74, 0x70, 0x74, 0x70, 0x74
КРИСТАЛЛ 2
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x04
0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04
0x00, 0x00, 0x0F, 0x08, 0x08, 0x7F, 0x00, 0x00
0x00, 0x00, 0xBA, 0x92, 0x93, 0x92, 0x00, 0x00
0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00
0x00, 0x00, 0xC7, 0x08, 0x08, 0x08, 0xC7, 0x00
0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00
0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00
БЛОК 7 Chars 96..111:
КРИСТАЛЛ 1
0x00, 0x00, 0xFC, 0x04, 0x04, 0x04, 0x04, 0x04
0x04, 0x04, 0x04, 0x04, 0x04, 0xFC, 0x00, 0x00
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
0x00, 0xF0, 0x08, 0x08, 0x08, 0x08, 0x08, 0xF0
0x00, 0x00, 0xE0, 0x10, 0x10, 0x10, 0x10, 0x10
0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10
0x10, 0x10, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00
0x02, 0x23, 0x40, 0x5C, 0x5C, 0x40, 0x23, 0x02
КРИСТАЛЛ 2
0x80, 0x40, 0x20, 0x10, 0x08, 0xA4, 0xC2, 0x61
0x61, 0xC2, 0xA4, 0x08, 0x10, 0x20, 0x40, 0x80
0x00, 0x00, 0x27, 0x45, 0x45, 0x39, 0x00, 0x00
0x00, 0x00, 0x03, 0x02, 0x02, 0x02, 0x00, 0x00
0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x20, 0x20
0xA0, 0xA0, 0xA1, 0xA2, 0xA2, 0xA2, 0xA1, 0xA0
0x20, 0x20, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00
0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00
БЛОК 8 Chars 112..127:
КРИСТАЛЛ 1
0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00
0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00
0x00, 0x00, 0xFC, 0x24, 0x24, 0x18, 0x00, 0x00

8
0x00, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7F
0x00, 0x00, 0x7F, 0x82, 0x82, 0x82, 0x82, 0x82
0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82
0x82, 0x82, 0x82, 0x82, 0x7C, 0x00, 0x00, 0x00
0x00, 0x00, 0x00, 0x00, 0xF8, 0x24, 0x24, 0xFC
КРИСТАЛЛ 2
0x01, 0x02, 0x04, 0x08, 0x10, 0x25, 0x43, 0x86
0x86, 0x43, 0x25, 0x10, 0x08, 0x04, 0x02, 0x01
0x40, 0x20, 0x10, 0x20, 0x12, 0x0A, 0x06, 0x1E
0x00, 0x7E, 0x42, 0x5A, 0x5A, 0x42, 0x7E, 0x00
0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFF, 0xFC, 0xF8
0x70, 0x20, 0xE0, 0x20, 0x20, 0xE0, 0x20, 0x70
0xF8, 0xFC, 0xFF, 0xF8, 0xF0, 0xE0, 0xC0, 0x80
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00

Внимание: "x" это латинский символ (английская раскладка клавиатуры), а не


русская буква "х" (русская раскладка клавиатуры).
Если будет наоборот, то, после копирования содержимого таблицы в текст программы
и дальнейшего ассемблирования этого текста, Вы получите 2048 сообщений об
ошибках: по паре Error (112) и Error (113) на каждый байт.
Каждый блок кода картинки разделен на две половины.
Содержимое первой половины блока нужно вывести на индикацию в левый кристалл, а
содержимое второй половины блока нужно вывести на индикацию в правый кристалл.
Так как, при выводе содержимого блоков, не резон "метаться" с кристалла на кристалл
(лишние команды), то выгоднее сначала заполнить один кристалл, а после этого -
другой.
Соответственно, нужно привести "нарытое" к следующему виду (то же самое, но в
другом виде):

КРИСТАЛЛ 1
Страница 1
0x00, 0x00, 0xFE, 0x02, 0x02, 0xFE, 0x00, 0x00
0x00, 0x00, 0xFC, 0x24, 0x24, 0x18, 0x00, 0x00
0x00, 0x00, 0x78, 0x84, 0x84, 0x78, 0x00, 0x00
0x00, 0x00, 0xFC, 0x94, 0x94, 0x64, 0x00, 0x00
0x00, 0x00, 0xF8, 0x24, 0x24, 0xF8, 0x00, 0x00
0x10, 0x38, 0x54, 0x92, 0x10, 0x10, 0x10, 0x10
0x81, 0x42, 0x24, 0x18, 0x18, 0x24, 0x42, 0x81
0x00, 0x00, 0x00, 0x66, 0x66, 0x00, 0x00, 0x00
Страница 2
0x00, 0x00, 0xFC, 0x04, 0x04, 0x04, 0x04, 0x04
0x04, 0x04, 0x04, 0x04, 0x04, 0xFC, 0x00, 0x00
0x00, 0x00, 0xFC, 0x04, 0x04, 0x04, 0x04, 0x04
0x04, 0x04, 0x04, 0x04, 0x04, 0xF8, 0x00, 0x00
0x00, 0x00, 0xF8, 0x04, 0x04, 0x04, 0x04, 0x04
0x04, 0x04, 0x04, 0x04, 0x04, 0xF8, 0x00, 0x00
0x00, 0x00, 0xF8, 0x04, 0x04, 0x04, 0x04, 0x04
0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00
Страница 3

9
0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00
0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00
0x00, 0x00, 0xFF, 0x08, 0x08, 0x08, 0x08, 0x08
0x08, 0x08, 0x08, 0x08, 0x08, 0x07, 0x00, 0x00
0x00, 0x00, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x80
0x80, 0x80, 0x80, 0x80, 0x80, 0x7F, 0x00, 0x00
0x00, 0x00, 0x7F, 0x81, 0x81, 0x81, 0x81, 0x81
0x81, 0x81, 0x81, 0x81, 0x81, 0x7E, 0x00, 0x00
Страница 4
0x00, 0x00, 0xFC, 0xFC, 0x0C, 0x0C, 0x0C, 0x0C
0x0C, 0x0C, 0x0C, 0x0C, 0xFC, 0xFC, 0x00, 0x00
0x00, 0x00, 0xFC, 0xFC, 0x0C, 0x0C, 0x0C, 0x0C
0x0C, 0x0C, 0x0C, 0x0C, 0xFC, 0xF8, 0x00, 0x00
0x00, 0x00, 0xF8, 0xFC, 0x0C, 0x0C, 0x0C, 0x0C
0x0C, 0x0C, 0x0C, 0x0C, 0xFC, 0xF8, 0x00, 0x00
0x00, 0x00, 0xFC, 0xFC, 0x8C, 0x8C, 0x8C, 0x8C
0x8C, 0x8C, 0x8C, 0x8C, 0x8C, 0x00, 0x00, 0x00
Страница 5
0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00
0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00
0x00, 0x00, 0xFF, 0xFF, 0x0C, 0x0C, 0x0C, 0x0C
0x0C, 0x0C, 0x0C, 0x0C, 0x0F, 0x07, 0x00, 0x00
0x00, 0x00, 0x7F, 0xFF, 0xC0, 0xC0, 0xC0, 0xC0
0xC0, 0xC0, 0xC0, 0xC0, 0xFF, 0x7F, 0x00, 0x00
0x00, 0x00, 0xFF, 0xFF, 0xC1, 0xC1, 0xC1, 0xC1
0xC1, 0xC1, 0xC1, 0xC1, 0xFF, 0x7F, 0x00, 0x00
Страница 6
0x04, 0x74, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54
0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54
0x50, 0x54, 0x50, 0x54, 0x50, 0x54, 0x50, 0x54
0x50, 0x54, 0x50, 0x54, 0x50, 0x54, 0x50, 0x54
0x50, 0x54, 0x50, 0x54, 0x50, 0x54, 0x70, 0x04
0x00, 0x04, 0x00, 0x04, 0x00, 0x04, 0x00, 0x04
0x00, 0x74, 0x70, 0x74, 0x70, 0x74, 0x70, 0x74
0x70, 0x74, 0x70, 0x74, 0x70, 0x74, 0x70, 0x74
Страница 7
0x00, 0x00, 0xFC, 0x04, 0x04, 0x04, 0x04, 0x04
0x04, 0x04, 0x04, 0x04, 0x04, 0xFC, 0x00, 0x00
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
0x00, 0xF0, 0x08, 0x08, 0x08, 0x08, 0x08, 0xF0
0x00, 0x00, 0xE0, 0x10, 0x10, 0x10, 0x10, 0x10
0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10
0x10, 0x10, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00
0x02, 0x23, 0x40, 0x5C, 0x5C, 0x40, 0x23, 0x02
Страница 8
0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00
0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00
10
0x00, 0x00, 0xFC, 0x24, 0x24, 0x18, 0x00, 0x00
0x00, 0x7F, 0x80, 0x80, 0x80, 0x80, 0x80, 0x7F
0x00, 0x00, 0x7F, 0x82, 0x82, 0x82, 0x82, 0x82
0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82
0x82, 0x82, 0x82, 0x82, 0x7C, 0x00, 0x00, 0x00
0x00, 0x00, 0x00, 0x00, 0xF8, 0x24, 0x24, 0xFC

КРИСТАЛЛ 2
Страница 1
0x00, 0x00, 0x00, 0x3C, 0x42, 0x42, 0x24, 0x00
0x3C, 0x42, 0x42, 0x3C, 0x00, 0x40, 0x3C, 0x02
0x7E, 0x00, 0x00, 0x7E, 0x08, 0x08, 0x7E, 0x00
0x7E, 0x40, 0x40, 0xFE, 0x00, 0x00, 0x7E, 0x4A
0x42, 0x00, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10
0x10, 0x10, 0x10, 0x10, 0x92, 0x54, 0x38, 0x10
0x00, 0x00, 0x04, 0x08, 0x10, 0x20, 0x80, 0x5C
0x40, 0x80, 0x20, 0x90, 0x88, 0x84, 0x00, 0x00
Страница 2
0x00, 0x00, 0xC0, 0x30, 0x0C, 0x04, 0x04, 0x04
0x04, 0x04, 0x04, 0x04, 0x04, 0xF8, 0x00, 0x00
0x00, 0x00, 0x02, 0x01, 0x51, 0x09, 0x06, 0x00
0x00, 0x08, 0x08, 0x10, 0x08, 0x08, 0x00, 0x00
0x04, 0x04, 0x08, 0x10, 0x08, 0x04, 0x04, 0x00
0x00, 0x00, 0x08, 0x08, 0x10, 0x08, 0x08, 0x00
0x00, 0x00, 0x21, 0x11, 0x09, 0x04, 0x01, 0x02
0x3A, 0x01, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00
Страница 3
0x00, 0x00, 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01
0x01, 0x01, 0x01, 0x01, 0x01, 0xFF, 0x00, 0x00
0x00, 0x00, 0x00, 0x02, 0x7F, 0x00, 0x00, 0x00
0x01, 0x01, 0x42, 0x24, 0xF2, 0x21, 0x41, 0x00
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xC0, 0xE0
0xF0, 0xF8, 0xFC, 0xFE, 0xFE, 0xFC, 0xF8, 0xF0
0xE0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00
0x00, 0x00, 0x04, 0x04, 0x08, 0x04, 0x04, 0x00
Страница 4
0x00, 0x00, 0x80, 0xC0, 0xE0, 0x70, 0x38, 0x1C
0x0C, 0x0C, 0x0C, 0x0C, 0xFC, 0xFC, 0x00, 0x00
0x00, 0x00, 0x62, 0x51, 0x49, 0x46, 0x00, 0x00
0x00, 0x00, 0x52, 0x96, 0x9A, 0x52, 0x00, 0x00
0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00
0x00, 0x00, 0x38, 0x24, 0x24, 0x38, 0x20, 0x00
0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00
0x00, 0x08, 0x0C, 0x0E, 0xFF, 0x0E, 0x0C, 0x08
Страница 5
0x00, 0x00, 0xFF, 0xFF, 0x06, 0x06, 0x06, 0x06
0x06, 0x06, 0x06, 0x06, 0xFF, 0xFF, 0x00, 0x00
11
0x00, 0x00, 0x22, 0x41, 0x49, 0x36, 0x00, 0x00
0x00, 0x00, 0x55, 0xD5, 0x5D, 0x45, 0x00, 0x00
0x00, 0x00, 0x04, 0x06, 0x07, 0xFF, 0x00, 0x00
0x00, 0x00, 0x8F, 0x10, 0x10, 0x10, 0x8F, 0x00
0x00, 0x00, 0xFF, 0x07, 0x06, 0x04, 0x00, 0x00
0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00
Страница 6
0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x74, 0x04
0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04
0x00, 0x00, 0x0F, 0x08, 0x08, 0x7F, 0x00, 0x00
0x00, 0x00, 0xBA, 0x92, 0x93, 0x92, 0x00, 0x00
0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00
0x00, 0x00, 0xC7, 0x08, 0x08, 0x08, 0xC7, 0x00
0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00
0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00
Страница 7
0x80, 0x40, 0x20, 0x10, 0x08, 0xA4, 0xC2, 0x61
0x61, 0xC2, 0xA4, 0x08, 0x10, 0x20, 0x40, 0x80
0x00, 0x00, 0x27, 0x45, 0x45, 0x39, 0x00, 0x00
0x00, 0x00, 0x03, 0x02, 0x02, 0x02, 0x00, 0x00
0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x20, 0x20
0xA0, 0xA0, 0xA1, 0xA2, 0xA2, 0xA2, 0xA1, 0xA0
0x20, 0x20, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00
0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00
Страница 8
0x01, 0x02, 0x04, 0x08, 0x10, 0x25, 0x43, 0x86
0x86, 0x43, 0x25, 0x10, 0x08, 0x04, 0x02, 0x01
0x40, 0x20, 0x10, 0x20, 0x12, 0x0A, 0x06, 0x1E
0x00, 0x7E, 0x42, 0x5A, 0x5A, 0x42, 0x7E, 0x00
0x80, 0xC0, 0xE0, 0xF0, 0xF8, 0xFF, 0xFC, 0xF8
0x70, 0x20, 0xE0, 0x20, 0x20, 0xE0, 0x20, 0x70
0xF8, 0xFC, 0xFF, 0xF8, 0xF0, 0xE0, 0xC0, 0x80
0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00
Дело сделано: код картинки, представляющий собой массив из 1024-х байтов, к выводу
на индикацию подготовлен.
Напоминаю Вам о том, что сейчас речь идет о "сплошном" (самом "тормозном")
заполнении дисплея (в пределах любой страницы, "перескоков" через столбцы нет. Все
столбцы отрабатываются).
Теперь дело за "малым" (обратите внимание на кавычки) - вывести все это "массивное
художество" на индикацию.
Но это уже тема следующего подраздела.

Использование контекстного меню программы ABC.exe.


Если требуется осуществить редактирование картинки, то можно (и нужно)
использовать контекстное меню.
Например, требуется "размножить" символ "2" (скопировать его в другой квадрат).
Для этого нужно навести указатель мыши на квадрат, в котором находится символ "2"
и щелкнуть правой кнопкой мыши.
Вы увидите список контекстного меню (см. рис. 5).
12
Нужно щелкнуть по строке "Copy Tile" (копировать).
После этого, все содержимое выбранного квадрата скопируется в буфер обмена, и
список контекстного меню исчезнет.
Далее указатель мыши передвигается на
тот квадрат, в который нужно
скопировать содержимое буфера обмена,
и вызывается контекстное меню.
Нужно щелкнуть по строке "Paste Tile"
(вставить).
После этого, символ "2" появится в
выбранном квадрате.
Если требуется не "размножение"
символа, а перенос его из одного
квадрата в другой, то нужно сделать то
же самое, но вместо щелчка по строке
"Copy Tile" (копировать), нужно щелкнуть
по строке "Erase Tile" (вырезать).
В данном случае, осуществляется копирование/перенос символа целиком, так как все
элементы его графики находятся внутри квадрата.
В том случае, если элемент (элементы) картинки находится в нескольких квадратах,
копирование или перенос нужно осуществлять в несколько приемов ("поквадратно").
В комплексе с возможностью редактирования содержимого квадрата в окне "Symbol",
можно осуществить достаточно комфортное редактирование всей картинки.

"Практикум по конструированию устройств на PIC контроллерах"      http://ikarab.narod.ru       E-mail: karabea@lipetsk.ru

13