当前位置: 首页 > news >正文

LVGL | 不同刷屏感受

使用三种刷屏方式来感受不同的刷屏体验,因为GD32F103的SPI速度有限,所以刷屏速度不会很快,但是可以直观对比不同速度下的刷屏。

第一种

void main_lcd_fill_0(void) { uint16_t x, y; for (y = 0; y < LCD_H; y++) { for (x = 0; x < LCD_W; x++) { drv_lcd_draw_point(x, y, 0x001F); } } }

直接使用画点函数一个点一个点画,刷屏速度是最慢。

第二种

void main_lcd_fill_1(uint16_t xsta, uint16_t ysta, uint16_t xend, uint16_t yend, uint16_t color) { uint16_t i, j; drv_lcd_address_set(xsta, ysta, xend - 1, yend - 1); LCD_CS_CLR(); for (i = ysta; i < yend; i++) { for (j = xsta; j < xend; j++) { drv_spi0_read_write(color >> 8); drv_spi0_read_write(color); } } LCD_CS_SET(); }

设置好显示区域,然后一次性通过硬件SPI发送数据,减少了每次都需要设置一次显示区域,速度比第一种快。

第三种

uint8_t arr_buff[2048] = {0}; void main_lcd_fill_2(uint16_t xsta, uint16_t ysta, uint16_t xend, uint16_t yend, uint16_t color) { for (uint16_t i = 0; i < 2048; i += 2) { arr_buff[i + 0] = color >> 8; arr_buff[i + 1] = color; } drv_lcd_address_set(xsta, ysta, xend - 1, yend - 1); LCD_CS_CLR(); for (uint8_t i = 0; i < 75; i++) { drv_spi0_dma_transmit(arr_buff, 2048); } LCD_CS_SET(); }

在第二种的基础上调用了DMA发送,速度是最快的。

主函数实现

#include "main.h" void main_lcd_fill_0(void) { uint16_t x, y; for (y = 0; y < LCD_H; y++) { for (x = 0; x < LCD_W; x++) { drv_lcd_draw_point(x, y, 0x001F); } } } void main_lcd_fill_1(uint16_t xsta, uint16_t ysta, uint16_t xend, uint16_t yend, uint16_t color) { uint16_t i, j; drv_lcd_address_set(xsta, ysta, xend - 1, yend - 1); LCD_CS_CLR(); for (i = ysta; i < yend; i++) { for (j = xsta; j < xend; j++) { drv_spi0_read_write(color >> 8); drv_spi0_read_write(color); } } LCD_CS_SET(); } uint8_t arr_buff[2048] = {0}; void main_lcd_fill_2(uint16_t xsta, uint16_t ysta, uint16_t xend, uint16_t yend, uint16_t color) { for (uint16_t i = 0; i < 2048; i += 2) { arr_buff[i + 0] = color >> 8; arr_buff[i + 1] = color; } drv_lcd_address_set(xsta, ysta, xend - 1, yend - 1); LCD_CS_CLR(); for (uint8_t i = 0; i < 75; i++) { drv_spi0_dma_transmit(arr_buff, 2048); } LCD_CS_SET(); } // 外设初始化 void main_driver_init(void) { drv_usart_init(); drv_timer_init(); drv_spi0_init(); drv_lcd_init(); // main_lcd_fill_0(); // main_lcd_fill_1(0, 0, LCD_W, LCD_H, 0x001f); main_lcd_fill_2(0, 0, LCD_W, LCD_H, 0x001f); } void main_delay_ms(uint32_t value) { for (uint32_t i = 0; i < value; i++) { // 1ms for (uint16_t j = 0; j < 15428; j++) { __NOP(); } } } // 主循环 int main(void) { nvic_priority_group_set(NVIC_PRIGROUP_PRE4_SUB0); main_driver_init(); printfk(LOG, "init ok\n"); while (1) { printfk(LOG, "...\n"); main_delay_ms(1000); } } void TIMER4_IRQHandler(void) { if (SET == timer_interrupt_flag_get(TIMER4, TIMER_INT_FLAG_UP)) { timer_interrupt_flag_clear(TIMER4, TIMER_INT_FLAG_UP); } } void USART0_IRQHandler(void) { if (RESET != usart_interrupt_flag_get(USART0, USART_INT_FLAG_RBNE)) { usart_interrupt_flag_clear(USART0, USART_INT_FLAG_RBNE); } if (RESET != usart_interrupt_flag_get(USART0, USART_INT_FLAG_IDLE)) { usart_interrupt_flag_clear(USART0, USART_INT_FLAG_IDLE); } } void USART2_IRQHandler(void) { if (RESET != usart_interrupt_flag_get(USART2, USART_INT_FLAG_RBNE)) { usart_interrupt_flag_clear(USART2, USART_INT_FLAG_RBNE); } if (RESET != usart_interrupt_flag_get(USART2, USART_INT_FLAG_IDLE)) { usart_interrupt_flag_clear(USART2, USART_INT_FLAG_IDLE); } }

使用DMA方式进行刷屏是最快的,SPI方式比较适合驱动小屏幕,大屏最好换其他接口的显示屏。

最小显示屏项目模板如下,后期就在这个基础上移植LVGL。

--end--

http://www.gsyq.cn/news/117234.html

相关文章:

  • Cam350新手入门:从零开始掌握PCB设计工具
  • Vue3中动态样式数组的后项覆盖规则如何与计算属性结合实现复杂状态样式管理?
  • 零基础学会Vue二维码扫描:5分钟快速上手
  • 东方博宜OJ 1222:经典递归问题 —— 汉诺塔
  • RGBA处理效率对比:传统方法vsAI工具
  • 代币化资产革命进入2.0阶段:Fasset的“合规密钥”能否解锁万亿级新兴市场?
  • 零基础理解神经网络参数:从入门到实践
  • 手把手教你复现CVE-2023-51767漏洞
  • 5分钟打造专属VSCode字体主题:在线生成器
  • 2025 最新 PPR管 服务商 TOP5 评测!服务深耕四川、贵州、西藏、重庆,优质厂商榜单发布,创新驱动重构给排水管道生态 - 全局中转站
  • 专业测评:国产 CRM 中哪些比较适合制造业
  • 品牌AI形象管理工具实战评测:新榜智汇如何为你的GEO战略装上“稳定器”?
  • A1SJ71PB93D伺服驱动器
  • HR115C6-88S伺服电机
  • 【IT人月报】用Go搞定WebSocket+AI代理,我踩过的坑和总结的经验
  • 分布式锁与幂等的边界——正确的锁语义、过期与续约、业务层幂等配合
  • 5、Shell编程中的参数、变量与数组详解
  • 2025 最新双高筋缠绕管厂家 TOP5 评测!服务四川、贵州、西藏、重庆四地众多用户,优质服务商权威榜单发布,构筑给排水工程坚实基石 - 全局中转站
  • 比手动排查快10倍:自动化处理Socket端口冲突
  • 基于SpringBoot的校园资讯交流平台系统毕业设计全套源码文档
  • 5分钟快速验证:Maven原型项目生成器
  • STM32HAL库读取ADS1115驱动
  • 测试决策的心理因素:在认知偏差与专业判断间寻找平衡
  • 完整教程:SQL常用语句解析:从查询到操作
  • 上海专业做室外防水 选芮生建设 14年经验守护建筑外墙屋顶不漏 - shruisheng
  • 3个关键步骤解决JimuReport报表组件依赖配置难题
  • FPGA在AI时代的角色重塑:硬件可重构性与异构计算的完美结合
  • 上海防水补漏上门维修服务哪家好?认准芮生建设,14年专业团队守护安居 - shruisheng
  • 守护代码世界的守门人——软件测试团队心理健康白皮书
  • Arbess从基础到实践(20) - 集成GitHub+SonarQube实现Java项目自动化部署