0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

使用GUI Guider工具開發(fā)嵌入式GUI應(yīng)用(3)

冬至子 ? 來源:安德魯?shù)脑O(shè)計(jì)筆記本 ? 作者:安德魯蘇 ? 2023-08-16 14:39 ? 次閱讀

引言

本節(jié)講述在GUI Guider中,應(yīng)用各種UI的基本元素,并順利部署到MCU的過程。在GUI Guider中使用各LVGL的組件時(shí),將會(huì)涉及到GUI Guider的操作,以及將某些組件額外生成的源碼添加到Keil工程中。至于具體產(chǎn)品中的UI應(yīng)用,可以是這些基本UI元素的組合使用,以實(shí)現(xiàn)更加豐富的顯示效果。

在本文中,將說明使用通過GUI Guider創(chuàng)建并使用LVGL的label組件顯示字符信息。

在GUI Guider工程中創(chuàng)建label組件

在新建GUI Guider工程搭建MCU運(yùn)行時(shí)的框架工程時(shí),曾使用了label組件實(shí)現(xiàn)在屏幕上顯示一個(gè)“Hello World”字符串的演示效果。Label是GUI Guider中最簡單的組件,可用于顯示字符。

當(dāng)需要為某個(gè)頁面添加一個(gè)顯示字符串的對(duì)象時(shí),可在編輯區(qū)域左邊的工具欄中選擇label按鈕,此時(shí),在組件窗口中就可以看到,當(dāng)前的頁面screen下出現(xiàn)了一個(gè)label_1的對(duì)象。如圖x所示。

image.png

figure-gui-using-label-1
圖x 新增label對(duì)象

雙擊在當(dāng)前頁面上出現(xiàn)的label對(duì)象,可以在編輯區(qū)域的右側(cè)激活該對(duì)象的屬性設(shè)置對(duì)話框,如圖x所示。在其中,可以執(zhí)行該對(duì)象的名字、位置、文本內(nèi)容、字體、顏色等屬性。當(dāng)然,既然是在圖形編輯界面,對(duì)象的位置也可以通過在圖形編輯區(qū)拖拽對(duì)象來調(diào)整。

image.png

figure-gui-using-label-2
圖x 編輯label對(duì)象屬性

然后,重新生成代碼。在運(yùn)行時(shí)的Keil工程已經(jīng)包含了靜態(tài)頁面的源文件,因此不用額外再執(zhí)行添加文件的操作。但實(shí)際上,這里新生成的源碼位于./gui/generated/setup_scr_screen.c文件中。有源碼如下:

/*  
 * Copyright 2023 NXP  
 * SPDX-License-Identifier: MIT  
 * The auto-generated can only be used on NXP devices  
 */  
  
#include "lvgl.h"  
#include < stdio.h >  
#include "gui_guider.h"  
#include "events_init.h"  
#include "custom.h"  
  
  
void setup_scr_screen(lv_ui *ui){  
  
 //Write codes screen  
 ui- >screen = lv_obj_create(NULL);  
 lv_obj_set_scrollbar_mode(ui- >screen, LV_SCROLLBAR_MODE_OFF);  
  
 //Set style for screen. Part: LV_PART_MAIN, State: LV_STATE_DEFAULT  
 lv_obj_set_style_bg_color(ui- >screen, lv_color_make(0xff, 0xff, 0xff), LV_PART_MAIN|LV_STATE_DEFAULT);  
 lv_obj_set_style_bg_grad_color(ui- >screen, lv_color_make(0x21, 0x95, 0xf6), LV_PART_MAIN|LV_STATE_DEFAULT);  
 lv_obj_set_style_bg_grad_dir(ui- >screen, LV_GRAD_DIR_NONE, LV_PART_MAIN|LV_STATE_DEFAULT);  
 lv_obj_set_style_bg_opa(ui- >screen, 0, LV_PART_MAIN|LV_STATE_DEFAULT);  
  
 //Write codes screen_label_1  
 ui- >screen_label_1 = lv_label_create(ui- >screen);  
 lv_obj_set_pos(ui- >screen_label_1, 51, 68);  
 lv_obj_set_size(ui- >screen_label_1, 218, 43);  
 lv_obj_set_scrollbar_mode(ui- >screen_label_1, LV_SCROLLBAR_MODE_OFF);  
 lv_label_set_text(ui- >screen_label_1, "Hello World");  
 lv_label_set_long_mode(ui- >screen_label_1, LV_LABEL_LONG_WRAP);  
  
 //Set style for screen_label_1. Part: LV_PART_MAIN, State: LV_STATE_DEFAULT  
 lv_obj_set_style_radius(ui- >screen_label_1, 0, LV_PART_MAIN|LV_STATE_DEFAULT);  
 lv_obj_set_style_bg_color(ui- >screen_label_1, lv_color_make(0x7c, 0x00, 0xff), LV_PART_MAIN|LV_STATE_DEFAULT);  
 lv_obj_set_style_bg_grad_color(ui- >screen_label_1, lv_color_make(0x21, 0x95, 0xf6), LV_PART_MAIN|LV_STATE_DEFAULT);  
 lv_obj_set_style_bg_grad_dir(ui- >screen_label_1, LV_GRAD_DIR_NONE, LV_PART_MAIN|LV_STATE_DEFAULT);  
 lv_obj_set_style_bg_opa(ui- >screen_label_1, 255, LV_PART_MAIN|LV_STATE_DEFAULT);  
 lv_obj_set_style_shadow_width(ui- >screen_label_1, 0, LV_PART_MAIN|LV_STATE_DEFAULT);  
 lv_obj_set_style_shadow_color(ui- >screen_label_1, lv_color_make(0x21, 0x95, 0xf6), LV_PART_MAIN|LV_STATE_DEFAULT);  
 lv_obj_set_style_shadow_opa(ui- >screen_label_1, 255, LV_PART_MAIN|LV_STATE_DEFAULT);  
 lv_obj_set_style_shadow_spread(ui- >screen_label_1, 0, LV_PART_MAIN|LV_STATE_DEFAULT);  
 lv_obj_set_style_shadow_ofs_x(ui- >screen_label_1, 0, LV_PART_MAIN|LV_STATE_DEFAULT);  
 lv_obj_set_style_shadow_ofs_y(ui- >screen_label_1, 0, LV_PART_MAIN|LV_STATE_DEFAULT);  
 lv_obj_set_style_text_color(ui- >screen_label_1, lv_color_make(0xff, 0xff, 0xff), LV_PART_MAIN|LV_STATE_DEFAULT);  
 lv_obj_set_style_text_font(ui- >screen_label_1, &lv_font_montserratMedium_32, LV_PART_MAIN|LV_STATE_DEFAULT);  
 lv_obj_set_style_text_letter_space(ui- >screen_label_1, 2, LV_PART_MAIN|LV_STATE_DEFAULT);  
 lv_obj_set_style_text_line_space(ui- >screen_label_1, 0, LV_PART_MAIN|LV_STATE_DEFAULT);  
 lv_obj_set_style_text_align(ui- >screen_label_1, LV_TEXT_ALIGN_CENTER, LV_PART_MAIN|LV_STATE_DEFAULT);  
 lv_obj_set_style_pad_left(ui- >screen_label_1, 0, LV_PART_MAIN|LV_STATE_DEFAULT);  
 lv_obj_set_style_pad_right(ui- >screen_label_1, 0, LV_PART_MAIN|LV_STATE_DEFAULT);  
 lv_obj_set_style_pad_top(ui- >screen_label_1, 8, LV_PART_MAIN|LV_STATE_DEFAULT);  
 lv_obj_set_style_pad_bottom(ui- >screen_label_1, 0, LV_PART_MAIN|LV_STATE_DEFAULT);  
}

此時(shí),可以通過預(yù)覽頁面,看到本頁面的靜態(tài)顯示效果。還可以通過運(yùn)行模擬器,在GUI Guider中模擬UI程序運(yùn)行時(shí)的動(dòng)態(tài)效果(如果有動(dòng)態(tài)效果)。如圖x所示。

image.png

figure-gui-using-label-3
圖x 預(yù)覽編輯label對(duì)象的效果

編譯MCU工程并下載到開發(fā)板

編譯對(duì)應(yīng)的Keil工程,啟動(dòng)針對(duì)代碼量的優(yōu)化,看下對(duì)存儲(chǔ)空間的占用。

Build started: Project: project  
*** Using Compiler 'V6.18', folder: 'C:Keil_v5ARMARMCLANGBin'  
Build target 'Target 1'  
compiling clock_init.c...  
compiling board_init.c...  
compiling hal_crc.c...  
compiling lcd_port.c...  
compiling pin_init.c...  
compiling lcd.c...  
...  
compiling events_init.c...  
compiling gui_guider.c...  
compiling lv_font_montserratMedium_16.c...  
compiling lv_table.c...  
compiling setup_scr_screen.c...  
compiling lv_font_montserratMedium_32.c...  
compiling lv_textarea.c...  
linking...  
Program Size: Code=154616 RO-data=64380 RW-data=148 ZI-data=29100    
".Objectsproject.axf" - 0 Error(s), 0 Warning(s).  
Build Time Elapsed:  00:00:14

下載程序到MCU并運(yùn)行,可以看到,開發(fā)板上的顯示屏上也成功顯示了“同款”圖像。如圖x所示。

image.png

figure-gui-using-label-4-mini
圖x 在開發(fā)板上運(yùn)行UI顯示label對(duì)象

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 存儲(chǔ)器
    +關(guān)注

    關(guān)注

    38

    文章

    7492

    瀏覽量

    163833
  • 模擬器
    +關(guān)注

    關(guān)注

    2

    文章

    875

    瀏覽量

    43223
  • GUI
    GUI
    +關(guān)注

    關(guān)注

    3

    文章

    660

    瀏覽量

    39676
  • MCU控制器
    +關(guān)注

    關(guān)注

    0

    文章

    27

    瀏覽量

    6885
  • LVGL
    +關(guān)注

    關(guān)注

    1

    文章

    83

    瀏覽量

    2969
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    使用GUI Guider工具在MCU上開發(fā)嵌入式GUI應(yīng)用 (1)

    LVGL是一個(gè)開源免費(fèi)(MIT許可)的嵌入式GUI組件,支持觸摸屏操作,移植簡單方便,開發(fā)者一直在不斷完善更新。
    的頭像 發(fā)表于 08-16 14:29 ?3149次閱讀
    使用<b class='flag-5'>GUI</b> <b class='flag-5'>Guider</b><b class='flag-5'>工具</b>在MCU上<b class='flag-5'>開發(fā)</b><b class='flag-5'>嵌入式</b><b class='flag-5'>GUI</b>應(yīng)用 (1)

    使用GUI Guider工具開發(fā)嵌入式GUI應(yīng)用(2)

    GUI Guider本質(zhì)上是一個(gè)方便嵌入式開發(fā)者基于LVGL開發(fā)GUI應(yīng)用的源碼生成器工具,其作
    的頭像 發(fā)表于 08-16 14:36 ?3533次閱讀
    使用<b class='flag-5'>GUI</b> <b class='flag-5'>Guider</b><b class='flag-5'>工具</b><b class='flag-5'>開發(fā)</b><b class='flag-5'>嵌入式</b><b class='flag-5'>GUI</b>應(yīng)用(2)

    圖形界面開發(fā)工具GUI Guider的使用教程

    GUI Guider是NXP推出的一款功能強(qiáng)大且對(duì)用戶非常友好的圖形界面開發(fā)工具。目前最新版本是1.6.1。
    的頭像 發(fā)表于 12-20 09:49 ?1.9w次閱讀
    圖形界面<b class='flag-5'>開發(fā)工具</b><b class='flag-5'>GUI</b> <b class='flag-5'>Guider</b>的使用教程

    基于ARM-Linux的嵌入式系統(tǒng)GUI開發(fā)研究

    目前嵌入式系統(tǒng)中的GUI開發(fā)已經(jīng)成為研究的熱點(diǎn),本文以Intel 公司Xscale PXA255 為內(nèi)核的XSBase255嵌入式平臺(tái),以ARM-Linux 為操作系統(tǒng),接著介紹對(duì)
    發(fā)表于 06-29 09:37 ?15次下載

    基于Linux的嵌入式GUI設(shè)計(jì)研究

    本文介紹了嵌入式圖形用戶界面(Embedded Graphics User Interface,EmbeddedGUI)的結(jié)構(gòu)和設(shè)計(jì)思想,詳細(xì)說明了嵌入式GUI 的三層結(jié)構(gòu):GAL 和IAL 層、
    發(fā)表于 08-12 08:49 ?21次下載

    嵌入式圖形系統(tǒng)μc/GUI的移植和開發(fā)

    嵌入式圖形系統(tǒng)μc/GUI的移植和開發(fā) 摘要  嵌入式系統(tǒng)的開發(fā)已成為新的行業(yè)熱點(diǎn),而嵌入式
    發(fā)表于 12-25 17:55 ?1150次閱讀
    <b class='flag-5'>嵌入式</b>圖形系統(tǒng)μc/<b class='flag-5'>GUI</b>的移植和<b class='flag-5'>開發(fā)</b>

    Linux GUI嵌入式開發(fā)有什么新的研究方向

    對(duì)比嵌入式 Linux 常見 GUI 方案,以及其它嵌入式 GUI 方案,AWTK 在嵌入式 Linux 系統(tǒng)上也極具優(yōu)勢,也能能很好的解決
    發(fā)表于 11-06 11:28 ?1195次閱讀
    Linux <b class='flag-5'>GUI</b><b class='flag-5'>嵌入式開發(fā)</b>有什么新的研究方向

    免費(fèi)的GUI Guider又出新版本!看看它為嵌入式圖形開發(fā),帶來哪些新玩法~

    GUI Guider是恩智浦推出的一款用戶友好的嵌入式圖形應(yīng)用開發(fā)工具。它使用開源LVGL圖形庫作為底層圖形引擎,提供可視化所見即所得的拖放UI編輯器,能夠快速、輕松地為
    的頭像 發(fā)表于 11-25 08:15 ?7263次閱讀

    GUI-Guider生成工程移植MCU

    GUI Guider 是恩智浦為 LVGL 開發(fā)了一個(gè)上位機(jī)GUI 設(shè)計(jì)工具,可以通過拖放控件的方式設(shè)計(jì) LVGL
    發(fā)表于 02-22 16:18 ?2次下載

    GUI Guider v1.5.0正式發(fā)布!它為嵌入式圖形開發(fā)又帶來哪些新功能,一起來探索吧~

    GUI Guider是恩智浦研發(fā)的一款用戶友好、跨平臺(tái)、支持多語言的嵌入式圖形應(yīng)用開發(fā)工具。它是基于開源的LVGL圖形庫,提供可視化所見即所得的拖放UI設(shè)計(jì)器,能夠快速輕松地為
    的頭像 發(fā)表于 02-24 08:10 ?3315次閱讀

    GUI Guider v1.6.0正式發(fā)布:更多嵌入式HMI開發(fā)新功能,等你來探索!

    新版GUI Guider發(fā)布 GUI Guider 是恩智浦研發(fā)的一款用戶友好、跨平臺(tái)、支持多語言的嵌入式人機(jī)交互應(yīng)用
    的頭像 發(fā)表于 08-04 08:05 ?1797次閱讀

    免費(fèi)又簡單!新版本GUI Guider發(fā)布,速來體驗(yàn)不一樣的嵌入式HMI開發(fā)

    新版本GUI Guider發(fā)布 作為恩智浦研發(fā)的一款用戶友好、跨平臺(tái)、支持多語言的嵌入式人機(jī)交互應(yīng)用開發(fā)工具,GUI
    的頭像 發(fā)表于 10-13 08:10 ?2762次閱讀
    免費(fèi)又簡單!新版本<b class='flag-5'>GUI</b> <b class='flag-5'>Guider</b>發(fā)布,速來體驗(yàn)不一樣的<b class='flag-5'>嵌入式</b>HMI<b class='flag-5'>開發(fā)</b>

    嵌入式GUI特訓(xùn)營』開營啦!是學(xué)霸就有獎(jiǎng)拿,快來挑戰(zhàn)一下!

    ! ↓↓↓ 點(diǎn)擊這里,馬上入營! 精品課程 在“嵌入式GUI特訓(xùn)營”中,通過NXP資深工程師主講的7堂精品技術(shù)課程,你將會(huì)—— 了解GUI熱點(diǎn)技術(shù)和開發(fā)技巧 結(jié)識(shí)免費(fèi)的
    的頭像 發(fā)表于 12-01 09:15 ?460次閱讀
    『<b class='flag-5'>嵌入式</b><b class='flag-5'>GUI</b>特訓(xùn)營』開營啦!是學(xué)霸就有獎(jiǎng)拿,快來挑戰(zhàn)一下!

    GUI Guider新版本發(fā)布,嵌入式GUI開發(fā)體驗(yàn)升級(jí)

    作為恩智浦著力打造的一款嵌入式人機(jī)交互應(yīng)用開發(fā)工具,GUI Guider又迎來了一個(gè)新版本!最新發(fā)布的GUI
    發(fā)表于 03-29 09:47 ?1686次閱讀
    <b class='flag-5'>GUI</b> <b class='flag-5'>Guider</b>新版本發(fā)布,<b class='flag-5'>嵌入式</b><b class='flag-5'>GUI</b><b class='flag-5'>開發(fā)</b>體驗(yàn)升級(jí)

    GUI Guider全新版本上線

    GUI Guider v1.8.1上線啦!這一版本為嵌入式HMI開發(fā)帶來了多項(xiàng)新功能和改進(jìn),旨在為您提供更加高效、便捷的嵌入式HMI
    的頭像 發(fā)表于 10-14 11:37 ?1365次閱讀