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.h@17:56015e4834e6, 2016-02-24 (annotated)
- Committer:
- Dzhafarkhanov
- Date:
- Wed Feb 24 12:24:42 2016 +0000
- Revision:
- 17:56015e4834e6
- Parent:
- Adafruit_SSD1306.h@15:77feec1c0684
SSD1351;
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| Dzhafarkhanov | 17:56015e4834e6 | 1 | /*************************************************** |
| Dzhafarkhanov | 17:56015e4834e6 | 2 | This is a library for the 1.5" & 1.27" 16-bit Color OLEDs |
| Dzhafarkhanov | 17:56015e4834e6 | 3 | with SSD1331 driver chip |
| nkhorman | 0:c3dcd4c4983a | 4 | |
| nkhorman | 0:c3dcd4c4983a | 5 | Pick one up today in the adafruit shop! |
| Dzhafarkhanov | 17:56015e4834e6 | 6 | ------> http://www.adafruit.com/products/1431 |
| Dzhafarkhanov | 17:56015e4834e6 | 7 | ------> http://www.adafruit.com/products/1673 |
| nkhorman | 0:c3dcd4c4983a | 8 | |
| Dzhafarkhanov | 17:56015e4834e6 | 9 | These displays use SPI to communicate, 4 or 5 pins are required to |
| Dzhafarkhanov | 17:56015e4834e6 | 10 | interface |
| Dzhafarkhanov | 17:56015e4834e6 | 11 | Adafruit invests time and resources providing this open source code, |
| Dzhafarkhanov | 17:56015e4834e6 | 12 | please support Adafruit and open-source hardware by purchasing |
| Dzhafarkhanov | 17:56015e4834e6 | 13 | products from Adafruit! |
| nkhorman | 0:c3dcd4c4983a | 14 | |
| Dzhafarkhanov | 17:56015e4834e6 | 15 | Written by Limor Fried/Ladyada for Adafruit Industries. |
| Dzhafarkhanov | 17:56015e4834e6 | 16 | BSD license, all text above must be included in any redistribution |
| Dzhafarkhanov | 17:56015e4834e6 | 17 | ****************************************************/ |
| nkhorman | 0:c3dcd4c4983a | 18 | |
| Dzhafarkhanov | 17:56015e4834e6 | 19 | |
| nkhorman | 0:c3dcd4c4983a | 20 | |
| Dzhafarkhanov | 17:56015e4834e6 | 21 | //#ifndef _ADAFRUIT_SSD1351_H_ |
| Dzhafarkhanov | 17:56015e4834e6 | 22 | //#define _ADAFRUIT_SSD1351_H_ |
| nkhorman | 0:c3dcd4c4983a | 23 | |
| nkhorman | 0:c3dcd4c4983a | 24 | #include "mbed.h" |
| nkhorman | 0:c3dcd4c4983a | 25 | #include "Adafruit_GFX.h" |
| nkhorman | 0:c3dcd4c4983a | 26 | |
| nkhorman | 9:ddb97c9850a2 | 27 | #include <vector> |
| nkhorman | 9:ddb97c9850a2 | 28 | #include <algorithm> |
| nkhorman | 0:c3dcd4c4983a | 29 | |
| Dzhafarkhanov | 17:56015e4834e6 | 30 | |
| Dzhafarkhanov | 17:56015e4834e6 | 31 | |
| Dzhafarkhanov | 17:56015e4834e6 | 32 | |
| Dzhafarkhanov | 17:56015e4834e6 | 33 | |
| Dzhafarkhanov | 17:56015e4834e6 | 34 | |
| Dzhafarkhanov | 17:56015e4834e6 | 35 | /* some 16bit RGB color definitions */ |
| Dzhafarkhanov | 17:56015e4834e6 | 36 | enum Color{ |
| Dzhafarkhanov | 17:56015e4834e6 | 37 | Black = 0x0000, /* 0, 0, 0 */ |
| Dzhafarkhanov | 17:56015e4834e6 | 38 | Navy = 0x000F, /* 0, 0, 128 */ |
| Dzhafarkhanov | 17:56015e4834e6 | 39 | DarkGreen = 0x03E0, /* 0, 128, 0 */ |
| Dzhafarkhanov | 17:56015e4834e6 | 40 | DarkCyan = 0x03EF, /* 0, 128, 128 */ |
| Dzhafarkhanov | 17:56015e4834e6 | 41 | Maroon = 0x7800, /* 128, 0, 0 */ |
| Dzhafarkhanov | 17:56015e4834e6 | 42 | Purple = 0x780F, /* 128, 0, 128 */ |
| Dzhafarkhanov | 17:56015e4834e6 | 43 | Olive = 0x7BE0, /* 128, 128, 0 */ |
| Dzhafarkhanov | 17:56015e4834e6 | 44 | LightGrey = 0xC618, /* 192, 192, 192 */ |
| Dzhafarkhanov | 17:56015e4834e6 | 45 | DarkGrey = 0x7BEF, /* 128, 128, 128 */ |
| Dzhafarkhanov | 17:56015e4834e6 | 46 | Blue = 0x001F, /* 0, 0, 255 */ |
| Dzhafarkhanov | 17:56015e4834e6 | 47 | Green = 0x07E0, /* 0, 255, 0 */ |
| Dzhafarkhanov | 17:56015e4834e6 | 48 | Cyan = 0x07FF, /* 0, 255, 255 */ |
| Dzhafarkhanov | 17:56015e4834e6 | 49 | Red = 0xF800, /* 255, 0, 0 */ |
| Dzhafarkhanov | 17:56015e4834e6 | 50 | Magenta = 0xF81F, /* 255, 0, 255 */ |
| Dzhafarkhanov | 17:56015e4834e6 | 51 | Yellow = 0xFFE0, /* 255, 255, 0 */ |
| Dzhafarkhanov | 17:56015e4834e6 | 52 | White = 0xFFFF, /* 255, 255, 255 */ |
| Dzhafarkhanov | 17:56015e4834e6 | 53 | Orange = 0xFD20, /* 255, 165, 0 */ |
| Dzhafarkhanov | 17:56015e4834e6 | 54 | GreenYellow = 0xAFE5, /* 173, 255, 47 */ |
| Dzhafarkhanov | 17:56015e4834e6 | 55 | Pink = 0xF81F |
| Dzhafarkhanov | 17:56015e4834e6 | 56 | }; |
| Dzhafarkhanov | 17:56015e4834e6 | 57 | |
| Dzhafarkhanov | 17:56015e4834e6 | 58 | |
| nkhorman | 9:ddb97c9850a2 | 59 | // A DigitalOut sub-class that provides a constructed default state |
| nkhorman | 9:ddb97c9850a2 | 60 | class DigitalOut2 : public DigitalOut |
| nkhorman | 9:ddb97c9850a2 | 61 | { |
| nkhorman | 9:ddb97c9850a2 | 62 | public: |
| nkhorman | 9:ddb97c9850a2 | 63 | DigitalOut2(PinName pin, bool active = false) : DigitalOut(pin) { write(active); }; |
| nkhorman | 9:ddb97c9850a2 | 64 | DigitalOut2& operator= (int value) { write(value); return *this; }; |
| nkhorman | 9:ddb97c9850a2 | 65 | DigitalOut2& operator= (DigitalOut2& rhs) { write(rhs.read()); return *this; }; |
| nkhorman | 9:ddb97c9850a2 | 66 | operator int() { return read(); }; |
| nkhorman | 9:ddb97c9850a2 | 67 | }; |
| Neal Horman |
6:1be3e3b46eb7 | 68 | |
| Dzhafarkhanov | 17:56015e4834e6 | 69 | |
| nkhorman | 0:c3dcd4c4983a | 70 | |
| Dzhafarkhanov | 17:56015e4834e6 | 71 | |
| Dzhafarkhanov | 17:56015e4834e6 | 72 | /** The pure base class for the SSD1351 display driver. |
| nkhorman | 11:86909e6db3c8 | 73 | * |
| Dzhafarkhanov | 17:56015e4834e6 | 74 | |
| nkhorman | 11:86909e6db3c8 | 75 | */ |
| Dzhafarkhanov | 17:56015e4834e6 | 76 | class Adafruit_SSD1351 : public Adafruit_GFX |
| nkhorman | 0:c3dcd4c4983a | 77 | { |
| nkhorman | 9:ddb97c9850a2 | 78 | public: |
| Dzhafarkhanov | 17:56015e4834e6 | 79 | Adafruit_SSD1351(PinName RST, uint8_t rawHeight = 96, uint8_t rawWidth = 128) |
| nkhorman | 9:ddb97c9850a2 | 80 | : Adafruit_GFX(rawWidth,rawHeight) |
| nkhorman | 9:ddb97c9850a2 | 81 | , rst(RST,false) |
| nkhorman | 11:86909e6db3c8 | 82 | { |
| Dzhafarkhanov | 17:56015e4834e6 | 83 | |
| Dzhafarkhanov | 17:56015e4834e6 | 84 | |
| Dzhafarkhanov | 17:56015e4834e6 | 85 | |
| nkhorman | 11:86909e6db3c8 | 86 | }; |
| nkhorman | 9:ddb97c9850a2 | 87 | |
| Dzhafarkhanov | 17:56015e4834e6 | 88 | void begin(); |
| Dzhafarkhanov | 17:56015e4834e6 | 89 | void goTo(int x, int y); |
| Dzhafarkhanov | 17:56015e4834e6 | 90 | uint16_t Color565(uint8_t r, uint8_t g, uint8_t b); |
| Dzhafarkhanov | 17:56015e4834e6 | 91 | virtual void fillScreen(uint16_t fillcolor); |
| Dzhafarkhanov | 17:56015e4834e6 | 92 | virtual void rawFillRect(uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint16_t fillcolor); |
| Dzhafarkhanov | 17:56015e4834e6 | 93 | void fillRect(uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint16_t fillcolor); |
| Dzhafarkhanov | 17:56015e4834e6 | 94 | void rawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color); |
| Dzhafarkhanov | 17:56015e4834e6 | 95 | void rawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color); |
| Dzhafarkhanov | 17:56015e4834e6 | 96 | virtual void drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color); |
| Dzhafarkhanov | 17:56015e4834e6 | 97 | virtual void drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color); |
| Dzhafarkhanov | 17:56015e4834e6 | 98 | void setContrastControl(uint8_t contrast); |
| Dzhafarkhanov | 17:56015e4834e6 | 99 | |
| Dzhafarkhanov | 17:56015e4834e6 | 100 | |
| Dzhafarkhanov | 17:56015e4834e6 | 101 | virtual void invert(bool v); |
| Dzhafarkhanov | 17:56015e4834e6 | 102 | |
| nkhorman | 11:86909e6db3c8 | 103 | |
| nkhorman | 11:86909e6db3c8 | 104 | // These must be implemented in the derived transport driver |
| Dzhafarkhanov | 17:56015e4834e6 | 105 | virtual void writeCommand(uint8_t c) = 0; |
| Dzhafarkhanov | 17:56015e4834e6 | 106 | virtual void writeData(uint8_t c) = 0; |
| nkhorman | 11:86909e6db3c8 | 107 | virtual void drawPixel(int16_t x, int16_t y, uint16_t color); |
| nkhorman | 11:86909e6db3c8 | 108 | |
| nkhorman | 9:ddb97c9850a2 | 109 | |
| nkhorman | 9:ddb97c9850a2 | 110 | protected: |
| Dzhafarkhanov | 17:56015e4834e6 | 111 | |
| nkhorman | 9:ddb97c9850a2 | 112 | DigitalOut2 rst; |
| nkhorman | 9:ddb97c9850a2 | 113 | |
| Dzhafarkhanov | 17:56015e4834e6 | 114 | |
| Dzhafarkhanov | 17:56015e4834e6 | 115 | |
| nkhorman | 9:ddb97c9850a2 | 116 | }; |
| nkhorman | 9:ddb97c9850a2 | 117 | |
| nkhorman | 11:86909e6db3c8 | 118 | |
| Dzhafarkhanov | 17:56015e4834e6 | 119 | /** This is the SPI SSD1351 display driver transport class |
| nkhorman | 11:86909e6db3c8 | 120 | * |
| nkhorman | 11:86909e6db3c8 | 121 | */ |
| Dzhafarkhanov | 17:56015e4834e6 | 122 | class Adafruit_SSD1351_Spi : public Adafruit_SSD1351 |
| nkhorman | 9:ddb97c9850a2 | 123 | { |
| nkhorman | 9:ddb97c9850a2 | 124 | public: |
| Dzhafarkhanov | 17:56015e4834e6 | 125 | /** Create a SSD1351 SPI transport display driver instance with the specified DC, RST, and CS pins, as well as the display dimentions |
| nkhorman | 11:86909e6db3c8 | 126 | * |
| nkhorman | 11:86909e6db3c8 | 127 | * Required parameters |
| nkhorman | 11:86909e6db3c8 | 128 | * @param spi - a reference to an initialized SPI object |
| nkhorman | 11:86909e6db3c8 | 129 | * @param DC (Data/Command) pin name |
| nkhorman | 11:86909e6db3c8 | 130 | * @param RST (Reset) pin name |
| nkhorman | 11:86909e6db3c8 | 131 | * @param CS (Chip Select) pin name |
| nkhorman | 11:86909e6db3c8 | 132 | * |
| nkhorman | 11:86909e6db3c8 | 133 | * Optional parameters |
| Dzhafarkhanov | 17:56015e4834e6 | 134 | * @param rawHeight - the vertical number of pixels for the display, defaults to 96 |
| nkhorman | 11:86909e6db3c8 | 135 | * @param rawWidth - the horizonal number of pixels for the display, defaults to 128 |
| nkhorman | 11:86909e6db3c8 | 136 | */ |
| Dzhafarkhanov | 17:56015e4834e6 | 137 | Adafruit_SSD1351_Spi(SPI &spi, PinName DC, PinName RST, PinName CS, uint8_t rawHieght = 96, uint8_t rawWidth = 128) |
| Dzhafarkhanov | 17:56015e4834e6 | 138 | : Adafruit_SSD1351(RST, rawHieght, rawWidth) |
| nkhorman | 9:ddb97c9850a2 | 139 | , cs(CS,true) |
| Dzhafarkhanov | 17:56015e4834e6 | 140 | , dc(DC,false) |
| nkhorman | 9:ddb97c9850a2 | 141 | , mspi(spi) |
| nkhorman | 9:ddb97c9850a2 | 142 | { |
| nkhorman | 9:ddb97c9850a2 | 143 | begin(); |
| Dzhafarkhanov | 17:56015e4834e6 | 144 | |
| Dzhafarkhanov | 17:56015e4834e6 | 145 | |
| nkhorman | 9:ddb97c9850a2 | 146 | }; |
| nkhorman | 9:ddb97c9850a2 | 147 | |
| Dzhafarkhanov | 17:56015e4834e6 | 148 | virtual void writeCommand(uint8_t c) |
| nkhorman | 9:ddb97c9850a2 | 149 | { |
| Dzhafarkhanov | 17:56015e4834e6 | 150 | |
| Dzhafarkhanov | 17:56015e4834e6 | 151 | dc = 0; |
| nkhorman | 9:ddb97c9850a2 | 152 | cs = 0; |
| nkhorman | 9:ddb97c9850a2 | 153 | mspi.write(c); |
| nkhorman | 9:ddb97c9850a2 | 154 | cs = 1; |
| nkhorman | 9:ddb97c9850a2 | 155 | }; |
| nkhorman | 9:ddb97c9850a2 | 156 | |
| Dzhafarkhanov | 17:56015e4834e6 | 157 | virtual void writeData(uint8_t c) |
| nkhorman | 9:ddb97c9850a2 | 158 | { |
| Dzhafarkhanov | 17:56015e4834e6 | 159 | |
| Dzhafarkhanov | 17:56015e4834e6 | 160 | dc = 1; |
| Dzhafarkhanov | 17:56015e4834e6 | 161 | cs = 0; |
| Dzhafarkhanov | 17:56015e4834e6 | 162 | |
| Dzhafarkhanov | 17:56015e4834e6 | 163 | mspi.write(c); |
| Dzhafarkhanov | 17:56015e4834e6 | 164 | |
| Dzhafarkhanov | 17:56015e4834e6 | 165 | cs = 1; |
| nkhorman | 9:ddb97c9850a2 | 166 | }; |
| nkhorman | 9:ddb97c9850a2 | 167 | |
| Dzhafarkhanov | 17:56015e4834e6 | 168 | |
| Dzhafarkhanov | 17:56015e4834e6 | 169 | protected: |
| Dzhafarkhanov | 17:56015e4834e6 | 170 | |
| nkhorman | 9:ddb97c9850a2 | 171 | DigitalOut2 cs, dc; |
| nkhorman | 9:ddb97c9850a2 | 172 | SPI &mspi; |
| nkhorman | 9:ddb97c9850a2 | 173 | }; |
| nkhorman | 9:ddb97c9850a2 | 174 |
