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
Diff: Adafruit_SSD1331.h
- Revision:
- 0:e8e869596683
diff -r 000000000000 -r e8e869596683 Adafruit_SSD1331.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Adafruit_SSD1331.h Wed Dec 13 20:41:59 2017 +0000 @@ -0,0 +1,118 @@ +/*************************************************** + 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 +}; \ No newline at end of file