当前位置: 首页 > news >正文

ESP32 开发板动态数字与 GIF 图显示实现技术分享(课程作业)

一、开发背景与目标

在 ESP32 开发板基础显示功能学习完成后,本次开发聚焦于实现两大核心功能:一是基于软件定时器的动态数字(时间)实时显示,二是 GIF 动图在开发板上的循环播放,进一步掌握 ESP32 外设驱动、资源管理及代码工程化开发方法。

二、动态数字(时间)显示实现流程

(一)定时器模块构建

  1. 创建 Timer.c 文件:用于实现定时器核心逻辑,文件内引入 Timer.h 头文件,定义全局时间变量及定时器回调函数,完成 1 秒周期计时功能的封装。
  2. 创建 Timer.h 头文件:用于声明外部可调用的变量与函数,为避免头文件重复包含导致编译错误,添加头文件保护机制:

    c

    运行

    #ifndef __TIMER_H_ #define __TIMER_H_ // 声明定时器初始化函数 void ESP_Timer_Init(void); #endif

(二)主函数集成与时间显示

  1. 头文件引入:在主函数文件中引入 Timer.h,确保定时器相关函数可调用。
  2. 变量定义:
    • 定义int sec = 0;,用于记录上一次刷新的秒数,作为时间变化判断依据;
    • 定义char str[20] = {0};,用于存储格式化后的时间字符串。
  3. 定时器启用:调用ESP_Timer_Init();初始化并启动 1 秒周期定时器。
  4. 死循环实现实时刷新:

    c

    运行

    while(1) { // 仅在秒数变化时执行刷新,避免无效刷屏 if(sec != timer_sec) { sec = timer_sec; // 更新记录的秒数 // 总秒数转换为"时:分:秒"格式,%02d保证两位数显示,%24限制小时不超24 sprintf(str,"%02d:%02d:%02d", sec/3600%24, sec/60%60, sec%60); // 在LCD屏(180,160)坐标以白字黑底显示时间字符串 LCD_ShowString32(180,160,str,White,BLACK); } }
    其中:
    • sec/3600%24:将总秒数转换为小时数并限制在 24 小时内;
    • sec/60%60:将总秒数转换为分钟数;
    • sec%60:提取总秒数中的秒数。

三、GIF 动图显示实现流程

(一)GIF 图预处理

  1. 素材准备:自行准备目标 GIF 图,若分辨率或体积过大,使用 GIFResizerChs 工具压缩尺寸;
  2. 帧分解:通过 zhs9 工具将 GIF 图分解为单帧图片,降低开发板解析压力;
  3. 资源限制:本次使用的 ESP32S3 开发板 FLASH 容量为 16MB、PSRAM 容量为 8MB,为避免烧录失败,需控制 GIF 帧数在 10-20 帧范围内,且优先选择小尺寸素材。

(二)代码集成与显示

  1. 资源存放:将处理后的 GIF 单帧图片文件夹放置在工程 main 目录下,确保编译时可识别;
  2. 图片声明:在主函数中定义图片指针数组,按播放顺序声明所有帧图片:

    c

    运行

    const unsigned char *images[] = {/* 按播放顺序填入各帧图片路径/标识 */};
  3. 循环播放实现:

    c

    运行

    while(1) { for(uint8_t i=0;i<=5;i++){ // 逐帧绘制图片,实现GIF动态效果 lcd_draw_pictrue(0,0,images[i]); } vTaskDelay(1); // 延时控制播放速度,释放CPU资源 }

四、开发过程中的问题与解决

本次开发中,定时器模块功能实现无明显问题,但 GIF 图显示环节出现核心问题:因初始选择的 GIF 图体积过大,超出 ESP32S3 FLASH 存储上限,导致程序无法正常烧录。解决措施:更换小尺寸、少帧数的 GIF 素材,经压缩和帧分解处理后,满足开发板存储资源限制,最终实现 GIF 图正常循环播放。

五、总结

本次开发完成了 ESP32 开发板动态数字(时间)和 GIF 动图的显示功能,核心收获如下:

  1. 掌握了 ESP32 软件定时器的封装与使用,实现了基于时间变化的动态数字刷新,理解了 "按需刷新" 对资源优化的意义;
  2. 熟悉了 ESP32 存储资源特性,明确了 FLASH/PSRAM 的资源限制,掌握了 GIF 图预处理的关键方法;
  3. 强化了代码工程化思维,通过头文件保护、模块化封装提升了代码的可维护性。后续开发中需优先评估资源占用,提前做好素材轻量化处理,进一步优化动图播放的流畅性。
http://www.jsqmd.com/news/466011/

相关文章:

  • 馈赠佳礼,传递喜悦,年货礼盒如何展现诚意与祝福 - yangyuan-shunfeng
  • VM虚拟机配置静态IP,网络
  • 基于FX3U PLC的3×3立体车库控制系统设计
  • 【在 macOS 上安装 OpenClaw 完整指南】
  • “复制粘贴”这点事你弄明白了吗?
  • Flink从入门到上天系列第十四篇:Flink当中的处理函数
  • Spring Boot中的404错误:原因、影响及处理策略
  • 【C++算法入门】动态规划-糖果问题
  • Samba - 文件共享服务-Windows
  • 归一化技巧哪家强?Batch Norm、Layer Norm 与 Group Norm 深度解析
  • 机器人设计与应用综合实训——ESP32开发技术分享(day3)
  • 第一篇博客日志
  • (3)同步读写client和server
  • GM-CSF Surpass ELISA试剂盒如何助力解析病毒感染中的炎症风暴机制?
  • 2026年上海物联网应用开发报价多少?附性价比高的公司推荐
  • 2026年3月吉林水泥制品/水泥管/顶管/排水管/矩形槽厂家综合分析 - 2026年企业推荐榜
  • 使用内网穿透远程访问 OpenClaw:让本地大模型随时随地可用
  • IFN-γ Surpass ELISA试剂盒如何揭示剂量依赖性干扰素-γ对肿瘤干细胞的双重调控?
  • 豆包GEO优化怎么选?3家服务商实测,效果惊人!
  • 2026辽阳草坪绿化优质品牌推荐指南:辽阳草坪批发、辽阳草坪种植、辽阳草坪绿化、辽阳草坪苗木、辽阳草坪销售、辽阳草坪专用草选择指南 - 优质品牌商家
  • 基于springboot的桂林旅游景点导游平台的设计与实现项目源码 java毕设 免费分享
  • 2026重型包装苏州纸箱定制深度选型指南:3大主流方案的场景匹配路径 - 速递信息
  • 教育行业非结构化数据治理实战复盘与架构解析
  • IDEA 常用快捷键
  • 2026年中频石墨化炉公司推荐,哪家更靠谱 - 工业品牌热点
  • wps pdf应用程序的关联
  • 能源行业零信任安全架构实战解析与选型指南
  • IL-5 Surpass ELISA试剂盒如何助力过敏性疾病与寄生虫感染的机制研究?
  • 小公司初面---java后端题目
  • 三维KD-Tree实现算法