34 #define F_CPU 12000000UL
37 #ifndef OLED_USE_SOFT_TWI
47 #define OLED_USE_SOFT_TWI
50 #ifndef OLED_HAL_PLATFORM
62 #define OLED_HAL_PLATFORM avr
73 #define OLED_ADDRESS (0x78>>1)
76 #ifndef OLED_CONTROL_COMMAND
86 #define OLED_CONTROL_COMMAND 0x80
89 #ifndef OLED_CONTROL_DATA
99 #define OLED_CONTROL_DATA 0x40
102 #ifndef OLED_PAGE_SIZE
110 #define OLED_PAGE_SIZE 8UL
113 #ifndef OLED_ROW_SIZE
121 #define OLED_ROW_SIZE 64UL
124 #ifndef OLED_COLUMN_SIZE
133 #define OLED_COLUMN_SIZE 128UL
136 #ifndef OLED_IDLE_TIME_US
144 #define OLED_IDLE_TIME_US 10
147 #ifndef OLED_INIT_ROUTINE_IN_EEPROM
160 #define OLED_INIT_ROUTINE_IN_EEPROM
181 #ifndef OLED_CMD_SET_DISPLAY
182 #define OLED_CMD_SET_DISPLAY 0xAE
185 #define OLED_CMD_SET_DISPLAY_ON 0x01
188 #define OLED_CMD_SET_DISPLAY_OFF 0x00
220 #ifndef OLED_CMD_SET_DISPLAY_CLOCK
221 #define OLED_CMD_SET_DISPLAY_CLOCK 0xD5
224 #define OLED_CMD_SET_DISPLAY_CLOCK_DIVIDE_RATIO 0x00
227 #define OLED_CMD_SET_DISPLAY_CLOCK_FREQUENCY 0x80
250 #ifndef OLED_CMD_SET_MULTIPLEX_RATIO
251 #define OLED_CMD_SET_MULTIPLEX_RATIO 0xA8
254 #define OLED_CMD_SET_MULTIPLEX_RATIO_16_MUX 0x1F
257 #define OLED_CMD_SET_MULTIPLEX_RATIO_32_MUX 0x2F
260 #define OLED_CMD_SET_MULTIPLEX_RATIO_64_MUX 0x3F
278 #ifndef OLED_CMD_SET_DISPLAY_OFFSET
279 #define OLED_CMD_SET_DISPLAY_OFFSET 0xD3
282 #define OLED_CMD_SET_DISPLAY_OFFSET_VALUE 0x00
300 #ifndef OLED_CMD_SET_DISPLAY_START_LINE
302 #define OLED_CMD_SET_DISPLAY_START_LINE_OFFSET 0x00
305 #define OLED_CMD_SET_DISPLAY_START_LINE (0x40 | OLED_CMD_SET_DISPLAY_START_LINE_OFFSET)
326 #ifndef OLED_CMD_SET_CHARGE_PUMP
327 #define OLED_CMD_SET_CHARGE_PUMP 0x8D
330 #define OLED_CMD_SET_CHARGE_PUMP_EXTERNAL 0x10
333 #define OLED_CMD_SET_CHARGE_PUMP_INTERNAL 0x14
353 #ifndef OLED_CMD_SET_SEGMENT_REMAP
354 #define OLED_CMD_SET_SEGMENT_REMAP_STANDARD 0x00
355 #define OLED_CMD_SET_SEGMENT_REMAP_REVERSED 0x01
358 #define OLED_CMD_SET_SEGMENT_REMAP (0xA0 | OLED_CMD_SET_SEGMENT_REMAP_REVERSED)
380 #ifndef OLED_CMD_SET_COM_OUTPUT_SCAN_DIRECTION
381 #define OLED_CMD_SET_COM_OUTPUT_SCAN_DIRECTION_NORMAL 0x00
382 #define OLED_CMD_SET_COM_OUTPUT_SCAN_DIRECTION_REVERSED 0x08
385 #define OLED_CMD_SET_COM_OUTPUT_SCAN_DIRECTION (0xC0 | OLED_CMD_SET_COM_OUTPUT_SCAN_DIRECTION_REVERSED)
409 #ifndef OLED_CMD_SET_COM_PINS_HARDWARE_CONFIGURATION
410 #define OLED_CMD_SET_COM_PINS_HARDWARE_CONFIGURATION 0xDA
413 #define OLED_CMD_SET_COM_PINS_HARDWARE_CONFIGURATION_SEQUENTIAL 0x02
416 #define OLED_CMD_SET_COM_PINS_HARDWARE_CONFIGURATION_ALTERNATIVE 0x12
419 #define OLED_CMD_SET_COM_PINS_HARDWARE_CONFIGURATION_NOREMAP 0x02
422 #define OLED_CMD_SET_COM_PINS_HARDWARE_CONFIGURATION_REMAP 0x22
425 #define OLED_CMD_SET_COM_PINS_HARDWARE_CONFIGURATION_SETUP (OLED_CMD_SET_COM_PINS_HARDWARE_CONFIGURATION_ALTERNATIVE | OLED_CMD_SET_COM_PINS_HARDWARE_CONFIGURATION_NOREMAP)
443 #ifndef OLED_CMD_SET_CONTRAST
444 #define OLED_CMD_SET_CONTRAST 0x81
447 #define OLED_CMD_SET_CONTRAST_VALUE 0x7F
467 #ifndef OLED_CMD_ENTIRE_DISPLAY_ON
468 #define OLED_CMD_ENTIRE_DISPLAY_ON_RESUME_RAM 0x00
469 #define OLED_CMD_ENTIRE_DISPLAY_ON_IGNORE_RAM 0x01
472 #define OLED_CMD_ENTIRE_DISPLAY_ON (0xA4 | OLED_CMD_ENTIRE_DISPLAY_ON_RESUME_RAM)
494 #ifndef OLED_CMD_SET_DISPLAY_MODE
495 #define OLED_CMD_SET_DISPLAY_MODE_NORMAL 0x00
496 #define OLED_CMD_SET_DISPLAY_MODE_INVERSE 0x01
499 #define OLED_CMD_SET_DISPLAY_MODE (0xA6 | OLED_CMD_SET_DISPLAY_MODE_NORMAL)
521 #ifndef OLED_CMD_SET_MEMORY_ADDRESSING_MODE
522 #define OLED_CMD_SET_MEMORY_ADDRESSING_MODE 0x20
525 #define OLED_CMD_SET_MEMORY_ADDRESSING_MODE_HORIZONTAL 0x00
528 #define OLED_CMD_SET_MEMORY_ADDRESSING_MODE_VERTICAL 0x01
531 #define OLED_CMD_SET_MEMORY_ADDRESSING_MODE_PAGE 0x02
547 #ifndef OLED_CMD_SET_PAGE_START_ADDRESS
548 #define OLED_CMD_SET_PAGE_START_ADDRESS 0xB0
561 #ifndef OLED_CMD_SET_LOWER_START_COLUMN_ADDRESS
562 #define OLED_CMD_SET_LOWER_START_COLUMN_ADDRESS 0x00
577 #ifndef OLED_CMD_SET_HIGHER_START_COLUMN_ADDRESS
578 #define OLED_CMD_SET_HIGHER_START_COLUMN_ADDRESS 0x10
582 #include <util/delay.h>
584 #ifdef OLED_INIT_ROUTINE_IN_EEPROM
585 #include <avr/eeprom.h>
587 #include <avr/pgmspace.h>
609 #ifdef OLED_USE_SOFT_TWI
610 #define TWI_SOFT_HEADER _STR(../hal/OLED_HAL_PLATFORM/twi_soft/twi_soft.h)
611 #include TWI_SOFT_HEADER
613 #define OLED_START(MODE) { twi_soft_start(); twi_soft_address(OLED_ADDRESS, MODE); }
614 #define OLED_STOP() { twi_soft_stop(); _delay_us(OLED_IDLE_TIME_US); }
615 #define OLED_DATA() (twi_soft_set(OLED_CONTROL_DATA))
617 #define TWI_HEADER _STR(../hal/OLED_HAL_PLATFORM/twi/twi.h)
620 #define OLED_START(MODE) { twi_start(); twi_address(OLED_ADDRESS, MODE); }
621 #define OLED_STOP() { twi_stop(); _delay_us(OLED_IDLE_TIME_US); }
622 #define OLED_DATA() (twi_set(OLED_CONTROL_DATA))
635 #define OLED_HOME() (oled_position(0, 0))
643 void oled_page(
unsigned char *data,
unsigned char page);
644 void oled_page_segment(
unsigned char *data,
unsigned char column_start,
unsigned char column_stop,
unsigned char page);
645 void oled_column(
unsigned char data,
unsigned char column,
unsigned char page);
Helper macros for stringification in C preprocessor.
void oled_clear_page(unsigned char page)
Clears a single page of the OLED display.
Definition oled.c:303
void oled_scroll_vertical(unsigned char scroll)
Scrolls the OLED display vertically by a specified offset.
Definition oled.c:155
void oled_disable(void)
Disables the TWI interface used for OLED communication.
Definition oled.c:106
void oled_page(unsigned char *data, unsigned char page)
Writes a full page of pixel data to the OLED display.
Definition oled.c:199
void oled_clear(void)
Clears the entire OLED display.
Definition oled.c:284
void oled_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 OLED display.
Definition oled.c:221
void oled_frame(unsigned char *frame)
Displays a full frame (all pages) of pixel data on the OLED.
Definition oled.c:178
void oled_clear_page_segment(unsigned char column_start, unsigned char column_stop, unsigned char page)
Clears a specific segment of a page on the OLED display.
Definition oled.c:318
void oled_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 OLED display.
Definition oled.c:257
void oled_position(unsigned char column, unsigned char row)
Sets the current write position on the OLED display.
Definition oled.c:128
void oled_clear_column(unsigned char column, unsigned char page)
Clears a single column within a specified page on the OLED display.
Definition oled.c:353
void oled_init(void)
Initializes the OLED display.
Definition oled.c:76