6612|45

1万

帖子

25

TA的资源

版主

楼主
 

OLED显示驱动 [复制链接]

 
 

将OLED驱动完善了一下,可以支持多种字体显示,目前支持:

  • 6x8
  • 8x16
  • 12x24
  • 16x32

 

驱动程序:

游客,如果您要查看本帖隐藏内容请回复


此内容由EEWORLD论坛网友dcexpert原创,如需转载或用于商业用途需征得作者同意并注明出处

最新回复

学习一下,谢谢大佬  详情 回复 发表于 2024-4-2 10:22

赞赏

3

查看全部赞赏

点赞 关注
 
 

回复
举报

1万

帖子

25

TA的资源

版主

沙发
 

 Demo

from machine import I2C, Pin
from oled import OLED12864_I2C

i2c = I2C(-1, scl = Pin(27, pull = Pin.PULL_UP), sda = Pin(13, pull = Pin.PULL_UP))

oled = OLED12864_I2C(i2c)
oled.text(0, 0, '0123456789')
oled.Font('Font_8x16')
oled.text(0, 1, '0123456789')
oled.Font('Font_12x24')
oled.text(0, 3, '0123456789')

 

 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

各路大神各显神通

 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

4
 

谢谢,特意注册来看看

点评

欢迎一起学习交流  详情 回复 发表于 2020-2-4 18:28
 
 
 

回复

1万

帖子

25

TA的资源

版主

5
 
stategrid 发表于 2020-2-4 16:44 谢谢,特意注册来看看

欢迎一起学习交流

 
 
 

回复

13

帖子

0

TA的资源

一粒金砂(中级)

6
 

好东西就得收藏

 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(中级)

7
 

OLED显示驱动 [修改]

 
 
 

回复

15

帖子

0

TA的资源

一粒金砂(中级)

8
 

好东西就得學習收藏

 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

9
 

对代码的一些解析,我是菜鸟加外行,请大家指教

首先这个屏幕分辨率是128*64,点阵显示方式从def text_6x8看是从左到右,横坐标扫描到128后就转下一行的起点即x=0,y+1.

x > 120而不是 x > 126,我认为是为了避免超出范围?

然后这些显示屏的显示方式是开辟一个缓冲区,有些是在显示屏的控制器,有些是mcu的内存,还有些是两者都有。缓冲区的大小和屏幕一样128*64,即对应屏幕每个点。

通过改写缓冲区,把改写结果送到硬件接口,就可以显示字符。

接下来就是从font里寻找对应的字符位置,看要改写那些内容。这部分代码看不明白

    def char_6x8(self, x=0, y=0, ch=32, c=1):
        try:
            ind = x + y * 128 + 1
            n = (min(127, max(ord(ch), 32)) -32)*5
            for i in range(5):
                screen[ind+i] = Font_6x8[n+i] if c else Font_6x8[n+i]^0xFF
            screen[ind+5] = 0 if c else 0xFF
            self.set_pos(x, y)
            self.i2c.writeto(self.ADDR, b'\x40' + screen[ind:ind + 6])
        except:
            return

   

def text_6x8(self, x=0, y=0, s='', c=1, wrap=0):
        for i in range(len(s)):
            self.char(x, y, s[i], c)
            x += 6
            if wrap and x > 120:
                x = 0
                y += 1

点评

使用i2c或spi方式时,因为不能读取oled内部缓存数据,所以需要在外部开一个128x64/8=1024字节的缓冲区。   因为字体不大,直接放入ram中,速度比较快。如果显示中文,字库较大,最好就放在flash中,或者  详情 回复 发表于 2020-2-14 22:03
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

10
 

看看这个好不好用

 
 
 

回复

1万

帖子

25

TA的资源

版主

11
 
stategrid 发表于 2020-2-8 04:58 对代码的一些解析,我是菜鸟加外行,请大家指教 首先这个屏幕分辨率是128*64,点阵显示方式从def text_6 ...

使用i2c或spi方式时,因为不能读取oled内部缓存数据,所以需要在外部开一个128x64/8=1024字节的缓冲区。

 

因为字体不大,直接放入ram中,速度比较快。如果显示中文,字库较大,最好就放在flash中,或者用专用字库芯片。

 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

12
 

厉害了。学习一下

 
 
 

回复

1027

帖子

0

TA的资源

五彩晶圆(中级)

13
 

谢谢分享

 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

14
 
谢谢大佬,学习学习
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

15
 

好东西就得收藏

 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

16
 

学习

 
 
 

回复

2万

帖子

341

TA的资源

版主

17
 

看看什么情况

 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

18
 

学习

 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(中级)

19
 

看看学习下

 

 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

20
 

谢谢楼主分享了

 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
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
快速回复 返回顶部 返回列表