源码网盘链接:https://pan.baidu.com/s/1APv5yVAqrYj4KkkIafegrQ 提取码:b628
B站:https://www.bilibili.com/video/BV1Z5411E7uH
给大家分享一个教程,12864播放视频。这个东西显示效果很好,还是挺有意思的,我提供了bad apple的bin文件,大家可以一试,播放下badaple。
做这个需要性能好点的单片机,所以普通的51单片机不行,需要用stc12c5a60s2,它跟普通的51单片机一摸一样,引脚也一样,里面寄存器地址,定时器,中断也一样,如果你买过51单片机开发板,单片机芯片槽上插它就行了,平时完全可以拿它学习51单片机,51单片机的程序放它那,一样运行。它与普通的单片机相比,唯一的区别就是时钟会比普通的快12倍(不止速度,它相对普通51新增了很多功能,初学者可以不用管),普通的51单片机会把晶振给缩小12倍,但是它不会,晶振接多大,它的时钟频率就多大,由于播放视频功能是电脑通过串口发送给单片机数据,单片机将数据写入12864里。它需要很快的串口速度。普通的51单片机,快不了,但12c5a60s2可以,串口波特率是115200,对于普通51就是超越不了的梦。
main.c ta.h ta.c是单片机的源码,用keil4或者keil5 新建51单片机的工程,单片机型号是stc12c5a60s2,没有这个型号的话,可以用51单片机烧写软件stc-isp添加此型号,选择keil的安装路径,就可以添加了。(具体可以百度,参考百度经验https://mbd.baidu.com/ma/s/dBxzchKA)新建完工程后,把这三个.c/.h文件放到工程文件夹下,确保keil可以找到,并添加这两个.c文件进工程。之后可以自行按你的实际电路情况去更改ta.h上那些引脚,串口引脚是P3.0,P3.1,不用动。编译出hex,烧录进单片机就行了。
制作视频文件.c 是做发送给单片机视频的bin文件的程序,如果不想去做,可以不用看。这个程序用到了C语言的文件io,改日再介绍。大家可以看谭浩强的C语言书最后一章,自行学习。
烧录进单片机后(记住要接11.0592m晶振),上电,单片机会等待串口发来数据,电脑就用51单片机烧写软件stc-isp发文件就行,设置:波特率115200,一个停止位,八位数据位,没有校验位。
单片机接收到数据后,会播放视频。它能自动的匹配视频图像大小,分辨率,进行播放,人只需要发送即可,不需要干预。
程序的原理是ta.c是12864的读写时序和初始化函数,main.c里是循环等待接收串口数据,接收了就写进12864里,在循环接收数据之前,单片机最初还接收了5个字节,它保存了一帧图片是多大字节,宽度是多少,要放到lcd的那个位置去播放,单片机先串口读出这5个字节后,设置相应的参数,之后,它就循环的接收数据了,接收一个字节数据,写入12864,就是12864屏幕上的八个点,一行一行的写,写够一个图片的数据就显示,这样一直发,就成了动画。所以借此也能想象到,视频文件的结构就是一张又一张图片的数据,一个接一个按顺序都写在一个文件里。
115200波特率说快也不快,串口传输速度还是很慢的,它发一次八个点,发一次八个点,一张图片写完,再写下一张图片,一行一行的刷新,前一张图和后一张图重叠,如不做处理,会有严重的重印,为了解决这个重影,这个程序也做了处理,12864的图像芯片,12864液晶的显示只用了一半,其实另一半也可以用的,用滚屏命令就可以了显示出另一半。此程序串口传来的数据,会存到另一半上,传完一个图片,用滚屏命令,让液晶显示这一半,另一半再写数据,如此反复,就没有重影了,程序就这么写,可以自行研究。
当然我这个还存在问题,那就是接收数据的时候,如果有那种接触不良,只要有一个字节没接收到,或者有一个数据没写进12864上,整个图片就错位了。大家可以参照我这个做,进行自己的改良,谢谢观赏!