26 #ifndef SSD130X_USE_SOFT_TWI
39 #define SSD130X_USE_SOFT_TWI
43 #ifndef SSD130X_HAL_PLATFORM
55 #define SSD130X_HAL_PLATFORM avr
58 #ifndef SSD130X_ADDRESS
66 #define SSD130X_ADDRESS 0x3C
69 #ifndef SSD130X_CONTROL_COMMAND
79 #define SSD130X_CONTROL_COMMAND 0x80
82 #ifndef SSD130X_CONTROL_DATA
92 #define SSD130X_CONTROL_DATA 0x40
95 #ifndef SSD130X_PAGE_SIZE
103 #define SSD130X_PAGE_SIZE 8UL
106 #ifndef SSD130X_ROW_SIZE
114 #define SSD130X_ROW_SIZE 64UL
117 #ifndef SSD130X_COLUMN_SIZE
126 #define SSD130X_COLUMN_SIZE 128UL
129 #ifndef SSD130X_IDLE_TIME_US
137 #define SSD130X_IDLE_TIME_US 10
140 #ifndef SSD130X_INIT_ROUTINE_IN_EEPROM
153 #define SSD130X_INIT_ROUTINE_IN_EEPROM
157 #ifndef SSD130X_INIT_ROUTINE_IN_EEPROM
158 #ifndef SSD130X_INIT_ROUTINE_IN_PROGMEM
189 #ifndef SSD130X_CMD_SET_DISPLAY
190 #define SSD130X_CMD_SET_DISPLAY 0xAE
193 #define SSD130X_CMD_SET_DISPLAY_ON 0x01
196 #define SSD130X_CMD_SET_DISPLAY_OFF 0x00
228 #ifndef SSD130X_CMD_SET_DISPLAY_CLOCK
229 #define SSD130X_CMD_SET_DISPLAY_CLOCK 0xD5
232 #define SSD130X_CMD_SET_DISPLAY_CLOCK_DIVIDE_RATIO 0x00
235 #define SSD130X_CMD_SET_DISPLAY_CLOCK_FREQUENCY 0x80
258 #ifndef SSD130X_CMD_SET_MULTIPLEX_RATIO
259 #define SSD130X_CMD_SET_MULTIPLEX_RATIO 0xA8
262 #define SSD130X_CMD_SET_MULTIPLEX_RATIO_16_MUX 0x1F
265 #define SSD130X_CMD_SET_MULTIPLEX_RATIO_32_MUX 0x2F
268 #define SSD130X_CMD_SET_MULTIPLEX_RATIO_64_MUX 0x3F
286 #ifndef SSD130X_CMD_SET_DISPLAY_OFFSET
287 #define SSD130X_CMD_SET_DISPLAY_OFFSET 0xD3
290 #define SSD130X_CMD_SET_DISPLAY_OFFSET_VALUE 0x00
308 #ifndef SSD130X_CMD_SET_DISPLAY_START_LINE
310 #define SSD130X_CMD_SET_DISPLAY_START_LINE_OFFSET 0x00
313 #define SSD130X_CMD_SET_DISPLAY_START_LINE (0x40 | SSD130X_CMD_SET_DISPLAY_START_LINE_OFFSET)
334 #ifndef SSD130X_CMD_SET_CHARGE_PUMP
335 #define SSD130X_CMD_SET_CHARGE_PUMP 0x8D
338 #define SSD130X_CMD_SET_CHARGE_PUMP_EXTERNAL 0x10
341 #define SSD130X_CMD_SET_CHARGE_PUMP_INTERNAL 0x14
361 #ifndef SSD130X_CMD_SET_SEGMENT_REMAP
362 #define SSD130X_CMD_SET_SEGMENT_REMAP_STANDARD 0x00
363 #define SSD130X_CMD_SET_SEGMENT_REMAP_REVERSED 0x01
366 #define SSD130X_CMD_SET_SEGMENT_REMAP (0xA0 | SSD130X_CMD_SET_SEGMENT_REMAP_REVERSED)
388 #ifndef SSD130X_CMD_SET_COM_OUTPUT_SCAN_DIRECTION
389 #define SSD130X_CMD_SET_COM_OUTPUT_SCAN_DIRECTION_NORMAL 0x00
390 #define SSD130X_CMD_SET_COM_OUTPUT_SCAN_DIRECTION_REVERSED 0x08
393 #define SSD130X_CMD_SET_COM_OUTPUT_SCAN_DIRECTION (0xC0 | SSD130X_CMD_SET_COM_OUTPUT_SCAN_DIRECTION_REVERSED)
417 #ifndef SSD130X_CMD_SET_COM_PINS_HARDWARE_CONFIGURATION
418 #define SSD130X_CMD_SET_COM_PINS_HARDWARE_CONFIGURATION 0xDA
421 #define SSD130X_CMD_SET_COM_PINS_HARDWARE_CONFIGURATION_SEQUENTIAL 0x02
424 #define SSD130X_CMD_SET_COM_PINS_HARDWARE_CONFIGURATION_ALTERNATIVE 0x12
427 #define SSD130X_CMD_SET_COM_PINS_HARDWARE_CONFIGURATION_NOREMAP 0x02
430 #define SSD130X_CMD_SET_COM_PINS_HARDWARE_CONFIGURATION_REMAP 0x22
433 #define SSD130X_CMD_SET_COM_PINS_HARDWARE_CONFIGURATION_SETUP (SSD130X_CMD_SET_COM_PINS_HARDWARE_CONFIGURATION_ALTERNATIVE | SSD130X_CMD_SET_COM_PINS_HARDWARE_CONFIGURATION_NOREMAP)
451 #ifndef SSD130X_CMD_SET_CONTRAST
452 #define SSD130X_CMD_SET_CONTRAST 0x81
455 #define SSD130X_CMD_SET_CONTRAST_VALUE 0x7F
475 #ifndef SSD130X_CMD_ENTIRE_DISPLAY_ON
476 #define SSD130X_CMD_ENTIRE_DISPLAY_ON_RESUME_RAM 0x00
477 #define SSD130X_CMD_ENTIRE_DISPLAY_ON_IGNORE_RAM 0x01
480 #define SSD130X_CMD_ENTIRE_DISPLAY_ON (0xA4 | SSD130X_CMD_ENTIRE_DISPLAY_ON_RESUME_RAM)
502 #ifndef SSD130X_CMD_SET_DISPLAY_MODE
503 #define SSD130X_CMD_SET_DISPLAY_MODE_NORMAL 0x00
504 #define SSD130X_CMD_SET_DISPLAY_MODE_INVERSE 0x01
507 #define SSD130X_CMD_SET_DISPLAY_MODE (0xA6 | SSD130X_CMD_SET_DISPLAY_MODE_NORMAL)
529 #ifndef SSD130X_CMD_SET_MEMORY_ADDRESSING_MODE
530 #define SSD130X_CMD_SET_MEMORY_ADDRESSING_MODE 0x20
533 #define SSD130X_CMD_SET_MEMORY_ADDRESSING_MODE_HORIZONTAL 0x00
536 #define SSD130X_CMD_SET_MEMORY_ADDRESSING_MODE_VERTICAL 0x01
539 #define SSD130X_CMD_SET_MEMORY_ADDRESSING_MODE_PAGE 0x02
555 #ifndef SSD130X_CMD_SET_PAGE_START_ADDRESS
556 #define SSD130X_CMD_SET_PAGE_START_ADDRESS 0xB0
569 #ifndef SSD130X_CMD_SET_LOWER_START_COLUMN_ADDRESS
570 #define SSD130X_CMD_SET_LOWER_START_COLUMN_ADDRESS 0x00
585 #ifndef SSD130X_CMD_SET_HIGHER_START_COLUMN_ADDRESS
586 #define SSD130X_CMD_SET_HIGHER_START_COLUMN_ADDRESS 0x10
589 #ifdef SSD130X_INIT_ROUTINE_IN_EEPROM
590 #include <avr/eeprom.h>
592 #ifdef SSD130X_INIT_ROUTINE_IN_PROGMEM
593 #include <avr/pgmspace.h>
617 #ifdef SSD130X_USE_SOFT_TWI
618 #define TWI_SOFT_HEADER _STR(../../../hal/SSD130X_HAL_PLATFORM/twi_soft/twi_soft.h)
619 #include TWI_SOFT_HEADER
621 #define SSD130X_START(MODE) { twi_soft_start(); twi_soft_address(SSD130X_ADDRESS, MODE); }
622 #define SSD130X_STOP() { twi_soft_stop(); systick_timer_wait_us(SSD130X_IDLE_TIME_US); }
623 #define SSD130X_DATA() (twi_soft_set(SSD130X_CONTROL_DATA))
625 #define TWI_HEADER _STR(../../../hal/SSD130X_HAL_PLATFORM/twi/twi.h)
628 #define SSD130X_START(MODE) { twi_start(); twi_address(SSD130X_ADDRESS, MODE); }
629 #define SSD130X_STOP() { twi_stop(); systick_timer_wait_us(SSD130X_IDLE_TIME_US); }
630 #define SSD130X_DATA() (twi_set(SSD130X_CONTROL_DATA))
643 #define SSD130X_HOME() (ssd130x_position(0, 0))
651 void ssd130x_page(
unsigned char *data,
unsigned char page);
652 void ssd130x_page_segment(
unsigned char *data,
unsigned char column_start,
unsigned char column_stop,
unsigned char page);
653 void ssd130x_column(
unsigned char data,
unsigned char column,
unsigned char page);
void ssd130x_clear_page_segment(unsigned char column_start, unsigned char column_stop, unsigned char page)
Clears a specific segment of a page on the SSD130X display.
Definition ssd130x.c:319
void ssd130x_clear_column(unsigned char column, unsigned char page)
Clears a single column within a specified page on the SSD130X display.
Definition ssd130x.c:354
void ssd130x_position(unsigned char column, unsigned char row)
Sets the current write position on the SSD130X display.
Definition ssd130x.c:129
void ssd130x_frame(unsigned char *frame)
Displays a full frame (all pages) of pixel data on the SSD130X.
Definition ssd130x.c:179
void ssd130x_page(unsigned char *data, unsigned char page)
Writes a full page of pixel data to the SSD130X display.
Definition ssd130x.c:200
void ssd130x_clear_page(unsigned char page)
Clears a single page of the SSD130X display.
Definition ssd130x.c:304
void ssd130x_page_segment(unsigned char *data, unsigned char column_start, unsigned char column_stop, unsigned char page)
Writes a segment of pixel data to a specific page on the SSD130X display.
Definition ssd130x.c:222
void ssd130x_column(unsigned char data, unsigned char column, unsigned char page)
Writes a single byte of pixel data to a specific column and page on the SSD130X display.
Definition ssd130x.c:258
void ssd130x_scroll_vertical(unsigned char scroll)
Scrolls the SSD130X display vertically by a specified offset.
Definition ssd130x.c:156
void ssd130x_disable(void)
Disables the TWI interface used for SSD130X communication.
Definition ssd130x.c:107
void ssd130x_init(void)
Initializes the SSD130X display.
Definition ssd130x.c:79
void ssd130x_clear(void)
Clears the entire SSD130X display.
Definition ssd130x.c:285
Helper macros for stringification in C preprocessor.
Header file with declarations and macros for systick utility.