STM32入门之旅:用0.96吋OLED屏幕播放哥哥的代表作
感谢:
本项目已开源至
https://github.com/WeiLai0415/iKun_on_OLED
OLED基本显示
函数来源
在Hardware中添加OLED.h,OLED.c和OLED_Font.h。OLED.h用于存放OLED显示函数的声明,OLED.c用于存放OLED显示函数的声明,OLED.c用于存放OLED显示函数的定义,OLED_Font.h用于存放OLED显示用到的字库(数组)。
本项目中的这三个文件都是在江科协的基础上改动的,再次感谢!
在这里给出江科协源代码的夸克网盘链接,.zip文件解压密码为32:
我用夸克网盘分享了「程序源码.zip」,点击链接即可保存。打开「夸克APP」,无需下载在线播放视频,畅享原画5倍速,支持电视投屏。 链接:https://pan.quark.cn/s/a12e6de8f538
由于OLED_Font.h的内容太多,这里就不放出其完整内容了,有需要请移步
https://github.com/WeiLai0415/iKun_on_OLED/blob/master/Hardware/OLED_Font.h
main.c主要包含显示中文“坤”和英文“iKun”。
1 |
|
对中文取模
由于中文显示较为复杂,这里使用PCtoLCD工具取模,
注意,我们要在“选项”卡片中,使用C51格式,并把每行显示的数据-点阵调得越大越好。
使用字模
“生成字模”后,复制到OLED_Font.h的数组中:
1 | const uint8_t OLED_F8x16_CHNChar[][32]= |
来到OLED.c中,仿照江科协给出的OLED_ShowChar()函数,写函数OLED_ShowCHNChar()
1 | void OLED_ShowCHNChar(uint8_t Line, uint8_t Column, uint8_t index) |
函数中,由于汉字的大小为16 * 16 (pits),我们需要每输出16个像素就换一次行。
还有,别忘了在OLED.h中声明新建的函数OLED_ShowCHNChar()。
播放“视频”
准备64 * 128的.gif文件
如果没有大小合适的,推荐使用GIF Movie Gear改变原文件大小。
对GIF二值化
推荐线上工具阈值图像(用黑色或白色像素替换每个像素)- 免费在线工具 (imageonline.co)。
效果如下:
分离帧
使用Gifsplitter将动图转化为图片。
位图取模
步骤与汉字取模相同(改为位图模式),不再赘述。
放入OLED_Font.h中,步骤相同,这次我们将数组命名为OLED_F8x16_Kun[][128 * 64]。
显示图片
来到OLED.c中,写函数OLED_ShowKun(),我们将唯一的参数index定义为OLED_F8x16_Kun[][128 * 32]中的OLED_F8x16_Kun[index]数组,即第index帧。
由于数组较长,我们改变策略,采用循环,用于0.96吋OLED屏幕分辨率为64 * 128。写入每128个字符即换一行。
1 | void OLED_ShowKun(uint8_t index) |
同样,别忘了在OLED.h中声明新建的函数OLED_ShowKun()。
连续显示图片
接着,我们只需要把15帧连续播放就可以模仿视频的效果了。
在main.c函数中:
1 |
|
终于,哥哥动起来了!
一些有待改进的地方
刷新时图片会频闪,拟优化改进程序,使程序只刷新改变值的像素点。
手动取模太过麻烦,听说Python可以实现自动取模,拟编写Python程序实现自动取模并写入
OLED_Font.h。
