[Развлечение со встроенным экранным дисплеем] (6) Использование аппаратной функции вертикальной прокрутки ST7789 SPI LCD.
[Развлечение со встроенным экранным дисплеем] (6) Использование аппаратной функции вертикальной прокрутки ST7789 SPI LCD.

Всем привет, мы снова встретились, я ваш друг Цюаньчжаньцзюнь.

1. Рождение идей

Небольшой ЖК-экран платы разработки Little Bear Pi использует микросхему драйвера ST7789. У меня всегда была идея реализовать прокрутку дисплея на этом экране. Первоначальная идея заключалась в создании большой очереди на стороне MCU. передать содержимое всего экрана управлению очередью, а затем постоянно обновлять весь экран, чтобы добиться прокрутки экрана.

Теоретически такая реализация является относительно ресурсоемкой, потребляя ресурсы ЦП для работы периферийных устройств SPI и ресурсы памяти для хранения данных дисплея, поэтому она никогда не применялась.

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

Хм? Прокрутить? прокрутить? Откройте для себя новый континент!

Согласно главе 8.14 руководства, вращательная прокрутка — это только режим вертикальной прокрутки, который определяется командой определения области вертикальной прокрутки (0x33H) и командой начального адреса вертикальной прокрутки (0x77).

Оказывается, аппаратное обеспечение ST7789 поддерживает функцию, которую я всегда хотел реализовать. Я изучу, как ее реализовать, и приступим!

2. Процесс реализации

1. Подготовка

Необходимо знать драйвер SPI Основные принципы ST7789,Вы можете обратиться к этому моему уроку:STM32CubeMX_17 | Использование аппаратного SPI для управления TFT-LCD (ST7789)

2. Установите область прокрутки

Медвежий пирог на бортуLCDРазмер экрана240240,240 пикселей по горизонтали и вертикали,Но размер видеопамяти микросхемы драйвера ST7789 составляет 320.240,По вертикали 320 рядов пикселей.,По горизонтали 240 рядов пикселей.,Обычно мы используем только переднюю часть видеопамяти.

Для отображения прокрутки сначала необходимо установить область прокрутки. 320 вертикальных рядов пикселей в видеопамяти разделены на три части:

TFA — это верхняя фиксированная область отображения. Эта часть будет отображаться постоянно и не будет прокручиваться после указания. VSA — это область прокрутки. После указания этой части будет отображаться нижняя фиксированная область отображения. , он будет отображаться постоянно и не будет отображаться при прокрутке.

Потому что вся видеопамять По вертикали 320 рядов пикселей.,Очевидно, что 8 бит не могут уместиться в байт.,такВсе настройки значений трех областей TFA, VSA и BFA являются 16-битными, а сумма трех значений должна быть равна 320, иначе определение области прокатки не удастся.

Здесь я настроил прокрутку всего экрана, поэтому значения TFA и BFA установлены на 0, а значение VSA — на 320.

Команда для установки области прокрутки — 0x33, а формат настройки следующий:

Первая команда — 0x33, за ней следуют старшие 8 битов TFA, младшие 8 битов TFA, старшие 8 битов VSA, младшие 8 битов VSA, старшие 8 битов BFA и младшие 8 битов BFA. В соответствии с этим форматом в коде инициализации ЖК-дисплея в конце добавьте код для установки области прокрутки отображения:

Язык кода:javascript
копировать
/** * @brief Vertical Scrolling Definition. * @param tfa top fixed area * @param vsa scroll area * @param bta bottom fixed area * @return errcode * @retval 0 success * @retval -1 fail */
int LCD_Set_Scroll_Area(uint16_t tfa, uint16_t vsa, uint16_t bta)
{ 
   
    uint8_t data;
    
    if (tfa + vsa + bta != 320) { 
   
        return -1;
    }
    
    LCD_Write_Cmd(0x33);
    
    data = tfa >> 8;
    LCD_Write_Data(data);
    data = tfa;
    LCD_Write_Data(data);
    data = vsa >> 8;
    LCD_Write_Data(data);
    data = vsa;
    LCD_Write_Data(data);
    data = bta >> 8;
    LCD_Write_Data(data);
    data = bta;
    LCD_Write_Data(data);
    
    return 0;
}

Затем установите область прокрутки в конце функции инициализации ЖК-дисплея:

Язык кода:javascript
копировать
/* Defign Scroll Area */
LCD_Set_Scroll_Area(0, 240, 80);

3. Установите начальный адрес прокручиваемого дисплея.

Функция установки начального адреса прокрутки дисплея заключается в том, чтобы установить, с какой строки видеопамяти начнет отображаться ЖК-экран.,Пример показан ниже.,На картинке TFA=BFA=0, VSA=320.,Если начальный адрес прокрутки дисплея установлен на 3, содержимое ЖК-экрана будет начинаться с 3-й строки видеопамяти.

Команда для установки начального адреса прокручиваемого дисплея — 0x37. Формат установки следующий:

Первая команда — 0x37, за ней следуют старшие 8 бит VSP и младшие 8 бит VSP. В соответствии с этим форматом добавьте код для установки начального адреса прокручиваемого дисплея в конце кода инициализации ЖК-дисплея:

Язык кода:javascript
копировать
/** * @brief Set Vertical scroll start address of RAM. * @param vsp scroll start address of RAM * @return none */
void LCD_Set_Scroll_Start_Address(uint16_t vsp)
{ 
   
    
    LCD_Write_Cmd(0x37);
    
    LCD_Write_Data(vsp / 256);
    LCD_Write_Data(vsp % 256);
}

После однократной установки этой функции достигается статическая прокрутка. Эффект от видеокарт,Но оно не двигалось,Таким образом, мы можем продолжать звонить, чтобы добиться желаемого эффекта.

3. Примеры использования

1. Добавьте отображаемый контент

После того, как основная функция инициализирует ЖК-дисплей, добавьте содержимое ЖК-дисплея:

Язык кода:javascript
копировать
LCD_ShowCharStr(10, 0, "TencentOS tiny 1", BLACK, WHITE, 24);
LCD_ShowCharStr(10, 24, "TencentOS tiny 2", BLACK, YELLOW, 24);
LCD_ShowCharStr(10, 48, "TencentOS tiny 3", BLACK, BRRED, 24);
LCD_ShowCharStr(10, 72, "TencentOS tiny 4", BLACK, PINK, 24);
LCD_ShowCharStr(10, 96, "TencentOS tiny 5", BLACK, RED, 24);
LCD_ShowCharStr(10, 120, "TencentOS tiny 6", BLACK, BROWN, 24);
LCD_ShowCharStr(10, 144, "TencentOS tiny 7", BLACK, GRAY, 24);
LCD_ShowCharStr(10, 168, "TencentOS tiny 8", BLACK, GBLUE, 24);
LCD_ShowCharStr(10, 192, "TencentOS tiny 9", BLACK, GREEN, 24);
LCD_ShowCharStr(10, 216, "TencentOS tiny 11", BLACK, BLUE, 24);

2. Прокрутка дисплея

Выполните цикл while(1), чтобы изменить начальное положение прокрутки:

Язык кода:javascript
копировать
while(1) { 
   
    LCD_Set_Scroll_Start_Address(i);
    if (++i > 240){ 
   
        i = 0;
    }
    HAL_Delay(5);
}

3. Эффект прокрутки

Издатель: Лидер стека программистов полного стека, укажите источник для перепечатки: https://javaforall.cn/126944.html Оригинальная ссылка: https://javaforall.cn

boy illustration
Углубленный анализ переполнения памяти CUDA: OutOfMemoryError: CUDA не хватает памяти. Попыталась выделить 3,21 Ги Б (GPU 0; всего 8,00 Ги Б).
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Прочитайте нейросетевую модель Трансформера в одной статье
boy illustration
.ART Теплые зимние предложения уже открыты
boy illustration
Сравнительная таблица описания кодов ошибок Amap
boy illustration
Уведомление о последних правилах Points Mall в декабре 2022 года.
boy illustration
Даже новички могут быстро приступить к работе с легким сервером приложений.
boy illustration
Взгляд на RSAC 2024|Защита конфиденциальности в эпоху больших моделей
boy illustration
Вы используете ИИ каждый день и до сих пор не знаете, как ИИ дает обратную связь? Одна статья для понимания реализации в коде Python общих функций потерь генеративных моделей + анализ принципов расчета.
boy illustration
Используйте (внутренний) почтовый ящик для образовательных учреждений, чтобы использовать Microsoft Family Bucket (1T дискового пространства на одном диске и версию Office 365 для образовательных учреждений)
boy illustration
Руководство по началу работы с оперативным проектом (7) Практическое сочетание оперативного письма — оперативного письма на основе интеллектуальной системы вопросов и ответов службы поддержки клиентов
boy illustration
[docker] Версия сервера «Чтение 3» — создайте свою собственную программу чтения веб-текста
boy illustration
Обзор Cloud-init и этапы создания в рамках PVE
boy illustration
Корпоративные пользователи используют пакет регистрационных ресурсов для регистрации ICP для веб-сайта и активации оплаты WeChat H5 (с кодом платежного узла версии API V3)
boy illustration
Подробное объяснение таких показателей производительности с высоким уровнем параллелизма, как QPS, TPS, RT и пропускная способность.
boy illustration
Удачи в конкурсе Python Essay Challenge, станьте первым, кто испытает новую функцию сообщества [Запускать блоки кода онлайн] и выиграйте множество изысканных подарков!
boy illustration
[Техническая посадка травы] Кровавая рвота и отделка позволяют вам необычным образом ощипывать гусиные перья! Не распространяйте информацию! ! !
boy illustration
[Официальное ограниченное по времени мероприятие] Сейчас ноябрь, напишите и получите приз
boy illustration
Прочтите это в одной статье: Учебник для няни по созданию сервера Huanshou Parlu на базе CVM-сервера.
boy illustration
Cloud Native | Что такое CRD (настраиваемые определения ресурсов) в K8s?
boy illustration
Как использовать Cloudflare CDN для настройки узла (CF самостоятельно выбирает IP) Гонконг, Китай/Азия узел/сводка и рекомендации внутреннего высокоскоростного IP-сегмента
boy illustration
Дополнительные правила вознаграждения амбассадоров акции в марте 2023 г.
boy illustration
Можно ли открыть частный сервер Phantom Beast Palu одним щелчком мыши? Супер простой урок для начинающих! (Прилагается метод обновления сервера)
boy illustration
[Играйте с Phantom Beast Palu] Обновите игровой сервер Phantom Beast Pallu одним щелчком мыши
boy illustration
Maotouhu делится: последний доступный внутри страны адрес склада исходного образа Docker 2024 года (обновлено 1 декабря)
boy illustration
Кодирование Base64 в MultipartFile
boy illustration
5 точек расширения SpringBoot, супер практично!
boy illustration
Глубокое понимание сопоставления индексов Elasticsearch.
boy illustration
15 рекомендуемых платформ разработки с нулевым кодом корпоративного уровня. Всегда найдется та, которая вам понравится.
boy illustration
Аннотация EasyExcel позволяет экспортировать с сохранением двух десятичных знаков.