25| 7
|
[项目] 【花雕学编程】Arduino动手做(249)---GC9A01播放星空动画 |
本帖最后由 驴友花雕 于 2025-5-2 06:50 编辑 【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程) 实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动 项目之一百三十六:ESP32+GC9A01之通过 TFT_eSPI 库 和 AnimatedGIF 库在屏幕上播放GIF动画 实验开源代码
|
代码结构解析 1、库的引入与对象创建 #include <SPI.h> #include <TFT_eSPI.h> // 控制 TFT 显示屏 #include <AnimatedGIF.h> // 播放 GIF 动画 AnimatedGIF gif; // 创建 GIF 播放对象 TFT_eSPI tft = TFT_eSPI(); // 创建 TFT 显示对象 TFT_eSPI:用于控制 TFT 显示屏的库,支持多种显示驱动器,包括 GC9A01。 AnimatedGIF:用于解码和播放 GIF 动画的库。 2、预定义 GIF 动画的引入 #include "images/hyperspace.h" // 星空动画 // 其他动画文件... #define GIF_IMAGE hyperspace // 选择要播放的 GIF 动画 将 GIF 动画文件转换为 C 语言数组(通常使用工具如 bin2c),并包含在项目中。 通过宏定义 GIF_IMAGE 选择要播放的动画。 3、setup() 函数:初始化操作 void setup() { Serial.begin(115200); // 初始化串口通信 tft.begin(); // 初始化 TFT 显示屏 tft.setRotation(2); // 设置屏幕旋转方向 tft.fillScreen(TFT_BLACK); // 清屏,填充黑色 gif.begin(BIG_ENDIAN_PIXELS); // 初始化 GIF 播放器 } 设置串口用于调试输出。 初始化显示屏并设置旋转方向。 清空屏幕,准备播放动画。 初始化 GIF 播放器,设置像素格式。 4、loop() 函数:播放 GIF 动画 void loop() { if (gif.open((uint8_t *)GIF_IMAGE, sizeof(GIF_IMAGE), GIFDraw)) { Serial.printf("成功打开 GIF;尺寸 = %d x %d\n", gif.getCanvasWidth(), gif.getCanvasHeight()); tft.startWrite(); // 开始写入显示屏 while (gif.playFrame(true, NULL)) { yield(); // 允许其他任务运行 } gif.close(); // 关闭 GIF 文件 tft.endWrite(); // 结束写入显示屏 } } 尝试打开预定义的 GIF 动画。 如果成功,开始播放每一帧动画。 使用 yield() 允许 ESP32 执行其他后台任务,避免阻塞。 播放完成后,关闭 GIF 文件并结束写入操作。 5、GIFDraw 回调函数(未在代码中显示) GIFDraw 是 AnimatedGIF 库要求用户实现的回调函数,用于将解码后的图像数据绘制到显示屏上。 void GIFDraw(GIFDRAW *pDraw) { tft.pushImage(pDraw->iX, pDraw->iY, pDraw->iWidth, pDraw->iHeight, pDraw->pPixels); } pDraw 包含当前帧的图像数据和位置信息。 pushImage 函数将图像数据写入显示屏的指定位置。 |
© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed