打印

分享一个0.96寸OLED(128*64)显示时钟的驱动,还请多多指教。

[复制链接]
7605|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 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)



评论
dirtwillfly 2018-12-28 08:35 回复TA
感谢分享 

相关帖子

沙发
yang_alex| | 2018-12-27 23:44 | 只看该作者
用的是什么MCU啊?

使用特权

评论回复
板凳
xichandoujigu|  楼主 | 2018-12-28 00:05 | 只看该作者

stc12c5a60s2

使用特权

评论回复
地板
山东电子小菜鸟| | 2018-12-31 17:20 | 只看该作者
学习了

使用特权

评论回复
5
沙子p| | 2019-9-30 20:43 | 只看该作者
这个屏的型号是什么啊

使用特权

评论回复
评论
dirtwillfly 2019-10-2 16:19 回复TA
这种屏,某宝上有很多。 
6
li1874| | 2019-11-9 18:18 | 只看该作者
你这是做广告呢啊

使用特权

评论回复
7
zhenwunet| | 2019-11-23 08:49 | 只看该作者

学习了

使用特权

评论回复
8
jerrytomh| | 2020-8-25 11:15 | 只看该作者
学习了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

31

主题

96

帖子

2

粉丝