航芯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

相关文章

笔记本电脑屏幕模糊?6招恢复屏幕清晰!

在数字化时代的浪潮中,笔记本电脑已成为我们生活、学习和工作中不可或缺的一部分。然而,当那曾经清晰明亮的屏幕逐渐变得模糊不清时,无疑给我们的使用体验蒙上了一层阴影。屏幕模糊不仅影响视觉舒适度,更可能对我们的工作效率和眼睛健康构成威胁。 遇到笔记本电脑屏幕模糊的情况时我们应该如何解决?本文将与大家分享6个简单易懂的解决方法。 方法一:调整Windows分辨率 电脑屏幕模糊显示不清晰怎

06-6.2.1 邻接矩阵法

👋 Hi, I’m @Beast Cheng 👀 I’m interested in photography, hiking, landscape… 🌱 I’m currently learning python, javascript, kotlin… 📫 How to reach me --> 458290771@qq.com 喜欢《数据结构》部分笔记的小伙伴可以订阅专栏,今后还会

LVGL快速入门笔记

目录 一、基础知识 1. 基础对象(lv_obj) 2. 基础对象的大小(size) 3. 基础对象的位置(position) 3.1 直接设置方式 3.2 参照父对象对齐 3.3 获取位置 4. 基础对象的盒子模型(border-box) 5. 基础对象的样式(styles) 5.1 样式的状态和部分 5.1.1 对象可以处于以下状态States的组合: 5.1.2 对象

lvgl_micropython development for esp32

​​​​​​上一篇博客已经编译源码生成了ESP32C3的固件lvgl_micropy_ESP32_GENERIC_C3-4.bin,这篇博客开发一个界面。 一、开发环境 1、安装开发工具 Windows安装Thonny工具,官网链接:Thonny, Python IDE for beginners。 参考博客:用MicroPython开发ESP32- 用Thonny写程序_esp32用什么

移植对话框MFC

VC版 MFC程序对话框资源移植 以下均拷贝自上面,仅用来记录 (部分有删除) 法1: Eg:将B工程调试好的对话框移植到A工程中 1.资源移植         1.1  在2017打开B工程,在工作区Resource标签页中选中Dialog文件夹下的资源文件,按Ctrl+C或点击Edit->Copy.         1.2. 关闭当前工程,注意不要关闭VC6,打开B工程(File

人工智能在数字病理切片虚拟染色以及染色标准化领域的研究进展|顶刊速递·24-06-23

小罗碎碎念 本期推文主题:人工智能在数字病理切片虚拟染色以及染色标准化领域的研究进展 这一期的推文是我发自内心觉得为数不多,特别宝贵的一篇推文,原因很简单——可参考的文献相对较少&方向非常具有研究意义&现在不卷。 数字病理方向的老师/同学应该清楚,不同中心提供的切片,染色方案是存在差异的,并且还存在各种质量问题,所以我们在数据预处理的时候,通常会先对切片的质量执行一遍筛选,然后再进行染

基于imx6ull开发板 移植opencv4.7.0

一、概述 本章节是针对opencv-4.7.0移植到Linux系统,运行在正点原子-I.MX6U ALPHA开发板 上,详细的移植流程如下。 二、环境要求 2.1 硬件环境 正点原子-I.MX6U ALPHA开发板虚拟机:VMware 2.2 软件环境 Ubuntu系统要求:20.04opencv版本: 4.7.0opencv贡献软件版本:4.x交叉工具链版本:gcc-linaro-6

conda环境的备份和移植

备份和移植 Conda 环境可以通过以下步骤实现: 克隆环境 conda create --name backup_myenv --clone myenv# 删除原环境# conda remove --name myenv --all 移植 Conda 环境 方法1:使用 environment.yml 文件移植环境 # 导出环境的依赖项conda env export --na

52、U-boot2023的移植教程

uboot:https://ftp.denx.de/pub/u-boot/ nxp-uboot:https://github.com/nxp-imx/uboot-imx 1、顶层Makefile  文件加入编译的两种方式:以xxx/xxx.c文件为例         1、使用menuconfig:               先编辑.c所在目录下的Kconfig,加入配置项xxx

将OpenCV的代码从C++移植到C语言过程小记

目录 1、需求背景2、移植成C语言2.0 移除namespace特性2.1 移除template特性2.2 移除class特性2.3 移除vector特性2.4 移除std函数2.5 移除引用传值2.6 移除auto类型推导2.7 C++中的关键词2.8 其他语言差异 3、测试和杂项3.1 C语言和C++编译兼容3.2 GCC用C语言规则编译源文件3.3 修改文件名后缀 4、最终代码