跳转至

lib/oled/driver/device/ssd1309/ssd1309.c

Functions

Name
uint8_t * ssd1309_init_sessions(void )
CFBD_OLED_DeviceSpecific * getSSD1309Specific()

Attributes

Name
uint8_t[] ssd1309_inits_commands
CFBD_OLED_DeviceSpecific ssd1309_specific

Defines

Name
CMD_TABLE_SZ

Functions Documentation

function ssd1309_init_sessions

static uint8_t * ssd1309_init_sessions(
    void 
)

function getSSD1309Specific

CFBD_OLED_DeviceSpecific * getSSD1309Specific()

Attributes Documentation

variable ssd1309_inits_commands

static uint8_t[] ssd1309_inits_commands = {
        0xAE,       
        0xFD, 0x12, 
        0xD5,       
        0xA0,       
        0xA8,       
        0x3F,       
        0xD3,       
        0x00,       
        0x40,       
        0xA1,       
        0xC8,       
        0xDA,       
        0x12,       
        0x81,       
        0xBF,       
        0xD9,       
        0x25,       
        0xDB,       
        0x34,       
        0xA4,       
        0xA6,       
        0xAF        
};

variable ssd1309_specific

static CFBD_OLED_DeviceSpecific ssd1309_specific;

Macros Documentation

define CMD_TABLE_SZ

#define CMD_TABLE_SZ ((sizeof(ssd1309_inits_commands)) / sizeof(ssd1309_inits_commands[0]))

Source code

#include "ssd1309.h"

#include <stdint.h>
#include <string.h>

static uint8_t ssd1309_inits_commands[] = {
        0xAE,       // Turn off OLED panel
        0xFD, 0x12, // Set display clock divide ratio/oscillator frequency
        0xD5,       // Set display clock divide ratio
        0xA0,       // Set multiplex ratio
        0xA8,       // Set multiplex ratio (1 to 64)
        0x3F,       // 1/64 duty
        0xD3,       // Set display offset
        0x00,       // No offset
        0x40,       // Set start line address
        0xA1,       // Set SEG/Column mapping (0xA0 for reverse, 0xA1 for normal)
        0xC8,       // Set COM/Row scan direction (0xC0 for reverse, 0xC8 for normal)
        0xDA,       // Set COM pins hardware configuration
        0x12,       // COM pins configuration
        0x81,       // Set contrast control register
        0xBF,       // Set SEG output current brightness
        0xD9,       // Set pre-charge period
        0x25,       // Set pre-charge as 15 clocks & discharge as 1 clock
        0xDB,       // Set VCOMH
        0x34,       // Set VCOM deselect level
        0xA4,       // Disable entire display on
        0xA6,       // Disable inverse display on
        0xAF        // Turn on the display
};

#define CMD_TABLE_SZ ((sizeof(ssd1309_inits_commands)) / sizeof(ssd1309_inits_commands[0]))

static uint8_t* ssd1309_init_sessions(void)
{
    return ssd1309_inits_commands;
}

static CFBD_OLED_DeviceSpecific ssd1309_specific;

CFBD_OLED_DeviceSpecific* getSSD1309Specific()
{
    ssd1309_specific.init_session_tables = ssd1309_init_sessions;
    ssd1309_specific.init_session_tables_sz = CMD_TABLE_SZ;
    ssd1309_specific.cmd_prefix = 0x00;
    ssd1309_specific.data_prefix = 0x40;
    ssd1309_specific.logic_height = 64;
    ssd1309_specific.logic_width = 128;
    ssd1309_specific.iic_pack_type = SSD1309_IIC_PACK;
    ssd1309_specific.private_data = NULL; // no, nothing here
    return &ssd1309_specific;
}

Updated on 2026-02-03 at 13:21:55 +0000