A derived version of the BSD licensed Adafrut GFX library for the SSD1351 controller for an OLED 128x 96or 128x128 display using SPI
Fork of Adafruit_GFX by
You can print russian. (font edited).
class SPIPreInit : public SPI { public: SPIPreInit(PinName mosi, PinName miso, PinName clk) : SPI(mosi,miso,clk) { format(8,3); frequency(25000000); }; }; SPIPreInit gSpi(PB_15,NC,PB_13); PinName mosi(sda), PinName miso, PinName clk(scl) Adafruit_SSD1351_Spi oled(gSpi,PB_14,PB_1,PB_2); PinName DC, PinName RST, PinName CS
Adafruit_SSD1351.cpp@17:56015e4834e6, 2016-02-24 (annotated)
- Committer:
- Dzhafarkhanov
- Date:
- Wed Feb 24 12:24:42 2016 +0000
- Revision:
- 17:56015e4834e6
- Parent:
- Adafruit_SSD1306.cpp@16:7fb1d4d3525d
SSD1351;
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| nkhorman | 0:c3dcd4c4983a | 1 | /********************************************************************* |
| Dzhafarkhanov | 17:56015e4834e6 | 2 | This is a library for our Monochrome OLEDs based on SSD1351 drivers |
| nkhorman | 0:c3dcd4c4983a | 3 | |
| nkhorman | 0:c3dcd4c4983a | 4 | Pick one up today in the adafruit shop! |
| nkhorman | 0:c3dcd4c4983a | 5 | ------> http://www.adafruit.com/category/63_98 |
| nkhorman | 0:c3dcd4c4983a | 6 | |
| nkhorman | 0:c3dcd4c4983a | 7 | These displays use SPI to communicate, 4 or 5 pins are required to |
| nkhorman | 0:c3dcd4c4983a | 8 | interface |
| nkhorman | 0:c3dcd4c4983a | 9 | |
| nkhorman | 0:c3dcd4c4983a | 10 | Adafruit invests time and resources providing this open source code, |
| nkhorman | 0:c3dcd4c4983a | 11 | please support Adafruit and open-source hardware by purchasing |
| nkhorman | 0:c3dcd4c4983a | 12 | products from Adafruit! |
| nkhorman | 0:c3dcd4c4983a | 13 | |
| nkhorman | 0:c3dcd4c4983a | 14 | Written by Limor Fried/Ladyada for Adafruit Industries. |
| nkhorman | 0:c3dcd4c4983a | 15 | BSD license, check license.txt for more information |
| nkhorman | 0:c3dcd4c4983a | 16 | All text above, and the splash screen below must be included in any redistribution |
| nkhorman | 0:c3dcd4c4983a | 17 | *********************************************************************/ |
| nkhorman | 0:c3dcd4c4983a | 18 | |
| nkhorman | 0:c3dcd4c4983a | 19 | /* |
| nkhorman | 9:ddb97c9850a2 | 20 | * Modified by Neal Horman 7/14/2012 for use in mbed |
| nkhorman | 0:c3dcd4c4983a | 21 | */ |
| nkhorman | 0:c3dcd4c4983a | 22 | |
| nkhorman | 0:c3dcd4c4983a | 23 | #include "mbed.h" |
| Dzhafarkhanov | 17:56015e4834e6 | 24 | #include "Adafruit_SSD1351.h" |
| Dzhafarkhanov | 17:56015e4834e6 | 25 | |
| Dzhafarkhanov | 17:56015e4834e6 | 26 | #ifndef _BV |
| Dzhafarkhanov | 17:56015e4834e6 | 27 | #define _BV(bit) (1<<(bit)) |
| Dzhafarkhanov | 17:56015e4834e6 | 28 | #endif |
| Dzhafarkhanov | 17:56015e4834e6 | 29 | |
| Dzhafarkhanov | 17:56015e4834e6 | 30 | |
| Dzhafarkhanov | 17:56015e4834e6 | 31 | #define SSD1351_COLORORDER_BGR |
| Dzhafarkhanov | 17:56015e4834e6 | 32 | |
| Dzhafarkhanov | 17:56015e4834e6 | 33 | |
| Dzhafarkhanov | 17:56015e4834e6 | 34 | |
| Dzhafarkhanov | 17:56015e4834e6 | 35 | |
| Dzhafarkhanov | 17:56015e4834e6 | 36 | // Timing Delays |
| Dzhafarkhanov | 17:56015e4834e6 | 37 | #define SSD1351_DELAYS_HWFILL (3) |
| Dzhafarkhanov | 17:56015e4834e6 | 38 | #define SSD1351_DELAYS_HWLINE (1) |
| Dzhafarkhanov | 17:56015e4834e6 | 39 | |
| Dzhafarkhanov | 17:56015e4834e6 | 40 | //old |
| Dzhafarkhanov | 17:56015e4834e6 | 41 | #define SSD1351_SETHIGHCOLUMN 0x10 |
| nkhorman | 0:c3dcd4c4983a | 42 | |
| Dzhafarkhanov | 17:56015e4834e6 | 43 | // SSD1351 Commands |
| Dzhafarkhanov | 17:56015e4834e6 | 44 | #define SSD1351_CMD_SETCOLUMN 0x15 |
| Dzhafarkhanov | 17:56015e4834e6 | 45 | #define SSD1351_CMD_SETROW 0x75 |
| Dzhafarkhanov | 17:56015e4834e6 | 46 | #define SSD1351_CMD_WRITERAM 0x5C |
| Dzhafarkhanov | 17:56015e4834e6 | 47 | #define SSD1351_CMD_READRAM 0x5D |
| Dzhafarkhanov | 17:56015e4834e6 | 48 | #define SSD1351_CMD_SETREMAP 0xA0 |
| Dzhafarkhanov | 17:56015e4834e6 | 49 | #define SSD1351_CMD_STARTLINE 0xA1 //Set display start line |
| Dzhafarkhanov | 17:56015e4834e6 | 50 | #define SSD1351_CMD_DISPLAYOFFSET 0xA2 |
| Dzhafarkhanov | 17:56015e4834e6 | 51 | #define SSD1351_CMD_DISPLAYALLOFF 0xA4 |
| Dzhafarkhanov | 17:56015e4834e6 | 52 | #define SSD1351_CMD_DISPLAYALLON 0xA5 |
| Dzhafarkhanov | 17:56015e4834e6 | 53 | #define SSD1351_CMD_NORMALDISPLAY 0xA6 |
| Dzhafarkhanov | 17:56015e4834e6 | 54 | #define SSD1351_CMD_INVERTDISPLAY 0xA7 |
| Dzhafarkhanov | 17:56015e4834e6 | 55 | #define SSD1351_CMD_FUNCTIONSELECT 0xAB |
| Dzhafarkhanov | 17:56015e4834e6 | 56 | #define SSD1351_CMD_DISPLAYOFF 0xAE |
| Dzhafarkhanov | 17:56015e4834e6 | 57 | #define SSD1351_CMD_DISPLAYON 0xAF |
| Dzhafarkhanov | 17:56015e4834e6 | 58 | #define SSD1351_CMD_PRECHARGE 0xB1 |
| Dzhafarkhanov | 17:56015e4834e6 | 59 | #define SSD1351_CMD_DISPLAYENHANCE 0xB2 |
| Dzhafarkhanov | 17:56015e4834e6 | 60 | #define SSD1351_CMD_CLOCKDIV 0xB3 |
| Dzhafarkhanov | 17:56015e4834e6 | 61 | #define SSD1351_CMD_SETVSL 0xB4 |
| Dzhafarkhanov | 17:56015e4834e6 | 62 | #define SSD1351_CMD_SETGPIO 0xB5 |
| Dzhafarkhanov | 17:56015e4834e6 | 63 | #define SSD1351_CMD_PRECHARGE2 0xB6 |
| Dzhafarkhanov | 17:56015e4834e6 | 64 | #define SSD1351_CMD_SETGRAY 0xB8 |
| Dzhafarkhanov | 17:56015e4834e6 | 65 | #define SSD1351_CMD_USELUT 0xB9 |
| Dzhafarkhanov | 17:56015e4834e6 | 66 | #define SSD1351_CMD_PRECHARGELEVEL 0xBB |
| Dzhafarkhanov | 17:56015e4834e6 | 67 | #define SSD1351_CMD_VCOMH 0xBE |
| Dzhafarkhanov | 17:56015e4834e6 | 68 | #define SSD1351_CMD_CONTRASTABC 0xC1 |
| Dzhafarkhanov | 17:56015e4834e6 | 69 | #define SSD1351_CMD_CONTRASTMASTER 0xC7 |
| Dzhafarkhanov | 17:56015e4834e6 | 70 | #define SSD1351_CMD_MUXRATIO 0xCA |
| Dzhafarkhanov | 17:56015e4834e6 | 71 | #define SSD1351_CMD_COMMANDLOCK 0xFD |
| Dzhafarkhanov | 17:56015e4834e6 | 72 | #define SSD1351_CMD_HORIZSCROLL 0x96 |
| Dzhafarkhanov | 17:56015e4834e6 | 73 | #define SSD1351_CMD_STOPSCROLL 0x9E |
| Dzhafarkhanov | 17:56015e4834e6 | 74 | #define SSD1351_CMD_STARTSCROLL 0x9F |
| nkhorman | 0:c3dcd4c4983a | 75 | |
| Dzhafarkhanov | 17:56015e4834e6 | 76 | |
| Dzhafarkhanov | 17:56015e4834e6 | 77 | |
| Dzhafarkhanov | 17:56015e4834e6 | 78 | |
| Dzhafarkhanov | 17:56015e4834e6 | 79 | void Adafruit_SSD1351::begin(void)//oled init |
| nkhorman | 0:c3dcd4c4983a | 80 | { |
| nkhorman | 0:c3dcd4c4983a | 81 | rst = 1; |
| nkhorman | 0:c3dcd4c4983a | 82 | // VDD (3.3V) goes high at start, lets just chill for a ms |
| Dzhafarkhanov | 17:56015e4834e6 | 83 | wait_ms(10); |
| nkhorman | 0:c3dcd4c4983a | 84 | // bring reset low |
| nkhorman | 0:c3dcd4c4983a | 85 | rst = 0; |
| nkhorman | 0:c3dcd4c4983a | 86 | // wait 10ms |
| nkhorman | 0:c3dcd4c4983a | 87 | wait_ms(10); |
| nkhorman | 0:c3dcd4c4983a | 88 | // bring out of reset |
| nkhorman | 0:c3dcd4c4983a | 89 | rst = 1; |
| Dzhafarkhanov | 17:56015e4834e6 | 90 | // turn on VCC (13V?) |
| Dzhafarkhanov | 17:56015e4834e6 | 91 | wait_ms(10); |
| Dzhafarkhanov | 17:56015e4834e6 | 92 | |
| Dzhafarkhanov | 17:56015e4834e6 | 93 | |
| Dzhafarkhanov | 17:56015e4834e6 | 94 | // Initialization Sequence |
| Dzhafarkhanov | 17:56015e4834e6 | 95 | writeCommand(SSD1351_CMD_COMMANDLOCK); // set command lock |
| Dzhafarkhanov | 17:56015e4834e6 | 96 | writeData(0x12); |
| Dzhafarkhanov | 17:56015e4834e6 | 97 | writeCommand(SSD1351_CMD_COMMANDLOCK); // set command lock |
| Dzhafarkhanov | 17:56015e4834e6 | 98 | writeData(0xB1); |
| Dzhafarkhanov | 17:56015e4834e6 | 99 | |
| Dzhafarkhanov | 17:56015e4834e6 | 100 | writeCommand(SSD1351_CMD_DISPLAYOFF); // 0xAE |
| Dzhafarkhanov | 17:56015e4834e6 | 101 | |
| Dzhafarkhanov | 17:56015e4834e6 | 102 | writeCommand(SSD1351_CMD_CLOCKDIV); // 0xB3 |
| Dzhafarkhanov | 17:56015e4834e6 | 103 | writeCommand(0xF1); // 7:4 = Oscillator Frequency, 3:0 = CLK Div Ratio (A[3:0]+1 = 1..16) |
| Dzhafarkhanov | 17:56015e4834e6 | 104 | |
| Dzhafarkhanov | 17:56015e4834e6 | 105 | writeCommand(SSD1351_CMD_MUXRATIO); |
| Dzhafarkhanov | 17:56015e4834e6 | 106 | writeData(127); |
| Dzhafarkhanov | 17:56015e4834e6 | 107 | |
| Dzhafarkhanov | 17:56015e4834e6 | 108 | writeCommand(SSD1351_CMD_SETREMAP); |
| Dzhafarkhanov | 17:56015e4834e6 | 109 | writeData(0x74); |
| Dzhafarkhanov | 17:56015e4834e6 | 110 | |
| Dzhafarkhanov | 17:56015e4834e6 | 111 | writeCommand(SSD1351_CMD_SETCOLUMN); |
| Dzhafarkhanov | 17:56015e4834e6 | 112 | writeData(0x00); |
| Dzhafarkhanov | 17:56015e4834e6 | 113 | writeData(0x7F); |
| Dzhafarkhanov | 17:56015e4834e6 | 114 | writeCommand(SSD1351_CMD_SETROW); |
| Dzhafarkhanov | 17:56015e4834e6 | 115 | writeData(0x00); |
| Dzhafarkhanov | 17:56015e4834e6 | 116 | writeData(0x7F); |
| nkhorman | 9:ddb97c9850a2 | 117 | |
| Dzhafarkhanov | 17:56015e4834e6 | 118 | writeCommand(SSD1351_CMD_STARTLINE); // 0xA1 |
| Dzhafarkhanov | 17:56015e4834e6 | 119 | |
| Dzhafarkhanov | 17:56015e4834e6 | 120 | if (height() == 96) { |
| Dzhafarkhanov | 17:56015e4834e6 | 121 | writeData(96); |
| Dzhafarkhanov | 17:56015e4834e6 | 122 | } else { |
| Dzhafarkhanov | 17:56015e4834e6 | 123 | writeData(0); |
| Dzhafarkhanov | 17:56015e4834e6 | 124 | } |
| nkhorman | 9:ddb97c9850a2 | 125 | |
| Dzhafarkhanov | 17:56015e4834e6 | 126 | writeCommand(SSD1351_CMD_DISPLAYOFFSET); // 0xA2 |
| Dzhafarkhanov | 17:56015e4834e6 | 127 | writeData(0x00); |
| nkhorman | 9:ddb97c9850a2 | 128 | |
| Dzhafarkhanov | 17:56015e4834e6 | 129 | writeCommand(SSD1351_CMD_SETGPIO); |
| Dzhafarkhanov | 17:56015e4834e6 | 130 | writeData(0x00); |
| Dzhafarkhanov | 17:56015e4834e6 | 131 | |
| Dzhafarkhanov | 17:56015e4834e6 | 132 | writeCommand(SSD1351_CMD_FUNCTIONSELECT); |
| Dzhafarkhanov | 17:56015e4834e6 | 133 | writeData(0x01); // internal (diode drop) |
| Dzhafarkhanov | 17:56015e4834e6 | 134 | //writeData(0x01); // external bias |
| nkhorman | 9:ddb97c9850a2 | 135 | |
| Dzhafarkhanov | 17:56015e4834e6 | 136 | // writeCommand(SSSD1351_CMD_SETPHASELENGTH); |
| Dzhafarkhanov | 17:56015e4834e6 | 137 | // writeData(0x32); |
| Dzhafarkhanov | 17:56015e4834e6 | 138 | |
| Dzhafarkhanov | 17:56015e4834e6 | 139 | writeCommand(SSD1351_CMD_PRECHARGE); // 0xB1 |
| Dzhafarkhanov | 17:56015e4834e6 | 140 | writeCommand(0x32); |
| Dzhafarkhanov | 17:56015e4834e6 | 141 | |
| Dzhafarkhanov | 17:56015e4834e6 | 142 | writeCommand(SSD1351_CMD_VCOMH); // 0xBE |
| Dzhafarkhanov | 17:56015e4834e6 | 143 | writeCommand(0x05); |
| chrta | 4:853097cfa773 | 144 | |
| Dzhafarkhanov | 17:56015e4834e6 | 145 | writeCommand(SSD1351_CMD_NORMALDISPLAY); // 0xA6 |
| nkhorman | 9:ddb97c9850a2 | 146 | |
| Dzhafarkhanov | 17:56015e4834e6 | 147 | writeCommand(SSD1351_CMD_CONTRASTABC); |
| Dzhafarkhanov | 17:56015e4834e6 | 148 | writeData(0xC8); //0x8A //0xC8) |
| Dzhafarkhanov | 17:56015e4834e6 | 149 | writeData(0x80);//0x51 //0x80 |
| Dzhafarkhanov | 17:56015e4834e6 | 150 | writeData(0xC8);// 0x8A //0xC8 |
| Dzhafarkhanov | 17:56015e4834e6 | 151 | |
| Dzhafarkhanov | 17:56015e4834e6 | 152 | writeCommand(SSD1351_CMD_CONTRASTMASTER); |
| Dzhafarkhanov | 17:56015e4834e6 | 153 | writeData(0x0F); |
| nkhorman | 9:ddb97c9850a2 | 154 | |
| Dzhafarkhanov | 17:56015e4834e6 | 155 | writeCommand(SSD1351_CMD_SETVSL ); |
| Dzhafarkhanov | 17:56015e4834e6 | 156 | writeData(0xA0); |
| Dzhafarkhanov | 17:56015e4834e6 | 157 | writeData(0xB5); |
| Dzhafarkhanov | 17:56015e4834e6 | 158 | writeData(0x55); |
| Dzhafarkhanov | 17:56015e4834e6 | 159 | |
| Dzhafarkhanov | 17:56015e4834e6 | 160 | writeCommand(SSD1351_CMD_PRECHARGE2); |
| Dzhafarkhanov | 17:56015e4834e6 | 161 | writeData(0x01); |
| Dzhafarkhanov | 17:56015e4834e6 | 162 | |
| Dzhafarkhanov | 17:56015e4834e6 | 163 | writeCommand(SSD1351_CMD_DISPLAYON); //--turn on oled panel |
| Dzhafarkhanov | 17:56015e4834e6 | 164 | } |
| nkhorman | 9:ddb97c9850a2 | 165 | |
| Dzhafarkhanov | 17:56015e4834e6 | 166 | void Adafruit_SSD1351::invert(bool v) { |
| Dzhafarkhanov | 17:56015e4834e6 | 167 | if (v) { |
| Dzhafarkhanov | 17:56015e4834e6 | 168 | writeCommand(SSD1351_CMD_INVERTDISPLAY); |
| Dzhafarkhanov | 17:56015e4834e6 | 169 | } else { |
| Dzhafarkhanov | 17:56015e4834e6 | 170 | writeCommand(SSD1351_CMD_NORMALDISPLAY); |
| Dzhafarkhanov | 17:56015e4834e6 | 171 | } |
| Dzhafarkhanov | 17:56015e4834e6 | 172 | } |
| nkhorman | 9:ddb97c9850a2 | 173 | |
| Dzhafarkhanov | 17:56015e4834e6 | 174 | void Adafruit_SSD1351::goTo(int x, int y) { |
| Dzhafarkhanov | 17:56015e4834e6 | 175 | if ((x >= width()) || (y >= height())) return; |
| Dzhafarkhanov | 17:56015e4834e6 | 176 | |
| Dzhafarkhanov | 17:56015e4834e6 | 177 | // set x and y coordinate |
| Dzhafarkhanov | 17:56015e4834e6 | 178 | writeCommand(SSD1351_CMD_SETCOLUMN); |
| Dzhafarkhanov | 17:56015e4834e6 | 179 | writeData(x); |
| Dzhafarkhanov | 17:56015e4834e6 | 180 | writeData(width()-1); |
| nkhorman | 9:ddb97c9850a2 | 181 | |
| Dzhafarkhanov | 17:56015e4834e6 | 182 | writeCommand(SSD1351_CMD_SETROW); |
| Dzhafarkhanov | 17:56015e4834e6 | 183 | writeData(y); |
| Dzhafarkhanov | 17:56015e4834e6 | 184 | writeData(height()-1); |
| Dzhafarkhanov | 17:56015e4834e6 | 185 | writeCommand(SSD1351_CMD_WRITERAM); |
| Dzhafarkhanov | 17:56015e4834e6 | 186 | } |
| nkhorman | 9:ddb97c9850a2 | 187 | |
| Dzhafarkhanov | 17:56015e4834e6 | 188 | uint16_t Adafruit_SSD1351::Color565(uint8_t r, uint8_t g, uint8_t b) { |
| Dzhafarkhanov | 17:56015e4834e6 | 189 | uint16_t c; |
| Dzhafarkhanov | 17:56015e4834e6 | 190 | c = r >> 3; |
| Dzhafarkhanov | 17:56015e4834e6 | 191 | c <<= 6; |
| Dzhafarkhanov | 17:56015e4834e6 | 192 | c |= g >> 2; |
| Dzhafarkhanov | 17:56015e4834e6 | 193 | c <<= 5; |
| Dzhafarkhanov | 17:56015e4834e6 | 194 | c |= b >> 3; |
| Dzhafarkhanov | 17:56015e4834e6 | 195 | |
| Dzhafarkhanov | 17:56015e4834e6 | 196 | return c; |
| Dzhafarkhanov | 17:56015e4834e6 | 197 | } |
| Dzhafarkhanov | 17:56015e4834e6 | 198 | |
| Dzhafarkhanov | 17:56015e4834e6 | 199 | void Adafruit_SSD1351::fillScreen(uint16_t fillcolor) { |
| Dzhafarkhanov | 17:56015e4834e6 | 200 | fillRect(0, 0, width(), height(), fillcolor); |
| nkhorman | 0:c3dcd4c4983a | 201 | } |
| nkhorman | 0:c3dcd4c4983a | 202 | |
| Dzhafarkhanov | 17:56015e4834e6 | 203 | // Draw a filled rectangle with no rotation. |
| Dzhafarkhanov | 17:56015e4834e6 | 204 | void Adafruit_SSD1351::rawFillRect(uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint16_t fillcolor) { |
| Dzhafarkhanov | 17:56015e4834e6 | 205 | // Bounds check |
| Dzhafarkhanov | 17:56015e4834e6 | 206 | if ((x >= width()) || (y >= height())) |
| Dzhafarkhanov | 17:56015e4834e6 | 207 | return; |
| Dzhafarkhanov | 17:56015e4834e6 | 208 | |
| Dzhafarkhanov | 17:56015e4834e6 | 209 | // Y bounds check |
| Dzhafarkhanov | 17:56015e4834e6 | 210 | if (y+h > height()) |
| Dzhafarkhanov | 17:56015e4834e6 | 211 | { |
| Dzhafarkhanov | 17:56015e4834e6 | 212 | h = height() - y - 1; |
| Dzhafarkhanov | 17:56015e4834e6 | 213 | } |
| Dzhafarkhanov | 17:56015e4834e6 | 214 | |
| Dzhafarkhanov | 17:56015e4834e6 | 215 | // X bounds check |
| Dzhafarkhanov | 17:56015e4834e6 | 216 | if (x+w > width()) |
| Dzhafarkhanov | 17:56015e4834e6 | 217 | { |
| Dzhafarkhanov | 17:56015e4834e6 | 218 | w = width() - x - 1; |
| Dzhafarkhanov | 17:56015e4834e6 | 219 | } |
| Dzhafarkhanov | 17:56015e4834e6 | 220 | |
| Dzhafarkhanov | 17:56015e4834e6 | 221 | /* |
| Dzhafarkhanov | 17:56015e4834e6 | 222 | Serial.print(x); Serial.print(", "); |
| Dzhafarkhanov | 17:56015e4834e6 | 223 | Serial.print(y); Serial.print(", "); |
| Dzhafarkhanov | 17:56015e4834e6 | 224 | Serial.print(w); Serial.print(", "); |
| Dzhafarkhanov | 17:56015e4834e6 | 225 | Serial.print(h); Serial.println(", "); |
| Dzhafarkhanov | 17:56015e4834e6 | 226 | */ |
| Dzhafarkhanov | 17:56015e4834e6 | 227 | |
| Dzhafarkhanov | 17:56015e4834e6 | 228 | // set location |
| Dzhafarkhanov | 17:56015e4834e6 | 229 | writeCommand(SSD1351_CMD_SETCOLUMN); |
| Dzhafarkhanov | 17:56015e4834e6 | 230 | writeData(x); |
| Dzhafarkhanov | 17:56015e4834e6 | 231 | writeData(x+w-1); |
| Dzhafarkhanov | 17:56015e4834e6 | 232 | writeCommand(SSD1351_CMD_SETROW); |
| Dzhafarkhanov | 17:56015e4834e6 | 233 | writeData(y); |
| Dzhafarkhanov | 17:56015e4834e6 | 234 | writeData(y+h-1); |
| Dzhafarkhanov | 17:56015e4834e6 | 235 | // fill! |
| Dzhafarkhanov | 17:56015e4834e6 | 236 | writeCommand(SSD1351_CMD_WRITERAM); |
| Dzhafarkhanov | 17:56015e4834e6 | 237 | |
| Dzhafarkhanov | 17:56015e4834e6 | 238 | for (uint16_t i=0; i < w*h; i++) { |
| Dzhafarkhanov | 17:56015e4834e6 | 239 | writeData(fillcolor >> 8); |
| Dzhafarkhanov | 17:56015e4834e6 | 240 | writeData(fillcolor); |
| Dzhafarkhanov | 17:56015e4834e6 | 241 | } |
| Dzhafarkhanov | 17:56015e4834e6 | 242 | } |
| Dzhafarkhanov | 17:56015e4834e6 | 243 | |
| Dzhafarkhanov | 17:56015e4834e6 | 244 | |
| Dzhafarkhanov | 17:56015e4834e6 | 245 | void Adafruit_SSD1351::fillRect(uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint16_t fillcolor) { |
| Dzhafarkhanov | 17:56015e4834e6 | 246 | // Transform x and y based on current rotation. |
| Dzhafarkhanov | 17:56015e4834e6 | 247 | switch (getRotation()) { |
| Dzhafarkhanov | 17:56015e4834e6 | 248 | case 0: // No rotation |
| Dzhafarkhanov | 17:56015e4834e6 | 249 | rawFillRect(x, y, w, h, fillcolor); |
| Dzhafarkhanov | 17:56015e4834e6 | 250 | break; |
| Dzhafarkhanov | 17:56015e4834e6 | 251 | case 1: // Rotated 90 degrees clockwise. |
| Dzhafarkhanov | 17:56015e4834e6 | 252 | swap(x, y); |
| Dzhafarkhanov | 17:56015e4834e6 | 253 | x = _rawWidth - x - h; |
| Dzhafarkhanov | 17:56015e4834e6 | 254 | rawFillRect(x, y, h, w, fillcolor); |
| Dzhafarkhanov | 17:56015e4834e6 | 255 | break; |
| Dzhafarkhanov | 17:56015e4834e6 | 256 | case 2: // Rotated 180 degrees clockwise. |
| Dzhafarkhanov | 17:56015e4834e6 | 257 | x = _rawWidth - x - w; |
| Dzhafarkhanov | 17:56015e4834e6 | 258 | y = _rawHeight - y - h; |
| Dzhafarkhanov | 17:56015e4834e6 | 259 | rawFillRect(x, y, w, h, fillcolor); |
| Dzhafarkhanov | 17:56015e4834e6 | 260 | break; |
| Dzhafarkhanov | 17:56015e4834e6 | 261 | case 3: // Rotated 270 degrees clockwise. |
| Dzhafarkhanov | 17:56015e4834e6 | 262 | swap(x, y); |
| Dzhafarkhanov | 17:56015e4834e6 | 263 | y = _rawHeight - y - w; |
| Dzhafarkhanov | 17:56015e4834e6 | 264 | rawFillRect(x, y, h, w, fillcolor); |
| Dzhafarkhanov | 17:56015e4834e6 | 265 | break; |
| Dzhafarkhanov | 17:56015e4834e6 | 266 | } |
| Dzhafarkhanov | 17:56015e4834e6 | 267 | } |
| Dzhafarkhanov | 17:56015e4834e6 | 268 | |
| Dzhafarkhanov | 17:56015e4834e6 | 269 | // Draw a horizontal line ignoring any screen rotation. |
| Dzhafarkhanov | 17:56015e4834e6 | 270 | void Adafruit_SSD1351::rawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color) { |
| Dzhafarkhanov | 17:56015e4834e6 | 271 | // Bounds check |
| Dzhafarkhanov | 17:56015e4834e6 | 272 | if ((x >= width()) || (y >= height())) |
| Dzhafarkhanov | 17:56015e4834e6 | 273 | return; |
| Dzhafarkhanov | 17:56015e4834e6 | 274 | |
| Dzhafarkhanov | 17:56015e4834e6 | 275 | // X bounds check |
| Dzhafarkhanov | 17:56015e4834e6 | 276 | if (x+w > width()) |
| Dzhafarkhanov | 17:56015e4834e6 | 277 | { |
| Dzhafarkhanov | 17:56015e4834e6 | 278 | w = width() - x - 1; |
| Dzhafarkhanov | 17:56015e4834e6 | 279 | } |
| Dzhafarkhanov | 17:56015e4834e6 | 280 | |
| Dzhafarkhanov | 17:56015e4834e6 | 281 | if (w < 0) return; |
| Dzhafarkhanov | 17:56015e4834e6 | 282 | |
| Dzhafarkhanov | 17:56015e4834e6 | 283 | // set location |
| Dzhafarkhanov | 17:56015e4834e6 | 284 | writeCommand(SSD1351_CMD_SETCOLUMN); |
| Dzhafarkhanov | 17:56015e4834e6 | 285 | writeData(x); |
| Dzhafarkhanov | 17:56015e4834e6 | 286 | writeData(x+w-1); |
| Dzhafarkhanov | 17:56015e4834e6 | 287 | writeCommand(SSD1351_CMD_SETROW); |
| Dzhafarkhanov | 17:56015e4834e6 | 288 | writeData(y); |
| Dzhafarkhanov | 17:56015e4834e6 | 289 | writeData(y); |
| Dzhafarkhanov | 17:56015e4834e6 | 290 | // fill! |
| Dzhafarkhanov | 17:56015e4834e6 | 291 | writeCommand(SSD1351_CMD_WRITERAM); |
| Dzhafarkhanov | 17:56015e4834e6 | 292 | |
| Dzhafarkhanov | 17:56015e4834e6 | 293 | for (uint16_t i=0; i < w; i++) { |
| Dzhafarkhanov | 17:56015e4834e6 | 294 | writeData(color >> 8); |
| Dzhafarkhanov | 17:56015e4834e6 | 295 | writeData(color); |
| Dzhafarkhanov | 17:56015e4834e6 | 296 | } |
| Dzhafarkhanov | 17:56015e4834e6 | 297 | } |
| Dzhafarkhanov | 17:56015e4834e6 | 298 | |
| Dzhafarkhanov | 17:56015e4834e6 | 299 | // Draw a vertical line ignoring any screen rotation. |
| Dzhafarkhanov | 17:56015e4834e6 | 300 | void Adafruit_SSD1351::rawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color) { |
| Dzhafarkhanov | 17:56015e4834e6 | 301 | // Bounds check |
| Dzhafarkhanov | 17:56015e4834e6 | 302 | if ((x >= width()) || (y >= height())) |
| Dzhafarkhanov | 17:56015e4834e6 | 303 | return; |
| Dzhafarkhanov | 17:56015e4834e6 | 304 | |
| Dzhafarkhanov | 17:56015e4834e6 | 305 | // X bounds check |
| Dzhafarkhanov | 17:56015e4834e6 | 306 | if (y+h > height()) |
| Dzhafarkhanov | 17:56015e4834e6 | 307 | { |
| Dzhafarkhanov | 17:56015e4834e6 | 308 | h = height() - y - 1; |
| Dzhafarkhanov | 17:56015e4834e6 | 309 | } |
| Dzhafarkhanov | 17:56015e4834e6 | 310 | |
| Dzhafarkhanov | 17:56015e4834e6 | 311 | if (h < 0) return; |
| Dzhafarkhanov | 17:56015e4834e6 | 312 | |
| Dzhafarkhanov | 17:56015e4834e6 | 313 | // set location |
| Dzhafarkhanov | 17:56015e4834e6 | 314 | writeCommand(SSD1351_CMD_SETCOLUMN); |
| Dzhafarkhanov | 17:56015e4834e6 | 315 | writeData(x); |
| Dzhafarkhanov | 17:56015e4834e6 | 316 | writeData(x); |
| Dzhafarkhanov | 17:56015e4834e6 | 317 | writeCommand(SSD1351_CMD_SETROW); |
| Dzhafarkhanov | 17:56015e4834e6 | 318 | writeData(y); |
| Dzhafarkhanov | 17:56015e4834e6 | 319 | writeData(y+h-1); |
| Dzhafarkhanov | 17:56015e4834e6 | 320 | // fill! |
| Dzhafarkhanov | 17:56015e4834e6 | 321 | writeCommand(SSD1351_CMD_WRITERAM); |
| Dzhafarkhanov | 17:56015e4834e6 | 322 | |
| Dzhafarkhanov | 17:56015e4834e6 | 323 | for (uint16_t i=0; i < h; i++) { |
| Dzhafarkhanov | 17:56015e4834e6 | 324 | writeData(color >> 8); |
| Dzhafarkhanov | 17:56015e4834e6 | 325 | writeData(color); |
| Dzhafarkhanov | 17:56015e4834e6 | 326 | } |
| Dzhafarkhanov | 17:56015e4834e6 | 327 | } |
| Dzhafarkhanov | 17:56015e4834e6 | 328 | |
| Dzhafarkhanov | 17:56015e4834e6 | 329 | void Adafruit_SSD1351::drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color) { |
| Dzhafarkhanov | 17:56015e4834e6 | 330 | // Transform x and y based on current rotation. |
| Dzhafarkhanov | 17:56015e4834e6 | 331 | switch (getRotation()) { |
| Dzhafarkhanov | 17:56015e4834e6 | 332 | case 0: // No rotation |
| Dzhafarkhanov | 17:56015e4834e6 | 333 | rawFastVLine(x, y, h, color); |
| Dzhafarkhanov | 17:56015e4834e6 | 334 | break; |
| Dzhafarkhanov | 17:56015e4834e6 | 335 | case 1: // Rotated 90 degrees clockwise. |
| Dzhafarkhanov | 17:56015e4834e6 | 336 | swap(x, y); |
| Dzhafarkhanov | 17:56015e4834e6 | 337 | x = _rawWidth - x - h; |
| Dzhafarkhanov | 17:56015e4834e6 | 338 | rawFastHLine(x, y, h, color); |
| Dzhafarkhanov | 17:56015e4834e6 | 339 | break; |
| Dzhafarkhanov | 17:56015e4834e6 | 340 | case 2: // Rotated 180 degrees clockwise. |
| Dzhafarkhanov | 17:56015e4834e6 | 341 | x = _rawWidth - x - 1; |
| Dzhafarkhanov | 17:56015e4834e6 | 342 | y = _rawHeight - y - h; |
| Dzhafarkhanov | 17:56015e4834e6 | 343 | rawFastVLine(x, y, h, color); |
| Dzhafarkhanov | 17:56015e4834e6 | 344 | break; |
| Dzhafarkhanov | 17:56015e4834e6 | 345 | case 3: // Rotated 270 degrees clockwise. |
| Dzhafarkhanov | 17:56015e4834e6 | 346 | swap(x, y); |
| Dzhafarkhanov | 17:56015e4834e6 | 347 | y = _rawHeight - y - 1; |
| Dzhafarkhanov | 17:56015e4834e6 | 348 | rawFastHLine(x, y, h, color); |
| Dzhafarkhanov | 17:56015e4834e6 | 349 | break; |
| Dzhafarkhanov | 17:56015e4834e6 | 350 | } |
| Dzhafarkhanov | 17:56015e4834e6 | 351 | } |
| Dzhafarkhanov | 17:56015e4834e6 | 352 | |
| Dzhafarkhanov | 17:56015e4834e6 | 353 | void Adafruit_SSD1351::drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color) { |
| Dzhafarkhanov | 17:56015e4834e6 | 354 | // Transform x and y based on current rotation. |
| Dzhafarkhanov | 17:56015e4834e6 | 355 | switch (getRotation()) { |
| Dzhafarkhanov | 17:56015e4834e6 | 356 | case 0: // No rotation. |
| Dzhafarkhanov | 17:56015e4834e6 | 357 | rawFastHLine(x, y, w, color); |
| Dzhafarkhanov | 17:56015e4834e6 | 358 | break; |
| Dzhafarkhanov | 17:56015e4834e6 | 359 | case 1: // Rotated 90 degrees clockwise. |
| Dzhafarkhanov | 17:56015e4834e6 | 360 | swap(x, y); |
| Dzhafarkhanov | 17:56015e4834e6 | 361 | x = _rawWidth - x - 1; |
| Dzhafarkhanov | 17:56015e4834e6 | 362 | rawFastVLine(x, y, w, color); |
| Dzhafarkhanov | 17:56015e4834e6 | 363 | break; |
| Dzhafarkhanov | 17:56015e4834e6 | 364 | case 2: // Rotated 180 degrees clockwise. |
| Dzhafarkhanov | 17:56015e4834e6 | 365 | x = _rawWidth - x - w; |
| Dzhafarkhanov | 17:56015e4834e6 | 366 | y = _rawHeight - y - 1; |
| Dzhafarkhanov | 17:56015e4834e6 | 367 | rawFastHLine(x, y, w, color); |
| Dzhafarkhanov | 17:56015e4834e6 | 368 | break; |
| Dzhafarkhanov | 17:56015e4834e6 | 369 | case 3: // Rotated 270 degrees clockwise. |
| Dzhafarkhanov | 17:56015e4834e6 | 370 | swap(x, y); |
| Dzhafarkhanov | 17:56015e4834e6 | 371 | y = _rawHeight - y - w; |
| Dzhafarkhanov | 17:56015e4834e6 | 372 | rawFastVLine(x, y, w, color); |
| Dzhafarkhanov | 17:56015e4834e6 | 373 | break; |
| Dzhafarkhanov | 17:56015e4834e6 | 374 | } |
| Dzhafarkhanov | 17:56015e4834e6 | 375 | } |
| Dzhafarkhanov | 17:56015e4834e6 | 376 | |
| Dzhafarkhanov | 17:56015e4834e6 | 377 | |
| Dzhafarkhanov | 17:56015e4834e6 | 378 | void Adafruit_SSD1351::setContrastControl(uint8_t contrast) { |
| Dzhafarkhanov | 17:56015e4834e6 | 379 | |
| Dzhafarkhanov | 17:56015e4834e6 | 380 | writeCommand(SSD1351_CMD_CONTRASTMASTER); |
| Dzhafarkhanov | 17:56015e4834e6 | 381 | //writeData(0x0F); |
| Dzhafarkhanov | 17:56015e4834e6 | 382 | writeData(contrast); |
| Dzhafarkhanov | 17:56015e4834e6 | 383 | |
| Dzhafarkhanov | 17:56015e4834e6 | 384 | } |
| Dzhafarkhanov | 17:56015e4834e6 | 385 | |
| Dzhafarkhanov | 17:56015e4834e6 | 386 | |
| Dzhafarkhanov | 17:56015e4834e6 | 387 | |
| Dzhafarkhanov | 17:56015e4834e6 | 388 | |
| Dzhafarkhanov | 17:56015e4834e6 | 389 | |
| Dzhafarkhanov | 17:56015e4834e6 | 390 | |
| nkhorman | 9:ddb97c9850a2 | 391 | // Set a single pixel |
| Dzhafarkhanov | 17:56015e4834e6 | 392 | void Adafruit_SSD1351::drawPixel(int16_t x, int16_t y, uint16_t color) |
| nkhorman | 0:c3dcd4c4983a | 393 | { |
| Dzhafarkhanov | 17:56015e4834e6 | 394 | if ((x < 0) || (x >= width()) || (y < 0) || (y >= height())) // Bounds check. |
| nkhorman | 0:c3dcd4c4983a | 395 | return; |
| nkhorman | 0:c3dcd4c4983a | 396 | |
| nkhorman | 0:c3dcd4c4983a | 397 | // check rotation, move pixel around if necessary |
| nkhorman | 0:c3dcd4c4983a | 398 | switch (getRotation()) |
| nkhorman | 0:c3dcd4c4983a | 399 | { |
| Dzhafarkhanov | 17:56015e4834e6 | 400 | case 1: // Rotated 90 degrees clockwise. |
| nkhorman | 0:c3dcd4c4983a | 401 | swap(x, y); |
| nkhorman | 0:c3dcd4c4983a | 402 | x = _rawWidth - x - 1; |
| nkhorman | 0:c3dcd4c4983a | 403 | break; |
| Dzhafarkhanov | 17:56015e4834e6 | 404 | case 2: // Rotated 180 degrees clockwise. |
| nkhorman | 0:c3dcd4c4983a | 405 | x = _rawWidth - x - 1; |
| nkhorman | 0:c3dcd4c4983a | 406 | y = _rawHeight - y - 1; |
| nkhorman | 0:c3dcd4c4983a | 407 | break; |
| Dzhafarkhanov | 17:56015e4834e6 | 408 | case 3: // Rotated 270 degrees clockwise. |
| nkhorman | 0:c3dcd4c4983a | 409 | swap(x, y); |
| nkhorman | 0:c3dcd4c4983a | 410 | y = _rawHeight - y - 1; |
| nkhorman | 0:c3dcd4c4983a | 411 | break; |
| nkhorman | 0:c3dcd4c4983a | 412 | } |
| nkhorman | 0:c3dcd4c4983a | 413 | |
| nkhorman | 0:c3dcd4c4983a | 414 | { |
| Dzhafarkhanov | 17:56015e4834e6 | 415 | |
| Dzhafarkhanov | 17:56015e4834e6 | 416 | } |
| nkhorman | 0:c3dcd4c4983a | 417 | |
| Dzhafarkhanov | 17:56015e4834e6 | 418 | goTo(x, y); |
| Dzhafarkhanov | 17:56015e4834e6 | 419 | writeData(color >> 8) ; |
| Dzhafarkhanov | 17:56015e4834e6 | 420 | writeData(color); |
| nkhorman | 0:c3dcd4c4983a | 421 | |
| nkhorman | 0:c3dcd4c4983a | 422 | } |
| nkhorman | 0:c3dcd4c4983a | 423 | |
| Dzhafarkhanov | 17:56015e4834e6 | 424 | |
| Dzhafarkhanov | 17:56015e4834e6 | 425 | |
| Dzhafarkhanov | 17:56015e4834e6 | 426 | |
| Dzhafarkhanov | 17:56015e4834e6 | 427 | |
| Dzhafarkhanov | 17:56015e4834e6 | 428 | |
| Dzhafarkhanov | 17:56015e4834e6 | 429 | |
| Dzhafarkhanov | 17:56015e4834e6 | 430 | |
| Dzhafarkhanov | 17:56015e4834e6 | 431 |
