ssd1306中文库

下载中文库,没有的加QQ:3507377284

刷固件刷好后再将GB2312-12.fon上传到tonny里

导入ssd1306.py

# MicroPython SSD1306 OLED driver, I2C and SPI interfaces

from micropython import const
import framebuf


# register definitions
SET_CONTRAST = const(0x81)
SET_ENTIRE_ON = const(0xA4)
SET_NORM_INV = const(0xA6)
SET_DISP = const(0xAE)
SET_MEM_ADDR = const(0x20)
SET_COL_ADDR = const(0x21)
SET_PAGE_ADDR = const(0x22)
SET_DISP_START_LINE = const(0x40)
SET_SEG_REMAP = const(0xA0)
SET_MUX_RATIO = const(0xA8)
SET_COM_OUT_DIR = const(0xC0)
SET_DISP_OFFSET = const(0xD3)
SET_COM_PIN_CFG = const(0xDA)
SET_DISP_CLK_DIV = const(0xD5)
SET_PRECHARGE = const(0xD9)
SET_VCOM_DESEL = const(0xDB)
SET_CHARGE_PUMP = const(0x8D)

# Subclassing FrameBuffer provides support for graphics primitives
# http://docs.micropython.org/en/latest/pyboard/library/framebuf.html
class SSD1306(framebuf.FrameBuffer):
    def __init__(self, width, height, external_vcc):
        self.width = width
        self.height = height
        self.external_vcc = external_vcc
        self.pages = self.height // 8
        self.buffer = bytearray(self.pages * self.width)
        super().__init__(self.buffer, self.width, self.height, framebuf.MONO_VLSB, self.width)
        self.init_display()

    def init_display(self):
        for cmd in (
            SET_DISP | 0x00,  # off
            # address setting
            SET_MEM_ADDR,
            0x00,  # horizontal
            # resolution and layout
            SET_DISP_START_LINE | 0x00,
            SET_SEG_REMAP | 0x01,  # column addr 127 mapped to SEG0
            SET_MUX_RATIO,
            self.height - 1,
            SET_COM_OUT_DIR | 0x08,  # scan from COM[N] to COM0
            SET_DISP_OFFSET,
            0x00,
            SET_COM_PIN_CFG,
            0x02 if self.width > 2 * self.height else 0x12,
            # timing and driving scheme
            SET_DISP_CLK_DIV,
            0x80,
            SET_PRECHARGE,
            0x22 if self.external_vcc else 0xF1,
            SET_VCOM_DESEL,
            0x30,  # 0.83*Vcc
            # display
            SET_CONTRAST,
            0xFF,  # maximum
            SET_ENTIRE_ON,  # output follows RAM contents
            SET_NORM_INV,  # not inverted
            # charge pump
            SET_CHARGE_PUMP,
            0x10 if self.external_vcc else 0x14,
            SET_DISP | 0x01,
        ):  # on
            self.write_cmd(cmd)
        self.fill(0)
        self.show()

    def poweroff(self):
        self.write_cmd(SET_DISP | 0x00)

    def poweron(self):
        self.write_cmd(SET_DISP | 0x01)

    def contrast(self, contrast):
        self.write_cmd(SET_CONTRAST)
        self.write_cmd(contrast)

    def invert(self, invert):
        self.write_cmd(SET_NORM_INV | (invert & 1))

    def show(self):
        x0 = 0
        x1 = self.width - 1
        if self.width == 64:
            # displays with width of 64 pixels are shifted by 32
            x0 += 32
            x1 += 32
        self.write_cmd(SET_COL_ADDR)
        self.write_cmd(x0)
        self.write_cmd(x1)
        self.write_cmd(SET_PAGE_ADDR)
        self.write_cmd(0)
        self.write_cmd(self.pages - 1)
        self.write_data(self.buffer)


class SSD1306_I2C(SSD1306):
    def __init__(self, width, height, i2c, addr=0x3C, external_vcc=False):
        self.i2c = i2c
        self.addr = addr
        self.temp = bytearray(2)
        self.write_list = [b"\x40", None]  # Co=0, D/C#=1
        super().__init__(width, height, external_vcc)

    def write_cmd(self, cmd):
        self.temp[0] = 0x80  # Co=1, D/C#=0
        self.temp[1] = cmd
        self.i2c.writeto(self.addr, self.temp)

    def write_data(self, buf):
        self.write_list[1] = buf
        self.i2c.writevto(self.addr, self.write_list)


class SSD1306_SPI(SSD1306):
    def __init__(self, width, height, spi, dc, res, cs, external_vcc=False):
        self.rate = 10 * 1024 * 1024
        dc.init(dc.OUT, value=0)
        res.init(res.OUT, value=0)
        cs.init(cs.OUT, value=1)
        self.spi = spi
        self.dc = dc
        self.res = res
        self.cs = cs
        import time

        self.res(1)
        time.sleep_ms(1)
        self.res(0)
        time.sleep_ms(10)
        self.res(1)
        super().__init__(width, height, external_vcc)

    def write_cmd(self, cmd):
        self.spi.init(baudrate=self.rate, polarity=0, phase=0)
        self.cs(1)
        self.dc(0)
        self.cs(0)
        self.spi.write(bytearray([cmd]))
        self.cs(1)

    def write_data(self, buf):
        self.spi.init(baudrate=self.rate, polarity=0, phase=0)
        self.cs(1)
        self.dc(1)
        self.cs(0)
        self.spi.write(buf)
        self.cs(1)

再测试程序test.py

from machine import I2C,Pin         #从machine模块导入I2C、Pin子模块
from ssd1306 import SSD1306_I2C     #从ssd1306模块中导入SSD1306_I2C子模块

i2c = I2C(sda=Pin(21), scl=Pin(22))   #pyBoard I2C初始化:sda--> Y8, scl --> Y6
oled = SSD1306_I2C(128, 64, i2c, addr=0x3c) #OLED显示屏初始化:128*64分辨率,OLED的I2C地址是0x3c

oled.font_load("GB2312-12.fon")
oled.fill(0)

for i in range(4):
#     oled.font_set(0x24, i, 1, 0)
    oled.text("朱元峰", 1, 1)      #写入第1行内容
    oled.text("张力予",  0, 20)      #写入第2行内容
    oled.text("By 01Studio",  0, 30)      #写入第3行内容
    oled.text("中文",  0, 50)

    oled.show()   #OLED执行显示

AttributeError: 'SSD1306_I2C' object has no attribute 'font_load' 如果遇到这个不是固件没刷,就是驱动代码不是上面的

如果遇到问题就拨打18851976557,报朱元峰就行了

如果谁有kalman滤波追踪(python)可以私信我,谢谢

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: SSD1306是一类常见的OLED显示屏控制芯片,其支持自定制的文字库,能够在OLED屏幕上显示出文字符。文字库是一组固定大小的字形文件,用来描述每个文汉字的形状和大小,以便于在显示屏上显示。SSD1306文字库能够支持常见的汉字、日文、韩文等字符,同时也支持用户自定义的文字符集。 SSD1306文字库具有以下特点: 1. 高效:文字库是一组压缩过的字形文件,能够极大地节省存储空间,提高显示效率。 2. 灵活:SSD1306支持多种文字库编码格式,能够适应不同需求的项目。 3. 易用:SSD1306文字库的接口简单易懂,能够快速上手,加快开发进度。 4. 土特产支持文显示:SSD1306文字库支持多种字体大小和字体样式,能够满足不同项目的需求。 综上所述,SSD1306文字库是一种高效、灵活、易用的文字符显示解决方案,能够为各类电子产品提供优质的文字符显示效果。 ### 回答2: SSD1306文字库是一种能够在OLED显示屏幕上显示文字符的技术。SSD1306芯片是一种具有控制OLED屏幕的能力的集成电路。与传统的LCD屏幕不同,OLED屏幕使用有机材料发光,因此具有更好的对比度、亮度和响应速度。 SSD1306文字库可以帮助用户将文字符转换成OLED屏幕上可显示的像素点。一般来说,文字符需要使用16x16的点阵来表示。因此,一般情况下,OLED屏幕需要使用256x64像素点阵来显示一个文字符。 对于想要在项目使用文字符的用户来说,SSD1306文字库非常实用。因为文字符繁多,一个一个手动转换成像素点是一项非常繁琐的工作。使用SSD1306文字库,用户可以直接调用指定的文字符,而无需进行手动编码。这样,用户可以节省大量的时间和精力,更专注于项目的实现和功能的开发。 一些常见的基于SSD1306文字库的项目包括智能手表、智能眼镜和智能手环等。这些项目需要显示文字符,因为它们的主要用户群体是文使用者。使用SSD1306文字库,项目开发人员可以方便地通过OLED屏幕来向文使用者展示信息。 ### 回答3: SSD1306 是一种非常流行的 OLED 显示屏控制器芯片,常用于 DIY 项目、嵌入式系统和 Arduino 项目等。SSD1306 可以显示文本、图像和动画等,但是由于其默认的字库只有英文字母和数字,无法显示文汉字,因此需要对其进行文字库的添加。 对于 SSD1306 文字库的添加,需要先准备文字库文件,常用的文字库有 GBK、GB2312 和 UTF-8 等,这些字库文件可以直接从互联网上下载。接着,将这些字库文件转换成 C 代码格式,方法一是使用专门的字库转换工具,方法二是手动转换。无论是哪种方法,都需要将 C 代码复制到 SSD1306 控制器程序。 在 SSD1306 控制器程序添加文字库后,需要编写相应的代码来实现文显示功能。这包括字库文件导入、文字和汉字的显示、字号设置、显示位置设置和滚动显示等。具体实现过程因不同的平台和编程语言而异,但是都需要有一定的编程经验和相关的库文件支持。 总之,SSD1306 文字库的添加可以实现 OLED 显示屏上的文汉字显示,为 DIY 项目和嵌入式系统的开发提供了更多的选择和可能性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值