LVGL移植與VS模擬器使用

一、移植文件介紹



?


二、移植部分

第一步:創建LVGL文件夾


第二步:

構造LVGL文件夾:LVGL - GUI - lvgl -?


第三步:添加文件

3.1 從examples中添加2個.c文件


3.2 從src中添加文件


draw文件?

extra文件?


第四步:?


三、Keil軟件部分

my_gui.c文件

#include "stm32f4xx.h"                  // Device header
#include "my_gui.h"
#include "lvgl.h" 
#include "lv_port_disp_template.h" 
#include "lv_port_indev_template.h" 	lv_obj_t* ta_adress;
lv_obj_t* ta_password;
lv_obj_t* label_password_r;
lv_obj_t* label_password;
lv_obj_t* label_adress_r;
lv_obj_t* label_adress;
lv_obj_t* keyboard;
lv_obj_t* btn_sure;
lv_obj_t* btn_cancel;
lv_obj_t *msgbox;
int num = 0;static void event_cb(lv_event_t* e)
{lv_event_code_t code = lv_event_get_code(e);lv_obj_t* target = lv_event_get_target(e);if(target == ta_adress){if(code == LV_EVENT_FOCUSED) //選中與鍵盤進行關聯{lv_keyboard_set_textarea(keyboard,ta_adress);}else if(code == LV_EVENT_VALUE_CHANGED){const char* txt = lv_textarea_get_text(ta_adress);if(strcmp(txt, "111") == 0)lv_label_set_text(label_adress_r, LV_SYMBOL_OK);elselv_label_set_text(label_adress_r, "");}}else if(target == ta_password){if(code == LV_EVENT_FOCUSED){lv_keyboard_set_textarea(keyboard,ta_password);}else if(code == LV_EVENT_VALUE_CHANGED){const char* txt2 = lv_textarea_get_text(ta_password);if(strcmp(txt2, "123456") == 0)lv_label_set_text(label_password_r, LV_SYMBOL_OK);elselv_label_set_text(label_password_r, "");}}
}
//
static void event_cb_msgbox(lv_event_t* e)
{lv_event_code_t code = lv_event_get_code(e);lv_obj_t *target = lv_event_get_current_target(e);const char* txt = lv_textarea_get_text(ta_adress);const char* txt3 = lv_textarea_get_text(ta_password);if(target == btn_sure){if(strcmp(txt, "111") == 0 && strcmp(txt3, "123456") == 0)lv_obj_clear_flag(msgbox, LV_OBJ_FLAG_HIDDEN);}else if(code == LV_EVENT_PRESSED){if(lv_msgbox_get_active_btn(msgbox) == 2)    /* 獲取按鈕索引 */lv_obj_add_flag(msgbox, LV_OBJ_FLAG_HIDDEN);  /* 隱藏消息框 */}
}//主程序
void my_gui(void)
{lv_init();lv_port_disp_init();lv_port_indev_init();//1.設置地址輸入文本框ta_adress = lv_textarea_create(lv_scr_act());lv_obj_set_size(ta_adress, lv_obj_get_width(lv_scr_act())/2.5, lv_obj_get_height(lv_scr_act())/12);lv_obj_align(ta_adress, LV_ALIGN_TOP_LEFT, lv_obj_get_width(lv_scr_act())/6, lv_obj_get_height(lv_scr_act())/4);lv_obj_remove_style(ta_adress, NULL, LV_PART_SCROLLBAR);//lv_textarea_set_placeholder_text(ta_adress, "adress");lv_obj_add_event_cb(ta_adress, event_cb, LV_EVENT_ALL,NULL);
//2.設置密碼輸入文本框ta_password = lv_textarea_create(lv_scr_act());lv_obj_set_size(ta_password, lv_obj_get_width(lv_scr_act())/2.5, lv_obj_get_height(lv_scr_act())/12);lv_obj_align_to(ta_password,ta_adress,LV_ALIGN_OUT_BOTTOM_MID, 0, lv_obj_get_width(lv_scr_act())/22);lv_obj_remove_style(ta_password, NULL, LV_PART_SCROLLBAR);//lv_textarea_set_password_mode(ta_password, true);//lv_textarea_set_placeholder_text(ta_password, "pick-up Code");lv_obj_add_event_cb(ta_password, event_cb, LV_EVENT_ALL,NULL);
//3.創建地址正確標簽label_adress_r = lv_label_create(lv_scr_act());lv_label_set_text(label_adress_r, "");lv_obj_set_style_text_font(label_adress_r, &lv_font_montserrat_20, LV_PART_MAIN);lv_obj_align_to(label_adress_r,ta_adress, LV_ALIGN_OUT_RIGHT_MID,lv_obj_get_width(lv_scr_act())/22,0);
//4.創建取件碼正確標簽label_password_r = lv_label_create(lv_scr_act());lv_label_set_text(label_password_r, "");lv_obj_set_style_text_font(label_password_r, &lv_font_montserrat_20, LV_PART_MAIN);lv_obj_align_to(label_password_r,ta_password, LV_ALIGN_OUT_RIGHT_MID,lv_obj_get_width(lv_scr_act())/22,0);
//5.創建地址標簽label_adress = lv_label_create(lv_scr_act());lv_label_set_text(label_adress, "adress");lv_obj_set_style_text_font(label_adress, &lv_font_montserrat_14, LV_PART_MAIN);lv_obj_align_to(label_adress,ta_adress, LV_ALIGN_OUT_LEFT_MID,0,0);
//6.創建取件碼標簽label_password = lv_label_create(lv_scr_act());lv_label_set_text(label_password, "Code");lv_obj_set_style_text_font(label_password, &lv_font_montserrat_14, LV_PART_MAIN);lv_obj_align_to(label_password,ta_password, LV_ALIGN_OUT_LEFT_MID,0,0);
//7.確定按鈕btn_sure = lv_btn_create(lv_scr_act());lv_obj_set_size(btn_sure, lv_obj_get_width(lv_scr_act())/6, lv_obj_get_height(lv_scr_act())/8);lv_obj_align_to(btn_sure, ta_password, LV_ALIGN_OUT_BOTTOM_LEFT, 0, lv_obj_get_height(lv_scr_act())/9);lv_obj_t* btn_sure_label = lv_label_create(btn_sure);lv_obj_align(btn_sure_label, LV_ALIGN_CENTER, 0 ,0 );lv_label_set_text(btn_sure_label, "LOGIN");lv_obj_set_style_text_font(btn_sure_label, &lv_font_montserrat_12, LV_PART_MAIN);lv_obj_add_event_cb(btn_sure, event_cb_msgbox, LV_EVENT_PRESSED,NULL);
//8.取消按鈕btn_cancel = lv_btn_create(lv_scr_act());lv_obj_set_size(btn_cancel, lv_obj_get_width(lv_scr_act())/6, lv_obj_get_height(lv_scr_act())/8);lv_obj_align_to(btn_cancel, btn_sure, LV_ALIGN_OUT_RIGHT_MID, lv_obj_get_width(lv_scr_act())/14, 0);lv_obj_t* btn_cancel_label = lv_label_create(btn_cancel);lv_obj_align(btn_cancel_label, LV_ALIGN_CENTER, 0 ,0 );lv_label_set_text(btn_cancel_label, "CANCEL");lv_obj_set_style_text_font(btn_cancel_label, &lv_font_montserrat_12, LV_PART_MAIN);
//9.消息框static const char *btns[] = { " ", " ", "OK","" };msgbox = lv_msgbox_create( lv_scr_act(), "LOGIN", "Pickup successful!", btns, true );lv_obj_align(msgbox, LV_ALIGN_CENTER, -(lv_obj_get_width(lv_scr_act())/5), 0);lv_obj_set_size(msgbox, lv_obj_get_width(lv_scr_act())/2.5, lv_obj_get_height(lv_scr_act())/2);lv_obj_add_flag(msgbox, LV_OBJ_FLAG_HIDDEN);//獲取到按鈕部分lv_obj_t* btn = lv_msgbox_get_btns(msgbox);//按鈕背景設為透明lv_obj_set_style_bg_opa(btn, 0, LV_PART_ITEMS);lv_obj_set_style_shadow_width(btn, 0, LV_PART_ITEMS);lv_obj_set_style_text_color(btn, lv_color_hex(0xff0000),LV_PART_ITEMS);lv_obj_add_event_cb(ta_adress, event_cb_msgbox, LV_EVENT_VALUE_CHANGED,NULL);lv_obj_add_event_cb(ta_password, event_cb_msgbox, LV_EVENT_VALUE_CHANGED,NULL);lv_obj_add_event_cb(msgbox, event_cb_msgbox, LV_EVENT_PRESSED,NULL);//設置鍵盤keyboard = lv_keyboard_create(lv_scr_act());lv_keyboard_set_mode(keyboard, LV_KEYBOARD_MODE_NUMBER);lv_obj_align(keyboard, LV_ALIGN_RIGHT_MID, -10, 0);lv_obj_set_size(keyboard, lv_obj_get_width(lv_scr_act())/2.5, lv_obj_get_height(lv_scr_act())/1.5);
}

main.c文件

#include "sys.h"
#include "delay.h"  
#include "usart.h"   
#include "led.h"
#include "lcd.h"
#include "key.h"  
#include "touch.h" 
#include "timer.h" 
#include "my_gui.h" int main(void)
{ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置系統中斷優先級分組2delay_init(168);  //初始化延時函數uart_init(115200);		//初始化串口波特率為115200LED_Init();					//初始化LED LCD_Init();					//LCD初始化 KEY_Init(); 				//按鍵初始化  TIM3_Int_Init(1000, 84);my_gui();while(1){delay_ms(5);lv_timer_handler();}
}

記得定義定時器,需要定時器驅動

//定時器3中斷服務函數
void TIM3_IRQHandler(void)
{if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET) //溢出中斷{LED1=!LED1;//DS1翻轉lv_tick_inc(1);}TIM_ClearITPendingBit(TIM3,TIM_IT_Update);  //清除中斷標志位
}

四、VS模擬器部分


五、實物連接部分?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/41336.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/41336.shtml
英文地址,請注明出處:http://en.pswp.cn/web/41336.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux系統安裝軟件包的方法rpm和yum詳解

起因: 本篇文章是記錄學習Centos7的歷程 關于rpm 常見命令 1)查看已經安裝的軟件包 rpm -q 軟件包名 2)查看文件的相關信息 rpm -qi 軟件包名 3)查看軟件包的依賴關系 就是說要想安裝這個軟件包,就必須把一些前…

三級_網絡技術_04_中小型網絡系統總體規劃與設計

1.下列關于路由器技術特征的描述中,正確的是()。 吞吐量是指路由器的路由表容量 背板能力決定了路由器的吞吐量 語音、視頻業務對延時抖動要求較低 突發處理能力是以最小幀間隔值來衡量的 2.下列關于路由器技術特征的描述中,正確的是()。 路由器的…

springboot公寓租賃系統-計算機畢業設計源碼03822

摘要 1 緒論 1.1 研究背景與意義 1.2選題背景 1.3論文結構與章節安排 2 公寓租賃系統系統分析 2.1 可行性分析 2.1.1 技術可行性分析 2.1.2 經濟可行性分析 2.1.3 法律可行性分析 2.2 系統功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.3 系統用例分析 2.4 系…

韋東山嵌入式linux系列-第一個實驗

1 前言 筆者使用的是韋東山STM32MP157 Pro的板子,環境搭建部分按照說明文檔配置完成。配置橋接網卡實現板子、windows、ubuntu的通信,也在開發板掛載 Ubuntu 的NFS目錄 ,這里就不再贅述了。 板子: 192.168.5.9 windows: 192.168.5.10 ubunt…

【linux】服務器創建RAID1

【linux】服務器創建RAID1 文章目錄 【linux】服務器創建RAID1一、配置介紹raid介紹raid類型RAID 0:RAID 1:RAID 5:RAID 6:二、配置RAID硬件RAID:軟件RAID:三、軟件配置RAID1(以linux為例)1.先進入管理員模式2.安裝mdadm工具3.創建raid1數組4.查看RAID數組狀態5.格式化和掛載…

機械鍵盤如何挑選

機械鍵盤的選擇是一個關鍵的決策,因為它直接影響到我們每天的打字體驗。在選擇機械鍵盤時,有幾個關鍵因素需要考慮。首先是鍵盤的鍵軸類型。常見的鍵軸類型包括藍軸、紅軸、茶軸和黑軸等。不同的鍵軸類型具有不同的觸發力、觸發點和聲音。藍軸通常具有明…

神經網絡和安全結合:一種基于神經網絡的智能攻擊檢測與防御系統;構建攻擊行為預測模型

目錄 神經網絡和安全結合 摘要 引言 理論基礎 技術實現與創新點 實驗驗證 結論與展望 一種基于神經網絡的智能攻擊檢測與防御系統 一、系統概述 二、主要功能 三、技術特點 四、應用前景 構建攻擊行為預測模型 一、構建攻擊行為預測模型的步驟 1. 數據收集 2. …

單鏈表的學習與基礎運用p

當我們在實際做項目,或者是自主開發一點小東西的時候,往往會儲存一些數據,有時候我們需要添加這些數據,有時候需要刪除,而有時候,僅僅只需要查找到就行。鏈表中的每一個節點都是一個獨立開辟的空間&#xf…

聚類分析方法(一)

目錄 一、聚類分析原理(一)聚類分析概述(二)聚類的數學定義(三)簇的常見類型(四)聚類框架及性能要求(五)簇的距離 二、劃分聚類算法(一&#xff0…

Java 有什么必看的書?

Java必看經典書有這兩本: 1、Java核心技術速學版(第3版) 經典Java開發基礎書CoreJava速學版本!Java入門優選書籍,更新至Java17,內容皆是精華,讓Java學習更簡單,讓Java知識應用更快速…

【Linux】什么是進程間通信?方式有哪些?本質理解?

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃個人主頁 :阿然成長日記 …

使用 ChronicleMap 擴展高性能內存緩存

1.擴展內存緩存的挑戰 我們用于與各種程序化和需求方平臺 (DSP) 集成的應用程序之一是低延遲、高吞吐量的基于 JVM 的應用程序。這是 付款憑單(DV)付前前驗證解決方案的核心組件。自多年前成功推出此解決方案以來,我們不斷添加多項關鍵功能&…

【ChatGPT】全面解析 ChatGPT:從起源到未來

ChatGPT 是由 OpenAI 開發的一個基于 GPT(Generative Pre-training Transformer)架構的聊天機器人。通過自然語言處理(NLP)技術,ChatGPT 能夠理解和生成語言,與人類進行對話。本文將深入探討其起源、發展、…

SpringSecurity源碼分析-過濾器鏈是如何植入到spring中的

SpringSecurity源碼分析-過濾器鏈是如何植入到spring中的 一切的源頭都是因為在web.xml中配置了這樣一個Filter <!--security--><filter><filter-name>springSecurityFilterChain</filter-name><filter-class>org.springframework.web.filter.…

NoSQL 之 Redis 集群部署

前言&#xff1a; &#xff08;1&#xff09;主從復制&#xff1a;主從復制是高可用Redis的基礎&#xff0c;哨兵和集群都是在主從復制基礎上實現高可用 的。主從復制主要實現了數據的多機備份&#xff0c;以及對于讀操作的負載均衡和簡單的故障恢復。缺陷&#xff1a; 故障…

vue3+antd 實現文件夾目錄右鍵菜單功能

原本的目錄結構&#xff1a; 右鍵菜單&#xff1a; 點擊菜單以后會觸發回調&#xff1a; 完整的前端代碼&#xff1a; <template><a-directory-treev-model:expandedKeys"expandedKeys"v-model:selectedKeys"selectedKeys"multipleshow-li…

在 Docker 容器中運行 Vite 開發環境,有這兩個問題要注意

容器化開發給我們帶來了很多便捷&#xff0c;但是在開發環境下也有一些問題要注意&#xff0c;如果不解決這些問題&#xff0c;你的開發體驗不會很好。 容器啟動正常&#xff0c;卻無法訪問 我們用 Docker 啟動一個 Vite Vue3 項目的開發環境后&#xff0c;發現端口日志一切…

計算機如何存儲浮點數

浮點數組成 在計算機中浮點數通常由三部分組成&#xff1a;符號位、指數位、尾數位。IEEE-754中32位浮點數如下&#xff1a; 上圖32bit浮點數包含1bit的符號位&#xff0c;8比特的指數位和23bit的尾數位。對于一個常規浮點數&#xff0c;我們來看看它是如何存儲和計算的。這里…

conda env pip install error:No space left on device

conda 環境 pip install error&#xff1a;No space left on device 文章目錄 conda 環境 pip install error&#xff1a;No space left on device現象1 實驗2 分析和解決辦法 現象 非root用戶的服務器&#xff0c;需要安裝環境&#xff0c;安裝的環境超過2GB sudo pip insta…

醫療機器人中的具身智能進展——自主超聲策略模型的任務編碼和局部探索

醫療機器人一直是具身智能的研究熱點。醫學圖像、醫療觸診、血壓血氧、心率脈搏和生物電信號等多模態生物醫學信息&#xff0c;不斷豐富著醫療機器人的感知范疇。 自主超聲 “自主超聲”屬于具身智能醫療機器人領域中話題度較高的研究方向。作為臨床檢查的重要手段之一&#…