87 lines
3.8 KiB
C++
87 lines
3.8 KiB
C++
#ifndef SSD1306_H
|
|
#define SSD1306_H
|
|
|
|
#include <Adafruit_GFX.h>
|
|
#include <Wire.h>
|
|
|
|
#define SCREEN_WIDTH 128
|
|
#define SCREEN_HEIGHT 64
|
|
|
|
#define DISPLAY_I2C_ADDRESS_32 (0x3C)
|
|
#define DISPLAY_I2C_ADDRESS_64 (0x3D)
|
|
#define DISPLAY_I2C_ADDRESS DISPLAY_I2C_ADDRESS_32
|
|
|
|
#define SSD1306_BLACK 0 ///< Draw 'off' pixels
|
|
#define SSD1306_WHITE 1 ///< Draw 'on' pixels
|
|
#define SSD1306_INVERSE 2 ///< Invert pixels
|
|
#define SSD1306_MEMORYMODE 0x20 ///< See datasheet
|
|
#define SSD1306_COLUMNADDR 0x21 ///< See datasheet
|
|
#define SSD1306_PAGEADDR 0x22 ///< See datasheet
|
|
#define SSD1306_SETCONTRAST 0x81 ///< See datasheet
|
|
#define SSD1306_CHARGEPUMP 0x8D ///< See datasheet
|
|
#define SSD1306_SEGREMAP 0xA0 ///< See datasheet
|
|
#define SSD1306_DISPLAYALLON_RESUME 0xA4 ///< See datasheet
|
|
#define SSD1306_DISPLAYALLON 0xA5 ///< Not currently used
|
|
#define SSD1306_NORMALDISPLAY 0xA6 ///< See datasheet
|
|
#define SSD1306_INVERTDISPLAY 0xA7 ///< See datasheet
|
|
#define SSD1306_SETMULTIPLEX 0xA8 ///< See datasheet
|
|
#define SSD1306_DISPLAYOFF 0xAE ///< See datasheet
|
|
#define SSD1306_DISPLAYON 0xAF ///< See datasheet
|
|
#define SSD1306_COMSCANINC 0xC0 ///< Not currently used
|
|
#define SSD1306_COMSCANDEC 0xC8 ///< See datasheet
|
|
#define SSD1306_SETDISPLAYOFFSET 0xD3 ///< See datasheet
|
|
#define SSD1306_SETDISPLAYCLOCKDIV 0xD5 ///< See datasheet
|
|
#define SSD1306_SETPRECHARGE 0xD9 ///< See datasheet
|
|
#define SSD1306_SETCOMPINS 0xDA ///< See datasheet
|
|
#define SSD1306_SETVCOMDETECT 0xDB ///< See datasheet
|
|
|
|
#define SSD1306_SETLOWCOLUMN 0x00 ///< Not currently used
|
|
#define SSD1306_SETHIGHCOLUMN 0x10 ///< Not currently used
|
|
#define SSD1306_SETSTARTLINE 0x40 ///< See datasheet
|
|
|
|
#define SSD1306_EXTERNALVCC 0x01 ///< External display voltage source
|
|
#define SSD1306_SWITCHCAPVCC 0x02 ///< Gen. display voltage from 3.3V
|
|
|
|
#define SSD1306_RIGHT_HORIZONTAL_SCROLL 0x26 ///< Init rt scroll
|
|
#define SSD1306_LEFT_HORIZONTAL_SCROLL 0x27 ///< Init left scroll
|
|
#define SSD1306_VERTICAL_AND_RIGHT_HORIZONTAL_SCROLL 0x29 ///< Init diag scroll
|
|
#define SSD1306_VERTICAL_AND_LEFT_HORIZONTAL_SCROLL 0x2A ///< Init diag scroll
|
|
#define SSD1306_DEACTIVATE_SCROLL 0x2E ///< Stop scroll
|
|
#define SSD1306_ACTIVATE_SCROLL 0x2F ///< Start scroll
|
|
#define SSD1306_SET_VERTICAL_SCROLL_AREA 0xA3 ///< Set scroll range
|
|
|
|
#define SSD1306_LCDWIDTH SCREEN_WIDTH ///< DEPRECATED: width w/SSD1306_128_64 defined
|
|
#define SSD1306_LCDHEIGHT SCREEN_HEIGHT ///< DEPRECATED: height w/SSD1306_128_64 defined
|
|
|
|
class SSD1306 : public Adafruit_GFX {
|
|
public:
|
|
// Constructor
|
|
//CUI(Adafruit_SSD1306 &display);
|
|
SSD1306();
|
|
void dim(bool dim);
|
|
void setContrast(uint8_t contrast);
|
|
|
|
protected:
|
|
bool bOK;
|
|
uint8_t buffer[SCREEN_WIDTH * SCREEN_HEIGHT / 8];
|
|
int8_t i2caddr; ///< I2C address initialized when begin method is called.
|
|
uint8_t contrast; ///< normal contrast setting for this device
|
|
|
|
bool begin(uint8_t switchvcc = SSD1306_SWITCHCAPVCC, uint8_t i2caddr = DISPLAY_I2C_ADDRESS);
|
|
inline uint8_t *getBuffer(void) { return buffer; };
|
|
inline void clearDisplayBuffer(void) { memset(buffer, 0, WIDTH * ((HEIGHT + 7) / 8)); };
|
|
void updateScreen();
|
|
void updateRegion(uint8_t pageStart, uint8_t pageEnd, uint8_t colStart , uint8_t colEnd);
|
|
void ssd1306_hscroll(uint8_t dir, uint8_t pageStart, uint8_t pageEnd, uint8_t offset, uint8_t interval);
|
|
|
|
private:
|
|
int8_t vccstate; ///< VCC selection, set by begin method.
|
|
uint32_t wireClk; ///< Wire speed for SSD1306 transfers
|
|
uint32_t restoreClk; ///< Wire speed following SSD1306 transfers
|
|
|
|
virtual void drawPixel(int16_t x, int16_t y, uint16_t color);
|
|
void ssd1306_commandList(const uint8_t *c, uint8_t n);
|
|
void ssd1306_command1(uint8_t c);
|
|
};
|
|
#endif
|