LVGL移植与VS模拟器使用

news2024/9/21 18:50:16

一、移植文件介绍



 


二、移植部分

第一步:创建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.coloradmin.cn/o/1907172.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WordPress作品设计素材图片站资讯文章教程uigreat主题

主题介绍 uigreat主题是一款wordpress作品主题,发布设计作品素材文章,适合作品展示、设计等站点使用等,这款主题都非常合适。 1、自适应设计,PC、平板、手机等均可正常浏览; 2、图片缩略图可自定义高度,主…

2005-2023年各省居民人均消费支出、城镇居民人均消费支出、农村居民人均消费支出数据(无缺失)

2005-2023年各省居民人均消费支出、城镇居民人均消费支出、农村居民人均消费支出数据(无缺失) 1、时间:2005-2023年 2、来源:国家统计局、统计年鉴 3、范围:31省 4、指标:全体居民人均消费支出、城镇居…

相位噪声为什么越低越好?

什么是相位噪声? 相位噪声是描述无线电波信号的一种重要参数,它指的是在各种噪声的作用下,系统输出信号相位的随机变化。具体来说,相位噪声可以类比为由于天气原因导致的航班延误,使得航班的起飞和降落时间相对于正常…

废品回收小程序开发,让回收更加便捷

当下随着大众环保意识的提高,废品回收市场得到了快速发展,拥有着巨大的发展空间。在互联网科技的支持下,废品回收行业也迎来了新的发展机遇,从传统的回收模式到线上回收转型,通过数字化发展,为居民带来便利…

智慧党建管理系统源码 党建智能管理系统搭建 含完整带代码包和图文搭建教程

随着信息技术的飞速发展,智慧党建成为新时代党建工作的重要趋势。智慧党建管理系统作为党建信息化的重要载体,不仅提升了党建工作的效率,还增强了党组织的凝聚力和战斗力。分享一个智慧党建管理系统源码,轻松搭建党建智能管理系统…

双链表(数组模拟)

双链表(数组模拟) 什么是双链表数组模拟双链表题目 什么是双链表 双链表不同于单链表的是 每一个节点不但存储了下一个节点的位置,也存储了上一个节点的位置。 数组模拟双链表 所以如果用数组的话,就需要创建三个数组。 题目 …

【Linux】文件内容查看命令——cat,tac,more,less,head,tail,od

如果我们要查看一个文件的内容时,该如何是好? 这里有相当多有趣的命令可以来分享一下:最常使用的显示文件内容的命令可以说是cat与more及less了。 此外,如果我们要查看一个很大的文件(好几百MB时),但是我们…

数据合并 26-30题(30 天 Pandas 挑战)

数据合并 1. 知识点1.27 左连接1.28 数据填充与交叉连接1.29 获取列值列表 题目2.26 合作过至少三次的演员和导演2.27 使用唯一标识码替换员工ID2.28 学生们参加各科测试的次数2.29 至少有5名直接下属的经理2.30 销售员 1. 知识点 1.27 左连接 datapd.merge(employees,employ…

2024图纸加密软件TOP8排行丨企业保护数据安全最佳选择

图纸往往包含了设计人员的创意和智慧,是企业的重要资产。加密可以防止未经授权的复制、分发或使用,保护设计的原创性和独特性不被侵犯。 许多图纸可能含有公司的商业秘密,比如特定的技术参数、生产流程或是产品设计等。这些信息若泄露给竞争…

美国Facebook直播网络卡顿问题怎么解决?

美国Facebook直播为用户提供了与当地客户、粉丝实时互动的机会,然而,有时由于网络问题,直播可能会出现卡顿现象,影响用户体验。本文将介绍解决美国Facebook直播网络卡顿问题的一种可能解决方案——接入海外直播网络专线。 了解美国…

国内知名源码交易平台及其特点,建议收藏!

​在数字化时代,源码交易平台成为连接开发者与项目需求的重要桥梁。这些平台不仅提供了丰富的源码资源,还促进了技术交流与合作。本文小编将分享介绍几个国内知名的源码交易平台,包括帮企商城、春哥技术博客、86资源网、春哥技术源码论坛以及…

如何选择高性价比的土壤检测仪器?

在现代农业与环保领域,土壤检测仪器的选择显得尤为关键。它不仅关系到土壤养分管理、作物健康生长,还涉及到环境保护和可持续发展。那么,面对市场上琳琅满目的土壤检测仪器,我们该如何选择一款实用的设备呢? 首先&…

智慧安防/智慧工厂/视频分析EasyCVR视频监控汇聚平台如何关闭国标设备的自动检索功能?

安防监控视频融合汇聚平台EasyCVR兼容性强,可支持Windows系统、Linux系统以及国产化操作系统等,平台既具备传统安防视频监控的能力,也具备接入AI智能分析的能力,可拓展性强、视频能力灵活,能对外分发RTMP、RTSP、HTTP-…

用R在地图上绘制网络图的三种方法

地理网络图与传统的网络图不同,当引用地理位置进行节点网络可视化时,需要将这些节点放置在地图上,然后绘制他们之间的连结。Markus konrad的帖子(https://datascience.blog.wzb.eu/2018/05/31/three-ways-of-visualizing-a-graph-on-a-map/)&…

绝地求生PUBG兰博基尼怎么兑换 兰博基尼怎么获得

绝地求生采用虚幻4引擎制作,玩家们会在一个偏远的岛屿上出生,然后展开一场赢家通吃的生存竞赛,最后只会有1个人存活。当然,和其他生存游戏一样,玩家需要在广袤复杂的地图中收集武器、车辆、物资,而且也会有…

数字化设计与分析助力建造印度最大污水处理厂

利用 STAAD 开展结构分析和设计,为不稳定土体上的复杂水池系统开发稳定的基础 治理河流 新德里不仅是印度的首都,一个多世纪以来也一直是印度最重要的城市之一。这座城市于 1911 年作为新的政府所在地,历经 20 年时间建成了许多宏伟建筑&…

tomcat的优化和tomcat和nginx实现动静分离:

tomcat的优化 tomcat自身的优化 tomcat的并发处理能力不强。大项目不使用tomcat做为转发动态的中间件(k8s集群,python,rubby),小项目会使用(内部使用),动静分离。 优化tomcat的启动…

什么是离散化?

离散化 题目 你会这个题 吗? 题目 假定有一个无限长的数轴,数轴上每个坐标上的数都是 0 0 0。 现在,我们首先进行 n n n 次操作,每次操作将某一位置 x x x 上的数加 c c c。 接下来,进行 m m m 次询问&#x…

方圆资源网,方圆资源官网

在当今这个信息化高速发展的时代,方圆资源网络已成为推动社会进步、促进经济发展的重要力量。方圆资源网不仅汇聚了海量的信息资源,更为我们提供了一个高效、便捷的信息交流平台。本文旨在详细介绍资源网的概念、特点、功能以及其在现代社会中的重要意义…

基于Java的数码论坛系统设计与实现

你好,我是计算机领域的研究者。如果你对数码论坛系统开发感兴趣或有相关需求,欢迎联系我。 开发语言: Java 数据库: MySQL 技术: Java技术、MySQL数据库、B/S架构、SpringBoot框架 工具: Eclipse、MySQ…