# MicroPython SSD1306 OLED Driver, I2C e interfaz SPI
remitente Micropitón importación constante
importación Flame Buch
# Definición de registro
SET_CONTRAST = constante(0x81)
SET_ENTIRE_ON = constante(0xA4)
SET_NORM_INV = constante(0xA6)
SET_DISP = constante(0xAE)
SET_MEM_ADDR = constante(0x20)
SET_COL_ADDR = constante(0x21)
SET_PAGE_ADDR = constante(0x22)
SET_DISP_START_LINE = constante(0x40)
SET_SEG_REMAP = constante(0xA0)
SET_MUX_RATIO = constante(0xA8)
SET_COM_OUT_DIR = constante(0xC0)
SET_DISP_OFFSET = constante(0xD3)
SET_COM_PIN_CFG = constante(0xDA)
SET_DISP_CLK_DIV = constante(0xD5)
SET_PRECHARGE = constante(0xD9)
SET_VCOM_DESEL = constante(0xDB)
SET_CHARGE_PUMP = constante(0x8D)
# Subclase FrameBuffer proporciona soporte para primitivas gráficas
# http://docs.micropython.org/en/latest/pyboard/library/framebuf.html
…class SSD1306(Flame Buch.Framebuffer):
Def __Init__(propio, Ancho, altura, external_vcc):
propio.Ancho = Ancho
propio.altura = altura
propio.external_vcc = external_vcc
propio.…pages = propio.altura 8
propio.búfer = Matriz de bytes(propio.…pages* propio.Ancho)
fenomenal().__Init__(propio.búfer, propio.Ancho, propio.altura, Flame Buch.MONO_VLSB)
propio.init_display()
Def init_display(propio):
para Teletipo Y (
SET_DISP | 0x00, # Desactivado
# Configuración de dirección
SET_MEM_ADDR,
0x00, # Horizontal
# Resolución y diseño
SET_DISP_START_LINE | 0x00,
SET_SEG_REMAP | 0x01, Agregar #SEG0 columna asignada 127
SET_MUX_RATIO,
propio.altura – 1,
SET_COM_OUT_DIR | 0x08, # Escaneo desde COM[N] COM0 a
SET_DISP_OFFSET,
0x00,
SET_COM_PIN_CFG,
0x02 Si propio.Ancho > 2 * propio.altura de otra manera 0x12,
# Sistema de cronometraje y accionamiento
SET_DISP_CLK_DIV,
0x80,
SET_PRECHARGE,
0x22 Si propio.external_vcc de otra manera 0xF1,
SET_VCOM_DESEL,
0x30, # 0.83*Vcc
# Pantalla
SET_CONTRAST,
0xFF, # Valor máximo
SET_ENTIRE_ON, #出力はRAMの内容に従います
SET_NORM_INV, # No voltear
# Bomba de carga
SET_CHARGE_PUMP,
0x10 Si propio.external_vcc de otra manera 0x14,
SET_DISP | 0x01,
): # Activado
propio.write_cmd(Teletipo)
propio.verter(0)
propio.mostrar()
Def apagar(propio):
propio.write_cmd(SET_DISP | 0x00)
Def Encendido(propio):
propio.write_cmd(SET_DISP | 0x01)
Def contraste(propio, contraste):
propio.write_cmd(SET_CONTRAST)
propio.write_cmd(contraste)
Def inversión(propio, inversión):
propio.write_cmd(SET_NORM_INV | (inversión & 1))
Def mostrar(propio):
x0 = 0
x1 = propio.Ancho – 1
Si propio.Ancho == 64:
# 32 Ancho de pantalla de desplazamiento 64 píxeles
x0 += 32
x1 += 32
propio.write_cmd(SET_COL_ADDR)
propio.write_cmd(x0)
propio.write_cmd(x1)
propio.write_cmd(SET_PAGE_ADDR)
propio.write_cmd(0)
propio.write_cmd(propio.…pages – 1)
propio.write_data(propio.búfer)
…class SSD1306_I2C(SSD1306):
Def __Init__(propio, Ancho, altura, I2C, dirección=0x3C, external_vcc=falso):
propio.I2C = I2C
propio.dirección = dirección
propio.una vez = Matriz de bytes(2)
propio.write_list = [b“\x40”, None] # Co=0, D/C#=1
fenomenal().__Init__(Ancho, altura, external_vcc)
Def write_cmd(propio, Teletipo):
propio.una vez[0] = 0x80 # Co=1, D/C#=0
propio.una vez[1] = Teletipo
propio.I2C.Escribir a(propio.dirección, propio.una vez)
Def write_data(propio, Bouffe):
propio.write_list[1] = Bouffe
propio.I2C.Escribir VT(propio.dirección, propio.write_list)
…class SSD1306_SPI(SSD1306):
Def __Init__(propio, Ancho, altura, Altavoces, corriente continua, Resolución, …cs, external_vcc=falso):
propio.tasa = 10 * 1024 * 1024
corriente continua.inicialización(corriente continua.fuera, valor=0)
Resolución.inicialización(Resolución.fuera, valor=0)
…cs.inicialización(…cs.fuera, valor=1)
propio.Altavoces = Altavoces
propio.corriente continua = corriente continua
propio.Resolución = Resolución
propio.…cs = …cs
importación Hora
propio.Resolución(1)
Hora.sleep_ms(1)
propio.Resolución(0)
Hora.sleep_ms(10)
propio.Resolución(1)
fenomenal().__Init__(Ancho, altura, external_vcc)
Def write_cmd(propio, Teletipo):
propio.Altavoces.inicialización(Velocidad=propio.tasa, polaridad=0, fase=0)
propio.…cs(1)
propio.corriente continua(0)
propio.…cs(0)
propio.Altavoces.escribir(Matriz de bytes([cmd]))
propio.…cs(1)
Def write_data(propio, Bouffe):
propio.Altavoces.inicialización(Velocidad=propio.tasa, polaridad=0, fase=0)
propio.…cs(1)
propio.corriente continua(1)
propio.…cs(0)
propio.Altavoces.escribir(Bouffe)
propio.…cs(1)