本帖最后由 xichandoujigu 于 2018-12-28 00:04 编辑
买了一个0.96寸的OLED,I2C接口的,一直没找到驱动。
放了很长时间,几天前决定写个驱动程序,结果断断续续捣鼓了4天多时间才写好,作为新手确实不容易,现在我就将写这个驱动的过程与心得与大家分享,可作为参考。
一、首先是学习OLED显示原理
这个很重要,因为只有原理搞清楚了才能清楚如何取模和编程;我看了好几个OLED显示原理视频,这里推荐杜洋的《STM32入门100步(第53步)OLED屏驱动程序分析》,在优酷上可以搜索到,虽然是STM32的,但是这集讲原理不涉及STM32;有动画,比较好理解。关键要理解几点:
1.这个OLED是128*64的,即64行,128列,每8行128列为一页,总共8页;
2.用的比较多的是页模式扫描,就是先扫页第一列,然后第二列。。。直到128列然后再回到第一列,注意是扫描页的列,不是所有列。还有两种模式可以参考SSH1306数据手册,无论是哪种模式都是按照页来操作的。
3.扫描的列是低位在上,高位在下(这个和取模的选择有关系)
二、画数字的btm即位图
因为如果按照每页8行的扫描方式来扫描,正常一个数字最多占8行的空间,实际显示出来很小,这时候我们就要自己画数字了,就是显示的时候大一点,看的清楚并美观一点。
1.取模软件我用的是lcd汉字取模软件(用的也是杜洋网站上下载的取模软件);这个软件解压后又包含三个软件,就只用其中两个,一个是LcmSim.exe是画位图用,还有一个是LcmZimo.exe是取模用的(后面介绍)。
2.打开LcmSim.exe,定好自己的数字长宽,这里的长宽是占用多少列,多少页(不是行,因为扫描是按照页和列来扫描的不是按照行列来扫描的,这里再次强调也得概念很关键,需清楚才行),我例子里的是4页15列,即每个数字占用4*8=32行15列。
3.画图,觉得怎么好看就怎么画,画的时候可以放大以方便画图,画好后点保存。
三、取模,即取图片的16进制数
1.打开LcmZimo.exe准备取模
2.首先要填写输出大小再载入刚才保存的图片(注意顺序),数据取模方式是纵向8点下高位,其他都红色圈出来了,为什么要这么选应该理解,有利于后续的编程。
3.保存数据到*.h文件,并将数据复制到程序的数组中准备后续编程用
四、编程
每个数字图形都已经按照相同的空间进行了数组分配,这时候就看如何控制数字位置,昨天我写了一个函数,大家可作为参考,截图大概说明下这个函数作用,调用比较方便,就算是重新画图,图形大小变化后,只要赋值时选择设定的值同样适用。
五、调试结果
达到预期效果(暂时只是按照时间格式显示,无时间功能),试着修改函数值显示较好,有个小bug,没修改,等大家去发现了。
(其中图形数据数组和显示函数是我自己搞的,其他部分都是网上下载后稍作了调整。整体感觉还行,自我感觉比网上的代码质量稍高,稍作修改就能使用,当然,同时欢迎大家提意见和交流,QQ:308035395)
最后附上源代码供大家参考:
096OLED.rar
(37.28 KB)
|
感谢分享