Aitendo OLED device driver library.
Dependents: AitendoOLED_TestProgram
AitendoOLED.cpp@2:74c60a959299, 2010-12-19 (annotated)
- Committer:
- shintamainjp
- Date:
- Sun Dec 19 07:46:13 2010 +0000
- Revision:
- 2:74c60a959299
- Parent:
- 1:4b819d5ea905
Bug fixed. The status bit 7 of the resister is not mean busy. It\s just a queue status.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
shintamainjp | 0:5062b7730235 | 1 | /** |
shintamainjp | 0:5062b7730235 | 2 | * ============================================================================= |
shintamainjp | 2:74c60a959299 | 3 | * Aitendo OLED device driver library. (Version 0.0.2) |
shintamainjp | 0:5062b7730235 | 4 | * |
shintamainjp | 0:5062b7730235 | 5 | * [The product] |
shintamainjp | 0:5062b7730235 | 6 | * OLED-2P-095BWNN-SPI : http://www.aitendo.co.jp/product/2099 |
shintamainjp | 0:5062b7730235 | 7 | * ALO-095BWNN-J9 : http://www.aitendo.co.jp/product/1449 |
shintamainjp | 0:5062b7730235 | 8 | * |
shintamainjp | 0:5062b7730235 | 9 | * [References] |
shintamainjp | 0:5062b7730235 | 10 | * http://serdisplib.sourceforge.net/ser/doc/Treiber_IC-SSD1332_OLED_96x64_COLOR.pdf |
shintamainjp | 0:5062b7730235 | 11 | * ============================================================================= |
shintamainjp | 0:5062b7730235 | 12 | * Copyright (c) 2010 Shinichiro Nakamura (CuBeatSystems) |
shintamainjp | 0:5062b7730235 | 13 | * |
shintamainjp | 0:5062b7730235 | 14 | * Permission is hereby granted, free of charge, to any person obtaining a copy |
shintamainjp | 0:5062b7730235 | 15 | * of this software and associated documentation files (the "Software"), to deal |
shintamainjp | 0:5062b7730235 | 16 | * in the Software without restriction, including without limitation the rights |
shintamainjp | 0:5062b7730235 | 17 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
shintamainjp | 0:5062b7730235 | 18 | * copies of the Software, and to permit persons to whom the Software is |
shintamainjp | 0:5062b7730235 | 19 | * furnished to do so, subject to the following conditions: |
shintamainjp | 0:5062b7730235 | 20 | * |
shintamainjp | 0:5062b7730235 | 21 | * The above copyright notice and this permission notice shall be included in |
shintamainjp | 0:5062b7730235 | 22 | * all copies or substantial portions of the Software. |
shintamainjp | 0:5062b7730235 | 23 | * |
shintamainjp | 0:5062b7730235 | 24 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
shintamainjp | 0:5062b7730235 | 25 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
shintamainjp | 0:5062b7730235 | 26 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
shintamainjp | 0:5062b7730235 | 27 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
shintamainjp | 0:5062b7730235 | 28 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
shintamainjp | 0:5062b7730235 | 29 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
shintamainjp | 0:5062b7730235 | 30 | * THE SOFTWARE. |
shintamainjp | 0:5062b7730235 | 31 | * ============================================================================= |
shintamainjp | 0:5062b7730235 | 32 | */ |
shintamainjp | 0:5062b7730235 | 33 | #include "AitendoOLED.h" |
shintamainjp | 0:5062b7730235 | 34 | |
shintamainjp | 0:5062b7730235 | 35 | #define RES_ENA() io_res = 0 |
shintamainjp | 0:5062b7730235 | 36 | #define RES_DIS() io_res = 1 |
shintamainjp | 0:5062b7730235 | 37 | #define CS_ENA() io_cs = 0 |
shintamainjp | 0:5062b7730235 | 38 | #define CS_DIS() io_cs = 1 |
shintamainjp | 0:5062b7730235 | 39 | #define DC_CMD() io_dc = 0 |
shintamainjp | 0:5062b7730235 | 40 | #define DC_DAT() io_dc = 1 |
shintamainjp | 0:5062b7730235 | 41 | #define SPI_WRITE(a) io_spi.write((a)) |
shintamainjp | 0:5062b7730235 | 42 | #define SPI_READ() io_spi.write(0x00) |
shintamainjp | 2:74c60a959299 | 43 | #define WAIT_US(a) wait_us((a)) |
shintamainjp | 0:5062b7730235 | 44 | #define swap(a,b) {int c=a;a=b;b=c;} |
shintamainjp | 0:5062b7730235 | 45 | |
shintamainjp | 0:5062b7730235 | 46 | /** |
shintamainjp | 0:5062b7730235 | 47 | * Create. |
shintamainjp | 0:5062b7730235 | 48 | * |
shintamainjp | 0:5062b7730235 | 49 | * @param pin_mosi MOSI. |
shintamainjp | 0:5062b7730235 | 50 | * @param pin miso MISO. |
shintamainjp | 0:5062b7730235 | 51 | * @param pin_sclk SCLK. |
shintamainjp | 0:5062b7730235 | 52 | * @param pin_res RES. |
shintamainjp | 0:5062b7730235 | 53 | * @param pin_cs CS. |
shintamainjp | 0:5062b7730235 | 54 | * @param pin_dc DC. |
shintamainjp | 0:5062b7730235 | 55 | */ |
shintamainjp | 0:5062b7730235 | 56 | AitendoOLED::AitendoOLED( |
shintamainjp | 0:5062b7730235 | 57 | PinName pin_mosi, |
shintamainjp | 0:5062b7730235 | 58 | PinName pin_miso, |
shintamainjp | 0:5062b7730235 | 59 | PinName pin_sclk, |
shintamainjp | 0:5062b7730235 | 60 | PinName pin_res, |
shintamainjp | 0:5062b7730235 | 61 | PinName pin_cs, |
shintamainjp | 0:5062b7730235 | 62 | PinName pin_dc) |
shintamainjp | 0:5062b7730235 | 63 | : |
shintamainjp | 0:5062b7730235 | 64 | io_spi(pin_mosi, pin_miso, pin_sclk), |
shintamainjp | 0:5062b7730235 | 65 | io_res(pin_res), |
shintamainjp | 0:5062b7730235 | 66 | io_cs(pin_cs), |
shintamainjp | 0:5062b7730235 | 67 | io_dc(pin_dc) { |
shintamainjp | 0:5062b7730235 | 68 | io_spi.format(8, 0); |
shintamainjp | 0:5062b7730235 | 69 | #if 0 |
shintamainjp | 0:5062b7730235 | 70 | io_spi.frequency(4000000); |
shintamainjp | 0:5062b7730235 | 71 | #else |
shintamainjp | 0:5062b7730235 | 72 | io_spi.frequency(40000000); |
shintamainjp | 0:5062b7730235 | 73 | #endif |
shintamainjp | 0:5062b7730235 | 74 | reset(); |
shintamainjp | 0:5062b7730235 | 75 | } |
shintamainjp | 0:5062b7730235 | 76 | |
shintamainjp | 0:5062b7730235 | 77 | /** |
shintamainjp | 0:5062b7730235 | 78 | * Dispose. |
shintamainjp | 0:5062b7730235 | 79 | */ |
shintamainjp | 0:5062b7730235 | 80 | AitendoOLED::~AitendoOLED() { |
shintamainjp | 0:5062b7730235 | 81 | } |
shintamainjp | 0:5062b7730235 | 82 | |
shintamainjp | 0:5062b7730235 | 83 | /** |
shintamainjp | 0:5062b7730235 | 84 | * Draw pixel. |
shintamainjp | 0:5062b7730235 | 85 | * |
shintamainjp | 0:5062b7730235 | 86 | * @param x X. |
shintamainjp | 0:5062b7730235 | 87 | * @param y Y. |
shintamainjp | 0:5062b7730235 | 88 | * @param c Color. |
shintamainjp | 0:5062b7730235 | 89 | */ |
shintamainjp | 0:5062b7730235 | 90 | void AitendoOLED::drawPixel(int x, int y, Color c) { |
shintamainjp | 0:5062b7730235 | 91 | setColumnAddress(x, x); |
shintamainjp | 0:5062b7730235 | 92 | setRowAddress(y, y); |
shintamainjp | 0:5062b7730235 | 93 | c.b = c.b >> 3; |
shintamainjp | 0:5062b7730235 | 94 | c.g = c.g >> 2; |
shintamainjp | 0:5062b7730235 | 95 | c.r = c.r >> 3; |
shintamainjp | 0:5062b7730235 | 96 | writeData((((c.b << 3) & 0xF8) | ((c.g >> 3) & 0x07))); |
shintamainjp | 0:5062b7730235 | 97 | writeData((((c.g << 5) & 0xE0) | ((c.r >> 0) & 0x1F))); |
shintamainjp | 0:5062b7730235 | 98 | } |
shintamainjp | 0:5062b7730235 | 99 | |
shintamainjp | 0:5062b7730235 | 100 | /** |
shintamainjp | 0:5062b7730235 | 101 | * Draw line. |
shintamainjp | 0:5062b7730235 | 102 | * |
shintamainjp | 0:5062b7730235 | 103 | * @param x1 X1. |
shintamainjp | 0:5062b7730235 | 104 | * @param y1 Y1. |
shintamainjp | 0:5062b7730235 | 105 | * @param x2 X2. |
shintamainjp | 0:5062b7730235 | 106 | * @param y2 Y2. |
shintamainjp | 0:5062b7730235 | 107 | * @param c Color. |
shintamainjp | 0:5062b7730235 | 108 | */ |
shintamainjp | 0:5062b7730235 | 109 | void AitendoOLED::drawLine(int x1, int y1, int x2, int y2, Color c) { |
shintamainjp | 0:5062b7730235 | 110 | #if 0 |
shintamainjp | 0:5062b7730235 | 111 | DC_CMD(); |
shintamainjp | 0:5062b7730235 | 112 | CS_ENA(); |
shintamainjp | 0:5062b7730235 | 113 | SPI_WRITE(0x21); |
shintamainjp | 0:5062b7730235 | 114 | SPI_WRITE(x1); |
shintamainjp | 0:5062b7730235 | 115 | SPI_WRITE(y1); |
shintamainjp | 0:5062b7730235 | 116 | SPI_WRITE(x2); |
shintamainjp | 0:5062b7730235 | 117 | SPI_WRITE(y2); |
shintamainjp | 1:4b819d5ea905 | 118 | SPI_WRITE(c.b >> 3); |
shintamainjp | 1:4b819d5ea905 | 119 | SPI_WRITE(c.g >> 2); |
shintamainjp | 1:4b819d5ea905 | 120 | SPI_WRITE(c.r >> 3); |
shintamainjp | 0:5062b7730235 | 121 | CS_DIS(); |
shintamainjp | 2:74c60a959299 | 122 | WAIT_US(100); |
shintamainjp | 0:5062b7730235 | 123 | #else |
shintamainjp | 0:5062b7730235 | 124 | /* |
shintamainjp | 0:5062b7730235 | 125 | * Bresenham's line algorithm |
shintamainjp | 0:5062b7730235 | 126 | */ |
shintamainjp | 0:5062b7730235 | 127 | bool steep = abs(y2 - y1) > abs(x2 - x1); |
shintamainjp | 0:5062b7730235 | 128 | if (steep) { |
shintamainjp | 0:5062b7730235 | 129 | swap(x1, y1); |
shintamainjp | 0:5062b7730235 | 130 | swap(x2, y2); |
shintamainjp | 0:5062b7730235 | 131 | } |
shintamainjp | 0:5062b7730235 | 132 | if (x1 > x2) { |
shintamainjp | 0:5062b7730235 | 133 | swap(x1, x2); |
shintamainjp | 0:5062b7730235 | 134 | swap(y1, y2); |
shintamainjp | 0:5062b7730235 | 135 | } |
shintamainjp | 0:5062b7730235 | 136 | int deltax = x2 - x1; |
shintamainjp | 0:5062b7730235 | 137 | int deltay = abs(y2 - y1); |
shintamainjp | 0:5062b7730235 | 138 | int error = deltax / 2; |
shintamainjp | 0:5062b7730235 | 139 | int ystep; |
shintamainjp | 0:5062b7730235 | 140 | int y = y1; |
shintamainjp | 0:5062b7730235 | 141 | if (y1 < y2) { |
shintamainjp | 0:5062b7730235 | 142 | ystep = 1; |
shintamainjp | 0:5062b7730235 | 143 | } else { |
shintamainjp | 0:5062b7730235 | 144 | ystep = -1; |
shintamainjp | 0:5062b7730235 | 145 | } |
shintamainjp | 0:5062b7730235 | 146 | for (int x = x1; x <= x2; x++) { |
shintamainjp | 0:5062b7730235 | 147 | if (steep) { |
shintamainjp | 0:5062b7730235 | 148 | drawPixel(y, x, c); |
shintamainjp | 0:5062b7730235 | 149 | } else { |
shintamainjp | 0:5062b7730235 | 150 | drawPixel(x, y, c); |
shintamainjp | 0:5062b7730235 | 151 | } |
shintamainjp | 0:5062b7730235 | 152 | error = error - deltay; |
shintamainjp | 0:5062b7730235 | 153 | if (error < 0) { |
shintamainjp | 0:5062b7730235 | 154 | y = y + ystep; |
shintamainjp | 0:5062b7730235 | 155 | error = error + deltax; |
shintamainjp | 0:5062b7730235 | 156 | } |
shintamainjp | 0:5062b7730235 | 157 | } |
shintamainjp | 0:5062b7730235 | 158 | #endif |
shintamainjp | 0:5062b7730235 | 159 | } |
shintamainjp | 0:5062b7730235 | 160 | |
shintamainjp | 0:5062b7730235 | 161 | /** |
shintamainjp | 0:5062b7730235 | 162 | * Fill box. |
shintamainjp | 0:5062b7730235 | 163 | * |
shintamainjp | 0:5062b7730235 | 164 | * @param x1 X1. |
shintamainjp | 0:5062b7730235 | 165 | * @param y1 Y1. |
shintamainjp | 0:5062b7730235 | 166 | * @param x2 X2. |
shintamainjp | 0:5062b7730235 | 167 | * @param y2 Y2. |
shintamainjp | 0:5062b7730235 | 168 | * @param c1 Color1. |
shintamainjp | 0:5062b7730235 | 169 | * @param c2 Color2. |
shintamainjp | 0:5062b7730235 | 170 | */ |
shintamainjp | 0:5062b7730235 | 171 | void AitendoOLED::fillBox(int x1, int y1, int x2, int y2, Color c1, Color c2) { |
shintamainjp | 0:5062b7730235 | 172 | DC_CMD(); |
shintamainjp | 0:5062b7730235 | 173 | CS_ENA(); |
shintamainjp | 0:5062b7730235 | 174 | SPI_WRITE(0x22); |
shintamainjp | 0:5062b7730235 | 175 | SPI_WRITE(x1); |
shintamainjp | 0:5062b7730235 | 176 | SPI_WRITE(y1); |
shintamainjp | 0:5062b7730235 | 177 | SPI_WRITE(x2); |
shintamainjp | 0:5062b7730235 | 178 | SPI_WRITE(y2); |
shintamainjp | 1:4b819d5ea905 | 179 | SPI_WRITE(c1.b >> 3); |
shintamainjp | 1:4b819d5ea905 | 180 | SPI_WRITE(c1.g >> 2); |
shintamainjp | 1:4b819d5ea905 | 181 | SPI_WRITE(c1.r >> 3); |
shintamainjp | 1:4b819d5ea905 | 182 | SPI_WRITE(c2.b >> 3); |
shintamainjp | 1:4b819d5ea905 | 183 | SPI_WRITE(c2.g >> 2); |
shintamainjp | 1:4b819d5ea905 | 184 | SPI_WRITE(c2.r >> 3); |
shintamainjp | 0:5062b7730235 | 185 | CS_DIS(); |
shintamainjp | 2:74c60a959299 | 186 | WAIT_US(400); |
shintamainjp | 0:5062b7730235 | 187 | } |
shintamainjp | 0:5062b7730235 | 188 | |
shintamainjp | 0:5062b7730235 | 189 | /** |
shintamainjp | 0:5062b7730235 | 190 | * Copy. |
shintamainjp | 0:5062b7730235 | 191 | * |
shintamainjp | 0:5062b7730235 | 192 | * @param x1 X1. |
shintamainjp | 0:5062b7730235 | 193 | * @param y1 Y1. |
shintamainjp | 0:5062b7730235 | 194 | * @param x2 X2. |
shintamainjp | 0:5062b7730235 | 195 | * @param y2 Y2. |
shintamainjp | 0:5062b7730235 | 196 | * @param nx X of the destination. |
shintamainjp | 0:5062b7730235 | 197 | * @param ny Y of the destination. |
shintamainjp | 0:5062b7730235 | 198 | */ |
shintamainjp | 0:5062b7730235 | 199 | void AitendoOLED::copy(int x1, int y1, int x2, int y2, int nx, int ny) { |
shintamainjp | 0:5062b7730235 | 200 | DC_CMD(); |
shintamainjp | 0:5062b7730235 | 201 | CS_ENA(); |
shintamainjp | 0:5062b7730235 | 202 | SPI_WRITE(0x23); |
shintamainjp | 0:5062b7730235 | 203 | SPI_WRITE(x1); |
shintamainjp | 0:5062b7730235 | 204 | SPI_WRITE(y1); |
shintamainjp | 0:5062b7730235 | 205 | SPI_WRITE(x2); |
shintamainjp | 0:5062b7730235 | 206 | SPI_WRITE(y2); |
shintamainjp | 0:5062b7730235 | 207 | SPI_WRITE(nx); |
shintamainjp | 0:5062b7730235 | 208 | SPI_WRITE(ny); |
shintamainjp | 0:5062b7730235 | 209 | CS_DIS(); |
shintamainjp | 2:74c60a959299 | 210 | WAIT_US(400); |
shintamainjp | 0:5062b7730235 | 211 | } |
shintamainjp | 0:5062b7730235 | 212 | |
shintamainjp | 0:5062b7730235 | 213 | /** |
shintamainjp | 0:5062b7730235 | 214 | * Darker. |
shintamainjp | 0:5062b7730235 | 215 | * |
shintamainjp | 0:5062b7730235 | 216 | * @param x1 X1. |
shintamainjp | 0:5062b7730235 | 217 | * @param y1 Y1. |
shintamainjp | 0:5062b7730235 | 218 | * @param x2 X2. |
shintamainjp | 0:5062b7730235 | 219 | * @param y2 Y2. |
shintamainjp | 0:5062b7730235 | 220 | */ |
shintamainjp | 0:5062b7730235 | 221 | void AitendoOLED::darker(int x1, int y1, int x2, int y2) { |
shintamainjp | 0:5062b7730235 | 222 | DC_CMD(); |
shintamainjp | 0:5062b7730235 | 223 | CS_ENA(); |
shintamainjp | 0:5062b7730235 | 224 | SPI_WRITE(0x24); |
shintamainjp | 0:5062b7730235 | 225 | SPI_WRITE(x1); |
shintamainjp | 0:5062b7730235 | 226 | SPI_WRITE(y1); |
shintamainjp | 0:5062b7730235 | 227 | SPI_WRITE(x2); |
shintamainjp | 0:5062b7730235 | 228 | SPI_WRITE(y2); |
shintamainjp | 0:5062b7730235 | 229 | CS_DIS(); |
shintamainjp | 2:74c60a959299 | 230 | WAIT_US(400); |
shintamainjp | 0:5062b7730235 | 231 | } |
shintamainjp | 0:5062b7730235 | 232 | |
shintamainjp | 0:5062b7730235 | 233 | /** |
shintamainjp | 0:5062b7730235 | 234 | * Clear. |
shintamainjp | 0:5062b7730235 | 235 | * |
shintamainjp | 0:5062b7730235 | 236 | * @param x1 X1. |
shintamainjp | 0:5062b7730235 | 237 | * @param y1 Y1. |
shintamainjp | 0:5062b7730235 | 238 | * @param x2 X2. |
shintamainjp | 0:5062b7730235 | 239 | * @param y2 Y2. |
shintamainjp | 0:5062b7730235 | 240 | */ |
shintamainjp | 0:5062b7730235 | 241 | void AitendoOLED::clear(int x1, int y1, int x2, int y2) { |
shintamainjp | 2:74c60a959299 | 242 | #if 1 |
shintamainjp | 0:5062b7730235 | 243 | DC_CMD(); |
shintamainjp | 0:5062b7730235 | 244 | CS_ENA(); |
shintamainjp | 0:5062b7730235 | 245 | SPI_WRITE(0x25); |
shintamainjp | 0:5062b7730235 | 246 | SPI_WRITE(x1); |
shintamainjp | 0:5062b7730235 | 247 | SPI_WRITE(y1); |
shintamainjp | 0:5062b7730235 | 248 | SPI_WRITE(x2); |
shintamainjp | 0:5062b7730235 | 249 | SPI_WRITE(y2); |
shintamainjp | 0:5062b7730235 | 250 | CS_DIS(); |
shintamainjp | 2:74c60a959299 | 251 | WAIT_US(400); |
shintamainjp | 2:74c60a959299 | 252 | #else |
shintamainjp | 2:74c60a959299 | 253 | AitendoOLED::Color c; |
shintamainjp | 2:74c60a959299 | 254 | c.r = 0x00; |
shintamainjp | 2:74c60a959299 | 255 | c.g = 0x00; |
shintamainjp | 2:74c60a959299 | 256 | c.b = 0x00; |
shintamainjp | 2:74c60a959299 | 257 | for (int x = x1; x <= x2; x++) { |
shintamainjp | 2:74c60a959299 | 258 | for (int y = y1; y <= y2; y++) { |
shintamainjp | 2:74c60a959299 | 259 | drawPixel(x, y, c); |
shintamainjp | 2:74c60a959299 | 260 | } |
shintamainjp | 2:74c60a959299 | 261 | } |
shintamainjp | 2:74c60a959299 | 262 | #endif |
shintamainjp | 0:5062b7730235 | 263 | } |
shintamainjp | 0:5062b7730235 | 264 | |
shintamainjp | 0:5062b7730235 | 265 | /** |
shintamainjp | 0:5062b7730235 | 266 | * Reset. |
shintamainjp | 0:5062b7730235 | 267 | */ |
shintamainjp | 0:5062b7730235 | 268 | void AitendoOLED::reset() { |
shintamainjp | 0:5062b7730235 | 269 | |
shintamainjp | 0:5062b7730235 | 270 | RES_ENA(); |
shintamainjp | 2:74c60a959299 | 271 | WAIT_US(200 * 1000); |
shintamainjp | 0:5062b7730235 | 272 | RES_DIS(); |
shintamainjp | 2:74c60a959299 | 273 | WAIT_US(200 * 1000); |
shintamainjp | 0:5062b7730235 | 274 | |
shintamainjp | 0:5062b7730235 | 275 | setDisplayOnOff(false); |
shintamainjp | 0:5062b7730235 | 276 | setRowAddress(0, 63); |
shintamainjp | 0:5062b7730235 | 277 | setColumnAddress(0, 95); |
shintamainjp | 0:5062b7730235 | 278 | setRemapAndDataFormat(0x70); |
shintamainjp | 0:5062b7730235 | 279 | setDisplayStartLine(0); |
shintamainjp | 0:5062b7730235 | 280 | setDisplayOffset(0); |
shintamainjp | 0:5062b7730235 | 281 | setDisplayMode(AitendoOLED::NormalDisplay); |
shintamainjp | 0:5062b7730235 | 282 | setMultiplexRatio(0x3f); |
shintamainjp | 0:5062b7730235 | 283 | setMasterCurrentControl(0x8f); |
shintamainjp | 0:5062b7730235 | 284 | setPowerSavingMode(0x00); |
shintamainjp | 0:5062b7730235 | 285 | setPhasePeriod(0x74); |
shintamainjp | 0:5062b7730235 | 286 | setDisplayClockDivideRatio(0xD0); |
shintamainjp | 0:5062b7730235 | 287 | setSecondPreChargeSpeedForColorA(0x80); |
shintamainjp | 0:5062b7730235 | 288 | setSecondPreChargeSpeedForColorB(0x80); |
shintamainjp | 0:5062b7730235 | 289 | setSecondPreChargeSpeedForColorC(0x80); |
shintamainjp | 0:5062b7730235 | 290 | setPreChargeLevelForColorA(0x3F); |
shintamainjp | 0:5062b7730235 | 291 | setPreChargeLevelForColorB(0x3F); |
shintamainjp | 0:5062b7730235 | 292 | setPreChargeLevelForColorC(0x3F); |
shintamainjp | 0:5062b7730235 | 293 | setVCOMH(0x3E); |
shintamainjp | 0:5062b7730235 | 294 | setMasterCurrentControl(0x0F); |
shintamainjp | 0:5062b7730235 | 295 | // A:Blue, B:Green, C:Red |
shintamainjp | 0:5062b7730235 | 296 | setContrastForColorA(0x80); |
shintamainjp | 0:5062b7730235 | 297 | setContrastForColorB(0x80); |
shintamainjp | 0:5062b7730235 | 298 | setContrastForColorC(0x80); |
shintamainjp | 0:5062b7730235 | 299 | setMode(true, false); |
shintamainjp | 0:5062b7730235 | 300 | setDisplayOnOff(true); |
shintamainjp | 0:5062b7730235 | 301 | } |
shintamainjp | 0:5062b7730235 | 302 | |
shintamainjp | 0:5062b7730235 | 303 | /** |
shintamainjp | 0:5062b7730235 | 304 | * Write data. |
shintamainjp | 0:5062b7730235 | 305 | * |
shintamainjp | 0:5062b7730235 | 306 | * @param data Data. |
shintamainjp | 0:5062b7730235 | 307 | */ |
shintamainjp | 0:5062b7730235 | 308 | void AitendoOLED::writeData(uint8_t data) { |
shintamainjp | 0:5062b7730235 | 309 | DC_DAT(); |
shintamainjp | 0:5062b7730235 | 310 | CS_ENA(); |
shintamainjp | 0:5062b7730235 | 311 | SPI_WRITE(data); |
shintamainjp | 0:5062b7730235 | 312 | CS_DIS(); |
shintamainjp | 0:5062b7730235 | 313 | } |
shintamainjp | 0:5062b7730235 | 314 | |
shintamainjp | 0:5062b7730235 | 315 | /** |
shintamainjp | 0:5062b7730235 | 316 | * Set mode. |
shintamainjp | 0:5062b7730235 | 317 | * |
shintamainjp | 0:5062b7730235 | 318 | * @param fillrect Fill the rectangle. |
shintamainjp | 0:5062b7730235 | 319 | * @param revcopy Reverse copy. |
shintamainjp | 0:5062b7730235 | 320 | */ |
shintamainjp | 0:5062b7730235 | 321 | void AitendoOLED::setMode(bool fillrect, bool revcopy) { |
shintamainjp | 0:5062b7730235 | 322 | uint8_t val = 0x00; |
shintamainjp | 0:5062b7730235 | 323 | if (fillrect) { |
shintamainjp | 0:5062b7730235 | 324 | val |= 1 << 0; |
shintamainjp | 0:5062b7730235 | 325 | } |
shintamainjp | 0:5062b7730235 | 326 | if (revcopy) { |
shintamainjp | 0:5062b7730235 | 327 | val |= 1 << 4; |
shintamainjp | 0:5062b7730235 | 328 | } |
shintamainjp | 0:5062b7730235 | 329 | DC_CMD(); |
shintamainjp | 0:5062b7730235 | 330 | CS_ENA(); |
shintamainjp | 0:5062b7730235 | 331 | SPI_WRITE(0x26); |
shintamainjp | 0:5062b7730235 | 332 | SPI_WRITE(val); |
shintamainjp | 0:5062b7730235 | 333 | CS_DIS(); |
shintamainjp | 0:5062b7730235 | 334 | } |
shintamainjp | 0:5062b7730235 | 335 | |
shintamainjp | 0:5062b7730235 | 336 | /** |
shintamainjp | 0:5062b7730235 | 337 | * Set column address. |
shintamainjp | 0:5062b7730235 | 338 | * |
shintamainjp | 0:5062b7730235 | 339 | * @param start Start address. (0-95) |
shintamainjp | 0:5062b7730235 | 340 | * @param end End address. (0-95) |
shintamainjp | 0:5062b7730235 | 341 | */ |
shintamainjp | 0:5062b7730235 | 342 | void AitendoOLED::setColumnAddress(int start, int end) { |
shintamainjp | 0:5062b7730235 | 343 | DC_CMD(); |
shintamainjp | 0:5062b7730235 | 344 | CS_ENA(); |
shintamainjp | 0:5062b7730235 | 345 | SPI_WRITE(0x15); |
shintamainjp | 0:5062b7730235 | 346 | SPI_WRITE(start); |
shintamainjp | 0:5062b7730235 | 347 | SPI_WRITE(end); |
shintamainjp | 0:5062b7730235 | 348 | CS_DIS(); |
shintamainjp | 0:5062b7730235 | 349 | } |
shintamainjp | 0:5062b7730235 | 350 | |
shintamainjp | 0:5062b7730235 | 351 | /** |
shintamainjp | 0:5062b7730235 | 352 | * Set row address. |
shintamainjp | 0:5062b7730235 | 353 | * |
shintamainjp | 0:5062b7730235 | 354 | * @param start Start address. (0-63) |
shintamainjp | 0:5062b7730235 | 355 | * @param end End address. (0-63) |
shintamainjp | 0:5062b7730235 | 356 | */ |
shintamainjp | 0:5062b7730235 | 357 | void AitendoOLED::setRowAddress(int start, int end) { |
shintamainjp | 0:5062b7730235 | 358 | DC_CMD(); |
shintamainjp | 0:5062b7730235 | 359 | CS_ENA(); |
shintamainjp | 0:5062b7730235 | 360 | SPI_WRITE(0x75); |
shintamainjp | 0:5062b7730235 | 361 | SPI_WRITE(start); |
shintamainjp | 0:5062b7730235 | 362 | SPI_WRITE(end); |
shintamainjp | 0:5062b7730235 | 363 | CS_DIS(); |
shintamainjp | 0:5062b7730235 | 364 | } |
shintamainjp | 0:5062b7730235 | 365 | |
shintamainjp | 0:5062b7730235 | 366 | /** |
shintamainjp | 0:5062b7730235 | 367 | * Set contrast for Color A. |
shintamainjp | 0:5062b7730235 | 368 | * |
shintamainjp | 0:5062b7730235 | 369 | * @param contrast Contrast. (Default:0x80) |
shintamainjp | 0:5062b7730235 | 370 | */ |
shintamainjp | 0:5062b7730235 | 371 | void AitendoOLED::setContrastForColorA(int contrast) { |
shintamainjp | 0:5062b7730235 | 372 | DC_CMD(); |
shintamainjp | 0:5062b7730235 | 373 | CS_ENA(); |
shintamainjp | 0:5062b7730235 | 374 | SPI_WRITE(0x81); |
shintamainjp | 0:5062b7730235 | 375 | SPI_WRITE(contrast); |
shintamainjp | 0:5062b7730235 | 376 | CS_DIS(); |
shintamainjp | 0:5062b7730235 | 377 | } |
shintamainjp | 0:5062b7730235 | 378 | |
shintamainjp | 0:5062b7730235 | 379 | /** |
shintamainjp | 0:5062b7730235 | 380 | * Set contrast for Color B. |
shintamainjp | 0:5062b7730235 | 381 | * |
shintamainjp | 0:5062b7730235 | 382 | * @param contrast Contrast. (Default:0x80) |
shintamainjp | 0:5062b7730235 | 383 | */ |
shintamainjp | 0:5062b7730235 | 384 | void AitendoOLED::setContrastForColorB(int contrast) { |
shintamainjp | 0:5062b7730235 | 385 | DC_CMD(); |
shintamainjp | 0:5062b7730235 | 386 | CS_ENA(); |
shintamainjp | 0:5062b7730235 | 387 | SPI_WRITE(0x82); |
shintamainjp | 0:5062b7730235 | 388 | SPI_WRITE(contrast); |
shintamainjp | 0:5062b7730235 | 389 | CS_DIS(); |
shintamainjp | 0:5062b7730235 | 390 | } |
shintamainjp | 0:5062b7730235 | 391 | |
shintamainjp | 0:5062b7730235 | 392 | /** |
shintamainjp | 0:5062b7730235 | 393 | * Set contrast for Color C. |
shintamainjp | 0:5062b7730235 | 394 | * |
shintamainjp | 0:5062b7730235 | 395 | * @param contrast Contrast. (Default:0x80) |
shintamainjp | 0:5062b7730235 | 396 | */ |
shintamainjp | 0:5062b7730235 | 397 | void AitendoOLED::setContrastForColorC(int contrast) { |
shintamainjp | 0:5062b7730235 | 398 | DC_CMD(); |
shintamainjp | 0:5062b7730235 | 399 | CS_ENA(); |
shintamainjp | 0:5062b7730235 | 400 | SPI_WRITE(0x83); |
shintamainjp | 0:5062b7730235 | 401 | SPI_WRITE(contrast); |
shintamainjp | 0:5062b7730235 | 402 | CS_DIS(); |
shintamainjp | 0:5062b7730235 | 403 | } |
shintamainjp | 0:5062b7730235 | 404 | |
shintamainjp | 0:5062b7730235 | 405 | /** |
shintamainjp | 0:5062b7730235 | 406 | * Set master current control value. |
shintamainjp | 0:5062b7730235 | 407 | * |
shintamainjp | 0:5062b7730235 | 408 | * @param current Current value. (0x00-0x0F) |
shintamainjp | 0:5062b7730235 | 409 | */ |
shintamainjp | 0:5062b7730235 | 410 | void AitendoOLED::setMasterCurrentControl(int current) { |
shintamainjp | 0:5062b7730235 | 411 | DC_CMD(); |
shintamainjp | 0:5062b7730235 | 412 | CS_ENA(); |
shintamainjp | 0:5062b7730235 | 413 | SPI_WRITE(0x87); |
shintamainjp | 0:5062b7730235 | 414 | SPI_WRITE(current); |
shintamainjp | 0:5062b7730235 | 415 | CS_DIS(); |
shintamainjp | 0:5062b7730235 | 416 | } |
shintamainjp | 0:5062b7730235 | 417 | |
shintamainjp | 0:5062b7730235 | 418 | /** |
shintamainjp | 0:5062b7730235 | 419 | * Set remapping mode and the data format. |
shintamainjp | 0:5062b7730235 | 420 | * |
shintamainjp | 0:5062b7730235 | 421 | * @param mode See the document. |
shintamainjp | 0:5062b7730235 | 422 | */ |
shintamainjp | 0:5062b7730235 | 423 | void AitendoOLED::setRemapAndDataFormat(int mode) { |
shintamainjp | 0:5062b7730235 | 424 | DC_CMD(); |
shintamainjp | 0:5062b7730235 | 425 | CS_ENA(); |
shintamainjp | 0:5062b7730235 | 426 | SPI_WRITE(0xA0); |
shintamainjp | 0:5062b7730235 | 427 | SPI_WRITE(mode); |
shintamainjp | 0:5062b7730235 | 428 | CS_DIS(); |
shintamainjp | 0:5062b7730235 | 429 | } |
shintamainjp | 0:5062b7730235 | 430 | |
shintamainjp | 0:5062b7730235 | 431 | /** |
shintamainjp | 0:5062b7730235 | 432 | * Set display start line. |
shintamainjp | 0:5062b7730235 | 433 | * |
shintamainjp | 0:5062b7730235 | 434 | * @param line Start line number. (0-63) |
shintamainjp | 0:5062b7730235 | 435 | */ |
shintamainjp | 0:5062b7730235 | 436 | void AitendoOLED::setDisplayStartLine(int line) { |
shintamainjp | 0:5062b7730235 | 437 | DC_CMD(); |
shintamainjp | 0:5062b7730235 | 438 | CS_ENA(); |
shintamainjp | 0:5062b7730235 | 439 | SPI_WRITE(0xA1); |
shintamainjp | 0:5062b7730235 | 440 | SPI_WRITE(line); |
shintamainjp | 0:5062b7730235 | 441 | CS_DIS(); |
shintamainjp | 0:5062b7730235 | 442 | } |
shintamainjp | 0:5062b7730235 | 443 | |
shintamainjp | 0:5062b7730235 | 444 | /** |
shintamainjp | 0:5062b7730235 | 445 | * Set display offset line. |
shintamainjp | 0:5062b7730235 | 446 | * |
shintamainjp | 0:5062b7730235 | 447 | * @param offset Offset line number. (0-63) |
shintamainjp | 0:5062b7730235 | 448 | */ |
shintamainjp | 0:5062b7730235 | 449 | void AitendoOLED::setDisplayOffset(int offset) { |
shintamainjp | 0:5062b7730235 | 450 | DC_CMD(); |
shintamainjp | 0:5062b7730235 | 451 | CS_ENA(); |
shintamainjp | 0:5062b7730235 | 452 | SPI_WRITE(0xA2); |
shintamainjp | 0:5062b7730235 | 453 | SPI_WRITE(offset); |
shintamainjp | 0:5062b7730235 | 454 | CS_DIS(); |
shintamainjp | 0:5062b7730235 | 455 | } |
shintamainjp | 0:5062b7730235 | 456 | |
shintamainjp | 0:5062b7730235 | 457 | /** |
shintamainjp | 0:5062b7730235 | 458 | * Set display mode. |
shintamainjp | 0:5062b7730235 | 459 | * |
shintamainjp | 0:5062b7730235 | 460 | * @param mode Display mode. |
shintamainjp | 0:5062b7730235 | 461 | */ |
shintamainjp | 0:5062b7730235 | 462 | void AitendoOLED::setDisplayMode(DisplayMode mode) { |
shintamainjp | 0:5062b7730235 | 463 | int val = 0; |
shintamainjp | 0:5062b7730235 | 464 | switch (mode) { |
shintamainjp | 0:5062b7730235 | 465 | case NormalDisplay: |
shintamainjp | 0:5062b7730235 | 466 | val = 0xA4; |
shintamainjp | 0:5062b7730235 | 467 | break; |
shintamainjp | 0:5062b7730235 | 468 | case EntireDisplayOn: |
shintamainjp | 0:5062b7730235 | 469 | val = 0xA5; |
shintamainjp | 0:5062b7730235 | 470 | break; |
shintamainjp | 0:5062b7730235 | 471 | case EntireDisplayOff: |
shintamainjp | 0:5062b7730235 | 472 | val = 0xA6; |
shintamainjp | 0:5062b7730235 | 473 | break; |
shintamainjp | 0:5062b7730235 | 474 | case InverseDisplay: |
shintamainjp | 0:5062b7730235 | 475 | val = 0xA7; |
shintamainjp | 0:5062b7730235 | 476 | break; |
shintamainjp | 0:5062b7730235 | 477 | default: |
shintamainjp | 0:5062b7730235 | 478 | break; |
shintamainjp | 0:5062b7730235 | 479 | } |
shintamainjp | 0:5062b7730235 | 480 | if (val != 0) { |
shintamainjp | 0:5062b7730235 | 481 | DC_CMD(); |
shintamainjp | 0:5062b7730235 | 482 | CS_ENA(); |
shintamainjp | 0:5062b7730235 | 483 | SPI_WRITE(val); |
shintamainjp | 0:5062b7730235 | 484 | CS_DIS(); |
shintamainjp | 0:5062b7730235 | 485 | } |
shintamainjp | 0:5062b7730235 | 486 | } |
shintamainjp | 0:5062b7730235 | 487 | |
shintamainjp | 0:5062b7730235 | 488 | /** |
shintamainjp | 0:5062b7730235 | 489 | * Set multiplex ratio. |
shintamainjp | 0:5062b7730235 | 490 | * |
shintamainjp | 0:5062b7730235 | 491 | * @param ratio Ratio. |
shintamainjp | 0:5062b7730235 | 492 | */ |
shintamainjp | 0:5062b7730235 | 493 | void AitendoOLED::setMultiplexRatio(int ratio) { |
shintamainjp | 0:5062b7730235 | 494 | DC_CMD(); |
shintamainjp | 0:5062b7730235 | 495 | CS_ENA(); |
shintamainjp | 0:5062b7730235 | 496 | SPI_WRITE(0xA8); |
shintamainjp | 0:5062b7730235 | 497 | SPI_WRITE(ratio); |
shintamainjp | 0:5062b7730235 | 498 | CS_DIS(); |
shintamainjp | 0:5062b7730235 | 499 | } |
shintamainjp | 0:5062b7730235 | 500 | |
shintamainjp | 0:5062b7730235 | 501 | /** |
shintamainjp | 0:5062b7730235 | 502 | * Set display on/off. |
shintamainjp | 0:5062b7730235 | 503 | * |
shintamainjp | 0:5062b7730235 | 504 | * @param on On. |
shintamainjp | 0:5062b7730235 | 505 | */ |
shintamainjp | 0:5062b7730235 | 506 | void AitendoOLED::setDisplayOnOff(bool on) { |
shintamainjp | 0:5062b7730235 | 507 | if (on) { |
shintamainjp | 0:5062b7730235 | 508 | DC_CMD(); |
shintamainjp | 0:5062b7730235 | 509 | CS_ENA(); |
shintamainjp | 0:5062b7730235 | 510 | SPI_WRITE(0xAF); |
shintamainjp | 0:5062b7730235 | 511 | CS_DIS(); |
shintamainjp | 0:5062b7730235 | 512 | } else { |
shintamainjp | 0:5062b7730235 | 513 | DC_CMD(); |
shintamainjp | 0:5062b7730235 | 514 | CS_ENA(); |
shintamainjp | 0:5062b7730235 | 515 | SPI_WRITE(0xAE); |
shintamainjp | 0:5062b7730235 | 516 | CS_DIS(); |
shintamainjp | 0:5062b7730235 | 517 | } |
shintamainjp | 0:5062b7730235 | 518 | } |
shintamainjp | 0:5062b7730235 | 519 | |
shintamainjp | 0:5062b7730235 | 520 | /** |
shintamainjp | 0:5062b7730235 | 521 | * Set gray scale table. |
shintamainjp | 0:5062b7730235 | 522 | * |
shintamainjp | 0:5062b7730235 | 523 | * @param p A pointer to the look up table. |
shintamainjp | 0:5062b7730235 | 524 | */ |
shintamainjp | 0:5062b7730235 | 525 | void AitendoOLED::setGrayScaleTable(gray_scale_table_t *p) { |
shintamainjp | 0:5062b7730235 | 526 | DC_CMD(); |
shintamainjp | 0:5062b7730235 | 527 | CS_ENA(); |
shintamainjp | 0:5062b7730235 | 528 | SPI_WRITE(0xB8); |
shintamainjp | 0:5062b7730235 | 529 | for (int i = 0; i < 32; i++) { |
shintamainjp | 0:5062b7730235 | 530 | SPI_WRITE(p->data[i]); |
shintamainjp | 0:5062b7730235 | 531 | } |
shintamainjp | 0:5062b7730235 | 532 | CS_DIS(); |
shintamainjp | 0:5062b7730235 | 533 | } |
shintamainjp | 0:5062b7730235 | 534 | |
shintamainjp | 0:5062b7730235 | 535 | /** |
shintamainjp | 0:5062b7730235 | 536 | * NOP. |
shintamainjp | 0:5062b7730235 | 537 | */ |
shintamainjp | 0:5062b7730235 | 538 | void AitendoOLED::nop() { |
shintamainjp | 0:5062b7730235 | 539 | DC_CMD(); |
shintamainjp | 0:5062b7730235 | 540 | CS_ENA(); |
shintamainjp | 0:5062b7730235 | 541 | SPI_WRITE(0xE3); |
shintamainjp | 0:5062b7730235 | 542 | CS_DIS(); |
shintamainjp | 0:5062b7730235 | 543 | } |
shintamainjp | 0:5062b7730235 | 544 | |
shintamainjp | 0:5062b7730235 | 545 | /** |
shintamainjp | 0:5062b7730235 | 546 | * Set power saving mode. |
shintamainjp | 0:5062b7730235 | 547 | * |
shintamainjp | 0:5062b7730235 | 548 | * @param value Value. (0x00:None, 0x12:power saving) |
shintamainjp | 0:5062b7730235 | 549 | */ |
shintamainjp | 0:5062b7730235 | 550 | void AitendoOLED::setPowerSavingMode(int value) { |
shintamainjp | 0:5062b7730235 | 551 | DC_CMD(); |
shintamainjp | 0:5062b7730235 | 552 | CS_ENA(); |
shintamainjp | 0:5062b7730235 | 553 | SPI_WRITE(0xB0); |
shintamainjp | 0:5062b7730235 | 554 | SPI_WRITE(value); |
shintamainjp | 0:5062b7730235 | 555 | CS_DIS(); |
shintamainjp | 0:5062b7730235 | 556 | } |
shintamainjp | 0:5062b7730235 | 557 | |
shintamainjp | 0:5062b7730235 | 558 | /** |
shintamainjp | 0:5062b7730235 | 559 | * Set phase period. |
shintamainjp | 0:5062b7730235 | 560 | * |
shintamainjp | 0:5062b7730235 | 561 | * @param value Value. (Default:0x74) |
shintamainjp | 0:5062b7730235 | 562 | */ |
shintamainjp | 0:5062b7730235 | 563 | void AitendoOLED::setPhasePeriod(int value) { |
shintamainjp | 0:5062b7730235 | 564 | DC_CMD(); |
shintamainjp | 0:5062b7730235 | 565 | CS_ENA(); |
shintamainjp | 0:5062b7730235 | 566 | SPI_WRITE(0xB1); |
shintamainjp | 0:5062b7730235 | 567 | SPI_WRITE(value); |
shintamainjp | 0:5062b7730235 | 568 | CS_DIS(); |
shintamainjp | 0:5062b7730235 | 569 | } |
shintamainjp | 0:5062b7730235 | 570 | |
shintamainjp | 0:5062b7730235 | 571 | /** |
shintamainjp | 0:5062b7730235 | 572 | * Set display clock divide ratio. |
shintamainjp | 0:5062b7730235 | 573 | * |
shintamainjp | 0:5062b7730235 | 574 | * @param value Value. (Default:0x00) |
shintamainjp | 0:5062b7730235 | 575 | */ |
shintamainjp | 0:5062b7730235 | 576 | void AitendoOLED::setDisplayClockDivideRatio(int value) { |
shintamainjp | 0:5062b7730235 | 577 | DC_CMD(); |
shintamainjp | 0:5062b7730235 | 578 | CS_ENA(); |
shintamainjp | 0:5062b7730235 | 579 | SPI_WRITE(0xB3); |
shintamainjp | 0:5062b7730235 | 580 | SPI_WRITE(value); |
shintamainjp | 0:5062b7730235 | 581 | CS_DIS(); |
shintamainjp | 0:5062b7730235 | 582 | } |
shintamainjp | 0:5062b7730235 | 583 | |
shintamainjp | 0:5062b7730235 | 584 | /** |
shintamainjp | 0:5062b7730235 | 585 | * Set second pre-charge speed for color A. |
shintamainjp | 0:5062b7730235 | 586 | * |
shintamainjp | 0:5062b7730235 | 587 | * @param value Value. |
shintamainjp | 0:5062b7730235 | 588 | */ |
shintamainjp | 0:5062b7730235 | 589 | void AitendoOLED::setSecondPreChargeSpeedForColorA(int value) { |
shintamainjp | 0:5062b7730235 | 590 | DC_CMD(); |
shintamainjp | 0:5062b7730235 | 591 | CS_ENA(); |
shintamainjp | 0:5062b7730235 | 592 | SPI_WRITE(0x8A); |
shintamainjp | 0:5062b7730235 | 593 | SPI_WRITE(value); |
shintamainjp | 0:5062b7730235 | 594 | CS_DIS(); |
shintamainjp | 0:5062b7730235 | 595 | } |
shintamainjp | 0:5062b7730235 | 596 | |
shintamainjp | 0:5062b7730235 | 597 | /** |
shintamainjp | 0:5062b7730235 | 598 | * Set second pre-charge speed for color B. |
shintamainjp | 0:5062b7730235 | 599 | * |
shintamainjp | 0:5062b7730235 | 600 | * @param value Value. |
shintamainjp | 0:5062b7730235 | 601 | */ |
shintamainjp | 0:5062b7730235 | 602 | void AitendoOLED::setSecondPreChargeSpeedForColorB(int value) { |
shintamainjp | 0:5062b7730235 | 603 | DC_CMD(); |
shintamainjp | 0:5062b7730235 | 604 | CS_ENA(); |
shintamainjp | 0:5062b7730235 | 605 | SPI_WRITE(0x8B); |
shintamainjp | 0:5062b7730235 | 606 | SPI_WRITE(value); |
shintamainjp | 0:5062b7730235 | 607 | CS_DIS(); |
shintamainjp | 0:5062b7730235 | 608 | } |
shintamainjp | 0:5062b7730235 | 609 | |
shintamainjp | 0:5062b7730235 | 610 | /** |
shintamainjp | 0:5062b7730235 | 611 | * Set second pre-charge speed for color C. |
shintamainjp | 0:5062b7730235 | 612 | * |
shintamainjp | 0:5062b7730235 | 613 | * @param value Value. |
shintamainjp | 0:5062b7730235 | 614 | */ |
shintamainjp | 0:5062b7730235 | 615 | void AitendoOLED::setSecondPreChargeSpeedForColorC(int value) { |
shintamainjp | 0:5062b7730235 | 616 | DC_CMD(); |
shintamainjp | 0:5062b7730235 | 617 | CS_ENA(); |
shintamainjp | 0:5062b7730235 | 618 | SPI_WRITE(0x8C); |
shintamainjp | 0:5062b7730235 | 619 | SPI_WRITE(value); |
shintamainjp | 0:5062b7730235 | 620 | CS_DIS(); |
shintamainjp | 0:5062b7730235 | 621 | } |
shintamainjp | 0:5062b7730235 | 622 | |
shintamainjp | 0:5062b7730235 | 623 | /** |
shintamainjp | 0:5062b7730235 | 624 | * Set pre charge level for color A. |
shintamainjp | 0:5062b7730235 | 625 | * |
shintamainjp | 0:5062b7730235 | 626 | * @param value The value. |
shintamainjp | 0:5062b7730235 | 627 | */ |
shintamainjp | 0:5062b7730235 | 628 | void AitendoOLED::setPreChargeLevelForColorA(int value) { |
shintamainjp | 0:5062b7730235 | 629 | DC_CMD(); |
shintamainjp | 0:5062b7730235 | 630 | CS_ENA(); |
shintamainjp | 0:5062b7730235 | 631 | SPI_WRITE(0xBB); |
shintamainjp | 0:5062b7730235 | 632 | SPI_WRITE(value); |
shintamainjp | 0:5062b7730235 | 633 | CS_DIS(); |
shintamainjp | 0:5062b7730235 | 634 | } |
shintamainjp | 0:5062b7730235 | 635 | |
shintamainjp | 0:5062b7730235 | 636 | /** |
shintamainjp | 0:5062b7730235 | 637 | * Set pre charge level for color B. |
shintamainjp | 0:5062b7730235 | 638 | * |
shintamainjp | 0:5062b7730235 | 639 | * @param value The value. |
shintamainjp | 0:5062b7730235 | 640 | */ |
shintamainjp | 0:5062b7730235 | 641 | void AitendoOLED::setPreChargeLevelForColorB(int value) { |
shintamainjp | 0:5062b7730235 | 642 | DC_CMD(); |
shintamainjp | 0:5062b7730235 | 643 | CS_ENA(); |
shintamainjp | 0:5062b7730235 | 644 | SPI_WRITE(0xBC); |
shintamainjp | 0:5062b7730235 | 645 | SPI_WRITE(value); |
shintamainjp | 0:5062b7730235 | 646 | CS_DIS(); |
shintamainjp | 0:5062b7730235 | 647 | } |
shintamainjp | 0:5062b7730235 | 648 | |
shintamainjp | 0:5062b7730235 | 649 | /** |
shintamainjp | 0:5062b7730235 | 650 | * Set pre charge level for color C. |
shintamainjp | 0:5062b7730235 | 651 | * |
shintamainjp | 0:5062b7730235 | 652 | * @param value The value. |
shintamainjp | 0:5062b7730235 | 653 | */ |
shintamainjp | 0:5062b7730235 | 654 | void AitendoOLED::setPreChargeLevelForColorC(int value) { |
shintamainjp | 0:5062b7730235 | 655 | DC_CMD(); |
shintamainjp | 0:5062b7730235 | 656 | CS_ENA(); |
shintamainjp | 0:5062b7730235 | 657 | SPI_WRITE(0xBD); |
shintamainjp | 0:5062b7730235 | 658 | SPI_WRITE(value); |
shintamainjp | 0:5062b7730235 | 659 | CS_DIS(); |
shintamainjp | 0:5062b7730235 | 660 | } |
shintamainjp | 0:5062b7730235 | 661 | |
shintamainjp | 0:5062b7730235 | 662 | /** |
shintamainjp | 0:5062b7730235 | 663 | * Set VCOMH. |
shintamainjp | 0:5062b7730235 | 664 | * |
shintamainjp | 0:5062b7730235 | 665 | * @param value VCOMH value. (0x00:0.43 * Vref, 0x3F:0x83 * Vref) |
shintamainjp | 0:5062b7730235 | 666 | */ |
shintamainjp | 0:5062b7730235 | 667 | void AitendoOLED::setVCOMH(int value) { |
shintamainjp | 0:5062b7730235 | 668 | DC_CMD(); |
shintamainjp | 0:5062b7730235 | 669 | CS_ENA(); |
shintamainjp | 0:5062b7730235 | 670 | SPI_WRITE(0xBE); |
shintamainjp | 0:5062b7730235 | 671 | SPI_WRITE(value); |
shintamainjp | 0:5062b7730235 | 672 | CS_DIS(); |
shintamainjp | 0:5062b7730235 | 673 | } |
shintamainjp | 0:5062b7730235 | 674 | |
shintamainjp | 0:5062b7730235 | 675 | /** |
shintamainjp | 0:5062b7730235 | 676 | * Read the status register. |
shintamainjp | 0:5062b7730235 | 677 | * |
shintamainjp | 2:74c60a959299 | 678 | * @return the value. (0x80:CommandLock) |
shintamainjp | 0:5062b7730235 | 679 | */ |
shintamainjp | 0:5062b7730235 | 680 | uint8_t AitendoOLED::readStatusRegister() { |
shintamainjp | 0:5062b7730235 | 681 | uint8_t s; |
shintamainjp | 0:5062b7730235 | 682 | DC_CMD(); |
shintamainjp | 0:5062b7730235 | 683 | CS_ENA(); |
shintamainjp | 0:5062b7730235 | 684 | s = SPI_READ(); |
shintamainjp | 0:5062b7730235 | 685 | CS_DIS(); |
shintamainjp | 0:5062b7730235 | 686 | return s; |
shintamainjp | 0:5062b7730235 | 687 | } |