这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » ARM-2D场景创建、运行

共3条 1/1 1 跳转至

ARM-2D场景创建、运行

工程师
2025-05-19 16:21:30     打赏

1、简介

ARM-2D使用文档介绍,切换不同的图形界面是通过场景(Scene)切换完成的,默认的Demo只有一个场景,如果需要切换至新的界面,则需要用到新的场景。以下介绍arm-2d库多场景创建及运行。

2、新建场景

打开Keil的RTE运行时环境管理

image.png

将Scene数量改成3,由于scene0默认被示例demo占用,因此使用scene1和scene2

新建场景源文件如下:

image.png

3、场景切换代码

main.c引入头文件

#include "arm_2d_helper.h"
#include "arm_2d_disp_adapters.h"
#include "arm_2d_scenes.h"

main.c增加场景切换逻辑代码

static void Scenes_test(){
arm_2d_scene1_init(&DISP0_ADAPTER);//初始化场景1
arm_2d_scene_player_switch_to_next_scene(&DISP0_ADAPTER);
arm_2d_scene_player_set_switching_mode( &DISP0_ADAPTER,ARM_2D_SCENE_SWITCH_MODE_SLIDE_UP);//向上滑动
arm_2d_scene_player_set_switching_period(&DISP0_ADAPTER, 40);
HAL_Delay(800);
arm_2d_scene2_init(&DISP0_ADAPTER);//初始化场景2
arm_2d_scene_player_switch_to_next_scene(&DISP0_ADAPTER);
arm_2d_scene_player_set_switching_mode( &DISP0_ADAPTER,ARM_2D_SCENE_SWITCH_MODE_SLIDE_LEFT);//向左滑动
arm_2d_scene_player_set_switching_period(&DISP0_ADAPTER, 40);
HAL_Delay(800);
}

while循环切换场景12

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
 
    /* USER CODE BEGIN 3 */
    Scenes_test();
  }
  /* USER CODE END 3 */

刷新任务放到systick中断回调函数

image.png

更改场景2显示内容,创建按钮并显示文本内容

image.png

static void draw_buttom(const arm_2d_tile_t *ptTile, //绘制按钮
                        arm_2d_region_t *ptRegion,
                        const char *pchString,
                        COLOUR_INT tColour,
                        uint8_t chOpacity,
                        bool bIsNewFrame)
{
 
    arm_2d_container(ptTile, __button, ptRegion) {
   
        draw_round_corner_box(&__button, NULL, GLCD_COLOR_WHITE, 128, bIsNewFrame);
       
        arm_lcd_text_set_target_framebuffer((arm_2d_tile_t *)&__button);
        arm_lcd_text_set_font((arm_2d_font_t *)&ARM_2D_FONT_16x24.use_as__arm_2d_font_t);//设置字体大小
        arm_lcd_text_set_opacity(chOpacity);
        arm_lcd_text_set_colour(tColour, GLCD_COLOR_BLACK);
        arm_print_banner(pchString, __button_canvas);
        arm_lcd_text_set_opacity(255);
       
    }
}
static
IMPL_PFB_ON_DRAW(__pfb_draw_scene2_handler)
{
    user_scene_2_t *ptThis = (user_scene_2_t *)pTarget;
    ARM_2D_UNUSED(ptTile);
    ARM_2D_UNUSED(bIsNewFrame);
   
    arm_2d_canvas(ptTile, __top_canvas) {
       
        arm_2d_fill_colour(ptTile, NULL, GLCD_COLOR_WHITE);
       
        arm_2d_align_centre(__top_canvas, 120, 60 ) {
            draw_round_corner_box(  ptTile,
                                    &__centre_region,
                                    GLCD_COLOR_BLUE,
                                    255,
                                    bIsNewFrame);
           
            ARM_2D_OP_WAIT_ASYNC();
            draw_round_corner_border(   ptTile,
                                        &__centre_region,
                                        GLCD_COLOR_BLACK,
                                        (arm_2d_border_opacity_t)
                                            {32, 32, 255, 255},
                                        (arm_2d_corner_opacity_t)
                                            {0, 128, 128, 128});
 
draw_buttom(ptTile, &__centre_region, "EEPW", GLCD_COLOR_RED, 255, bIsNewFrame);                                                                                                                                                                                        
        }
 
    }
    arm_2d_op_wait_async(NULL);
 
    return arm_fsm_rt_cpl;
}

4、运行效果

通过切换场景1与场景2,实现了显示画面切换

screenshots1.gif





关键词: ARM-2D场景切换    

专家
2025-05-19 19:33:08     打赏
2楼

谢谢分享


工程师
2025-05-20 07:18:27     打赏
3楼

这个MCU的主控是什么呢,很流畅呀。


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]