Введение
Любой UART дисплей DWIN включает в себя встроенный микроконтроллер. По умолчанию в контроллер записана программа отвечающая за обмен данными по протоколу DWIN. Однако данный микроконтроллер доступен для программирования и позволяет значительно расширить функционал заложенный в дисплей, а в некоторых случаях и полностью отказаться от использования внешнего контроллера. В данной статье рассмотрим настройку среды и простейшие операции такие как считывание и запись переменных, работу портов ввода вывода и работу АЦП.
Описание дисплея
Для реализации проекта будет использован дисплей DMG48480F050_01WTCZ01. Обладающий IPS матрицей с разрешением 480х480, емкостной сенсорной панелью. Дисплей имеет разъем 50PIN, на котором размещены контакты питания (3.6-5.5В), порты ввода вывода процессора T5L0, порты ADC, PWM, UART, CAN и контакты для uSD карты.
Для работы также понадобится плата HDL662S. На данной плате размещен разъем uSD карты, разъем USB и контакты выведенные с 50 контактного шлейфа, которые помогут нам проверить работоспособность написанного кода.
Создание GUI
На фоновом изображении должны присутствовать элементы для отображения значений счетчика, АЦП, иконка включения и выключения светодиода и иконка получения входного сигнала на порт ввода вывода.
В DRAW.IO создаётся фоновое изображение и необходимые иконки.
На полученном изображении, согласно указанным адресам, размещаем соответствующие элементы. Отображение чисел для счетчика и АЦП, отображение иконок для портов ввода вывода. Размещает элемент тача "Incremental Adjustment" для изменения состояния кнопки включения и выключения светодиода.
Подключение
К плате HDL662S были припаяны штыревые разъемы 2,54мм для подключения внешних элементов:
светодиода;
переменного резистора;
кнопки.
Настройка среды KEIL
Видеоинструкция есть на YouTube.
1. Скачивается и устанавливается среда Keil C51.
2. Устанавливает драйвер KEIL AGDI T5L_Driver
3. Из архива SFR H копируем файлы T5L_OS_8051.INC и T5LOS8051.h после чего перемещаем их в папку *\Keil_v5\C51\INC\DWIN.
4. Создаём шаблон проекта, назовем папку "template", добавим в неё 5 папок:
“USER”
“OBJ”
“HANDWARE”
“GUI_APP”
“FUNC_HANDLER”
Запускаем Keil, нажимаем вкладку проект, создать новый проект.
Размещаем проект с названием "template" в ранее созданной папке "USER"
Выбираем DWIN Device и контроллер T5
Удаляем все файлы в папке USER кроме template
Создаём файлы main.c и main.h
Из папки *\dwin-T5L-master\T5L51 копируем файл STARTUP_M5.A51
Из папки *\dwin-T5L-master T5LOS8051.h
Из архива Sys File копируем файлы
Переходим к настройке параметров проекта
В вкладке DEVICE устанавливаем галочку как показано на изображении ниже
Вкладка Target изменяем поля Memmory Model, и устанавливаем начало и размер RAM.
Вкладка Output изменяем путь и название
Вкладка Listing
Вкладка LX51 Misc прописываем "REMOVEUNUSED" в поле Misc controls
Вкладка C51 изменяем уровень оптимизации
Второй вариант настройки проекта, использовать уже настроенный проект, например проект из данной статьи, который будет размещен на github.
Работа в KEIL
Необходимо настроить три блока:
1) Порты ввода вывода
2) АЦП
3) Таймер
После чего реализовать функции обработки и загрузить прошивку на дисплей.
Создадим пути хранения для файлов, в них будем сохранять файлы с соответствующим названием.
ADC.c и ADC.h
GPIO.c и GPIO.h
TIMER.c и TIMERh
Порты ввода вывода
Создадим два файла GPIO.c и GPIO.h с следующим содержимым:
GPIO.c
GPIO.h
Из названия функций понятно, что SetPinIn устанавливает ножку на вход, а SetPinOut на выход. Этих функций достаточно для реализуемого функционала в рамках данной статьи.
АЦП
Данные полученные с АЦП записываются в оперативную память по адресу 0x0032, все 8 каналов записаны последовательно. В статье используется ADC1.
Создаём два файла для АЦП, ADC.c и ADC.h.
ADC.c
ADC.c
В файлах содержатся функции считывания значений с заданного канала, и функция считывания с усреднением значений.
Таймер
Аналогично с пунктами выше создаем файлы TIMER.c и TIMER.h
TIMER.h
TIMER.c
В функциях реализована инициализация таймера на частоту 1кГц с включенным прерыванием. В прерываниях счетчик на 1000 значений для отсчитывания 1 секунды. Счетчик выставляет флаг отсчёта, который будет использован в main.c для переключения состояния светодиода.
StartTimer задаёт число до которого будет считать счетчик.
GetTimeOutFlag - возвращает состояние флага таймера.
ClearTimerFlag - очищает значения флага.
Основной цикл
Подключаем библиотеки, прописываем адреса переменных заложенных в дизайне DGUS, инициализируем GPIO и остальные компоненты.
Прописываем процесс работы с GPIO. При считывании из памяти переменной отвечающей за включения светодиода с кнопки дисплея включаем и выключаем светодиод в зависимости от полученного значения. При нажатии на кнопку отображаем иконку на дисплее и включаем светодиод.
Процесс работы с АЦП, считываем усредненное за 100 измерений значение и записываем в память для отображения в заданной переменной.
Процесс работы счетчика, если таймер выставил флаг, то очищаем флаг, изменяем состояние светодиода и записываем инкрементированное значение в отображаемую переменную.
Прописываем инициализацию в функцию main и добавляем все процессы.
Собираем проект, в папке *\Project\C51\OBJ находим файл T5L51.bin и с файлами из папки проекта DGUS DWIN_SET загружаем на uSD карту и прошиваем дисплей.
ВАЖНО! бинарный файл прошивки в COF дисплей можно загружать только с uSD карты.
Демонстрация работы полученного кода
Заключение
В данной статье разобрана настройка среды Keil для возможности записи кода напрямую в ядро C51. Реализована простейшая работа с портами ввода вывода, считыванием и записью значений в сформированный в DGUS интерфейс, реализована работа АЦП и таймера.
В дальнейшем напишем код восстанавливающий работу с командами 82 и 83 на чтение и запись переменных через UART.
Ссылка на GitHub: https://github.com/VB-Radchenko/Lesson_C51_Hello_World
Компания DWIN предоставляет бесплатные образцы для юридических лиц. Для получения образцов, оптовых закупок, персональных скидок, технической поддержки и общим вопросам обращайтесь:
Email: rvb@dwin-global.ru
VK: https://vk.com/radchenko_vb
Telegram: https://t.me/Radchenko_VB
Сообщество VK https://vk.com/public208909284
Скидочный купон на 5$ для официального магазина AliExpress - DWVLWEN