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@1:5fe0e63aef2e, 2020-08-29 (annotated)
- Committer:
- timo_k2
- Date:
- Sat Aug 29 11:03:02 2020 +0000
- Revision:
- 1:5fe0e63aef2e
- Parent:
- 0:e8e869596683
For the Mbed OS 6 wait_ms(200) replaced with ; ThisThread::sleep_for(200ms);; for all the similar wait_ms lines.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mjromeijn | 0:e8e869596683 | 1 | /*************************************************** |
mjromeijn | 0:e8e869596683 | 2 | This is a library for the 0.96" 16-bit Color OLED with SSD1331 driver chip |
mjromeijn | 0:e8e869596683 | 3 | Pick one up today in the adafruit shop! |
mjromeijn | 0:e8e869596683 | 4 | ------> http://www.adafruit.com/products/684 |
mjromeijn | 0:e8e869596683 | 5 | These displays use SPI to communicate, 4 or 5 pins are required to |
mjromeijn | 0:e8e869596683 | 6 | interface |
mjromeijn | 0:e8e869596683 | 7 | Adafruit invests time and resources providing this open source code, |
mjromeijn | 0:e8e869596683 | 8 | please support Adafruit and open-source hardware by purchasing |
mjromeijn | 0:e8e869596683 | 9 | products from Adafruit! |
mjromeijn | 0:e8e869596683 | 10 | Written by Limor Fried/Ladyada for Adafruit Industries. |
mjromeijn | 0:e8e869596683 | 11 | BSD license, all text above must be included in any redistribution |
mjromeijn | 0:e8e869596683 | 12 | ****************************************************/ |
mjromeijn | 0:e8e869596683 | 13 | |
mjromeijn | 0:e8e869596683 | 14 | #include <stddef.h> |
mjromeijn | 0:e8e869596683 | 15 | #include "mbed.h" |
mjromeijn | 0:e8e869596683 | 16 | #include "Adafruit_GFX.h" |
mjromeijn | 0:e8e869596683 | 17 | |
mjromeijn | 0:e8e869596683 | 18 | #define gfx_swap(a, b) { uint16_t t = a; a = b; b = t; } |
mjromeijn | 0:e8e869596683 | 19 | |
mjromeijn | 0:e8e869596683 | 20 | #ifdef __SAM3X8E__ |
mjromeijn | 0:e8e869596683 | 21 | typedef volatile RwReg PortReg; |
mjromeijn | 0:e8e869596683 | 22 | typedef uint32_t PortMask; |
mjromeijn | 0:e8e869596683 | 23 | #define _BV(b) (1<<(b)) |
mjromeijn | 0:e8e869596683 | 24 | #else |
mjromeijn | 0:e8e869596683 | 25 | typedef volatile uint8_t PortReg; |
mjromeijn | 0:e8e869596683 | 26 | typedef uint8_t PortMask; |
mjromeijn | 0:e8e869596683 | 27 | #endif |
mjromeijn | 0:e8e869596683 | 28 | |
mjromeijn | 0:e8e869596683 | 29 | // Select one of these defines to set the pixel color order |
mjromeijn | 0:e8e869596683 | 30 | #define SSD1331_COLORORDER_RGB |
mjromeijn | 0:e8e869596683 | 31 | // #define SSD1331_COLORORDER_BGR |
mjromeijn | 0:e8e869596683 | 32 | |
mjromeijn | 0:e8e869596683 | 33 | #if defined SSD1331_COLORORDER_RGB && defined SSD1331_COLORORDER_BGR |
mjromeijn | 0:e8e869596683 | 34 | #error "RGB and BGR can not both be defined for SSD1331_COLORODER." |
mjromeijn | 0:e8e869596683 | 35 | #endif |
mjromeijn | 0:e8e869596683 | 36 | |
mjromeijn | 0:e8e869596683 | 37 | // Timing Delays |
mjromeijn | 0:e8e869596683 | 38 | #define SSD1331_DELAYS_HWFILL (1) |
mjromeijn | 0:e8e869596683 | 39 | #define SSD1331_DELAYS_HWLINE (0) |
mjromeijn | 0:e8e869596683 | 40 | #define SSD1331_DELAYS_HWCLEAR (1) |
mjromeijn | 0:e8e869596683 | 41 | |
mjromeijn | 0:e8e869596683 | 42 | // SSD1331 Commands |
mjromeijn | 0:e8e869596683 | 43 | #define SSD1331_CMD_DRAWLINE 0x21 |
mjromeijn | 0:e8e869596683 | 44 | #define SSD1331_CMD_DRAWRECT 0x22 |
mjromeijn | 0:e8e869596683 | 45 | #define SSD1331_CMD_FILL 0x26 |
mjromeijn | 0:e8e869596683 | 46 | #define SSD1331_CMD_SETCOLUMN 0x15 |
mjromeijn | 0:e8e869596683 | 47 | #define SSD1331_CMD_SETROW 0x75 |
mjromeijn | 0:e8e869596683 | 48 | #define SSD1331_CMD_CONTRASTA 0x81 |
mjromeijn | 0:e8e869596683 | 49 | #define SSD1331_CMD_CONTRASTB 0x82 |
mjromeijn | 0:e8e869596683 | 50 | #define SSD1331_CMD_CONTRASTC 0x83 |
mjromeijn | 0:e8e869596683 | 51 | #define SSD1331_CMD_MASTERCURRENT 0x87 |
mjromeijn | 0:e8e869596683 | 52 | #define SSD1331_CMD_SETREMAP 0xA0 |
mjromeijn | 0:e8e869596683 | 53 | #define SSD1331_CMD_STARTLINE 0xA1 |
mjromeijn | 0:e8e869596683 | 54 | #define SSD1331_CMD_DISPLAYOFFSET 0xA2 |
mjromeijn | 0:e8e869596683 | 55 | #define SSD1331_CMD_NORMALDISPLAY 0xA4 |
mjromeijn | 0:e8e869596683 | 56 | #define SSD1331_CMD_DISPLAYALLON 0xA5 |
mjromeijn | 0:e8e869596683 | 57 | #define SSD1331_CMD_DISPLAYALLOFF 0xA6 |
mjromeijn | 0:e8e869596683 | 58 | #define SSD1331_CMD_INVERTDISPLAY 0xA7 |
mjromeijn | 0:e8e869596683 | 59 | #define SSD1331_CMD_SETMULTIPLEX 0xA8 |
mjromeijn | 0:e8e869596683 | 60 | #define SSD1331_CMD_SETMASTER 0xAD |
mjromeijn | 0:e8e869596683 | 61 | #define SSD1331_CMD_DISPLAYOFF 0xAE |
mjromeijn | 0:e8e869596683 | 62 | #define SSD1331_CMD_DISPLAYON 0xAF |
mjromeijn | 0:e8e869596683 | 63 | #define SSD1331_CMD_POWERMODE 0xB0 |
mjromeijn | 0:e8e869596683 | 64 | #define SSD1331_CMD_PRECHARGE 0xB1 |
mjromeijn | 0:e8e869596683 | 65 | #define SSD1331_CMD_CLOCKDIV 0xB3 |
mjromeijn | 0:e8e869596683 | 66 | #define SSD1331_CMD_PRECHARGEA 0x8A |
mjromeijn | 0:e8e869596683 | 67 | #define SSD1331_CMD_PRECHARGEB 0x8B |
mjromeijn | 0:e8e869596683 | 68 | #define SSD1331_CMD_PRECHARGEC 0x8C |
mjromeijn | 0:e8e869596683 | 69 | #define SSD1331_CMD_PRECHARGELEVEL 0xBB |
mjromeijn | 0:e8e869596683 | 70 | #define SSD1331_CMD_VCOMH 0xBE |
mjromeijn | 0:e8e869596683 | 71 | #define WIDTH 96 |
mjromeijn | 0:e8e869596683 | 72 | #define HEIGHT 64 |
mjromeijn | 0:e8e869596683 | 73 | |
mjromeijn | 0:e8e869596683 | 74 | #define SSD1331_CMD_CLEAR 0x25 |
mjromeijn | 0:e8e869596683 | 75 | |
mjromeijn | 0:e8e869596683 | 76 | class Adafruit_SSD1331 : public Adafruit_GFX { |
mjromeijn | 0:e8e869596683 | 77 | public: |
mjromeijn | 0:e8e869596683 | 78 | Adafruit_SSD1331(PinName cs, PinName rs, PinName dc, PinName mosi, PinName miso, PinName sclk); |
mjromeijn | 0:e8e869596683 | 79 | |
mjromeijn | 0:e8e869596683 | 80 | uint16_t Color565(uint8_t r, uint8_t g, uint8_t b); |
mjromeijn | 0:e8e869596683 | 81 | |
mjromeijn | 0:e8e869596683 | 82 | // drawing primitives! |
mjromeijn | 0:e8e869596683 | 83 | void drawPixel(int16_t x, int16_t y, uint16_t color); |
mjromeijn | 0:e8e869596683 | 84 | void drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color); |
mjromeijn | 0:e8e869596683 | 85 | void drawRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color); |
mjromeijn | 0:e8e869596683 | 86 | void fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t fillcolor); |
mjromeijn | 0:e8e869596683 | 87 | void clearScreen(); |
mjromeijn | 0:e8e869596683 | 88 | void clearArea(int16_t x0, int16_t y0, int16_t x1, int16_t y1); |
mjromeijn | 0:e8e869596683 | 89 | void pushColor(uint16_t c); |
mjromeijn | 0:e8e869596683 | 90 | |
mjromeijn | 0:e8e869596683 | 91 | // commands |
mjromeijn | 0:e8e869596683 | 92 | void begin(void); |
mjromeijn | 0:e8e869596683 | 93 | void goHome(void); |
mjromeijn | 0:e8e869596683 | 94 | void goTo(int x, int y); |
mjromeijn | 0:e8e869596683 | 95 | |
mjromeijn | 0:e8e869596683 | 96 | void reset(void); |
mjromeijn | 0:e8e869596683 | 97 | |
mjromeijn | 0:e8e869596683 | 98 | /* low level */ |
mjromeijn | 0:e8e869596683 | 99 | |
mjromeijn | 0:e8e869596683 | 100 | void writeData(uint8_t d); |
mjromeijn | 0:e8e869596683 | 101 | void writeCommand(uint8_t c); |
mjromeijn | 0:e8e869596683 | 102 | |
mjromeijn | 0:e8e869596683 | 103 | static const int16_t TFTWIDTH = 96; |
mjromeijn | 0:e8e869596683 | 104 | static const int16_t TFTHEIGHT = 64; |
mjromeijn | 0:e8e869596683 | 105 | |
mjromeijn | 0:e8e869596683 | 106 | uint8_t cursorX, cursorY; |
mjromeijn | 0:e8e869596683 | 107 | |
mjromeijn | 0:e8e869596683 | 108 | void writeData_unsafe(uint16_t d); |
mjromeijn | 0:e8e869596683 | 109 | |
mjromeijn | 0:e8e869596683 | 110 | void setWriteDir(void); |
mjromeijn | 0:e8e869596683 | 111 | void write8(uint8_t d); |
mjromeijn | 0:e8e869596683 | 112 | |
mjromeijn | 0:e8e869596683 | 113 | private: |
mjromeijn | 0:e8e869596683 | 114 | void spiwrite(uint8_t); |
mjromeijn | 0:e8e869596683 | 115 | |
mjromeijn | 0:e8e869596683 | 116 | DigitalOut CS, RES, DC; |
mjromeijn | 0:e8e869596683 | 117 | SPI spi; // mosi, miso, sclk |
mjromeijn | 0:e8e869596683 | 118 | }; |