久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1501|回復: 1
收起左側

esp32 s3驅動OLED屏SSD1306黑屏

[復制鏈接]
ID:476652 發表于 2023-4-22 20:18 | 顯示全部樓層 |閱讀模式
各位大神,哪位大神能指點下這是什么情況,感謝
   我在用源地的esp32s3 開發板驅動7針0.96 OLED屏顯示。
可咋都驅動不亮,這個olde屏插到STM32開發板上就能政策顯示
我的軟件:micropython
開發板:源地ESP32 S3
OLED屏:7針SPI 0.96 SSD1306屏
開發板和屏連線:D0/SCK--P6;  D1/MOSI--P7;  RES/RST--P5;  DC--P4;  CS--P10;


主程序
main.py


ESP32-C3 OLED顯示測試
元件:
    AI-THINKER ESP-C3-13/13U-KIT
    128*64 1306 OLED SPI/I2C
功能:
    ESP32-C3 OLED顯示測試
'''


import machine
from machine import Pin,SoftSPI
from ssd1306 import SSD1306_SPI

spi = SoftSPI(baudrate=80000000, polarity=0, phase=0, sck=Pin(6,Pin.OUT), mosi=Pin(7,Pin.OUT), miso=Pin(8))
#sck(D0)=6 mosi(D1)=7 miso=unused
oled = SSD1306_SPI(128, 64, spi, Pin(4),Pin(5), Pin(10))
#4=dc 5=res 10=cs

oled.text("First line", 0, 0, 1)
oled.text("Second line", 0, 8, 1)
oled.text("Third line", 0, 16, 1)
oled.text("Forth line", 0, 24, 1)
oled.text("Fifth line", 0, 32, 1)
oled.text("Sixth line", 0, 40, 1)
oled.text("Seventh line", 0, 48, 1)
oled.text("Last line", 0, 56, 1)
oled.show()


# MicroPython SSD1306 OLED driver, I2C and SPI interfaces

from micropython import const
import framebuf

SSD1306程序
ssd1306.py
# 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_IREF_SELECT = const(0xAD)
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

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.init_display()

    def init_display(self):
        for cmd in (
            SET_DISP,  # display off
            # address setting
            SET_MEM_ADDR,
            0x00,  # horizontal
            # resolution and layout
            SET_DISP_START_LINE,  # start at line 0
            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
            SET_IREF_SELECT,
            0x30,  # enable internal IREF during display on
            # charge pump
            SET_CHARGE_PUMP,
            0x10 if self.external_vcc else 0x14,
            SET_DISP | 0x01,  # display on
        ):  # on
            self.write_cmd(cmd)
        self.fill(0)
        self.show()

    def poweroff(self):
        self.write_cmd(SET_DISP)

    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 rotate(self, rotate):
        self.write_cmd(SET_COM_OUT_DIR | ((rotate & 1) << 3))
        self.write_cmd(SET_SEG_REMAP | (rotate & 1))

    def show(self):
        x0 = 0
        x1 = self.width - 1
        if self.width != 128:
            # narrow displays use centred columns
            col_offset = (128 - self.width) // 2
            x0 += col_offset
            x1 += col_offset
        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)

    def disp(self, s: str, x: int, y: int, c: int = 1):
        print('jjj')
        self.text('*'+s, x, y, c)

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)
51hei圖片_202304222012303.jpg
51hei圖片_202304222012302.jpg
51hei圖片_202304222012301.jpg
51hei圖片_20230422201230.jpg
回復

使用道具 舉報

ID:476652 發表于 2023-4-22 20:21 | 顯示全部樓層
23-OLED 7SPI-4.rar (2.4 KB, 下載次數: 4)
這是源文件
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩中文在线观看 | 久久亚洲一区二区 | 欧美成人高清 | 欧美激情综合色综合啪啪五月 | 国产色在线| 久久久久久久久久久久亚洲 | 欧美一级大片免费看 | 日本爱爱视频 | 久久精品亚洲精品国产欧美 | 亚洲欧洲精品成人久久奇米网 | 91精品在线看 | 日韩电影一区二区三区 | 91精品国产美女在线观看 | 一区二区三区av | 国产精品免费在线 | 亚洲午夜久久久 | 亚洲性免费 | 国产在线www | 欧美日韩一区二区在线观看 | 欧美国产在线一区 | 免费v片在线观看 | 日韩一区二区三区在线视频 | 自拍偷拍精品 | 一本大道久久a久久精二百 国产成人免费在线 | 免费在线视频精品 | 国产精品美女久久久久aⅴ国产馆 | 999国产精品视频 | www成人免费 | 91视频在线观看 | 久久久国产精品一区 | 一级黄a视频 | 久久久免费少妇高潮毛片 | 亚洲精品日韩精品 | 最近日韩中文字幕 | 中文字幕在线欧美 | 欧美日韩高清一区 | 天堂综合 | 午夜电影一区二区 | 手机日韩 | 人人看人人搞 | 成人网址在线观看 |