Atmel Software Framework

ssd1306.h File Reference

SSD1306 OLED display controller driver.

Copyright (c) 2013-2015 Atmel Corporation. All rights reserved.

#include <compiler.h>
#include <sysclk.h>
#include <ioport.h>
#include <status_codes.h>
#include <delay.h>
#include "conf_ssd1306.h"
#include <usart_spi.h>

Macros

#define SSD1306_LATENCY   10
 
#define ssd1306_reset_clear()   arch_ioport_set_pin_level(SSD1306_RES_PIN, false)
 
#define ssd1306_reset_set()   arch_ioport_set_pin_level(SSD1306_RES_PIN, true)
 
#define ssd1306_sel_cmd()   arch_ioport_set_pin_level(SSD1306_DC_PIN, false)
 
#define ssd1306_sel_data()   arch_ioport_set_pin_level(SSD1306_DC_PIN, true)
 
#define SSD1306_SERIAL_INTERFACE
 
Fundamental Command defines
#define SSD1306_CMD_SET_LOW_COL(column)   (0x00 | (column))
 
#define SSD1306_CMD_SET_HIGH_COL(column)   (0x10 | (column))
 
#define SSD1306_CMD_SET_MEMORY_ADDRESSING_MODE   0x20
 
#define SSD1306_CMD_SET_COLUMN_ADDRESS   0x21
 
#define SSD1306_CMD_SET_PAGE_ADDRESS   0x22
 
#define SSD1306_CMD_SET_START_LINE(line)   (0x40 | (line))
 
#define SSD1306_CMD_SET_CONTRAST_CONTROL_FOR_BANK0   0x81
 
#define SSD1306_CMD_SET_CHARGE_PUMP_SETTING   0x8D
 
#define SSD1306_CMD_SET_SEGMENT_RE_MAP_COL0_SEG0   0xA0
 
#define SSD1306_CMD_SET_SEGMENT_RE_MAP_COL127_SEG0   0xA1
 
#define SSD1306_CMD_ENTIRE_DISPLAY_AND_GDDRAM_ON   0xA4
 
#define SSD1306_CMD_ENTIRE_DISPLAY_ON   0xA5
 
#define SSD1306_CMD_SET_NORMAL_DISPLAY   0xA6
 
#define SSD1306_CMD_SET_INVERSE_DISPLAY   0xA7
 
#define SSD1306_CMD_SET_MULTIPLEX_RATIO   0xA8
 
#define SSD1306_CMD_SET_DISPLAY_ON   0xAF
 
#define SSD1306_CMD_SET_DISPLAY_OFF   0xAE
 
#define SSD1306_CMD_SET_PAGE_START_ADDRESS(page)   (0xB0 | (page & 0x07))
 
#define SSD1306_CMD_SET_COM_OUTPUT_SCAN_UP   0xC0
 
#define SSD1306_CMD_SET_COM_OUTPUT_SCAN_DOWN   0xC8
 
#define SSD1306_CMD_SET_DISPLAY_OFFSET   0xD3
 
#define SSD1306_CMD_SET_DISPLAY_CLOCK_DIVIDE_RATIO   0xD5
 
#define SSD1306_CMD_SET_PRE_CHARGE_PERIOD   0xD9
 
#define SSD1306_CMD_SET_COM_PINS   0xDA
 
#define SSD1306_CMD_SET_VCOMH_DESELECT_LEVEL   0xDB
 
#define SSD1306_CMD_NOP   0xE3
 
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
 
Interface selection

The OLED controller support both serial and parallel mode, that means there is a number of possible ways of interfacing the controller using different peripherals.

The different interfaces can be selected using different defines. This driver supports the serial communication mode using an USART in Master SPI mode by defining SSD1306_USART_SPI_INTERFACE, and a normal SPI in Master Mode by defining SSD1306_SPI_INTERFACE.

Note
The current driver only support serial mode.
#define SSD1306_USART_SPI_INTERFACE
 Select the a USART SPI interface. More...
 
#define SSD1306_SPI_INTERFACE
 Select the normal SPI peripheral interface. More...
 

Functions

OLED controller write and read functions
static void ssd1306_write_command (uint8_t command)
 Writes a command to the display controller. More...
 
static 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...
 
static void ssd1306_clear (void)
 
Initialization
void ssd1306_init (void)
 Initialize the OLED controller. More...
 
Write text routine
void ssd1306_write_text (const char *string)
 Display text on OLED screen. More...