STM32驱动TFTLCD播放动画 | 您所在的位置:网站首页 › 屏幕展示视频 › STM32驱动TFTLCD播放动画 |
STM32驱动TFT播放动画(BADAPPLE)
1.硬件型号及软件资料2.软件使用-导出.bin文件3.原理分析及代码实现4.实现效果5.友情提示
1.硬件型号及软件资料
最近尝试在做一个stm32驱动tft播放动画的例程,在网上看了一篇博主的文章,对其中部分类容不是很理解,于是自己重新做了下。希望能帮到有需要的人。 原文链接 1.硬件型号:STM32系列(能使用正点原子提供的FATFS实验即可)本例中使用的开发板为启明欣欣的STM32F407ZGT6开发板。 2.软件资料:Image2Lcd、KMP64。后者提取动画的每一帧,前者将提取到的图片文件转换为.bin二进制文件。 本例程播放的动画为BAD APPLE,黑白二色的动画。 软件资料链接: https://pan.baidu.com/s/1Q2CKXtSdyXa2guuGvDNGAQ 提取码:vycg 一、使用KMPLAYER打开BAD APPLE视频提取视频的每一帧。 1:在软件中打开该视频文件,不用播放。 2:按Alt+V打开高级捕获,按图中步骤开始捕获每一帧图片。 一、.bin文件图片数据分析。 1、.bin文件数据说明。 可以打开ImageLcd软件帮助界面查看说明:在单色模式下,输出是按照白色为0,黑色为1,每个像素点对应1位数据,8位数据合成一个字节,当图片的宽度不是8的倍数时会在最后一个字节中没有数据的位置补0,如该例图片的宽度为300,300\8=37(字节)余4(位),则第38个字节的前4位有数据,后4位没有数据,会往其中添加4个0凑成一个字节。所以我们需要根据这个原理对我们图片的显示设计相关的算法,避免后4位的数据添加到了头部。 如果程序运行后没有效果可以通过串口输出看看是什么原因,选中FR_OK右键"GO TO DEFINITION```"这里把各种原因列出来方便大家看: typedef enum { FR_OK = 0, /* (0) Succeeded */ FR_DISK_ERR, /* (1) A hard error occurred in the low level disk I/O layer */ FR_INT_ERR, /* (2) Assertion failed */ FR_NOT_READY, /* (3) The physical drive cannot work */ FR_NO_FILE, /* (4) Could not find the file */ FR_NO_PATH, /* (5) Could not find the path */ FR_INVALID_NAME, /* (6) The path name format is invalid */ FR_DENIED, /* (7) Access denied due to prohibited access or directory full */ FR_EXIST, /* (8) Access denied due to prohibited access */ FR_INVALID_OBJECT, /* (9) The file/directory object is invalid */ FR_WRITE_PROTECTED, /* (10) The physical drive is write protected */ FR_INVALID_DRIVE, /* (11) The logical drive number is invalid */ FR_NOT_ENABLED, /* (12) The volume has no work area */ FR_NO_FILESYSTEM, /* (13) There is no valid FAT volume */ FR_MKFS_ABORTED, /* (14) The f_mkfs() aborted due to any parameter error */ FR_TIMEOUT, /* (15) Could not get a grant to access the volume within defined period */ FR_LOCKED, /* (16) The operation is rejected according to the file sharing policy */ FR_NOT_ENOUGH_CORE, /* (17) LFN working buffer could not be allocated */ FR_TOO_MANY_OPEN_FILES, /* (18) Number of open files > _FS_SHARE */ FR_INVALID_PARAMETER /* (19) Given parameter is invalid */ } FRESULT; 4.实现效果1、300*230动画效果 300*230 可以看到动画看起来有点卡,这是因为处理一张图片的数据过大,这个板子能力就这样,没事我们可以改小点,使用128*64大小的动画,需要更改的地方: (1)lcd.h的宏定义改为如下 //================================================================== #define INIT_X 100 //起始x坐标 #define INIT_Y 90 //起始y坐标 #define PICTURE_WIDTH 128 //图片的宽度 #define PICTURE_HEIGHT 64 //图片的高度 #define TOTAL_BYTE 1024 //一张图片存储的总字节数,一个字节中有8个像素 #define BUFF_TOTAL_BYTE 512 //一张图片存储的总位数,即总像素,以300*230的图片为例,像素总个数为:300*230=69000 //但是为什么软件输出的图像8740*8=69920 //原因:图像的宽度300,即300个像素点,8个像素点对应一个字节,300\8=37余4,余下的4个像素被装入了一个字节的前四位中,后四位补0 //因此:一行相当于38个字节一共230行,总字节数:38*230=8740,多出来了:230*4=920补0像素 #define TOTAL_BIT TOTAL_BYTE*8 //==================================================================(2)main.c //将while(1)循环中的代码改一行 res = f_open(&text, "0:/apple.bin", FA_READ);//apple.bin是新的文件名2、128*64动画效果 128*64 5.友情提示代码中和LCD有关的函数可能正点原子的板子没法直接使用,不过都能找到类似的函数,例如: Set_Display_Mode(1); //屏幕设置为横屏 BRUSH_COLOR=BLUE; //设置字体为蓝色 LCD_ShowString(10,160,16,"SD Card Error!");//在指定区域显示字符串这些函数和正点原子提供的不一样,不过都能找到类似的,把这些换了就行。 .bin文件,程序源码文件链接: https://pan.baidu.com/s/1yOi5OjCNlIxvN9StlOX_dQ 提取码:ydgq |
CopyRight 2018-2019 实验室设备网 版权所有 |