Adafruit SSD1331 library for Mbed, specifically tested on NRF51822

Dependents:   Pmod_OLEDrgb_ALS1_K64F McLab10_OLEDrgb_L432KC_tk2 Pmod_OLEDrgb_ALS1_L432KC

Committer:
mjromeijn
Date:
Wed Dec 13 20:41:59 2017 +0000
Revision:
0:e8e869596683
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew 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 };