Adafruit SSD1331 library for Mbed OS6, specifically tested on Digilent Pmod OLEDrgb and NUCLEO-L432KC
Dependents: ollin-ja-samin-hieno-ihmislaskin MCLAB10 OLEDrgb_MP OLEDrgb_MIC3_L432KC_OS6_hk
Adafruit_SSD1331.h
- Committer:
- mjromeijn
- Date:
- 2017-12-13
- Revision:
- 0:e8e869596683
File content as of revision 0:e8e869596683:
/*************************************************** This is a library for the 0.96" 16-bit Color OLED with SSD1331 driver chip Pick one up today in the adafruit shop! ------> http://www.adafruit.com/products/684 These displays use SPI to communicate, 4 or 5 pins are required to interface Adafruit invests time and resources providing this open source code, please support Adafruit and open-source hardware by purchasing products from Adafruit! Written by Limor Fried/Ladyada for Adafruit Industries. BSD license, all text above must be included in any redistribution ****************************************************/ #include <stddef.h> #include "mbed.h" #include "Adafruit_GFX.h" #define gfx_swap(a, b) { uint16_t t = a; a = b; b = t; } #ifdef __SAM3X8E__ typedef volatile RwReg PortReg; typedef uint32_t PortMask; #define _BV(b) (1<<(b)) #else typedef volatile uint8_t PortReg; typedef uint8_t PortMask; #endif // Select one of these defines to set the pixel color order #define SSD1331_COLORORDER_RGB // #define SSD1331_COLORORDER_BGR #if defined SSD1331_COLORORDER_RGB && defined SSD1331_COLORORDER_BGR #error "RGB and BGR can not both be defined for SSD1331_COLORODER." #endif // Timing Delays #define SSD1331_DELAYS_HWFILL (1) #define SSD1331_DELAYS_HWLINE (0) #define SSD1331_DELAYS_HWCLEAR (1) // SSD1331 Commands #define SSD1331_CMD_DRAWLINE 0x21 #define SSD1331_CMD_DRAWRECT 0x22 #define SSD1331_CMD_FILL 0x26 #define SSD1331_CMD_SETCOLUMN 0x15 #define SSD1331_CMD_SETROW 0x75 #define SSD1331_CMD_CONTRASTA 0x81 #define SSD1331_CMD_CONTRASTB 0x82 #define SSD1331_CMD_CONTRASTC 0x83 #define SSD1331_CMD_MASTERCURRENT 0x87 #define SSD1331_CMD_SETREMAP 0xA0 #define SSD1331_CMD_STARTLINE 0xA1 #define SSD1331_CMD_DISPLAYOFFSET 0xA2 #define SSD1331_CMD_NORMALDISPLAY 0xA4 #define SSD1331_CMD_DISPLAYALLON 0xA5 #define SSD1331_CMD_DISPLAYALLOFF 0xA6 #define SSD1331_CMD_INVERTDISPLAY 0xA7 #define SSD1331_CMD_SETMULTIPLEX 0xA8 #define SSD1331_CMD_SETMASTER 0xAD #define SSD1331_CMD_DISPLAYOFF 0xAE #define SSD1331_CMD_DISPLAYON 0xAF #define SSD1331_CMD_POWERMODE 0xB0 #define SSD1331_CMD_PRECHARGE 0xB1 #define SSD1331_CMD_CLOCKDIV 0xB3 #define SSD1331_CMD_PRECHARGEA 0x8A #define SSD1331_CMD_PRECHARGEB 0x8B #define SSD1331_CMD_PRECHARGEC 0x8C #define SSD1331_CMD_PRECHARGELEVEL 0xBB #define SSD1331_CMD_VCOMH 0xBE #define WIDTH 96 #define HEIGHT 64 #define SSD1331_CMD_CLEAR 0x25 class Adafruit_SSD1331 : public Adafruit_GFX { public: Adafruit_SSD1331(PinName cs, PinName rs, PinName dc, PinName mosi, PinName miso, PinName sclk); uint16_t Color565(uint8_t r, uint8_t g, uint8_t b); // drawing primitives! void drawPixel(int16_t x, int16_t y, uint16_t color); void drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color); void drawRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color); void fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t fillcolor); void clearScreen(); void clearArea(int16_t x0, int16_t y0, int16_t x1, int16_t y1); void pushColor(uint16_t c); // commands void begin(void); void goHome(void); void goTo(int x, int y); void reset(void); /* low level */ void writeData(uint8_t d); void writeCommand(uint8_t c); static const int16_t TFTWIDTH = 96; static const int16_t TFTHEIGHT = 64; uint8_t cursorX, cursorY; void writeData_unsafe(uint16_t d); void setWriteDir(void); void write8(uint8_t d); private: void spiwrite(uint8_t); DigitalOut CS, RES, DC; SPI spi; // mosi, miso, sclk };