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);
            else
                lv_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);
            else
                lv_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);//设置系统中断优先级分组2
	delay_init(168);  //初始化延时函数
	uart_init(115200);		//初始化串口波特率为115200
	LED_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.mfbz.cn/a/782934.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

分享2个iPhone恢复照片的方法,赶紧码住收藏!

手机已经成为我们生活中不可或缺的一部分,它不仅仅是通讯工具,更是我们记录生活点滴的重要工具之一。然而,正如其他任何设备一样,iPhone上存储的照片有时也会不小心被删除或丢失。 别担心,即使你误删了重要的照片&…

网安加·百家讲坛 | 马云卓:漏洞扫描工具漏洞报告对比

作者简介:马云卓,某安全公司安全专家,持有注册信息安全专业人员及渗透测试工程师(CISP-PTE)和项目管理专业人士(PMP)证书,拥有丰富的行业经验,长期专注于网络安全攻防技术…

用SOLIDWORKS批量打印工程图纸,没有难度

在工程师完成产品设计后,一般需要打印纸质工程图,如果打印的数量比较多,效率就会比较低,其实SOLIDWORKS软件提供了专用工具用来处理工作量比较大且重复性的工作,这个工具就是SOLIDWORKS Task Scheduler。 SOLIDWORKS T…

css实现鼠标禁用(鼠标滑过显示红色禁止符号)

css实现鼠标禁用(鼠标滑过显示红色禁止符号) 创作背景css鼠标禁用 创作背景 从本文开始,将会用三篇文章来一步一步实现 vueantdts实战后台管理系统中table表格的不可控操作。中间会补充两篇css知识文章 ,方便后续功能的实现。 实…

面向对象编程:定义、特点、应用场景、优缺点及示例代码

目录 前言1. 面向对象编程的定义2. 面向对象编程的特点2.1 封装2.2 继承2.3 多态2.4 抽象 3. 面向对象编程的应用场景3.1 大型软件系统3.2 GUI应用程序3.3 游戏开发 4. 面向对象编程的优缺点4.1 优点4.2 缺点 5. 代表性的编程语言5.1 Java5.2 C5.3 Python 6. 示例代码结语 前言…

【爱上C++】vector用法详解

文章目录 一:vector简介二:vector的创建和初始化三:vector的遍历1.[]下标2.at()3.迭代器遍历4.范围for 四:vector的空间1.size2.max_size3.capacity4.reserve5.resize6.empty 五:vector的增删查改1.push_back2.pop_back3.find4.insert5.erase6.swap7.assign Hello~同学们好&…

ESP32CAM物联网教学10

ESP32CAM物联网教学10 MicroPython 应用体验 小智偶然地发现,有一种新兴的编程模式MicroPython,也能编写ESP32Cam的应用程序了,于是欣然地体验了一把。 编程环境搭建 小智偶然地从下面这家店铺买了一块ESP32Cam,并从客服那里得到…

【人工智能】-- 智能家居

个人主页:欢迎来到 Papicatch的博客 课设专栏 :学生成绩管理系统 专业知识专栏: 专业知识 文章目录 🍉引言 🍉基于深度卷积神经网络的表情识别 🍈流程图 🍈模型设计 🍍网络架…

复旦微JFMVU3P-2FFVC1517 FPGA+AI全国产化人工智能数据处理平台,适用于雷达与中频信号采集、视频图像采集

板载FPGA实时处理器:JFMVU3P-2FFVC1517支持1个FMC(HPC)扩展接口支持2路QSFP光纤接口支持x8 Gen3 PCIE主机接口,系统带宽>5GByte/s支持1个R45自适应千兆以太网口支持1个GPIO/RS422接口 基于复旦微16nm工艺JFM9VU3P FPG…

【Linux】记录一起网站劫持事件

故事很短,处理也简单。权当记录一下,各位安全大大们手下留情。 最近一位客户遇到官网被劫持的情况,想我们帮忙解决一下(本来不关我们的事,毕竟情面在这…还是无偿地协助一下),经过三四轮“谦让…

Java-SpringBoot启动报端口被占用,如何找到占用端口的进程并杀掉

背景 当我们本地启动多个项目,可能会出现端口被占用的情况,当然有时候可能idea窗口关闭,但是进程并没有kill掉,导致再次启动项目时也会报端口被占用的错误。 通常的做法是打开任务管理器,然后kill掉对应的进程。 首先…

“除了C盘都不见了“:现象解析、恢复策略与预防之道

现象概述:非系统盘突然消失之谜 在日常的计算机使用中,不少用户可能遭遇过一个令人措手不及的问题——“除了C盘都不见了”。这一现象发生时,用户惊讶地发现除了作为系统盘的C盘外,原本存放着各类文档、图片、视频等个人资料的D盘…

在一行中实现每个盒子间隔相等

达成效果&#xff1a; 1. 使用justify-content: space-evenly; <!DOCTYPE html> <html lang"zh-cn"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"…

Nginx Lua Waf 插件一键部署

文章目录 一、场景说明二、脚本职责三、参数说明四、操作示例五、注意事项 一、场景说明 本自动化脚本旨在为提高研发、测试、运维快速部署应用环境而编写。 脚本遵循拿来即用的原则快速完成 CentOS 系统各应用环境部署工作。 统一研发、测试、生产环境的部署模式、部署结构、…

直播平台集成美颜工具详解:视频美颜SDK开发指南

本篇文章&#xff0c;小编将详细介绍如何在直播平台中集成美颜工具&#xff0c;帮助开发者更好地理解视频美颜SDK的开发过程。 一、美颜工具的作用和原理 1.1 美颜工具的作用 美颜工具主要用于提升直播视频的画面质量&#xff0c;让主播和观众在镜头前看起来更加美观。这些功…

哈喽GPT-4o,程序员如何通过GPT-4o提高工作效率

目录 一、编写代码Prompt&#xff1a;请用Java语言编写一个二分查找的样例 二、修正代码错误、代码优化Prompt&#xff1a;我们上传一张华为OD算法题的题目描述&#xff0c;再给它我的Java解题代码&#xff0c;问问它有什么问题&#xff1f; 三、解读代码功能、代码翻译Prompt&…

【Arduino】XIAOFEIYU(TM)实验ESP32使用霍尔传感器(图文)

霍尔传感器是一种可以测量磁力变化的传感器&#xff0c;今天XIAOFEIYU就来测试一下ESP32使用霍尔传感器。 霍尔传感器&#xff1a;正负极加一个数据接口。 将传感器与ESP32进行电路连接&#xff1a; 编写程序&#xff1a; #define SIGNAL_PIN 33int value 0; // 存储传感…

51单片机-第一节-LED和独立按键

一、点亮LED&#xff1a; 首先包含头文件 <REGX52.H> 随后令P2为0xFE。(此时二进制对应1111 1110&#xff0c;为0 的LED亮&#xff0c;故八个灯中的最后一个亮起)。 注&#xff1a;P2为控制LED的8位寄存器。 void main() {P2 0xFE;//1111 1110while(1){} } 二、L…

《算法笔记》总结No.3——排序

基础算法之一&#xff0c;相当重要。在普通的机试中如果没有数据类型和时空限制&#xff0c;基本上选择自己最熟悉的就好。本篇只总结选择排序和插入排序&#xff0c;侧重应用&#xff0c;408中要求的种类更加繁多&#xff0c;此处先不扩展难度~总结最常用的两种排序。 一.选择…

腾讯课堂即将停止服务?来试试这款开源的知识付费系统

项目介绍 本系统基于ThinkPhp5.0layuiVue开发,功能包含在线直播、付费视频、付费音频、付费阅读、会员系统、分销系统、拼团活动、直播带货、直播打赏、商城系统等。能够快速积累客户、会员数据分析、智能转化客户、有效提高销售、吸引流量、网络营销、品牌推广的一款应用&…