打印
[STM32H7]

【STM32H745I-DISCO 试用】+双图层动画效果测试及程序分析

[复制链接]
59|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 jinglixixi 于 2025-3-18 19:20 编辑

在官方提供的例程中,含有LCD屏的内容以供测试和学习,其效果还是比较有特点的。
以双层动画效果的例程为例,其显示效果如图1和图2所示,即2张图片可以实现位置的交换。

图1 效果1


图2 效果2

其M7的主程序内容为:
int main(void)
{
uint32_t index = 0;
MPU_Config();
CPU_CACHE_Enable();
HAL_Init();
SystemClock_Config();
BSP_LED_Init(LED2);
LCD_Config();
HAL_LTDC_ConfigCLUT(&LtdcHandle, (uint32_t *)L8_320x240_CLUT, 256, 0);
HAL_LTDC_EnableCLUT(&LtdcHandle, 0);
while (1)
{
for (index = 0; index < 32; index++)
{
// 计算新的图片位置
PicturesPosition(&Xpos1, &Ypos1, &Xpos2, &Ypos2, (index+1));
//重新配置第1层位置,无需重新加载
HAL_LTDC_SetWindowPosition_NoReload(&LtdcHandle, Xpos1, Ypos1, 0);
//重新配置第2层位置,无需重新加载
HAL_LTDC_SetWindowPosition_NoReload(&LtdcHandle, Xpos2, Ypos2, 1);
//在下一个垂直空白期间请求LTDC重新加载
ReloadFlag = 0;
HAL_LTDC_Reload(&LtdcHandle,LTDC_RELOAD_VERTICAL_BLANKING);
while(ReloadFlag == 0)
{
}
}
HAL_Delay(500);
for (index = 0; index < 32; index++)
{
// 计算新的图片位置
PicturesPosition(&Xpos2, &Ypos2, &Xpos1, &Ypos1, (index+1));
//重新配置第1层位置,无需重新加载
HAL_LTDC_SetWindowPosition_NoReload(&LtdcHandle, Xpos1, Ypos1, 0);
//重新配置第2层位置,无需重新加载
HAL_LTDC_SetWindowPosition_NoReload(&LtdcHandle, Xpos2, Ypos2, 1);
//在下一个垂直空白期间请求LTDC重新加载
ReloadFlag = 0;
HAL_LTDC_Reload(&LtdcHandle,LTDC_RELOAD_VERTICAL_BLANKING);
while(ReloadFlag == 0)
{
}
}
HAL_Delay(500);
}
}

经程序的分析可知,它在循环体内原来作了2件事,一件是使图片1沿着对角线向左上角移动(图片2沿相反方向移动),另一件是使图片2沿着对角线向左上角移动(图片1沿相反方向移动)。
其垂直方向的移动量正是32个像素点,而水平方向的移动量是水平方向的5倍,即160个像素点。
这个变换的处理过程由如下函数实现:
static void PicturesPosition(uint32_t* x1, uint32_t* y1, uint32_t* x2, uint32_t* y2, uint32_t index)
{
// 图片1位置
*x1 = index*5;
*y1 = index;
// 图片2位置
*x2 = 160 - index*5;
*y2 = 32 - index;
}

至于图片1和图片2的数据则是由以下2个数组来提供的。由数组的大小,可明显地观察到其中一个的数据多,而另一个的数据少,这也正是2副图片在复杂程度有很大差别的原因,之外由数据量还可以看出,其中一个的数据量极为偏少,应该是采用编码压缩处理。
const uint32_t L8_320x240_CLUT[256] =76800/300
{
0x0,
0x800000,
0x8000,
0x808000,
0x80,
...
}
const uint32_t L8_320x240[19200] =76800/4
{
0xF9F9F9F9,
0xF9F9F9F9,
...
}

从显示效果看,其程序设计的还是十分精巧的,产生图层透明的效果且移动时十分流畅。

演示视频:


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

478

主题

2835

帖子

38

粉丝