36070|52

437

帖子

0

TA的资源

五彩晶圆(初级)

楼主
 

手把手教你做 BAD APPLE [复制链接]

 

 

最早在论坛看到bad apple这个名词的时候还不知道是什么东西,还听说用LCD的人没有玩过bad appleOUT了,后来专门百度搜了一下视频,立马中毒了,视频做得好,配乐也好听。

尤其是看到在51系统19264点阵上跑的时候,觉得太神奇了。

 

刚开始什么都不懂,在网上找了好多bad apple的例子,有几个具有代表性的,不过到最后一个都没参考,eeworldwstt贴了一个出来,后来发现是国外论坛上一个牛人用launchpad做的。真的很强大,用了RAM仅有128BG2331。而且用TA还做出了背景音乐。

我把他的硬件完全复制了一遍,软件也是完全下载的,知道的不是很透彻,所以没出来。找不到原作者的联系方式,国内又不知道谁用这个方案,没法交流,论坛上发问题没人理……又临近放假,所以没深究。

 

后来寒假在家闲得无聊,加上不能半途而废,于是又重新开始研究。(我把好多板子都带回家了,后来发现最缺的是杜邦线)

 

BAD APPLE其实网上的资料不是很多,这个时候,看了能找到的所有资料,静下心来分析了原理,觉得不是很难,就是把视频分割成图片放到SD卡,单片机读取送到LCD显示。

网友Ayumi123的注解:由于单片机代码区的限制,不可能将视频简单的放在单片机里,于是我们必须使用外部存贮器,这里我们用SD卡。这里的SD卡文件系统为FAT16,使用可移植的Petit FasFs,读取数据十分的方便。单片机只要负责从SD卡读数据并写入12864中就没什么其它事了。最重要的是Bin文件的获得。

 

最新回复

楼主的帖子很有用  详情 回复 发表于 2018-9-22 13:48

赞赏

3

查看全部赞赏

 
点赞 关注(9)

回复
举报

437

帖子

0

TA的资源

五彩晶圆(初级)

推荐
 

OK,开始了:

首先是截图的获得,推荐播放器Kmpayer,虽然很多人不喜欢,但是它的截图功能还是很强大的,而且一点不卡,截图过程中电脑不会假死。

 

 

选择图片格式,尺寸等参数,然后点开始。

大概326秒的bad apple,我截下来一共是6572张图。

然后我们把图片转成单片机认识的bin文件,也就是对图片取模。你可以用“LCD点阵提取工具zimo221”,这里推荐Image2Lcd软件,推荐用V3.2版本的,因为它才带批量转换功能,要不,6000+的图片……你懂的~

软件打开如下图:

关于转换的方式,由自己的算法决定,我NOKIA5110的输出数据类型:二进制,扫描模式:数据水平,字节垂直,输出灰度 :单色,并钩选了字节内像素数据反序。经过转换后我们就得到了6000+BIN文件,此时我们可以打开CMD,切换到你bin文件所在的目录,执行copy *.bin xx.bin 这条命令。

这样,就可以把这6000+个的BIN文件合成为一个单一的bin文件。好了,现在可以把这个XX.bin放到你己经格式化好了的SD卡中~

然后用另外一个软件WinHex,用WinHex打开你的SD卡,找到bin文件所在的起始地址,记下来,写到程序中,让单片机从起始地址开始读就OK,(WinHex具体用法见百度咯)~

 

OK,就是这么个过程~主控和显示可以根据自己的实际情况来选择,反正原理大同小异。

 

赞赏

1

查看全部赞赏

 
 

回复

437

帖子

0

TA的资源

五彩晶圆(初级)

板凳
 

虽然简单,但还是会牵扯到很多细节的东西,下面会逐一说明:

首先要做这个必须有SD卡和LCD的基础以及准备好底层程序,如果没有,那就不用往下看了~

LCD我没问题,SD卡弄了好久,还发过帖子求助,没人理我……

网上乱七八糟的程序很多,基本上都是51的,因为我不用51已经很久了,所以后来自己重新写了一个用在430上,确定能用~

花了几天的时间熟悉了一下SD卡的东西,因为没有牵扯文件系统,所以很快就看完了。

首先选取手头能用上的硬件(之前仿的那个launchpad没带回家):

很多开发板的IO口我都没焊排针,失误了……

1.只有一个MSP430F5438A的最小系统板(板子是暑假的时候跟老蔡蹭的,430是跟TI申请的),no doubt,主控就选它了,能跑到25M,实际上我用了16M,显示的时候还是太快所以加了延时控制速度……

2.LCD 我带回来一个320*240TFT,还有一个从本科一直伴随我到现在的NOKIA5110TFT刷屏需要速度,而且内存神马的都有要求,所以选择简单好用的5110屏,84*48的分辨率。(TFT两个比特刷一个点,有320*240个点;5110一个比特刷8个点,有84*48个点,SO?)

3.SD卡,木有,只有MicroSD……不过有一张以前买手机送的32M MMC卡,于是就拿MMC来用了。SD卡的底板是跟老郭蹭的,卡槽是实验室拆的……

 

前面说过了,这个东西不是真的把视频文件拷到SD卡里,让单片机读,单片机不会解码……我们用的是最原始最笨也是最简单的方法,把视频文件一帧一帧地截图,把图片数据存到SD卡,让LCD一帧一帧地显示图片来达到动态视频的效果。

 

赞赏

1

查看全部赞赏

 
 
 

回复

437

帖子

0

TA的资源

五彩晶圆(初级)

4
 

在做这个东西的过程中我遇到一些问题,有些是针对NOKIA5110的,如果是用12864做的同学的可以忽略。

具体遇到以下问题:

1.对于网上down的程序,当你不知道是干什么的时候不要拿过来就用,开源的东西不一定好,我在不懂SD细节的时候下过好多SD卡的程序,有51的有AVR的,我移植到430的时候无一能用。最后一个能用的也是修修补补才勉强可以。很多人把自己的东西开源的时候会改几个小部分,加几个小bug……我也不知道为什么,反正我遇到过好多次了~

举个例子:

我在淘宝上买TFT液晶,老板给我发资料的时候里面带了一个SD卡相册的工程,我把里面的SD程序分离出来,移植到430上,一直不行。读写扇区0一点问题没有,可是别的地址就不行,后来静下心来好好看了看SD的资料和程序,发现一个很好玩的问题:

//发命令到SD

void SD_Command(unsigned char command, unsigned long argument, unsigned char CRC)

{

  SD_Write(command|0x40);

  SD_Write(((unsigned char *)&argument)[0]);

  SD_Write(((unsigned char *)&argument)[1]);

  SD_Write(((unsigned char *)&argument)[2]);

  SD_Write(((unsigned char *)&argument)[3]);

  SD_Write(CRC);

}

[ 本帖最后由 juring 于 2012-2-3 10:47 编辑 ]
 
 
 

回复

437

帖子

0

TA的资源

五彩晶圆(初级)

5
 

就是这段代码,发命令到SD卡,大家知道SD卡的命令有6个字节组成,命令的第1个字节可以通过将6位命令码与16进制码0x40进行或运算得到。如果命令需要,则在接下来的4个字节中提供一个32位的参数,最后1个字节包含了从第1个字节到第5个字节的CRC-7校验和。

如果是要读写SD卡扇区,那么第一个字节是读写扇区的命令码和0x40相与,中间4个字节的扇区地址,最后一个CRC

问题就处在中间的4个字节,按照SD卡的规则,必须改成这样:

//发命令到SD

void SD_Command(unsigned char command, unsigned long argument, unsigned char CRC)

{

  SD_Write(command|0x40);

  SD_Write(((unsigned char *)&argument)[3]);

  SD_Write(((unsigned char *)&argument)[2]);

  SD_Write(((unsigned char *)&argument)[1]);

  SD_Write(((unsigned char *)&argument)[0]);

  SD_Write(CRC);

}

一个很小的Bug,绝对是故意的……

 

2.我用的屏分辨率是84*48,宽84不是8的倍数,现在的取模软件在生成图片数组的时候自动帮你补齐8的倍数,不知道说它人性化好还是画蛇添足好。所以我本来一张图是84*48/8=504个字节,现在转换出来是88*48/8=528个字节,这样就无语了。做处理的话太麻烦,不做处理那么显示出来的肯定是乱码,而且528字节超过了一个扇区的512字节,意味着存一个bin需要两个扇区……

于是我尝试着把图片裁剪成了80*48,这样就只有480个字节,能够一个扇区存下,少的几个字节在显示的时候跳过。(在用12864320240等液晶的时候不会出现此类问题)

3.转换出来的6752bin文件是按照视频截图的顺序一个一个排好的,只有按照顺序显示才会出现动画的效果。但是我在copy *.bin xx.bin的时候出现了一个问题,合并的时候不是按照顺序来的……这样的结果就是播放的时候屏幕乱闪,暂停就是一副完好的图片,因为顺序乱了……丝毫没有动画的效果……我急需要一个可以按顺序转bin的工具。

点评

简单交流一下吧, 1.引用“一个很小的Bug,绝对是故意的” 这里应该不是故意的,是你down的程序大小端问题,刚好和你的MSP430不同。 2.引用“发现FAT16,每个扇区存一个bin,而exFAT则是8个扇区存一个bin,但是  详情 回复 发表于 2012-7-12 00:32
 
 
 

回复

437

帖子

0

TA的资源

五彩晶圆(初级)

6
 

4.在找不到解决3的办法之前,我只能把6000+bin单个全都放到SD卡里面,一个一个读,这样最简单。但是新的问题又出现了,我的MMC卡是32MB大小FAT16格式的,不知道为什么只能放进去512个文件(搞不懂文件系统),……这个方法难道要失败?

忽然想到在格式化MMC的时候还有一个选项是exFAT,于是我试了试,竟然可以,于是我把6000多个bin顺利存入MMC卡。我觉得格式不一样,文件存储方式应该也不一样,然后就试,发现FAT16,每个扇区存一个bin,而exFAT则是8个扇区存一个bin,但是一个bin只有480字节,所以只占用8个扇区中的第一个,所以我只需要每隔8个扇区读一个就可以了,试了一下,bingo~动画出现了~

 

感谢各种论坛上各种开源的大牛们,感谢wstt的帖子让我知道了bad apple这么回事~尤其感谢ourdevAyumi123,你的帖子让我学到不少东西。

 

OK,That’s it!

就是这样,简单吧~

当你远远看到一个东西很强大很帅气的时候,觉得不可思议,然后当你走近甚至走进它,自己做出来的时候发现其实真的也就那么回事。任何事情往往发展到最后不是技术问题,关键是创意。有技术没有想法真的是一件很可怕的事情。

SO,当有好的idea的时候,Just do it

还有养成写笔记的好习惯~

如果可以的话,尽量开源,并且少设几个bug~

 

附:

后来bin的合并问题解决了,从1000开始计数便会按照顺序合并。而且我也通过批处理把每个bin扩展到512字节,正好一个扇区。然而,新的问题又来了,在合并过程中,出现了一个很奇怪的现象,本来两个512bin合并完成后是1024字节,而大多数结果也是1024。但有一些结果不是的,只有900多,至今原因不明,这样也导致了合并完成的bin体积小于之前6000bin的总和的体积,视频播放到中间的时候会出现错位的问题,不知何解……

视频尺寸取模也好了,视频中的尺寸是84*48满屏的。

点评

请问“视频播放到中间的时候会出现错位的问题”该如何解决?  详情 回复 发表于 2014-8-1 10:32
 
 
 

回复

1729

帖子

0

TA的资源

五彩晶圆(初级)

7
 
很好的东西,支持一下,顶一个。
 
 
 

回复

1万

帖子

16

TA的资源

版主

8
 

这个好,楼主辛苦

 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

2751

帖子

0

TA的资源

裸片初长成(初级)

9
 
强帖,必须顶。
 
 
 

回复

437

帖子

0

TA的资源

五彩晶圆(初级)

10
 

抛砖引玉,可以继续做下去的是怎么在小RAM的单片机中实现,这就牵扯到SD卡的读取,怎么加上背景音乐~参考wstt帖子里的代码~

 

 

代码.rar

3.76 KB, 下载次数: 208

售价: 1 分芯积分  [记录]

batch8448.rar

1.49 MB, 下载次数: 323

售价: 1 分芯积分  [记录]

 
 
 

回复

2002

帖子

24

TA的资源

五彩晶圆(高级)

11
 
这个很厉害 合并大小问题是不是批处理的时候文件互斥之类的漏掉一些。
背景音乐是怎样的搞不明白
 
 
 

回复

1908

帖子

7

TA的资源

五彩晶圆(高级)

12
 
对楼主在学习之中付出的努力和得到的成果表示钦佩   以前也弄过lcd,12864 只不过是简单的显示变量  从未想过会做成这个样子  开眼界了
 
 
 

回复

281

帖子

0

TA的资源

一粒金砂(高级)

13
 

cool~

 
个人签名单纯的EEer~
 
 

回复

29

帖子

0

TA的资源

一粒金砂(中级)

14
 
学习了
 
 
 

回复

389

帖子

0

TA的资源

纯净的硅(初级)

15
 
很多东西都是实践过程中,一步一步加深了解的。做的很不错。
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(高级)

16
 
很不错,支持这样的原创+分享,
建议加精
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(中级)

17
 
嗯  强啊
 
 
 

回复

274

帖子

8

TA的资源

纯净的硅(初级)

18
 
楼主好强啊 ,支持
 
 
 

回复

199

帖子

0

TA的资源

纯净的硅(初级)

19
 
我先知道如何做到同步的?毕竟显示一张图片的时间是未知的?难道楼主一点一点的调节吗?
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(高级)

20
 
很是强大啊,以前是没想过可以用430做这样的工作。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表