lvgl touch在stm32移植及动画应用--Apple的学习笔记

发布者:PositiveVibes最新更新时间:2025-01-22 来源: jianshu关键字:touch  stm32  移植 手机看文章 扫描二维码
随时随地手机看文章

一,前言

最近我突然发现原来我用的是电阻触摸屏,所以是带触摸功能的,当初买回来我主要用LCD显示功能,所以就忘记了它有touch功能,就移植了下驱动,然后lvgl官网的example移植到了sdl2框架中。


二,touch移植

input_dev中移植下,lvgl的porting_template做的还是比较好的。反正lvgl就是周期扫描判断是否有touch,有则则获取x和y坐标。效果就不展示了,源码中获取x和y坐标后,会识别x和y在哪个obj对象,然后调用这个obj对象的callback用户回调函数。主要是了解下它的思路。


三,music界面移植

我到应用就是调用API,暂时我不是很感兴趣去研究API,我主要是学习GUI引擎源码的设计思路,并且通过制作简单的API应用来debug学习。要我做一个漂亮的mp3界面,其实我对这些API,主要是动画API还不熟悉。先拿来用下,看看官网callback中是如何写的code,了解下思路而已。里面看到了动画相关的fadein,还有启动界面的切换设置了倒计时用了动画,这些动画的设置感觉很眼熟,以前JavaScript的Tween动画库传入的参数感觉也类似,另外刚刚学习的cocos2dx的转场动画传入的元素也很类似。官网demo的主界面如下:


    /*Animate in the content after the intro time*/

    lv_anim_t a;

    lv_anim_path_t path;

    lv_anim_path_init(&path);


    lv_anim_path_set_cb(&path, lv_anim_path_bounce);


    start_anim = true;


    lv_task_t * task =  lv_task_create(stop_start_anim, INTRO_TIME + 6000, LV_TASK_PRIO_MID, NULL);

    lv_task_once(task);


    lv_anim_init(&a);

    lv_anim_set_path(&a, &path);


    uint32_t i;

    lv_anim_set_exec_cb(&a, start_anim_cb);

    for(i = 0; i < 20; i++) {

        lv_anim_set_values(&a, LV_HOR_RES, 5);

        lv_anim_set_delay(&a, INTRO_TIME - 200 + rnd_array[i] % 200);

        lv_anim_set_time(&a, 2500 + rnd_array[i] % 500);

        lv_anim_set_var(&a, &start_anim_values[i]);

        lv_anim_start(&a);

    }


    lv_obj_fade_in(wave_top, 1000, INTRO_TIME + 1000);

    lv_obj_fade_in(wave_bottom, 1000, INTRO_TIME + 1000);

    lv_obj_fade_in(title_box, 1000, INTRO_TIME + 1000);

    lv_obj_fade_in(icon_box, 1000, INTRO_TIME + 1000);

    lv_obj_fade_in(ctrl_box, 1000, INTRO_TIME + 1000);

    lv_obj_fade_in(handle_label, 1000, INTRO_TIME + 1000);

    lv_obj_fade_in(handle_rect, 1000, INTRO_TIME + 1000);

    lv_obj_fade_in(album_img_obj, 800, INTRO_TIME + 1000);

    lv_obj_fade_in(spectrum_obj, 0, INTRO_TIME);


    lv_anim_path_set_cb(&path, lv_anim_path_overshoot);

    lv_anim_set_path(&a, &path);


    lv_anim_set_var(&a, album_img_obj);

    lv_anim_set_time(&a, 1000);

    lv_anim_set_delay(&a, INTRO_TIME + 1000);

    lv_anim_set_values(&a, 1, LV_IMG_ZOOM_NONE);

    lv_anim_set_exec_cb(&a, (lv_anim_exec_xcb_t) lv_img_set_zoom);

    lv_anim_set_ready_cb(&a, NULL);

    lv_anim_start(&a);



如下是开机logo界面过一段时间后fade_out消失的动画设置。

    /* Create an intro from a logo + label */

    LV_IMG_DECLARE(img_lv_demo_music_logo);

    lv_obj_t * logo = lv_img_create(lv_scr_act(), NULL);

    lv_img_set_src(logo, &img_lv_demo_music_logo);

    lv_obj_move_foreground(logo);


#if LV_DEMO_MUSIC_SQUARE == 0

    lv_obj_t * title = lv_label_create(lv_scr_act(), NULL);

    lv_label_set_text(title, 'LVGL DemonMusic player');

    lv_label_set_align(title, LV_LABEL_ALIGN_CENTER);

    lv_obj_set_style_local_text_font(title, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &lv_font_montserrat_30);

    lv_obj_set_style_local_text_line_space(title, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, 8);

    lv_obj_fade_out(title, 300, INTRO_TIME);

    lv_obj_align(logo, spectrum_obj, LV_ALIGN_CENTER, 0, 0);

#if LV_DEMO_MUSIC_LANDSCAPE

    lv_obj_align(title, NULL, LV_ALIGN_IN_LEFT_MID, 50, -10);

#else

    lv_obj_align(title, NULL, LV_ALIGN_IN_TOP_MID, 0, 30);

#endif


#endif

    lv_anim_path_set_cb(&path, lv_anim_path_ease_in);

    lv_anim_set_path(&a, &path);

    lv_anim_set_var(&a, logo);

    lv_anim_set_time(&a, 400);

    lv_anim_set_delay(&a, INTRO_TIME + 800);

    lv_anim_set_values(&a, LV_IMG_ZOOM_NONE, 10);

    lv_anim_set_ready_cb(&a, lv_obj_del_anim_ready_cb);

    lv_anim_start(&a);


四,小结

我对这些API的使用暂时不敢兴趣,但是学习了lvglGUI引擎后,还是要看看它能做出些什么产品效果,所以花了点时间检验了下。

关键字:touch  stm32  移植 引用地址:lvgl touch在stm32移植及动画应用--Apple的学习笔记

上一篇:基于STM32固件库实现LED亮灭闪烁和音频发生器设计
下一篇:STM32学习:通信的基本概念

推荐阅读最新更新时间:2026-03-22 22:16

STM32 移植 STemwin(Touch
上篇讲到了STemwin的基本移植步骤,这里再讲下Touch的支持。 驱动好自己的触摸屏,准备好测量X,Y 返回为ADC值的函数。这个一般也不难 准备好GUI_TOUCH_X.C文件,这里比较坑的就是这个文件没有包含在STemwin的包里面(至少5.32里面没有),需要自己写一个,其实内容很简单,如下 #include GUI.h #include XPT2046.h void GUI_TOUCH_X_ActivateX(void) { } void GUI_TOUCH_X_ActivateY(void) { } int GUI_TOUCH_X_MeasureX(void) { return XPT2046_R
[单片机]
<font color='red'>STM32</font> <font color='red'>移植</font> STemwin(<font color='red'>Touch</font>)
HLK-W801-LVGL8之源码移植
前言 最近入手的一块HLK-W801开发板,加上早年买的一个ALIENTEK开发板中附带一块TFTLCD触摸电阻屏,看到网上的大神们都已经玩得很溜,刚好这样有条件用W801来玩一下基于LVGL的GUI开发,跃跃欲试。 先完成移植工作,看到官网和网上资料也很多,可以帮助自己更快的完成这个工作,主要内容包括三部分: 1. 源码移植 2. LCD驱动移植 3. 触摸驱动移植 本篇文章介绍第一部分:源码移植 移植思路 1) 浏览官网或其他中文网站关于lvgl的说明,先了解移植基础知识; 这里给下参考的链接:http://lvgl.100ask.org/8.1/get-started/index.html 2) 下载源码,访问git
[单片机]
HLK-W801-<font color='red'>LVGL</font>8之源码<font color='red'>移植</font>
单片机---HLK-W801图形框架LVGL移植
背景介绍 最近接触到了一个开源的显示框架lvgl,在跑起了demo的时刻,发现这确实是个酷酷的东西。 LVGL的作者是来自匈牙利的Gabor Kiss-Vamosikisvegabor,LVGL用C语言编写,以实现最大的兼容性(与C ++兼容),模拟器可在没有嵌入式硬件的PC上启动嵌入式GUI设计,同时LVGL作为一个图形库,它自带着接近三十多种小工具可以供开发者使用。这些强大的构建块按钮搭配上带有非常丝滑的动画以及可以做到平滑滚动的高级图形,同时兼具着不高的配置要求以及开源属性,显著的优势使得LVGL蔚然成风,成为广大开发者在选择GUI时的第一选择。 demo的样子 这流畅的动画和体面的输入,一个字–绝。 代码
[单片机]
单片机---HLK-W801图形框架<font color='red'>LVGL</font><font color='red'>移植</font>
移植FreeRTOS到STM32(嵌入式入门)
引言 本文详细介绍如何移植FreeRTOS到STM32单片机上。移植操作系统是嵌入式开发的入门基础,单片机和嵌入式在物理上其实是一摸一样的,区别就是软件上嵌入式跑了操作系统而单片机没有。文本选用市场上最常见的STM32和FreeRTOS,为大家介绍如何移植操作系统到MCU上。 介绍 什么是 RTOS? 实时操作系统(Real-time operating system, RTOS),它会按照排序运行、管理系统资源,并为开发应用程序提供一致的基础。实时操作系统与一般的操作系统相比,最大的特色就是“实时性”,如果有一个任务需要执行,实时操作系统会马上(在较短时间内)执行该任务,不会有较长的延时。这种特性保证了各个任务的及时执行。
[单片机]
ubuntu下安装nuttx移植STM32开发环境
第一步:下载一个Ubuntu操作系统,安装到VMware workstation 第二步:打开终端(Ctrl + Alt + T) 输入指令: 1、Ubuntu:~$ apt-get update                    //更新包 2、Ubuntu:~$ sudo apt-get install gcc-arm-none-eabi         //安装编译器 3、Ubuntu:~$ cd ~/       4、Ubuntu:~$ mkdir nuttxSpace                  //创建工作路径 5、Ubuntu:~/nuttxSpace$ git clone https://bitbuc
[单片机]
ubuntu下安装nuttx<font color='red'>移植</font>到<font color='red'>STM32</font>开发环境
rt-thread移植finSH控制台中STM32 HAL库的缺陷
小小的一个串口居然看了半天,原来对STM32系列的lib库,好像是1.x版本感觉还不错的。后来ST非要整个CUBEMx库,往一个中断接受函数里丢了一堆东西。 在rt-thread官网中给出了nano版本增加控制台的示范例程,主要是增加了一个接受队列。(如果用rt-thread studio配置控制台,接受好像用的是查询模式,如果只是单纯一个控制台,不干其他事情好像也没啥事) #ifdef RT_USING_FINSH char rt_hw_console_getchar(void) { int ch = -1; if (__HAL_UART_GET_FLAG(&handle, UART_FLAG_RXNE) !=
[单片机]
UCGUI在STM32平台移植经验(无操作系统)
ucgui 移植的前提是已经具备了LCD驱动函数,已经能够实现点亮LCD屏幕,并实现画点以及获取指定点颜色值的功能。一般的显示屏供应商会提供对应的驱动函数。主要有初始化函数void LCD_Init(),屏幕画点函数 Void LCD_DrawPoint(u16 x,u16 y,u16 color),以及获取指定点颜色值的U16 LCD_ReadPoint(u16 x,u16 y)函数。移植的关键在于把这三个函数与ucgui提供的接口函数匹配。 打开GUILCDDriver中的LCDDummy.c文件,找到int LCD_L0_Init(void)初始化函数,LCD_L0_SetPixelIndex(int x, int y,
[单片机]
UCGUI在<font color='red'>STM32</font>平台<font color='red'>移植</font>经验(无操作系统)
STM32下uIP移植问题
就我个人认为在uIP的移植中除了驱动之处有以下几点需要注意: 1.uip_timer 时钟要加入到中断中去。 2.各种appcall实现。如在tcp_client_demo.c 有如下语句 if(uip_len 199) { ((u8*)uip_appdata) =0; } strcpy((char*)tcp_client_databuf,uip_appdata); 这样在处理数据长时都是以tcp_client_databuf 数组的长来处理,这样不灵活,client从网络中接收到的数据长本来就是用一个全局变量uip_len来存储的。
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved