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

ИНЖЕНЕРНЫЕ РЕШЕНИЯ 47 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 2 2016 Начало Установка режима команд Установка в нулевое состоние выводов D0 … D7 Настройка выводов D0 … D7 на вход Перевод дисплея в режим чтения (вывод R/W в логическую 1) Конец Установка на выводе строба (Е) логической 1 Чтение данных D0 … D7 из дисплея в переменную Сброс вывода строба в логический 0 Задержка Задержка Пока считывается флаг занятости дисплея файла GLCD_MT12864.c из дополни- тельных материалов к статье. Как видно из листинга, в функции отсутствуют процедуры ожидания сброса сигнала занятости и перевода дисплея в режим команд или режим данных. Эти операции вынесены из функции и реализуются в отдельных функциях: передачи команд и передачи данных, описанных в листингах 1 и 2. Как видно из листингов и блок-схемы алгоритма, ожидание сброса сигна- ла занятости вынесено в отдельную функцию. Блок-схема алгоритма ожи- дания сброса сигнала занятости показа- на на рисунке 2, а программная реали- зация данного алгоритма представлена в функциях файла GLCD_MT12864.c – LCD_read_status() и LCD_wait_busy() соответственно. Как и в случае записи, считывание байта и ожидание сброса флага реали- зованы в разных функциях. Аналогич- но чтению регистра статуса реализова- на функция чтения данных из дисплея. В этот раз авторы не стали делать одну функцию чтения байта. Единственное отличие функции чтения данных (LCD_ read_data()) в том, что дисплей пере- водится в режим данных сигналом на выводе A0. Ещё одна функция – очистка дисплея, которая заливает весь дисплей цветом, указанным, как цвет фона. Фактически, всё сводится к записи в каждую ячейку памяти значения 0x00 или 0xFF. С про- граммной реализацией данной функ- ции также можно ознакомиться в фай- ле GLCD_MT12864.c – функция GLCD_ Clear(). Ф УНКЦИИ РАБОТЫ С ТЕКСТОМ Основной задачей дисплея является вывод текстовой информации. Поэтому следующими по важности после функ- ций инициализации и обмена данны- ми с контроллером являются функции вывода на экран текстовой информа- ции. Так как дисплей не имеет собствен- ного знакогенератора, то актуальным является вопрос выбора шрифтов, кото- рые будут использоваться для вывода текстов. В составе примеров Keil поставляют- ся два шрифта: 6 × 8 и 12 × 16 пиксе- лей. Однако структура данных шриф- тов для дисплея MT-12864J не является оптимальной. На рисунке 3 показана структура символа «1» для шрифта 8 × 6, предлагаемого компанией Keil (файл Font_6x8h.h). Как видно из рисунка, символ представляет собой массив значений, каждое из которых описы- вает расстановку пикселей в одной из восьми строк. Для дисплея MT-12864J более подхо- дящим является шрифт, структура кото- рого показана на рисунке 4. Здесь зна- чения массива описывают расстановку пикселей в столбцах. Такой структуре соответствует шрифт в проекте «Под- ключаем MT-12864-2YLG» [2] (размер символа 5 8 пикселей), однако табли- ца шрифта несовместима с CP1251, что ведёт к усложнению функции вывода символов на дисплей. В обсуждении на форуме разработчи- ков электроники [3] был выложен про- ект с комплектом из четырёх шриф- тов, совместимых с кодовой таблицей CP1251 [4]. Каждый шрифт находится Листинг 1 static void LCD_write_cmd (unsigned char cmd) { LCD_wait_busy(); //Ожидание сброса сигнала занятости дисплея MDR_PORTC->RXTX &= ~A0;//Перевод дисплея в режим команд LCD_write(cmd); //Запись байта в дисплей } Листинг 2 static void LCD_write_data (unsigned char data) { LCD_wait_busy(); //Ожидание сброса сигнала занятости дисплея MDR_PORTC->RXTX |= A0; //Перевод дисплея в режим данных LCD_write(data); //Запись байта в дисплей } Рис. 2. Блок-схема алгоритма ожидания сброса сигнала занятости

RkJQdWJsaXNoZXIy MTQ4NjUy