衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

littleVGL開源圖形庫的主要特性與移植過程

嵌入式單片機 ? 來源:嵌入式單片機 ? 作者:梁工17737718720 ? 2022-07-10 16:29 ? 次閱讀

1.littleVGL介紹

LVGL(Light and Versatile Graphics Library)是一個免費的開源圖形庫,提供創建具有易于使用的圖形元素、漂亮的視覺效果和低內存占用的嵌入式 GUI 所需的一切。

1.1 littleVGL 的主要特性如下:

? 具有非常豐富的內置控件, buttons, charts, lists, sliders, images

? 高級圖形效果:動畫,反鋸齒,透明度,平滑滾動

? 支持多種輸入設備, touchpad, mouse, keyboard, encoder

? 支持多語言的 UTF-8 編碼

? 支持多個和多種顯示設備,例如同步顯示在多個彩色屏或單色屏上

? 完全自定制的圖形元素

? 硬件獨立于任何微控制器或顯示器

? 可以縮小到最小內存 (64 kB Flash, 16 kB RAM)

? 支持操作系統、外部儲存和 GPU(非必須)

? 僅僅單個幀緩沖設備就可以呈現高級視覺特效

? 使用 C 編寫以獲得最大兼容性(兼容 C++)

? 支持 PC 模擬

? 為加速 GUI 設計,提供教程,案例和主題,支持響應式布局

? 提供了在線和離線文檔

? 基于自由和開源的 MIT 協議

1.2 LVGL移植過程

獲取LVGL官方驅動,例程。

https://gitcode.net/mirrors/lvgl/lvgl/-/tree/v6.0

LVGL版本眾多,更新很快,初學者建議使用老版本,資料多,便于學習。

現在我們獲取6.0版本。

f486c4ec-f774-11ec-ba43-dac502259ad0.png

https://gitcode.net/mirrors/lvgl/lv_examples

獲取LVGL官方例程。

f4964a84-f774-11ec-ba43-dac502259ad0.png

開始移植,先準備好一個STM32工程,新建LVGLLVGL_APP文件夾

LVGL :存放官方驅動和例程等庫文件

LVGL_APP :存放自己的程序

下載的官方驅動文件和例程解壓并存放在LVGL文件夾中,接著把 LVGL/lvgl-v6.0/lv_conf_template.h LVGL/lv_examples-v6.0/lv_ex_conf_templ.h

倆個配置模板文件統統拷貝到 LVGL目錄下,然后對這個 2 文件分別重命名為

lv_conf.h lv_ex_conf.h接著還要在LVGL目錄下新建一個 lvgl_driver子目錄,這個目錄是用來放底層驅動文件的

f4a3e40a-f774-11ec-ba43-dac502259ad0.png

找到LVGL/lvglv-6.0/porting里面的

lv_port_disp_template.c,lv_port_disp_template.h,

然后將兩個個文件拷貝到 LVGLlvgl_driver 目錄下面,并分別重命名為

lv_port_disp.c, lv_port_disp.h,

f4b293a6-f774-11ec-ba43-dac502259ad0.png

接著我們打開 Keil 工程,點擊圖標,打開分組管理面板, Groups 欄下新建 LVGLLVGL_APP LVGL_driver,選中 LVGL分組,接著點擊 Add Files 把,LVGLlvgl-v6.0src

文件下的所有c文件全部添加。

f4d04c34-f774-11ec-ba43-dac502259ad0.png

新建LVGL_driver,將底層驅動文件添加進去。

f4f92b4a-f774-11ec-ba43-dac502259ad0.png

點擊圖標,選擇c/c++選項,將頭文件目錄添加,如下圖所示:

打開lv_conf.h文件。

10行:0修改為1,使整個配置文件生效。

#if 1

23、24行:LV_HOR_RES_MAX LV_HOR_RES_MAX這個是告訴LVGL顯示屏分辨率多大,請根據自己的屏幕大小將分辨率寫入其中

LV_HOR_RES_MAX240

LV_HOR_RES_MAX320

32行:LV_COLOR_DEPTH 顏色深度,屏幕采用RGB565,選擇16

#define LV_COLOR_DEPTH 16

56行:LV_DPI 的值,默認值為 100,我們把他設置到 60,這個宏是用來調節界面縮 放比例的,此值越大,控件分布的就越散,控件自身的間隔也會變大

#define LV_DPI 60

72行:LV_MEM_SIZE 的大小,這個就是控制 littleVGL中所謂的動態數據堆的大小,是用來給控件的創建動態分配空間的,我們這里設置為 20KB 的大小

#define LV_MEM_SIZE(20U * 1024U)

145行:LV_USE_GPU ,我們把它設置為 0,即不使能 GPU 功能

#define LV_USE_GPU 0

148行:LV_USE_FILESYSTEM ,設置為0,即不使能文件系統 的功能

#define LV_USE_FILESYSTEM 0

234行:

LV_THEME_LIVE_UPDATE,

LV_USE_THEME_TEMPL,

LV_USE_THEME_DEFAULT,

LV_USE_THEME_ALIEN,

LV_USE_THEME_NIGHT,

LV_USE_THEME_MONO,

LV_USE_THEME_MATERIAL,

LV_USE_THEME_ZEN,

LV_USE_THEME_NEMO

這些宏都是跟littleVGL自帶的主題相關的,如果要演示官方自帶的例程,這些全部使能,注意,在實際項目中,我們一般最多使能一個,如果我們項目根本就用不到其自帶的主題,那么我們應該把這些宏全部禁止,因為這樣可以節省 flash ram現在我們要演示官方例程,可以把他們全部使能。

修改 lv_ex_conf.h 文件

9行:0修改為1 使能整個文件

#if 1

然后把下面這些宏設定為1,其余保持不變即可。

LV_EX_KEYBOARD,

LV_EX_MOUSEWHEEL,

LV_USE_TESTS,

LV_USE_TUTORIALS,

LV_USE_BENCHMARK,

LV_USE_DEMO,

LV_USE_TERMINAL

lVGL 提供心跳節拍

Lvgl有自己的任務系統,所以在此咱們為LVGL提供一個系統基準時間。

打開delay.c,添加#include "lvgl.h"頭文件,在系統定時器中斷服務函數里面添加lv_tick_inc(1);

(這里可以使用任何一個定時器的中斷服務函數作為時間基準,并不是只能是系統定時器。但是要注意,中斷服務函數需每1ms觸發一次。)

編譯 工程報錯。

仔細觀察錯誤,這一共是兩種錯誤。

第一個錯誤:點擊跳轉,lv_conf.h文件 485行。

將頭文件lvgl修改為lvgl-v6.0

f5160ad0-f774-11ec-ba43-dac502259ad0.png

第二個錯:

將這5個文件,將頭文件都修改為#include "lvgl.h"即可

f52acfc4-f774-11ec-ba43-dac502259ad0.png

再編譯一下,就只剩下警告,沒有錯誤了,接下來我們來解決警告。在這些警告中,仔細看其實就只有 68, 111, 550 這三種警告,我可以告訴大家,這個警告對我們項目沒有任何影響的,但是強迫癥患者看著就是難受,辛虧 Keil 可以通過設置,把某種警告給屏蔽掉,點擊

圖標,切換到 C/C++選項卡, Misc Controls 中填入 --diag_suppress=68 --diag_supp

ress=111 --diag_suppress=550,如下圖所示.

f550184c-f774-11ec-ba43-dac502259ad0.png

點擊確定,再次編譯就沒有警告了。

修改底層驅動:打開lv_port_disp.c文件

7行:0修改為1

12行:頭文件修改為:#include "lv_port_disp.h"

f576ce7e-f774-11ec-ba43-dac502259ad0.png

然后就是修改

void lv_port_disp_init(void)

static void disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p)

這兩個函數。

第一個函數是用來給LVGL提供一個繪制對象的緩沖區。內容修改如下:

void lv_port_disp_init(void)

{

/* Example for 1) */

static lv_disp_buf_t disp_buf_1;

static lv_color_t buf1_1[LV_HOR_RES_MAX * 10]; /*A buffer for 10 rows*/

lv_disp_buf_init(&disp_buf_1, buf1_1, NULL, LV_HOR_RES_MAX * 10); /*Initialize the display buffer*/

/*-----------------------------------

* Register the display in LittlevGL

*----------------------------------*/

lv_disp_drv_t disp_drv; /*Descriptor of a display driver*/

lv_disp_drv_init(&disp_drv); /*Basic initialization*/

/*Set up the functions to access to your display*/

/*Set the resolution of the display*/

disp_drv.hor_res = LV_HOR_RES_MAX;

disp_drv.ver_res = LV_VER_RES_MAX;

/*Used to copy the buffer's content to the display*/

disp_drv.flush_cb = disp_flush;

/*Set a display buffer*/

disp_drv.buffer = &disp_buf_1;

/*Finally register the driver*/

lv_disp_drv_register(&disp_drv);

}

第二個函數是為了給LCD屏寫入數據顯示的函數,所以咱們調用LCD顯示函數。如下:

static void disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p)

{

/*The most simple case (but also the slowest) to put all pixels to the screen one-by-one*/

int32_t x;

int32_t 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)*/

//這個地方需要寫LCD的底層驅動函數

//可以寫畫點函數

LCD_Fast_DrawPoint(x,y,color_p->full);

color_p++;

}

}

/* IMPORTANT!!!

* Inform the graphics library that you are ready with the flushing*/

lv_disp_flush_ready(disp);

}

然后修改h文件:

f58ba4ca-f774-11ec-ba43-dac502259ad0.png

至此,顯示底層驅動就修改好了。

LVGL移植成功。

測試:寫如下函數:

void Lglv_text(void)

{

obj1 = lv_obj_create(lv_scr_act(),NULL);//創建對象1

lv_obj_set_pos(obj1,20,20);//設置坐標位置

lv_obj_set_size(obj1,100,100);//設置大小

obj2 = lv_obj_create(lv_scr_act(),NULL);//創建對象2

lv_obj_set_size(obj2,50,50);//設置大小

lv_obj_align(obj2,NULL,LV_ALIGN_CENTER,0,0);//設置坐標位置為屏幕中央。

}

在主函數里面調用:

f5abeffa-f774-11ec-ba43-dac502259ad0.png

編譯下載:出現兩個基礎的對象。

f5c3f1b8-f774-11ec-ba43-dac502259ad0.png

到此,LVGL移植成功

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • mcu
    mcu
    +關注

    關注

    146

    文章

    17317

    瀏覽量

    352631
  • GUI
    GUI
    +關注

    關注

    3

    文章

    662

    瀏覽量

    39889
  • 圖形庫
    +關注

    關注

    0

    文章

    18

    瀏覽量

    9045
  • LVGL
    +關注

    關注

    1

    文章

    91

    瀏覽量

    3081

原文標題:一個現在很多MCU都用的一個GUI(圖形化設計)

文章出處:【微信號:qrsworld,微信公眾號:嵌入式單片機】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    嵌入式界面神器littleVGL介紹

    littleVGL 是近幾年開始流行的一個小型開源嵌入式 GUI ,具有界面精美,消耗資源小,可移植度高,響應式布局等特點,全采用純 c
    發表于 06-30 10:00 ?3516次閱讀
    嵌入式界面神器<b class='flag-5'>littleVGL</b>介紹

    開源GUI LittlevGL移植分享的嗎

    無意間發現一個開源的GUILittlevGL官方地址:https://littlevgl.com/STM32F429Discovery移植
    發表于 06-03 04:35

    LittlevGL在AT32上的移植說明

    ;lt;span]LittlevGL 是一個開源免費的GUI,支持觸摸屏操作,移植簡單方便,開發者一直在不斷完善更新。這篇應用筆記描述如何將LittlevGL
    發表于 09-13 17:15

    LittlevGL 開源圖形 精選資料分享

    LittlevGL 項目作者是來自匈牙利首都布達佩斯的 Gábor Kiss-Vámosi 。Kiss 在2009年開始寫 LittlevGL,2016年重寫并發布在 GitHub 上。官網
    發表于 07-30 07:33

    littleVGL主要特性有哪些

    一、前言littlevgl是一個小型開源嵌入式 GUI (簡稱LVGL),界面精美,消耗資源小,可移植度高,支持響應式布局,全采用純 c
    發表于 08-23 06:59

    STM32移植LittleVgl

    STM32移植LittleVgl(LVGL)嵌入式開源圖形目錄STM32移植
    發表于 08-24 07:16

    Littlevgl介紹與移植

    Littlevgl介紹與移植1、簡介 Littlevgl是一種純C語言編寫的GUI,控件多且美,移植簡單,只要對接一個顯示接口,需要觸摸的再加一個觸摸控制接口。2、
    發表于 10-27 09:05

    LittlevGL開源圖形有哪些特性

    LittlevGL是什么?LittlevGL開源圖形有何功能?LittlevGL
    發表于 11-05 09:18

    LittlevGL的相關資料分享

    LittleVgl,一款開源嵌入式圖形用戶界面。https://littlevgl.cn/使用簡單小巧,界面也漂亮。很適合用在嵌入式上。在
    發表于 11-05 09:09

    LittleVGL v7.5.0在STM32F103x上的移植過程

    LittlevGL是一個免費的開源圖形,提供了創建嵌入式GUI所需的一切,具有易于使用的圖形元素、漂亮的視覺效果和低內存占用。最低要求:N
    發表于 01-11 06:50

    如何移植littleVGL

    如何移植littleVGL
    發表于 01-20 07:50

    免費開源的GUI:LittlevGL介紹、下載、配置、編譯

    免費開源GUI:LittlevGL介紹、下載、配置、編譯
    的頭像 發表于 02-03 15:12 ?2.4w次閱讀
    免費<b class='flag-5'>開源</b>的GUI:<b class='flag-5'>LittlevGL</b>介紹、下載、配置、編譯

    實戰貼:開源GUI LittlevGL在MCU上的移植

    前幾天看見正點原子發布了LittlevGL的教程,這個GUI貌似又火了,于是應讀者要求,我也來移植一下,將正點原子的這個GUI移植到小熊派上,不到一會功夫就搞定了,總的來說挺簡單,沒遇到...
    發表于 10-27 14:06 ?10次下載
    實戰貼:<b class='flag-5'>開源</b>GUI <b class='flag-5'>LittlevGL</b>在MCU上的<b class='flag-5'>移植</b>

    嵌入式linux之go語言開發(十三)LittlevGL,漂亮的嵌入式GUI的go語言綁定

    LittleVgl,一款開源嵌入式圖形用戶界面。https://littlevgl.cn/使用簡單小巧,界面也漂亮。很適合用在嵌入式上。在
    發表于 11-02 10:21 ?11次下載
    嵌入式linux之go語言開發(十三)<b class='flag-5'>LittlevGL</b>,漂亮的嵌入式GUI的go語言綁定

    誰說單片機不能圖形編程,介紹MCU的TOP 5圖形GUI

    LittlevGL(LVGL) 是一款開源的嵌入式圖形用戶界面(GUI),專為嵌入式系統設計。LVGL以其輕量級、靈活性和強大的功能而備受開發者青睞,資源夠的情況下可
    的頭像 發表于 12-07 10:42 ?8696次閱讀
    誰說單片機不能<b class='flag-5'>圖形</b>編程,介紹MCU的TOP 5<b class='flag-5'>圖形</b>GUI<b class='flag-5'>庫</b>!
    百家乐官网游戏新| 大发888网址怎么找| 七胜百家乐官网娱乐网| 大发888娱乐官方下载| 玩百家乐官网的玩法技巧和规则| 青鹏棋牌游戏下载| 百家乐投资心得| 清水河县| 百家乐机器出千| 百家乐官网鞋业| 顶级赌场官网下载| CEO百家乐官网的玩法技巧和规则 喜达百家乐官网的玩法技巧和规则 | bet365苹果| KTV百家乐官网的玩法技巧和规则| 丰禾线上娱乐| 百家乐视频游戏网址| 百家乐官网在线手机玩| 福海县| 威尼斯人娱乐城好玩吗| 网上百家乐追杀| 甘孜县| 全讯网社区| 最新百家乐官网出千赌具| 大发888 备用6222.co| 赌王百家乐官网的玩法技巧和规则 | 百家乐最新的投注方法| 百家乐园百乐彩| 百家乐娱乐平台备用网址| 谁会玩百家乐官网的玩法技巧和规则 | 百家乐官网美女荷官| 大发888娱乐城都有啥扑克牌游戏| 百家乐网投开户| 澳门百家乐官网才能| 网上娱乐城| 盈得利百家乐娱乐城| 百家乐游戏机子| 百家乐必胜法| 水果机单机版| 六合彩百家乐有什么平码| 游戏厅百家乐官网技巧| 最新棋牌游戏|