一、前言

最近正好学习SD卡,顺手在LED屏上做个badapple玩玩。以为很简单,也耗费了一些时间,故作此记录。希望可以帮到朋友们。

二、准备

我将从各个模块的实现一一讲解,更偏向于思路。OK,我们开始吧。

1. 实现LED基本读写函数

首先你得实现屏幕的一些基本函数,我们这以实现128X64的图像为例。代码做了详细注释,重要的是理解其中逻辑。

/************************************************
功能:在屏幕上显示一幅128X64的图像
参数:X:图像启始位置的横坐标y: 图像启始位置的纵坐标text:存储图像数据的数组
************************************************/
void disp_image_64x128(int x,int y,char *text)
{ unsigned int k; lcd_address(x,y,64,128); //在X,Y处划定范围//每一个像素点可用1位表示,128X64/8=1024bytefor(k=0;k<1024;k++) //依次传入图像数组{ mono_transfer_data_16(text[k],QG,BG);//QG,BG 为前景色和背景色}
}
/************************************************
功能:  将传入数据转义为图像颜色数据
参数:mono_data:传入数据font_color: 前景色back_color: 背景色
************************************************/
void mono_transfer_data_16(int mono_data,int font_color,int back_color)
{ int i; for(i=0;i<8;i++) //从高位开始判断一个字节的每一位{ if(mono_data&0x80) { transfer_data_16(font_color); //当数据是 1 时,显示字体颜色 } else { transfer_data_16(back_color); //当数据是 0 时,显示底色 } mono_data<<=1; //循环移动}
}

2.实现SD卡读写和FATFS移植

因为传入数据过大,我们需要SD卡来存储大量的图片数据。然后需要引入文件系统来读入数据。
这里我主要参考的是正点原子。因代码过多,不便讲解,给大家留下链接。
视频讲解
资料下载

3.准备素材

注:所需软件和素材已打包,文末有链接。给我个赞吧。

3.1得到图片

大家可以从B站找到badapple的高清视频然后通过视频剪辑软件截取帧动画。我用的KMPlayer软件。
①导入视频
②按下图操作


这里我们选择的128X64的尺寸,帧率为1S10帧,大家也可以按照自己的需求调整。
④点击开始,等待结束后,可以在KMPlayer软件安装目录下的Capture文件夹下找到捕获图片。

3.2得到bin文件

①图片全部捕获完成后,使用Image2Lcd将bmp批量转换成bin文件。

这里说明一下这个软件需要注意的点,红色框按照我的方式更改,绿色框需要根据自己屏幕的扫描方式自行更改。其他选项默认就行。
大家需要知道自己屏幕扫描的方式,如果不知道,你可以写一个显示全屏红色,在传入颜色数据那加一个延时,你就可以看到红色按照何种扫描方式填满整个屏幕。通过更改绿色框内选项使示例跟自己的扫描方向相同。
配置完成后,点击批量转换,即可。注意,如果不确定自己是否配置正确,我们可以先只转换一张图片,看看自己屏幕能否正确显示出来,批量转换过程中,Image2Lcd可能会卡住,不用管它,但转换仍在进行中,可以观察转换文件夹文件数量依然在增加。



②得到大量bin文件,大家可以看到单个bin文件的大小为1024字节,怎么来的呢?很简单,128x64,每一个像素点占1位,那么就是
128X64/8=1024byte。

3.3合并bin文件

①将装有所有biin文件的batch文件夹剪切粘贴到C盘根目录
②按下键盘的WIN+R调出命令窗口,依次输入如下命令。
cd C:\batch
copy /b *.bin badapple.bin

③合并完成后在batch文件夹最下面找到badapple.bin文件剪切粘贴到内存卡。
然后将badapple.bin文件复制到SD卡中,插到单片机的SD卡座中即可。

四、编写播放函数

/************************************************
功能:从SD卡读取bin文件,并播放
参数:无
************************************************/
static void play_badapple(void)
{uint32_t ls_move = 0;       /* 存储文件指针移动 */UINT br;                    /* 成功读取的字节个数 */f_res = f_open(&file, "0:/badapple.bin", FA_READ);//打开bin文件uint8_t badapple_Bin[1024];  /* BIN图形显存 */ if (f_res == FR_OK)     //打开成功{while (1){f_res = f_lseek(&file, ls_move);      /* ls_move就是将读写指针定位到文件相应位置 */f_res = f_read(&file, badapple_Bin, sizeof(badapple_Bin), &br); /* 读取Bin数据放入badapple_Bin数组中 *///每次读取1024个字节正好一帧if (br != 1024)     /* 已经把数据读取完成*/// br表示成功读取的字节数,如果不是1024证明读取失败或者全部读取完了 {ls_move = 0;    /* 从头再来 */ //break;}disp_image_64x128(50, 50, badapple_Bin);/* 显示帧数据 */HAL_Delay(5);       /* 加点延迟,看起来不会太鬼畜 */ls_move += 1024;    /* bin文件数据位置偏移 */  //偏移到下一帧位置}}
}

至此就大功告成了,相信你也可以,快去动手试试吧。

五、总结

没想到一个小小的badapple也融合了很多技术,设计到了屏幕显示,文件系统,SD卡操作等等。这次主要以128X64的尺寸显示,实际显示很流畅,就是有点小,哈哈。大家也可以更改更大尺寸尝试,但要注意的是, 更大尺寸的意味着刷新一帧画面需要更多时间,可能导致画面卡成PPT,具体的优化我就不展开了,快去实现自己的badapple吧,记得给我点点赞。

六、注

参考文章:在LCD12864上播放badapple是什么体验?感谢大佬的文章。
资源: 文章提到的资源整理

手把手教你播放自己的badapple相关推荐

  1. TikTok账号运营:零播放、被限流的3大原因,手把手教你检测技巧和处理方法

    大家好,我是项柚.从业TikTok跨境电商多年的自媒体人,专注分享海外版抖音TikTok运营技巧和商业变现,主要针对外贸企业做TikTok的商业化布局 TikTok运营的过程中,大家发布了短视频内容, ...

  2. python爬取qq音乐歌曲链接为什么播放不出来_手把手教你使用Python抓取QQ音乐数据(第一弹)...

    原标题:手把手教你使用Python抓取QQ音乐数据(第一弹) [一.项目目标] 获取 QQ 音乐指定歌手单曲排行指定页数的歌曲的歌名.专辑名.播放链接. 由浅入深,层层递进,非常适合刚入门的同学练手. ...

  3. 手把手教你用苹果CMS做一个电影视频网站 可直接在线播放

    现在大家在网上看电影很方便了,因为电影网站多如牛毛!那很多人在想,做电影网站难么?能否拥有一个属于自己的电影网站呢?其实真的可以,而且很简单下面我们就来手把手的教你如何做一个电影网站!因为我的空间是P ...

  4. 手把手教你爬取PC端『某酷视频』个人历史播放数据,并可视化展示

    大家好,我是阿辰,今天手把手教你爬取PC端『某酷视频』个人历史播放数据,并可视化展示 上次有粉丝说,那个是ios手机,安卓手机现在需要root权限才可以安装证书,那么今天就不以手机为例,以电脑PC端为 ...

  5. 【精】手把手教你用小米盒子播放台式机里的照片和视频

    [精]手把手教你用小米盒子播放台式机里的照片和视频 简介 先科普下:DLNA(Digital Living Network Alliance) 由索尼.英特尔.微软等发起成立.旨在解决个人PC,消费电 ...

  6. 数字电路实验怎么接线视频讲解_家庭影院中音箱、功放、投影机、4K播放机不知道怎么连接?手把手教你...

    家庭影院中音箱.功放.投影机.4K播放机不知道怎么连接?手把手教你 有不少用户收到从家庭影院器材之后,表示完全不会连接.翻看说明书也觉得头大,知识太多,然而却很难找到要点. 今天主要跟大家讲讲如何连接 ...

  7. 手把手教你搭建Nginx-rtmp流媒体服务器+使用ffmpeg推流

    手把手教你搭建Nginx-rtmp流媒体服务器+使用ffmpeg推流 转载自:https://www.jianshu.com/p/06c2025edcd3 by – paperfish 最近尝试着搭建 ...

  8. 手把手教你入侵网站修改数据_手把手教你使用Python抓取QQ音乐数据(第四弹)...

    [一.项目目标] 通过手把手教你使用Python抓取QQ音乐数据(第一弹)我们实现了获取 QQ 音乐指定歌手单曲排行指定页数的歌曲的歌名.专辑名.播放链接. 通过手把手教你使用Python抓取QQ音乐 ...

  9. 手把手教你训练一个秒杀科比的投篮AI,不服来练 | 附开源代码

    原作:Abe Haskins 安妮 编译整理 量子位 出品 | 公众号 QbitAI 在这篇教程中,谷歌工程师Abe Haskins用简洁易懂的语言,教你用Unity3D和TensorFlow生产一只 ...

最新文章

  1. 90后斯坦福博士论文登Science封面!AI算法准确预测RNA三维结构
  2. 基于Flink秒级计算时CPU监控图表数据中断问题
  3. 1.信号处理之:kill(),alarm(),pause()函数
  4. [zjoi2015]幻想乡战略游戏
  5. ElasticSearch学习资料
  6. 微软第二财季营收达 517 亿美元,净利润同比增长 21%
  7. MySQL的FROM_UNIXTIME()和UNIX_TIMESTAMP()函数的区别
  8. Qt设置圆角按钮样式
  9. 云计算:21世纪的商业平台
  10. 如何使用iMazing备份、恢复《暴力飞车》游戏存档
  11. shape中的ring标签的使用方法
  12. wechat 微信ipad协议GO版本 最新不封号 长链接 完整版
  13. SNN系列|神经元模型篇(1) Hodgkin Huxley
  14. 谷歌Chrome浏览器如何开启无痕模式 Chrome浏览器无痕模式开启方法
  15. KEIL编程中如何重定义printf()函数,以便在后来的开发中使用此函数进行串口数据输出
  16. 华为设备配置SEP多环
  17. Latex去掉proof后面显示的小白框 (\qed)
  18. vim配置set nu
  19. 生成特定于查询的类API摘要 (Generating Query-Specific Class API Summaries)
  20. 虚拟运营商治理170垃圾短信推举报平台

热门文章

  1. 楼市越来越冷,业主们能否靠出租增值?
  2. (转) ios苹果开发者账号申请
  3. 程序员专属情人节表白网站(html+css+js邀请函网站制作)
  4. 普中一键下载CH340
  5. VS Code语言设置中文
  6. python@最容易上手的图形界面开发框架之一PySimpleGUI@PySimpleGUI学习路线和官方文档阅读
  7. c 语言 火车票退费计算 函数专题
  8. python实现自动化鼠标点击
  9. postgresql常用命令
  10. 计算机语言表示教师节快乐,有关教师节快乐的优秀作文(通用3篇)