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

ИНЖЕНЕРНЫЕ РЕШЕНИЯ 46 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 2 2016 Начало Установка режима записи команд или данных (вывод АО) Установка в нулевое состоние выводов D0 … D7 Настройка выводов D0 … D7 на вывод информации Перевод дисплея в режим записи (вывод R/W в логический 0) Конец Установка на выводе строба (Е) логической 1 Установка на выводах D0 … D7 записываемого байта Сброс вывода строба в логический 0 Ожидание сброса флага занятости Задержка Задержка лом. Название файла драйвера дисплея должно начинаться с GLCD. Напри- мер, GLCD_SPI_STM32.c. Текст драйве- ра дисплея MT-12864J находится в фай- ле GLCD_MT12864.c. Разработанный драйвер имеет ряд ограничений и особенностей, отли- чающих его от прототипа: ● все цвета фона или текста, отличные от «белого», отображаются на дисплее «чёрным» цветом; ● драйвер поддерживает работу толь- ко в горизонтальном режиме; ● в параметрах функции рисования прямоугольника переменная val отражает закраску в процентах, а не в долях 1/1024, как в прототипе; ● функция вывода рисунка предполага- ет вывод чёрно-белых рисунков, име- ющих 256 градаций серого; ● невозможна работа со стандартны- ми шрифтами, прилагающимися к драйверу графического дисплея от Keil (организация памяти дисплея MT-12864J отличается от графических дисплеев, использованных в отладоч- ных платах Keil и Atmel, поэтому более эффективно использовать специаль- но адаптированные шрифты); ● отсутствуют команды установки раз- мера окна и записи регистра. ДисплейMT-12864J получилширокое распространение среди радиолюбите- лей и профессионалов. Для различных микроконтроллеров были сделаны соб- ственные драйверыданного дисплея, на которые авторы данной статьи опира- лись в процессе разработки. В частности, драйвер для близкого по архитектуре дисплеяMT-12864A, описанный в статье «ПодключаемMT-12864-2YLG» [2]. О СНОВНЫЕ ФУНКЦИИ ВЗАИМОДЕЙСТВИЯ С ДИСПЛЕЕМ Основу драйвера дисплея составля- ют следующие функции: ● начальная инициализация; ● передача дисплею команд и данных; ● чтение регистра состояния дисплея; ● чтение данных из памяти дисплея. Данные функции позволяют реали- зовать обмен данными с дисплеем для вывода на него различной информа- ции – как текстов, так и графических изображений, что доступно для разра- ботчика через функции драйвера. В спецификации на дисплей [1] начальная настройка описывается как установка на входе RES состояния логи- ческого нуля, удержание его в течение 1 мкс и ожидание сброса флагов BUSY и RESET в регистре состояния дисплея. Однако драйвер, представлен- ный автором статьи «Подключаем MT-12864-2YLG» [2], предполагает более сложную процедуру инициализации: Установка логического нуля на выво- де RES с последующим его сбросом через 100 мс. 1. Выбор первого контроллера дисплея (К145ВГ10) установкой логической единицы на входе E1. 2. Отправкапоследовательностикоманд: включение дисплея, установка нуле- вой ячейки текущей страницы ОЗУ в качестве активной, установка нулевой строки, как самой верхней (команды 0x3F, 0x40, 0xC0 соответ- ственно). 3. Снятие сигнала выбора с первого контроллера и выбор второго кон- троллера К145ВГ10 (установка логи- ческой единицы на входе Е2 и логи- ческого нуля на входе E1). 4. Повторение последовательности команд. С программной реализацией данной функции можно ознакомиться в файле GLCD_MT12864.c любого из проектов, выложенных в дополнительных мате- риалах к статье на сайте www.soel.ru (функция GLCD_init()). В самом начале функции производит- ся настройка всех портов, на выводах которых формируются сигналы управ- ления дисплеем (см. табл. 1). В дальней- шем все управляющие сигналы уста- навливаются в состояние логическо- го нуля, в том числе и сигнал сброса. Через 100 мс сигнал сброса восстанав- ливается в состояние логической еди- ницы. После этого установкой логиче- ской единицы на выводе E1 выбирается первый контроллер К145ВГ10 дисплея, отвечающий за левую половину экра- на. Контроллеру передаются команды включения дисплея, установки актив- ной ячейки памяти и первой отобра- жаемой строки. После передачи команд сигнал выбо- ра контроллера снимается и выбира- ется второй контроллер, отвечающий за правую половину дисплея. Функ- ция ожидает снятия сигнала занято- сти контроллера и снова передаёт те же команды. Временны ′ е диаграммы сигналов на выводах дисплея показаны в специфи- кации [1]. Гораздо интереснее посмо- треть, как это выглядит с точки зрения программиста. Блок-схема алгоритма записи байта в контроллер показана на рисунке 1, программная реализа- ция содержится в функции LCD_write() Рис. 1. Блок-схема алгоритма записи байта в контроллер дисплея

RkJQdWJsaXNoZXIy MTQ4NjUy