航芯ACM32G103开发板评测 06 1.28圆形屏幕 LVGL移植

2024-02-08 04:28

本文主要是介绍航芯ACM32G103开发板评测 06 1.28圆形屏幕 LVGL移植,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

航芯ACM32G103开发板评测 06 1.28圆形屏幕 LVGL移植

软硬件平台

  1. 航芯ACM32G103开发板
  2. 1.28寸圆形彩色TFT显示屏高清IPS 模块240X240 SPI接口 GC9A01驱动芯片
  3. LVGL V8.3.1源码

LVGL

LVGL(Light and Versatile Graphics Library)是一个免费的开源图形库,提供创建具有易 于使用的图形元素、漂亮的视觉效果和低内存占用的嵌入式 GUI。

LVGL 是一款具有丰富的部件,具备高级图形特性,支持多种输入设备, 多国语言和独立于硬件之外等免费的开源图形库。接下来我们来看一下 LVGL 图形用户库的主要特点:

强大的构建块:按钮、图表、列表、滑块、图像等部件。
具有高级图形属性:具有动画、抗锯齿、不透明度、平滑滚动的高级图形。
支持各种输入设备:如触摸、鼠标、键盘、编码器。
支持多语言:UTF-8 编码。
支持多显示器:它可以同时使用多个 TFT 或者单色显示器。
支持多种样式属性:它具有类 CSS 样式的完全可定制的图形元素。
独立于硬件之外:它与任何微控制器或显示器一起使用。
可扩展性:它能够以小内存运行(最低 64 kB 闪存,16 kB RAM 的 MCU)。
支持操作系统、外部存储器和 GPU(不是必需的)。
具有高级图形效果:可进行单帧缓冲区操作。
纯 C 编写: C 语言编写以获得最大的兼容性。

快速移植过程

  1. 在已有的ACM32G103RCT6 TFT 裸机移植LVGL的工程模板上进行修改 添加LVGL源代码文件

    【ACM32G103RCT6】5-基于RGB_TFT裸机移植LVGL

在这里插入图片描述

2.在已有的工程模板上,添加GC9A01驱动屏幕代码

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.在KEIL添加相关源文件,添加相关路径,删除之前的屏幕驱动文件

在这里插入图片描述
在这里插入图片描述

4.修改lv_port_disp屏幕显示接口文件

在这里插入图片描述

5.添加LCD屏幕初始化函数,绘图绘点函数

/*********************** STATIC FUNCTIONS**********************//*Initialize your display and the required peripherals.*/
static void disp_init(void)
{/*You code here*/LCD_Init();LCD_BLK_SET;//通过IO控制背光亮
}volatile bool disp_flush_enabled = true;/* Enable updating the screen (the flushing process) when disp_flush() is called by LVGL*/
void disp_enable_update(void)
{disp_flush_enabled = true;
}/* Disable updating the screen (the flushing process) when disp_flush() is called by LVGL*/
void disp_disable_update(void)
{disp_flush_enabled = false;
}/*Flush the content of the internal buffer the specific area on the display*You can use DMA or any hardware acceleration to do this operation in the background but*'lv_disp_flush_ready()' has to be called when finished.*/
static void disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p)
{if(disp_flush_enabled) {/*The most simple case (but also the slowest) to put all pixels to the screen one-by-one*/  uint16_t x,y;for(y = area->y1; y <= area->y2; y++) {for(x = area->x1; x <= area->x2; x++) {/*Put a pixel to the display. For example:*//*put_px(x, y, *color_p)*/GUI_DrawPoint(x,y,lv_color_to16(*color_p));color_p++;}}}/*IMPORTANT!!!*Inform the graphics library that you are ready with the flushing*/lv_disp_flush_ready(disp_drv);
}

基本上就完成了一个屏幕与LVGL的对接,当你换其他的屏幕是基本上也是这样子的操作,前提是屏幕驱动文件一定要适配成功。

案例测试

官方案例demo函数 添加官方demo代码,打开LV_USE_DEMO_WIDGETS宏定义

在这里插入图片描述
在这里插入图片描述

#include "main.h"  #include "lvgl_timer.h"
LoopFunction loopFunction[MAX_INIT_FUNCTIONS];
int loopFunctionCount = 0;void callInitFunctions(void){uint8_t i ;for(i = 0 ; i<loopFunctionCount;i++){loopFunction<i>();}
}/******************************************************************************
*@brief : main program
*@param : none
*@return: none
******************************************************************************/#include "lvgl.h"
#include "lv_port_disp.h"
#include "lv_port_indev.h"
#include "lv_demo_widgets.h"
#include "lv_examples.h"int main(void)
{HAL_Init();SystemClock_Config();BSP_UART_Init();TIM6_Init();//LVGL初始化lv_init();//显示器初始化lv_port_disp_init();//界面生成lv_demo_widgets();while(1){lv_task_handler();HAL_Delay(5);}}

编写自定义LVGL显示代码

/******************************************************************************
*@file: main.c
*@brief : main program
******************************************************************************/
#include "main.h"  #include "lvgl_timer.h"
LoopFunction loopFunction[MAX_INIT_FUNCTIONS];
int loopFunctionCount = 0;void callInitFunctions(void){uint8_t i ;for(i = 0 ; i<loopFunctionCount;i++){loopFunction<i>();}
}/******************************************************************************
*@brief : main program
*@param : none
*@return: none
******************************************************************************/#include "lvgl.h"
#include "lv_port_disp.h"
#include "lv_port_indev.h"
#include "lv_demo_widgets.h"
#include "lv_examples.h"
static void lv_ex_label_1(void)
{/* Create a screen */lv_obj_t * scr = lv_obj_create(NULL);lv_scr_load(scr);lv_obj_set_style_bg_color(scr,lv_palette_main(LV_PALETTE_ORANGE),0);lv_obj_align(scr,LV_ALIGN_CENTER,0,0);/* Create a button */lv_obj_t * btn = lv_btn_create(scr);lv_obj_align(btn, NULL, LV_ALIGN_CENTER, 40);/* Create a label for the button */lv_obj_t * label = lv_label_create(btn);lv_label_set_text(label, "Hello EEWORLD !");    /* Create a button */lv_obj_t * btn1 = lv_btn_create(scr);lv_obj_align(btn1, NULL, LV_ALIGN_CENTER, 90);/* Create a label for the button */lv_obj_t * label1 = lv_label_create(btn1);lv_label_set_text(label1, "By End 2024.01.24!");    /* Create a button */lv_obj_t * btn2 = lv_btn_create(scr);lv_obj_align(btn2, NULL, LV_ALIGN_CENTER, 140);/* Create a label for the button */lv_obj_t * label2 = lv_label_create(btn2);lv_label_set_text(label2, "ACM32G103-Board Testing");    
}int main(void)
{HAL_Init();SystemClock_Config();BSP_UART_Init();TIM6_Init();//LVGL初始化lv_init();//显示器初始化lv_port_disp_init();//界面生成lv_ex_label_1();while(1){lv_task_handler();HAL_Delay(5);}}

测试效果

在这里插入图片描述
在这里插入图片描述

这篇关于航芯ACM32G103开发板评测 06 1.28圆形屏幕 LVGL移植的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/689893

相关文章

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

使用Python实现获取屏幕像素颜色值

《使用Python实现获取屏幕像素颜色值》这篇文章主要为大家详细介绍了如何使用Python实现获取屏幕像素颜色值,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、一个小工具,按住F10键,颜色值会跟着显示。完整代码import tkinter as tkimport pyau

自研四振子全向增益天线! 中兴问天BE6800Pro+路由器拆机和详细评测

《自研四振子全向增益天线!中兴问天BE6800Pro+路由器拆机和详细评测》中兴问天BE6800Pro+路由器已经上市,新品配备自研四振子全向增益天线,售价399元,国补到手339.15元,下面我们... 中兴问天BE6800Pro+路由器自上市以来,凭借其“旗舰性能,中端价格”的定位,以及搭载三颗自研芯片

macOS Sequoia 15.5 发布: 改进邮件和屏幕使用时间功能

《macOSSequoia15.5发布:改进邮件和屏幕使用时间功能》经过常规Beta测试后,新的macOSSequoia15.5现已公开发布,但重要的新功能将被保留到WWDC和... MACOS Sequoia 15.5 正式发布!本次更新为 Mac 用户带来了一系列功能强化、错误修复和安全性提升,进一步增

Android实现两台手机屏幕共享和远程控制功能

《Android实现两台手机屏幕共享和远程控制功能》在远程协助、在线教学、技术支持等多种场景下,实时获得另一部移动设备的屏幕画面,并对其进行操作,具有极高的应用价值,本项目旨在实现两台Android手... 目录一、项目概述二、相关知识2.1 MediaProjection API2.2 Socket 网络

使用Python实现一键隐藏屏幕并锁定输入

《使用Python实现一键隐藏屏幕并锁定输入》本文主要介绍了使用Python编写一个一键隐藏屏幕并锁定输入的黑科技程序,能够在指定热键触发后立即遮挡屏幕,并禁止一切键盘鼠标输入,这样就再也不用担心自己... 目录1. 概述2. 功能亮点3.代码实现4.使用方法5. 展示效果6. 代码优化与拓展7. 总结1.

Python+PyQt5实现多屏幕协同播放功能

《Python+PyQt5实现多屏幕协同播放功能》在现代会议展示、数字广告、展览展示等场景中,多屏幕协同播放已成为刚需,下面我们就来看看如何利用Python和PyQt5开发一套功能强大的跨屏播控系统吧... 目录一、项目概述:突破传统播放限制二、核心技术解析2.1 多屏管理机制2.2 播放引擎设计2.3 专

Python实战之屏幕录制功能的实现

《Python实战之屏幕录制功能的实现》屏幕录制,即屏幕捕获,是指将计算机屏幕上的活动记录下来,生成视频文件,本文主要为大家介绍了如何使用Python实现这一功能,希望对大家有所帮助... 目录屏幕录制原理图像捕获音频捕获编码压缩输出保存完整的屏幕录制工具高级功能实时预览增加水印多平台支持屏幕录制原理屏幕

QT移植到RK3568开发板的方法步骤

《QT移植到RK3568开发板的方法步骤》本文主要介绍了QT移植到RK3568开发板的方法步骤,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录前言一、获取SDK1. 安装依赖2. 获取SDK资源包3. SDK工程目录介绍4. 获取补丁包二