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 "Adafruit_GFX.h"
mjromeijn 0:e8e869596683 15 #include "Adafruit_SSD1331.h"
mjromeijn 0:e8e869596683 16
mjromeijn 0:e8e869596683 17 #include <SPI.h>
mjromeijn 0:e8e869596683 18
mjromeijn 0:e8e869596683 19 /********************************** low level pin interface */
mjromeijn 0:e8e869596683 20
mjromeijn 0:e8e869596683 21 inline void Adafruit_SSD1331::spiwrite(uint8_t c) {
mjromeijn 0:e8e869596683 22
mjromeijn 0:e8e869596683 23 spi.write(c);
mjromeijn 0:e8e869596683 24 return;
mjromeijn 0:e8e869596683 25 }
mjromeijn 0:e8e869596683 26
mjromeijn 0:e8e869596683 27
mjromeijn 0:e8e869596683 28 void Adafruit_SSD1331::writeCommand(uint8_t c) {
mjromeijn 0:e8e869596683 29 DC=0;
mjromeijn 0:e8e869596683 30 CS=0;
mjromeijn 0:e8e869596683 31
mjromeijn 0:e8e869596683 32 spiwrite(c);
mjromeijn 0:e8e869596683 33
mjromeijn 0:e8e869596683 34 CS=1;
mjromeijn 0:e8e869596683 35 }
mjromeijn 0:e8e869596683 36
mjromeijn 0:e8e869596683 37
mjromeijn 0:e8e869596683 38 void Adafruit_SSD1331::writeData(uint8_t c) {
mjromeijn 0:e8e869596683 39 DC=1;
mjromeijn 0:e8e869596683 40 CS=0;
mjromeijn 0:e8e869596683 41
mjromeijn 0:e8e869596683 42 spiwrite(c);
mjromeijn 0:e8e869596683 43
mjromeijn 0:e8e869596683 44 CS=1;
mjromeijn 0:e8e869596683 45 }
mjromeijn 0:e8e869596683 46
mjromeijn 0:e8e869596683 47 /***********************************/
mjromeijn 0:e8e869596683 48
mjromeijn 0:e8e869596683 49 void Adafruit_SSD1331::goHome(void) {
mjromeijn 0:e8e869596683 50 goTo(0,0);
mjromeijn 0:e8e869596683 51 }
mjromeijn 0:e8e869596683 52
mjromeijn 0:e8e869596683 53 void Adafruit_SSD1331::goTo(int x, int y) {
mjromeijn 0:e8e869596683 54 if (cursorX==x && cursorY == y) return;
mjromeijn 0:e8e869596683 55 cursorX = x;
mjromeijn 0:e8e869596683 56 cursorY = y;
mjromeijn 0:e8e869596683 57 if ((x >= WIDTH) || (y >= HEIGHT)) return;
mjromeijn 0:e8e869596683 58
mjromeijn 0:e8e869596683 59 // set x and y coordinate
mjromeijn 0:e8e869596683 60 /*writeCommand(SSD1331_CMD_SETCOLUMN);
mjromeijn 0:e8e869596683 61 writeCommand(x);
mjromeijn 0:e8e869596683 62 writeCommand(WIDTH-1);
mjromeijn 0:e8e869596683 63
mjromeijn 0:e8e869596683 64 writeCommand(SSD1331_CMD_SETROW);
mjromeijn 0:e8e869596683 65 writeCommand(y);
mjromeijn 0:e8e869596683 66 writeCommand(HEIGHT-1);*/
mjromeijn 0:e8e869596683 67 DC=0;
mjromeijn 0:e8e869596683 68 CS=0;
mjromeijn 0:e8e869596683 69
mjromeijn 0:e8e869596683 70 spiwrite(SSD1331_CMD_SETCOLUMN);
mjromeijn 0:e8e869596683 71 spiwrite(x);
mjromeijn 0:e8e869596683 72 spiwrite(WIDTH-1);
mjromeijn 0:e8e869596683 73
mjromeijn 0:e8e869596683 74 spiwrite(SSD1331_CMD_SETROW);
mjromeijn 0:e8e869596683 75 spiwrite(y);
mjromeijn 0:e8e869596683 76 spiwrite(HEIGHT-1);
mjromeijn 0:e8e869596683 77
mjromeijn 0:e8e869596683 78 CS=1;
mjromeijn 0:e8e869596683 79 }
mjromeijn 0:e8e869596683 80
mjromeijn 0:e8e869596683 81 uint16_t Adafruit_SSD1331::Color565(uint8_t r, uint8_t g, uint8_t b) {
mjromeijn 0:e8e869596683 82 uint16_t c;
mjromeijn 0:e8e869596683 83 c = r >> 3;
mjromeijn 0:e8e869596683 84 c <<= 6;
mjromeijn 0:e8e869596683 85 c |= g >> 2;
mjromeijn 0:e8e869596683 86 c <<= 5;
mjromeijn 0:e8e869596683 87 c |= b >> 3;
mjromeijn 0:e8e869596683 88
mjromeijn 0:e8e869596683 89 return c;
mjromeijn 0:e8e869596683 90 }
mjromeijn 0:e8e869596683 91
mjromeijn 0:e8e869596683 92 /**************************************************************************/
mjromeijn 0:e8e869596683 93 /*!
mjromeijn 0:e8e869596683 94 @brief Draws a filled rectangle using HW acceleration
mjromeijn 0:e8e869596683 95 */
mjromeijn 0:e8e869596683 96 /**************************************************************************/
mjromeijn 0:e8e869596683 97 /*
mjromeijn 0:e8e869596683 98 void Adafruit_SSD1331::fillRect(uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint16_t fillcolor)
mjromeijn 0:e8e869596683 99 {
mjromeijn 0:e8e869596683 100 //Serial.println("fillRect");
mjromeijn 0:e8e869596683 101 // check rotation, move rect around if necessary
mjromeijn 0:e8e869596683 102 switch (getRotation()) {
mjromeijn 0:e8e869596683 103 case 1:
mjromeijn 0:e8e869596683 104 swap(x, y);
mjromeijn 0:e8e869596683 105 swap(w, h);
mjromeijn 0:e8e869596683 106 x = WIDTH - x - 1;
mjromeijn 0:e8e869596683 107 break;
mjromeijn 0:e8e869596683 108 case 2:
mjromeijn 0:e8e869596683 109 x = WIDTH - x - 1;
mjromeijn 0:e8e869596683 110 y = HEIGHT - y - 1;
mjromeijn 0:e8e869596683 111 break;
mjromeijn 0:e8e869596683 112 case 3:
mjromeijn 0:e8e869596683 113 swap(x, y);
mjromeijn 0:e8e869596683 114 swap(w, h);
mjromeijn 0:e8e869596683 115 y = HEIGHT - y - 1;
mjromeijn 0:e8e869596683 116 break;
mjromeijn 0:e8e869596683 117 }
mjromeijn 0:e8e869596683 118 // Bounds check
mjromeijn 0:e8e869596683 119 if ((x >= TFTWIDTH) || (y >= TFTHEIGHT))
mjromeijn 0:e8e869596683 120 return;
mjromeijn 0:e8e869596683 121 // Y bounds check
mjromeijn 0:e8e869596683 122 if (y+h > TFTHEIGHT)
mjromeijn 0:e8e869596683 123 {
mjromeijn 0:e8e869596683 124 h = TFTHEIGHT - y;
mjromeijn 0:e8e869596683 125 }
mjromeijn 0:e8e869596683 126 // X bounds check
mjromeijn 0:e8e869596683 127 if (x+w > TFTWIDTH)
mjromeijn 0:e8e869596683 128 {
mjromeijn 0:e8e869596683 129 w = TFTWIDTH - x;
mjromeijn 0:e8e869596683 130 }
mjromeijn 0:e8e869596683 131
mjromeijn 0:e8e869596683 132 // fill!
mjromeijn 0:e8e869596683 133 writeCommand(SSD1331_CMD_FILL);
mjromeijn 0:e8e869596683 134 writeCommand(0x01);
mjromeijn 0:e8e869596683 135 writeCommand(SSD1331_CMD_DRAWRECT);
mjromeijn 0:e8e869596683 136 writeCommand(x & 0xFF); // Starting column
mjromeijn 0:e8e869596683 137 writeCommand(y & 0xFF); // Starting row
mjromeijn 0:e8e869596683 138 writeCommand((x+w-1) & 0xFF); // End column
mjromeijn 0:e8e869596683 139 writeCommand((y+h-1) & 0xFF); // End row
mjromeijn 0:e8e869596683 140
mjromeijn 0:e8e869596683 141 // Outline color
mjromeijn 0:e8e869596683 142 writeCommand((uint8_t)((fillcolor >> 11) << 1));
mjromeijn 0:e8e869596683 143 writeCommand((uint8_t)((fillcolor >> 5) & 0x3F));
mjromeijn 0:e8e869596683 144 writeCommand((uint8_t)((fillcolor << 1) & 0x3F));
mjromeijn 0:e8e869596683 145 // Fill color
mjromeijn 0:e8e869596683 146 writeCommand((uint8_t)((fillcolor >> 11) << 1));
mjromeijn 0:e8e869596683 147 writeCommand((uint8_t)((fillcolor >> 5) & 0x3F));
mjromeijn 0:e8e869596683 148 writeCommand((uint8_t)((fillcolor << 1) & 0x3F));
mjromeijn 0:e8e869596683 149
mjromeijn 0:e8e869596683 150 // Delay while the fill completes
mjromeijn 0:e8e869596683 151 delay(SSD1331_DELAYS_HWFILL);
mjromeijn 0:e8e869596683 152 }
mjromeijn 0:e8e869596683 153 */
mjromeijn 0:e8e869596683 154
mjromeijn 0:e8e869596683 155 void Adafruit_SSD1331::drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color) {
mjromeijn 0:e8e869596683 156 // check rotation, move pixel around if necessary
mjromeijn 0:e8e869596683 157 switch (getRotation()) {
mjromeijn 0:e8e869596683 158 case 1:
mjromeijn 0:e8e869596683 159 gfx_swap(x0, y0);
mjromeijn 0:e8e869596683 160 gfx_swap(x1, y1);
mjromeijn 0:e8e869596683 161 x0 = WIDTH - x0 - 1;
mjromeijn 0:e8e869596683 162 x1 = WIDTH - x1 - 1;
mjromeijn 0:e8e869596683 163 break;
mjromeijn 0:e8e869596683 164 case 2:
mjromeijn 0:e8e869596683 165 x0 = WIDTH - x0 - 1;
mjromeijn 0:e8e869596683 166 y0 = HEIGHT - y0 - 1;
mjromeijn 0:e8e869596683 167 x1 = WIDTH - x1 - 1;
mjromeijn 0:e8e869596683 168 y1 = HEIGHT - y1 - 1;
mjromeijn 0:e8e869596683 169 break;
mjromeijn 0:e8e869596683 170 case 3:
mjromeijn 0:e8e869596683 171 gfx_swap(x0, y0);
mjromeijn 0:e8e869596683 172 gfx_swap(x1, y1);
mjromeijn 0:e8e869596683 173 y0 = HEIGHT - y0 - 1;
mjromeijn 0:e8e869596683 174 y1 = HEIGHT - y1 - 1;
mjromeijn 0:e8e869596683 175 break;
mjromeijn 0:e8e869596683 176 }
mjromeijn 0:e8e869596683 177
mjromeijn 0:e8e869596683 178 // Boundary check
mjromeijn 0:e8e869596683 179 if ((y0 >= TFTHEIGHT) && (y1 >= TFTHEIGHT))
mjromeijn 0:e8e869596683 180 return;
mjromeijn 0:e8e869596683 181 if ((x0 >= TFTWIDTH) && (x1 >= TFTWIDTH))
mjromeijn 0:e8e869596683 182 return;
mjromeijn 0:e8e869596683 183 if (x0 >= TFTWIDTH)
mjromeijn 0:e8e869596683 184 x0 = TFTWIDTH - 1;
mjromeijn 0:e8e869596683 185 if (y0 >= TFTHEIGHT)
mjromeijn 0:e8e869596683 186 y0 = TFTHEIGHT - 1;
mjromeijn 0:e8e869596683 187 if (x1 >= TFTWIDTH)
mjromeijn 0:e8e869596683 188 x1 = TFTWIDTH - 1;
mjromeijn 0:e8e869596683 189 if (y1 >= TFTHEIGHT)
mjromeijn 0:e8e869596683 190 y1 = TFTHEIGHT - 1;
mjromeijn 0:e8e869596683 191
mjromeijn 0:e8e869596683 192 writeCommand(SSD1331_CMD_DRAWLINE);
mjromeijn 0:e8e869596683 193 writeCommand(x0);
mjromeijn 0:e8e869596683 194 writeCommand(y0);
mjromeijn 0:e8e869596683 195 writeCommand(x1);
mjromeijn 0:e8e869596683 196 writeCommand(y1);
mjromeijn 0:e8e869596683 197 //wait_ms(SSD1331_DELAYS_HWLINE);
mjromeijn 0:e8e869596683 198 writeCommand((uint8_t)((color >> 11) << 1));
mjromeijn 0:e8e869596683 199 writeCommand((uint8_t)((color >> 5) & 0x3F));
mjromeijn 0:e8e869596683 200 writeCommand((uint8_t)((color << 1) & 0x3F));
mjromeijn 0:e8e869596683 201 //wait_ms(SSD1331_DELAYS_HWLINE);
mjromeijn 0:e8e869596683 202 }
mjromeijn 0:e8e869596683 203
mjromeijn 0:e8e869596683 204 void Adafruit_SSD1331::drawRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) {
mjromeijn 0:e8e869596683 205 switch (getRotation()) {
mjromeijn 0:e8e869596683 206 case 1:
mjromeijn 0:e8e869596683 207 gfx_swap(x, y);
mjromeijn 0:e8e869596683 208 gfx_swap(w, h);
mjromeijn 0:e8e869596683 209 x = WIDTH - x - 1;
mjromeijn 0:e8e869596683 210 w = -w;
mjromeijn 0:e8e869596683 211 break;
mjromeijn 0:e8e869596683 212 case 2:
mjromeijn 0:e8e869596683 213 x = WIDTH - x - 1;
mjromeijn 0:e8e869596683 214 y = HEIGHT - y - 1;
mjromeijn 0:e8e869596683 215 w = -w;
mjromeijn 0:e8e869596683 216 h = -h;
mjromeijn 0:e8e869596683 217 break;
mjromeijn 0:e8e869596683 218 case 3:
mjromeijn 0:e8e869596683 219 gfx_swap(x, y);
mjromeijn 0:e8e869596683 220 gfx_swap(w, h);
mjromeijn 0:e8e869596683 221 y = HEIGHT - y - 1;
mjromeijn 0:e8e869596683 222 h = -h;
mjromeijn 0:e8e869596683 223 break;
mjromeijn 0:e8e869596683 224 }
mjromeijn 0:e8e869596683 225
mjromeijn 0:e8e869596683 226 writeCommand(SSD1331_CMD_DRAWRECT);
mjromeijn 0:e8e869596683 227 writeCommand(x);
mjromeijn 0:e8e869596683 228 writeCommand(y);
mjromeijn 0:e8e869596683 229 writeCommand(x+w-1);
mjromeijn 0:e8e869596683 230 writeCommand(y+h-1);
mjromeijn 0:e8e869596683 231 writeCommand((uint8_t)((color >> 11) << 1));
mjromeijn 0:e8e869596683 232 writeCommand((uint8_t)((color >> 5) & 0x3F));
mjromeijn 0:e8e869596683 233 writeCommand((uint8_t)((color << 1) & 0x3F));
mjromeijn 0:e8e869596683 234 writeCommand((uint8_t)((color >> 11) << 1));
mjromeijn 0:e8e869596683 235 writeCommand((uint8_t)((color >> 5) & 0x3F));
mjromeijn 0:e8e869596683 236 writeCommand((uint8_t)((color << 1) & 0x3F));
mjromeijn 0:e8e869596683 237
mjromeijn 0:e8e869596683 238 }
mjromeijn 0:e8e869596683 239
mjromeijn 0:e8e869596683 240 void Adafruit_SSD1331::fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color) {
mjromeijn 0:e8e869596683 241 writeCommand(SSD1331_CMD_FILL);
mjromeijn 0:e8e869596683 242 writeCommand(0xFF);
mjromeijn 0:e8e869596683 243 drawRect(x,y,w,h,color);
mjromeijn 0:e8e869596683 244 wait_ms(SSD1331_DELAYS_HWFILL);
mjromeijn 0:e8e869596683 245 writeCommand(SSD1331_CMD_FILL);
mjromeijn 0:e8e869596683 246 writeCommand(0x00);
mjromeijn 0:e8e869596683 247 }
mjromeijn 0:e8e869596683 248
mjromeijn 0:e8e869596683 249 void Adafruit_SSD1331::clearArea(int16_t x0, int16_t y0, int16_t x1, int16_t y1) {
mjromeijn 0:e8e869596683 250 // check rotation, move pixel around if necessary
mjromeijn 0:e8e869596683 251 switch (getRotation()) {
mjromeijn 0:e8e869596683 252 case 1:
mjromeijn 0:e8e869596683 253 gfx_swap(x0, y0);
mjromeijn 0:e8e869596683 254 gfx_swap(x1, y1);
mjromeijn 0:e8e869596683 255 x0 = WIDTH - x0 - 1;
mjromeijn 0:e8e869596683 256 x1 = WIDTH - x1 - 1;
mjromeijn 0:e8e869596683 257 break;
mjromeijn 0:e8e869596683 258 case 2:
mjromeijn 0:e8e869596683 259 x0 = WIDTH - x0 - 1;
mjromeijn 0:e8e869596683 260 y0 = HEIGHT - y0 - 1;
mjromeijn 0:e8e869596683 261 x1 = WIDTH - x1 - 1;
mjromeijn 0:e8e869596683 262 y1 = HEIGHT - y1 - 1;
mjromeijn 0:e8e869596683 263 break;
mjromeijn 0:e8e869596683 264 case 3:
mjromeijn 0:e8e869596683 265 gfx_swap(x0, y0);
mjromeijn 0:e8e869596683 266 gfx_swap(x1, y1);
mjromeijn 0:e8e869596683 267 y0 = HEIGHT - y0 - 1;
mjromeijn 0:e8e869596683 268 y1 = HEIGHT - y1 - 1;
mjromeijn 0:e8e869596683 269 break;
mjromeijn 0:e8e869596683 270 }
mjromeijn 0:e8e869596683 271
mjromeijn 0:e8e869596683 272 // Boundary check
mjromeijn 0:e8e869596683 273 if ((y0 >= TFTHEIGHT) && (y1 >= TFTHEIGHT))
mjromeijn 0:e8e869596683 274 return;
mjromeijn 0:e8e869596683 275 if ((x0 >= TFTWIDTH) && (x1 >= TFTWIDTH))
mjromeijn 0:e8e869596683 276 return;
mjromeijn 0:e8e869596683 277 if (x0 >= TFTWIDTH)
mjromeijn 0:e8e869596683 278 x0 = TFTWIDTH - 1;
mjromeijn 0:e8e869596683 279 if (y0 >= TFTHEIGHT)
mjromeijn 0:e8e869596683 280 y0 = TFTHEIGHT - 1;
mjromeijn 0:e8e869596683 281 if (x1 >= TFTWIDTH)
mjromeijn 0:e8e869596683 282 x1 = TFTWIDTH - 1;
mjromeijn 0:e8e869596683 283 if (y1 >= TFTHEIGHT)
mjromeijn 0:e8e869596683 284 y1 = TFTHEIGHT - 1;
mjromeijn 0:e8e869596683 285
mjromeijn 0:e8e869596683 286 writeCommand(SSD1331_CMD_CLEAR);
mjromeijn 0:e8e869596683 287 writeCommand(x0);
mjromeijn 0:e8e869596683 288 writeCommand(y0);
mjromeijn 0:e8e869596683 289 writeCommand(x1);
mjromeijn 0:e8e869596683 290 writeCommand(y1);
mjromeijn 0:e8e869596683 291 wait_ms(SSD1331_DELAYS_HWCLEAR);
mjromeijn 0:e8e869596683 292 }
mjromeijn 0:e8e869596683 293
mjromeijn 0:e8e869596683 294 void Adafruit_SSD1331::clearScreen() {
mjromeijn 0:e8e869596683 295 clearArea(0,0,WIDTH,HEIGHT);
mjromeijn 0:e8e869596683 296 }
mjromeijn 0:e8e869596683 297
mjromeijn 0:e8e869596683 298 void Adafruit_SSD1331::drawPixel(int16_t x, int16_t y, uint16_t color)
mjromeijn 0:e8e869596683 299 {
mjromeijn 0:e8e869596683 300 if ((x < 0) || (x >= width()) || (y < 0) || (y >= height())) return;
mjromeijn 0:e8e869596683 301
mjromeijn 0:e8e869596683 302 // check rotation, move pixel around if necessary
mjromeijn 0:e8e869596683 303 switch (getRotation()) {
mjromeijn 0:e8e869596683 304 case 1:
mjromeijn 0:e8e869596683 305 gfx_swap(x, y);
mjromeijn 0:e8e869596683 306 x = WIDTH - x - 1;
mjromeijn 0:e8e869596683 307 break;
mjromeijn 0:e8e869596683 308 case 2:
mjromeijn 0:e8e869596683 309 x = WIDTH - x - 1;
mjromeijn 0:e8e869596683 310 y = HEIGHT - y - 1;
mjromeijn 0:e8e869596683 311 break;
mjromeijn 0:e8e869596683 312 case 3:
mjromeijn 0:e8e869596683 313 gfx_swap(x, y);
mjromeijn 0:e8e869596683 314 y = HEIGHT - y - 1;
mjromeijn 0:e8e869596683 315 break;
mjromeijn 0:e8e869596683 316 }
mjromeijn 0:e8e869596683 317
mjromeijn 0:e8e869596683 318 goTo(x, y);
mjromeijn 0:e8e869596683 319
mjromeijn 0:e8e869596683 320 // setup for data
mjromeijn 0:e8e869596683 321 /**rsportreg |= rspin;
mjromeijn 0:e8e869596683 322 *csportreg &= ~ cspin;*/
mjromeijn 0:e8e869596683 323 DC=1;
mjromeijn 0:e8e869596683 324 CS=0;
mjromeijn 0:e8e869596683 325 spiwrite(color >> 8);
mjromeijn 0:e8e869596683 326 spiwrite(color);
mjromeijn 0:e8e869596683 327 CS=1;
mjromeijn 0:e8e869596683 328 cursorX++;
mjromeijn 0:e8e869596683 329 //*csportreg |= cspin;
mjromeijn 0:e8e869596683 330 }
mjromeijn 0:e8e869596683 331
mjromeijn 0:e8e869596683 332 void Adafruit_SSD1331::pushColor(uint16_t color) {
mjromeijn 0:e8e869596683 333 // setup for data
mjromeijn 0:e8e869596683 334 //*rsportreg |= rspin;
mjromeijn 0:e8e869596683 335 //*csportreg &= ~ cspin;
mjromeijn 0:e8e869596683 336 DC=1;
mjromeijn 0:e8e869596683 337 CS=0;
mjromeijn 0:e8e869596683 338 spiwrite(color >> 8);
mjromeijn 0:e8e869596683 339 spiwrite(color);
mjromeijn 0:e8e869596683 340 CS=1;
mjromeijn 0:e8e869596683 341 //*csportreg |= cspin;
mjromeijn 0:e8e869596683 342 }
mjromeijn 0:e8e869596683 343
mjromeijn 0:e8e869596683 344
mjromeijn 0:e8e869596683 345 void Adafruit_SSD1331::begin(void) {
mjromeijn 0:e8e869596683 346 // set pin directions
mjromeijn 0:e8e869596683 347 //pinMode(_rs, OUTPUT);
mjromeijn 0:e8e869596683 348
mjromeijn 0:e8e869596683 349 spi.format(8,3); //8bit frame and POL=1 /PHA=1(UpEdge Sampled)
mjromeijn 0:e8e869596683 350 spi.frequency(4000000); // modify later
mjromeijn 0:e8e869596683 351
mjromeijn 0:e8e869596683 352 // Toggle RST low to reset; CS low so it'll listen to us
mjromeijn 0:e8e869596683 353 CS=0;
mjromeijn 0:e8e869596683 354
mjromeijn 0:e8e869596683 355 RES=1;
mjromeijn 0:e8e869596683 356 wait_ms(200);
mjromeijn 0:e8e869596683 357 RES=0;
mjromeijn 0:e8e869596683 358 wait_ms(200);
mjromeijn 0:e8e869596683 359 RES=1;
mjromeijn 0:e8e869596683 360 wait_ms(200);
mjromeijn 0:e8e869596683 361
mjromeijn 0:e8e869596683 362 // Initialization Sequence
mjromeijn 0:e8e869596683 363 writeCommand(SSD1331_CMD_DISPLAYOFF); // 0xAE
mjromeijn 0:e8e869596683 364 writeCommand(SSD1331_CMD_SETREMAP); // 0xA0
mjromeijn 0:e8e869596683 365 #if defined SSD1331_COLORORDER_RGB
mjromeijn 0:e8e869596683 366 writeCommand(0x72); // RGB Color
mjromeijn 0:e8e869596683 367 #else
mjromeijn 0:e8e869596683 368 writeCommand(0x76); // BGR Color
mjromeijn 0:e8e869596683 369 #endif
mjromeijn 0:e8e869596683 370 writeCommand(SSD1331_CMD_STARTLINE); // 0xA1
mjromeijn 0:e8e869596683 371 writeCommand(0x0);
mjromeijn 0:e8e869596683 372 writeCommand(SSD1331_CMD_DISPLAYOFFSET); // 0xA2
mjromeijn 0:e8e869596683 373 writeCommand(0x0);
mjromeijn 0:e8e869596683 374 writeCommand(SSD1331_CMD_NORMALDISPLAY); // 0xA4
mjromeijn 0:e8e869596683 375 writeCommand(SSD1331_CMD_SETMULTIPLEX); // 0xA8
mjromeijn 0:e8e869596683 376 writeCommand(0x3F); // 0x3F 1/64 duty
mjromeijn 0:e8e869596683 377 writeCommand(SSD1331_CMD_SETMASTER); // 0xAD
mjromeijn 0:e8e869596683 378 writeCommand(0x8E);
mjromeijn 0:e8e869596683 379 writeCommand(SSD1331_CMD_POWERMODE); // 0xB0
mjromeijn 0:e8e869596683 380 writeCommand(0x0B);
mjromeijn 0:e8e869596683 381 writeCommand(SSD1331_CMD_PRECHARGE); // 0xB1
mjromeijn 0:e8e869596683 382 writeCommand(0x31);
mjromeijn 0:e8e869596683 383 writeCommand(SSD1331_CMD_CLOCKDIV); // 0xB3
mjromeijn 0:e8e869596683 384 writeCommand(0xF0); // 7:4 = Oscillator Frequency, 3:0 = CLK Div Ratio (A[3:0]+1 = 1..16)
mjromeijn 0:e8e869596683 385 writeCommand(SSD1331_CMD_PRECHARGEA); // 0x8A
mjromeijn 0:e8e869596683 386 writeCommand(0x64);
mjromeijn 0:e8e869596683 387 writeCommand(SSD1331_CMD_PRECHARGEB); // 0x8B
mjromeijn 0:e8e869596683 388 writeCommand(0x78);
mjromeijn 0:e8e869596683 389 writeCommand(SSD1331_CMD_PRECHARGEA); // 0x8C
mjromeijn 0:e8e869596683 390 writeCommand(0x64);
mjromeijn 0:e8e869596683 391 writeCommand(SSD1331_CMD_PRECHARGELEVEL); // 0xBB
mjromeijn 0:e8e869596683 392 writeCommand(0x3A);
mjromeijn 0:e8e869596683 393 writeCommand(SSD1331_CMD_VCOMH); // 0xBE
mjromeijn 0:e8e869596683 394 writeCommand(0x3E);
mjromeijn 0:e8e869596683 395 writeCommand(SSD1331_CMD_MASTERCURRENT); // 0x87
mjromeijn 0:e8e869596683 396 writeCommand(0x06);
mjromeijn 0:e8e869596683 397 writeCommand(SSD1331_CMD_CONTRASTA); // 0x81
mjromeijn 0:e8e869596683 398 writeCommand(0x91);
mjromeijn 0:e8e869596683 399 writeCommand(SSD1331_CMD_CONTRASTB); // 0x82
mjromeijn 0:e8e869596683 400 writeCommand(0x50);
mjromeijn 0:e8e869596683 401 writeCommand(SSD1331_CMD_CONTRASTC); // 0x83
mjromeijn 0:e8e869596683 402 writeCommand(0x7D);
mjromeijn 0:e8e869596683 403 writeCommand(SSD1331_CMD_DISPLAYON); //--turn on oled panel
mjromeijn 0:e8e869596683 404 }
mjromeijn 0:e8e869596683 405
mjromeijn 0:e8e869596683 406 /********************************* low level pin initialization */
mjromeijn 0:e8e869596683 407
mjromeijn 0:e8e869596683 408 Adafruit_SSD1331::Adafruit_SSD1331(PinName cs, PinName rs, PinName dc, PinName mosi, PinName miso, PinName sclk)
mjromeijn 0:e8e869596683 409 : Adafruit_GFX(TFTWIDTH,
mjromeijn 0:e8e869596683 410 TFTHEIGHT),
mjromeijn 0:e8e869596683 411 CS(cs),
mjromeijn 0:e8e869596683 412 RES(rs),
mjromeijn 0:e8e869596683 413 DC(dc),
mjromeijn 0:e8e869596683 414 spi(mosi, miso, sclk) {
mjromeijn 0:e8e869596683 415 begin();
mjromeijn 0:e8e869596683 416 }