СОВРЕМЕННАЯ ЭЛЕКТРОНИКА №2/2016

ИНЖЕНЕРНЫЕ РЕШЕНИЯ 48 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 2 2016 0х20 0х60 0х70 0х00 0х20 0х20 0х20 0х20 0х00 0х42 0х7F 0х40 0х00 0х00 0х00 0х00 в отдельном заголовочномфайле. Поль- зователю доступнышрифты размером символа 6 × 8, 12 × 16 пикселей, а также два шрифта размером 7 × 10 пикселей: нормальный и полужирный. Для использования данных шриф- тов вместе с программой в файлы были внесены определённые изменения: ● удалена структура FONT, описываю- щая параметры шрифта; ● удалено подключение заголовочно- го файла display.h; ● тип массива шрифтов изменён с __flash BYTE на const unsigned char. После внесения изменений заголо- вочные файлы с таблицами знакоге- нератора были подключены к проек- ту. Непосредственный вывод символа на дисплей осуществляется функци- ей GLCD_DrawChar(), среди параме- тров которой передаются координа- ты начальной точки символа, ширина и высота символа, а также указатель на массив, описывающий начерта- ние символа в таблице знакогенерато- ра (см. табл. 4). В качестве прототипа была взята функция вывода символов на дисплей из проекта «Подключаем MT-12864-2YLG» [2]. Данная функция позволяет выво- дить на дисплей символы с произ- вольным расположением начальной точки, поэтому предусмотрена воз- можность вывода символа, не впи- сывающегося в одну страницу. Для символов размером 7 × 10 пикселей предусмотрена также возможность вывода символа, не вписывающегося в две страницы. Также драйвер пред- усматривает функции вывода симво- ла с указанием строки и знакоместа и вывода символьной строки: GLCD_ DisplayChar() и GLCD_DisplayString() соответственно. В качестве параметра fi передаётся тип шрифта, использу- емого при выводе символа. В прото- типе данный параметр может прини- мать значение «0» для шрифта 6 × 8 пикселей и «1» для шрифта 12 × 16 пик- селей. В разработанном драйвере зна- чение «0» соответствует шрифту 6 × 8 пикселей, значение «1» соответствует нормальному шрифту 7 × 10 пикселей, значение «2» соответствует полужир- ному шрифту 7 × 10 пикселей, а значе- ние «3» – шрифту 12 × 16 пикселей. На рисунке 5 показаны все четыре шриф- та на экране дисплея. Также для работы с текстовой инфор- мацией предназначена функция очист- ки строки. В примерах Keil данная зада- ча решается выводом на дисплей стро- ки с пробелами. Так как разработанный драйвер использует шрифты с шири- ной, не кратной 8 (что не позволяет заполнить всю строку целым количе- ством пробелов), был применён метод, сходный с очисткой дисплея: заполне- ние всех ячеек памяти выбранной стра- ницы памяти значениями 0x00 или 0xFF в зависимости от установленно- го цвета фона. Для шрифта 7 × 10 пик- селей была предусмотрена ситуация, когда очищаемая строка занима- ет страницу только частично. Фраг- мент кода, иллюстрирующий очистку строки высотой 8 пикселей, приведён в листинге 3. Г РАФИЧЕСКИЕ ФУНКЦИИ Практически все графические воз- можности драйвера базируются на функции вывода на экран пикселя с заданными координатами. Данная функция также взята из проекта «Под- ключаемMT-12864-2YLG» [2] и сводит- ся к следующей последовательности операций: 1. Выбор страницы и байта, где будет находиться значение, описывающее положение пикселя на экране. 2. Считывание байта. 3. Модификация байта. 4. Запись изменённого значения обрат- но в ячейку памяти. Программно данная процедура реа- лизуется функцией GLCD_PutPixel() драйвера GLCD_MT12864.c. Данная функция используется для вывода на экран прямоугольника в функции GLCD_Bargraph(). Сначала в цикле производится вывод на экран границ прямоугольника, а после – заливка цветом текста части, опре- делённой параметром val в процен- тах, и остальной части – цветом фона. С программной реализацией данной функции также можно ознакомиться в тексте драйвера GLCD_MT12864.c. Наиболее интересной является функ- ция вывода битового поля GLCD_ Bitmap(). Данная функция позволя- ет вывести на дисплей рисунок, опи- санный в виде массива значений. Для получения такого массива значений в составе среды Keil uVision присут- ствует программа Bitmap converter for Листинг 3 LCD_write_cmd(0xC0); //Установка начальной строки //Установка страницы памяти, соответствующей стираемой строке LCD_write_cmd(0xB8 | page); //Стирание строки путем записи значений, соответствующих цвету фона for (i=0; i<64; i++) { if (Color[BG_COLOR]==White) LCD_write_data(0x00); else LCD_write_data(0xFF); } Рис. 3. Структура символа шрифта из файла Font_6x8h.h, входящего в примеры Keil Рис. 4. Структура символа шрифта, рекомендуемого для дисплеев типа MT-12864 Рис. 5. Доступные шрифты на экране дисплея

RkJQdWJsaXNoZXIy MTQ4NjUy