This is a low level driver for the SSD1306 OLED controller through 4-wire SPI.
It provides basic functions for initializing and writing to the OLED controller. In addition to hardware control and use of the OLED controller internal functions.
Before writing data to the display call ssd1306_init() which will set up the physical interface and the OLED. A file named conf_ssd1306.h is needed to define which interface to use. For more information see the Interface selection section. In addition one also need to define the pins SSD1306_DC_PIN, SSD1306_CS_PIN and SSD1306_RES_PIN and the display SSD1306_CLOCK_SPEED.
An example conf_ssd1306.h file could look like
This driver depends on the following modules:
Variables | |
struct spi_module | ssd1306_master |
struct spi_slave_inst | ssd1306_slave |
Graphic Acceleration Command defines | |
#define | SSD1306_CMD_SCROLL_H_RIGHT 0x26 |
#define | SSD1306_CMD_SCROLL_H_LEFT 0x27 |
#define | SSD1306_CMD_CONTINUOUS_SCROLL_V_AND_H_RIGHT 0x29 |
#define | SSD1306_CMD_CONTINUOUS_SCROLL_V_AND_H_LEFT 0x2A |
#define | SSD1306_CMD_DEACTIVATE_SCROLL 0x2E |
#define | SSD1306_CMD_ACTIVATE_SCROLL 0x2F |
#define | SSD1306_CMD_SET_VERTICAL_SCROLL_AREA 0xA3 |
OLED controller write and read functions | |
void | ssd1306_write_command (uint8_t command) |
Writes a command to the display controller. More... | |
void | ssd1306_write_data (uint8_t data) |
Write data to the display controller. More... | |
static uint8_t | ssd1306_read_data (void) |
Read data from the controller. More... | |
static uint8_t | ssd1306_get_status (void) |
Read status from the controller. More... | |
OLED Controller reset | |
static void | ssd1306_hard_reset (void) |
Perform a hard reset of the OLED controller. More... | |
Sleep control | |
static void | ssd1306_sleep_enable (void) |
Enable the OLED sleep mode. More... | |
static void | ssd1306_sleep_disable (void) |
Disable the OLED sleep mode. More... | |
Address setup for the OLED | |
static void | ssd1306_set_page_address (uint8_t address) |
Set current page in display RAM. More... | |
static void | ssd1306_set_column_address (uint8_t address) |
Set current column in display RAM. More... | |
static void | ssd1306_set_display_start_line_address (uint8_t address) |
Set the display start draw line address. More... | |
Display hardware control | |
static void | ssd1306_display_on (void) |
Turn the OLED display on. More... | |
static void | ssd1306_display_off (void) |
Turn the OLED display off. More... | |
static uint8_t | ssd1306_set_contrast (uint8_t contrast) |
Set the OLED contrast level. More... | |
static void | ssd1306_display_invert_enable (void) |
Invert all pixels on the device. More... | |
static void | ssd1306_display_invert_disable (void) |
Disable invert of all pixels on the device. More... | |
Initialization | |
void | ssd1306_init (void) |
Initialize the OLED controller. More... | |
#define SSD1306_CMD_ACTIVATE_SCROLL 0x2F |
#define SSD1306_CMD_COL_ADD_SET_LSB | ( | column | ) | (0x00 | (column)) |
Referenced by ssd1306_set_column_address().
#define SSD1306_CMD_COL_ADD_SET_MSB | ( | column | ) | (0x10 | (column)) |
Referenced by ssd1306_set_column_address().
#define SSD1306_CMD_CONTINUOUS_SCROLL_V_AND_H_LEFT 0x2A |
#define SSD1306_CMD_CONTINUOUS_SCROLL_V_AND_H_RIGHT 0x29 |
#define SSD1306_CMD_DEACTIVATE_SCROLL 0x2E |
#define SSD1306_CMD_ENTIRE_DISPLAY_AND_GDDRAM_ON 0xA4 |
Referenced by ssd1306_init().
#define SSD1306_CMD_ENTIRE_DISPLAY_ON 0xA5 |
#define SSD1306_CMD_NOP 0xE3 |
#define SSD1306_CMD_SCROLL_H_LEFT 0x27 |
#define SSD1306_CMD_SCROLL_H_RIGHT 0x26 |
#define SSD1306_CMD_SET_CHARGE_PUMP_SETTING 0x8D |
Referenced by ssd1306_init().
#define SSD1306_CMD_SET_COLUMN_ADDRESS 0x21 |
#define SSD1306_CMD_SET_COM_OUTPUT_SCAN_DOWN 0xC8 |
Referenced by ssd1306_init().
#define SSD1306_CMD_SET_COM_OUTPUT_SCAN_UP 0xC0 |
#define SSD1306_CMD_SET_COM_PINS 0xDA |
Referenced by ssd1306_init().
#define SSD1306_CMD_SET_CONTRAST_CONTROL_FOR_BANK0 0x81 |
Referenced by ssd1306_set_contrast().
#define SSD1306_CMD_SET_DISPLAY_CLOCK_DIVIDE_RATIO 0xD5 |
Referenced by ssd1306_init().
#define SSD1306_CMD_SET_DISPLAY_OFF 0xAE |
Referenced by ssd1306_display_off(), and ssd1306_sleep_enable().
#define SSD1306_CMD_SET_DISPLAY_OFFSET 0xD3 |
Referenced by ssd1306_init().
#define SSD1306_CMD_SET_DISPLAY_ON 0xAF |
Referenced by ssd1306_display_on(), and ssd1306_sleep_disable().
#define SSD1306_CMD_SET_DISPLAY_START_LINE | ( | line | ) | (0x40 | (line)) |
Referenced by ssd1306_init(), and ssd1306_set_display_start_line_address().
#define SSD1306_CMD_SET_INVERSE_DISPLAY 0xA7 |
Referenced by ssd1306_display_invert_enable().
#define SSD1306_CMD_SET_MEMORY_ADDRESSING_MODE 0x20 |
#define SSD1306_CMD_SET_MULTIPLEX_RATIO 0xA8 |
Referenced by ssd1306_init().
#define SSD1306_CMD_SET_NORMAL_DISPLAY 0xA6 |
Referenced by ssd1306_display_invert_disable().
#define SSD1306_CMD_SET_PAGE_ADDRESS 0x22 |
#define SSD1306_CMD_SET_PAGE_START_ADDRESS | ( | page | ) | (0xB0 | (page)) |
Referenced by ssd1306_set_page_address().
#define SSD1306_CMD_SET_PRE_CHARGE_PERIOD 0xD9 |
Referenced by ssd1306_init().
#define SSD1306_CMD_SET_SEGMENT_RE_MAP_COL0_SEG0 0xA0 |
#define SSD1306_CMD_SET_SEGMENT_RE_MAP_COL127_SEG0 0xA1 |
Referenced by ssd1306_init().
#define SSD1306_CMD_SET_VCOMH_DESELECT_LEVEL 0xDB |
Referenced by ssd1306_init().
#define SSD1306_CMD_SET_VERTICAL_SCROLL_AREA 0xA3 |
|
inlinestatic |
Disable invert of all pixels on the device.
This function will disable invert on all pixels on the OLED
References SSD1306_CMD_SET_NORMAL_DISPLAY, and ssd1306_write_command().
Referenced by ssd1306_init().
|
inlinestatic |
Invert all pixels on the device.
This function will invert all pixels on the OLED
References SSD1306_CMD_SET_INVERSE_DISPLAY, and ssd1306_write_command().
|
inlinestatic |
Turn the OLED display off.
This function will turn off the OLED.
References SSD1306_CMD_SET_DISPLAY_OFF, and ssd1306_write_command().
|
inlinestatic |
Turn the OLED display on.
This function will turn on the OLED.
References SSD1306_CMD_SET_DISPLAY_ON, and ssd1306_write_command().
Referenced by ssd1306_init().
|
inlinestatic |
Read status from the controller.
8 | bit status read from the controller |
|
inlinestatic |
Perform a hard reset of the OLED controller.
This functions will reset the OLED controller by setting the reset pin low.
References delay_cycles(), port_pin_set_output_level(), SSD1306_RES_PIN, and system_gclk_gen_get_hz().
Referenced by ssd1306_init().
void ssd1306_init | ( | void | ) |
Initialize the OLED controller.
Call this function to initialize the hardware interface and the OLED controller. When initialization is done the display is turned on and ready to receive data.
References delay_init(), port_pin_set_output_level(), SSD1306_CMD_ENTIRE_DISPLAY_AND_GDDRAM_ON, SSD1306_CMD_SET_CHARGE_PUMP_SETTING, SSD1306_CMD_SET_COM_OUTPUT_SCAN_DOWN, SSD1306_CMD_SET_COM_PINS, SSD1306_CMD_SET_DISPLAY_CLOCK_DIVIDE_RATIO, SSD1306_CMD_SET_DISPLAY_OFFSET, SSD1306_CMD_SET_DISPLAY_START_LINE, SSD1306_CMD_SET_MULTIPLEX_RATIO, SSD1306_CMD_SET_PRE_CHARGE_PERIOD, SSD1306_CMD_SET_SEGMENT_RE_MAP_COL127_SEG0, SSD1306_CMD_SET_VCOMH_DESELECT_LEVEL, ssd1306_display_invert_disable(), ssd1306_display_on(), ssd1306_hard_reset(), ssd1306_interface_init(), SSD1306_RES_PIN, ssd1306_set_contrast(), and ssd1306_write_command().
Referenced by gfx_mono_ssd1306_init().
|
inlinestatic |
Read data from the controller.
8 | bit data read from the controller |
Referenced by gfx_mono_ssd1306_get_byte(), and gfx_mono_ssd1306_get_page().
|
inlinestatic |
Set current column in display RAM.
address | the column address |
References SSD1306_CMD_COL_ADD_SET_LSB, SSD1306_CMD_COL_ADD_SET_MSB, and ssd1306_write_command().
Referenced by gfx_mono_ssd1306_get_byte(), gfx_mono_ssd1306_get_page(), gfx_mono_ssd1306_put_byte(), gfx_mono_ssd1306_put_framebuffer(), and gfx_mono_ssd1306_put_page().
|
inlinestatic |
Set the OLED contrast level.
contrast | a number between 0 and 0xFF |
contrast | the contrast value written to the OLED controller |
References SSD1306_CMD_SET_CONTRAST_CONTROL_FOR_BANK0, and ssd1306_write_command().
Referenced by ssd1306_init().
|
inlinestatic |
Set the display start draw line address.
This function will set which line should be the start draw line for the OLED.
References SSD1306_CMD_SET_DISPLAY_START_LINE, and ssd1306_write_command().
Referenced by gfx_mono_ssd1306_init().
|
inlinestatic |
Set current page in display RAM.
This command is usually followed by the configuration of the column address because this scheme will provide access to all locations in the display RAM.
address | the page address |
References SSD1306_CMD_SET_PAGE_START_ADDRESS, and ssd1306_write_command().
Referenced by gfx_mono_ssd1306_get_byte(), gfx_mono_ssd1306_get_page(), gfx_mono_ssd1306_put_byte(), gfx_mono_ssd1306_put_framebuffer(), and gfx_mono_ssd1306_put_page().
|
inlinestatic |
Disable the OLED sleep mode.
References SSD1306_CMD_SET_DISPLAY_ON, and ssd1306_write_command().
|
inlinestatic |
Enable the OLED sleep mode.
References SSD1306_CMD_SET_DISPLAY_OFF, and ssd1306_write_command().
void ssd1306_write_command | ( | uint8_t | command | ) |
Writes a command to the display controller.
This functions pull pin D/C# low before writing to the controller. Different data write function is called based on the selected interface.
command | the command to write |
References port_pin_set_output_level(), spi_select_slave(), spi_write_buffer_wait(), SSD1306_DC_PIN, ssd1306_master, and ssd1306_slave.
Referenced by ssd1306_display_invert_disable(), ssd1306_display_invert_enable(), ssd1306_display_off(), ssd1306_display_on(), ssd1306_init(), ssd1306_set_column_address(), ssd1306_set_contrast(), ssd1306_set_display_start_line_address(), ssd1306_set_page_address(), ssd1306_sleep_disable(), and ssd1306_sleep_enable().
void ssd1306_write_data | ( | uint8_t | data | ) |
Write data to the display controller.
This functions sets the pin D/C# before writing to the controller. Different data write function is called based on the selected interface.
data | the data to write |
References port_pin_set_output_level(), spi_select_slave(), spi_write_buffer_wait(), SSD1306_DC_PIN, ssd1306_master, and ssd1306_slave.
Referenced by gfx_mono_ssd1306_put_byte(), and gfx_mono_ssd1306_put_page().
struct spi_module ssd1306_master |
Referenced by ssd1306_interface_init(), ssd1306_write_command(), and ssd1306_write_data().
struct spi_slave_inst ssd1306_slave |
Referenced by ssd1306_interface_init(), ssd1306_write_command(), and ssd1306_write_data().