Chris Taylor / Mbed 2 deprecated RETRO-CaveDweller Featured

Dependencies:   mbed

Committer:
taylorza
Date:
Sat Dec 27 23:24:30 2014 +0000
Revision:
3:a93fe5f207f5
Parent:
0:2ee0812e2615
Child:
4:45ff7fc8a431
Working before fixed point audio

Who changed what in which revision?

UserRevisionLine numberNew contents of line
taylorza 0:2ee0812e2615 1 #include "mbed.h"
taylorza 0:2ee0812e2615 2 #include "Bitmap4bpp.h"
taylorza 0:2ee0812e2615 3 #include "LCD_ST7735.h"
taylorza 0:2ee0812e2615 4
taylorza 0:2ee0812e2615 5 const uint16_t LCD_ST7735::DefaultPalette[] = {
taylorza 0:2ee0812e2615 6 0x0000, // 0 - Black
taylorza 0:2ee0812e2615 7 0x0019, // 1 - Blue
taylorza 0:2ee0812e2615 8 0xc800, // 2 - Red
taylorza 0:2ee0812e2615 9 0xc819, // 3 - Magenta
taylorza 0:2ee0812e2615 10 0x0660, // 4 - Green
taylorza 0:2ee0812e2615 11 0x0679, // 5 - Cyan
taylorza 0:2ee0812e2615 12 0xce60, // 6 - Yellow
taylorza 0:2ee0812e2615 13 0xce79, // 7 - White
taylorza 0:2ee0812e2615 14 0x001f, // 8 - Bright Blue
taylorza 0:2ee0812e2615 15 0xf800, // 9 - Bright Red
taylorza 0:2ee0812e2615 16 0xf81f, // 10 - Bright Magenta
taylorza 0:2ee0812e2615 17 0x07e0, // 11 - Bright Green
taylorza 0:2ee0812e2615 18 0x07ff, // 12 - Bright Cyan
taylorza 0:2ee0812e2615 19 0xffe0, // 13 - Bright Yellow
taylorza 0:2ee0812e2615 20 0xffff, // 14 - Bright White
taylorza 0:2ee0812e2615 21 };
taylorza 0:2ee0812e2615 22
taylorza 0:2ee0812e2615 23 LCD_ST7735::LCD_ST7735(
taylorza 0:2ee0812e2615 24 PinName backlightPin,
taylorza 0:2ee0812e2615 25 PinName resetPin,
taylorza 0:2ee0812e2615 26 PinName dsPin,
taylorza 0:2ee0812e2615 27 PinName mosiPin,
taylorza 0:2ee0812e2615 28 PinName misoPin,
taylorza 0:2ee0812e2615 29 PinName clkPin,
taylorza 0:2ee0812e2615 30 PinName csPin,
taylorza 0:2ee0812e2615 31 PanelColorFilter colorFilter
taylorza 0:2ee0812e2615 32 ) :
taylorza 0:2ee0812e2615 33 _colorFilter(colorFilter),
taylorza 0:2ee0812e2615 34 _backlight(backlightPin, 0),
taylorza 0:2ee0812e2615 35 _reset(resetPin, 1),
taylorza 0:2ee0812e2615 36 _ds(dsPin, 0),
taylorza 0:2ee0812e2615 37 _cs(csPin, 1),
taylorza 0:2ee0812e2615 38 _spi(mosiPin, misoPin, clkPin)
taylorza 0:2ee0812e2615 39 {
taylorza 0:2ee0812e2615 40 _spi.format(8, 3);
taylorza 0:2ee0812e2615 41 _spi.frequency(18000000);
taylorza 0:2ee0812e2615 42
taylorza 0:2ee0812e2615 43 initDisplay();
taylorza 0:2ee0812e2615 44 clearScreen();
taylorza 0:2ee0812e2615 45 setForegroundColor(0xffff);
taylorza 0:2ee0812e2615 46 setBackgroundColor(0x0000);
taylorza 0:2ee0812e2615 47
taylorza 0:2ee0812e2615 48 _palette = (uint16_t*)DefaultPalette;
taylorza 0:2ee0812e2615 49 }
taylorza 0:2ee0812e2615 50
taylorza 0:2ee0812e2615 51 void LCD_ST7735::setOrientation(Orientation orientation, bool flip)
taylorza 0:2ee0812e2615 52 {
taylorza 0:2ee0812e2615 53 const static uint8_t my = 0x80;
taylorza 0:2ee0812e2615 54 const static uint8_t mx = 0x40;
taylorza 0:2ee0812e2615 55 const static uint8_t mv = 0x20;
taylorza 0:2ee0812e2615 56
taylorza 0:2ee0812e2615 57 uint8_t madctlData = _colorFilter;
taylorza 0:2ee0812e2615 58 switch(orientation)
taylorza 0:2ee0812e2615 59 {
taylorza 0:2ee0812e2615 60 case Rotate0:
taylorza 0:2ee0812e2615 61 _width = 128;
taylorza 0:2ee0812e2615 62 _height = 160;
taylorza 0:2ee0812e2615 63 madctlData |= flip ? mx : 0;
taylorza 0:2ee0812e2615 64 break;
taylorza 0:2ee0812e2615 65
taylorza 0:2ee0812e2615 66 case Rotate90:
taylorza 0:2ee0812e2615 67 _width = 160;
taylorza 0:2ee0812e2615 68 _height = 128;
taylorza 0:2ee0812e2615 69 madctlData |= flip ? my | mv | mx : mv | mx;
taylorza 0:2ee0812e2615 70 break;
taylorza 0:2ee0812e2615 71
taylorza 0:2ee0812e2615 72 case Rotate180:
taylorza 0:2ee0812e2615 73 _width = 128;
taylorza 0:2ee0812e2615 74 _height = 160;
taylorza 0:2ee0812e2615 75 madctlData |= flip ? my : mx | my;
taylorza 0:2ee0812e2615 76 break;
taylorza 0:2ee0812e2615 77
taylorza 0:2ee0812e2615 78 case Rotate270:
taylorza 0:2ee0812e2615 79 _width = 160;
taylorza 0:2ee0812e2615 80 _height = 128;
taylorza 0:2ee0812e2615 81 madctlData |= flip ? mv : mv | my;
taylorza 0:2ee0812e2615 82 break;
taylorza 0:2ee0812e2615 83 }
taylorza 0:2ee0812e2615 84 write(CMD_MADCTL, (uint8_t[]){madctlData}, 1);
taylorza 0:2ee0812e2615 85 }
taylorza 0:2ee0812e2615 86
taylorza 0:2ee0812e2615 87 int LCD_ST7735::getWidth()
taylorza 0:2ee0812e2615 88 {
taylorza 0:2ee0812e2615 89 return _width;
taylorza 0:2ee0812e2615 90 }
taylorza 0:2ee0812e2615 91
taylorza 0:2ee0812e2615 92 int LCD_ST7735::getHeight()
taylorza 0:2ee0812e2615 93 {
taylorza 0:2ee0812e2615 94 return _height;
taylorza 0:2ee0812e2615 95 }
taylorza 0:2ee0812e2615 96
taylorza 0:2ee0812e2615 97 void LCD_ST7735::setBacklight(bool state)
taylorza 0:2ee0812e2615 98 {
taylorza 0:2ee0812e2615 99 _backlight = state ? 1 : 0;
taylorza 0:2ee0812e2615 100 }
taylorza 0:2ee0812e2615 101
taylorza 0:2ee0812e2615 102 void LCD_ST7735::clearScreen(uint16_t color)
taylorza 0:2ee0812e2615 103 {
taylorza 0:2ee0812e2615 104 clipRect(0, 0, _width - 1, _height - 1);
taylorza 0:2ee0812e2615 105 beginBatchCommand(CMD_RAMWR);
taylorza 0:2ee0812e2615 106 uint8_t colorHigh = color >> 8;
taylorza 0:2ee0812e2615 107 uint8_t colorLow = color;
taylorza 0:2ee0812e2615 108 for(int i = 0; i < 128 * 160 * 2; ++i)
taylorza 0:2ee0812e2615 109 {
taylorza 0:2ee0812e2615 110 writeBatchData(colorHigh, colorLow);
taylorza 0:2ee0812e2615 111 }
taylorza 0:2ee0812e2615 112 endBatchCommand();
taylorza 0:2ee0812e2615 113 }
taylorza 0:2ee0812e2615 114
taylorza 0:2ee0812e2615 115 void LCD_ST7735::setPixel(int x, int y, uint16_t color)
taylorza 0:2ee0812e2615 116 {
taylorza 0:2ee0812e2615 117 write(CMD_CASET, (uint8_t[]){0, x, 0, x}, 4);
taylorza 0:2ee0812e2615 118 write(CMD_RASET, (uint8_t[]){0, y, 0, y}, 4);
taylorza 0:2ee0812e2615 119 write(CMD_RAMWR, color);
taylorza 0:2ee0812e2615 120 }
taylorza 0:2ee0812e2615 121
taylorza 0:2ee0812e2615 122 void LCD_ST7735::drawLine(int x1, int y1, int x2, int y2, uint16_t color)
taylorza 0:2ee0812e2615 123 {
taylorza 0:2ee0812e2615 124 int dx = abs(x2 - x1);
taylorza 0:2ee0812e2615 125 int dy = abs(y2 - y1);
taylorza 0:2ee0812e2615 126
taylorza 0:2ee0812e2615 127 if (dx == 0)
taylorza 0:2ee0812e2615 128 {
taylorza 0:2ee0812e2615 129 if (y1 > y2) swap(y1, y2);
taylorza 0:2ee0812e2615 130 drawVertLine(x1, y1, y2, color);
taylorza 0:2ee0812e2615 131 return;
taylorza 0:2ee0812e2615 132 }
taylorza 0:2ee0812e2615 133 else if(dy == 0)
taylorza 0:2ee0812e2615 134 {
taylorza 0:2ee0812e2615 135 if (x1 > x2) swap(x1, x2);
taylorza 0:2ee0812e2615 136 drawHorizLine(x1, y1, x2, color);
taylorza 0:2ee0812e2615 137 return;
taylorza 0:2ee0812e2615 138 }
taylorza 0:2ee0812e2615 139
taylorza 0:2ee0812e2615 140 int sx = (x1 < x2) ? 1 : -1;
taylorza 0:2ee0812e2615 141 int sy = (y1 < y2) ? 1 : -1;
taylorza 0:2ee0812e2615 142 int err = dx - dy;
taylorza 0:2ee0812e2615 143 while(x1 != x2 || y1 != y2)
taylorza 0:2ee0812e2615 144 {
taylorza 0:2ee0812e2615 145 setPixel(x1, y1, color);
taylorza 0:2ee0812e2615 146 int e2 = err << 1;
taylorza 0:2ee0812e2615 147 if (e2 > -dy)
taylorza 0:2ee0812e2615 148 {
taylorza 0:2ee0812e2615 149 err -= dy;
taylorza 0:2ee0812e2615 150 x1 += sx;
taylorza 0:2ee0812e2615 151 }
taylorza 0:2ee0812e2615 152 if (e2 < dx)
taylorza 0:2ee0812e2615 153 {
taylorza 0:2ee0812e2615 154 err += dx;
taylorza 0:2ee0812e2615 155 y1 += sy;
taylorza 0:2ee0812e2615 156 }
taylorza 0:2ee0812e2615 157 }
taylorza 0:2ee0812e2615 158 setPixel(x2, y2, color);
taylorza 0:2ee0812e2615 159 }
taylorza 0:2ee0812e2615 160
taylorza 0:2ee0812e2615 161 void LCD_ST7735::swap(int &a, int &b)
taylorza 0:2ee0812e2615 162 {
taylorza 0:2ee0812e2615 163 int t = a;
taylorza 0:2ee0812e2615 164 a = b;
taylorza 0:2ee0812e2615 165 b = t;
taylorza 0:2ee0812e2615 166 }
taylorza 0:2ee0812e2615 167
taylorza 0:2ee0812e2615 168 void LCD_ST7735::drawRect(int x1, int y1, int x2, int y2, uint16_t color)
taylorza 0:2ee0812e2615 169 {
taylorza 0:2ee0812e2615 170 if (x1 > x2) swap(x1, x2);
taylorza 0:2ee0812e2615 171 if (y1 > y2) swap(y1, y2);
taylorza 0:2ee0812e2615 172
taylorza 0:2ee0812e2615 173 drawHorizLine(x1, y1, x2, color);
taylorza 0:2ee0812e2615 174 drawHorizLine(x1, y2, x2, color);
taylorza 0:2ee0812e2615 175 drawVertLine(x1, y1, y2, color);
taylorza 0:2ee0812e2615 176 drawVertLine(x2, y1, y2, color);
taylorza 0:2ee0812e2615 177 }
taylorza 0:2ee0812e2615 178
taylorza 0:2ee0812e2615 179 void LCD_ST7735::drawCircle(int x, int y, int r, uint16_t color)
taylorza 0:2ee0812e2615 180 {
taylorza 0:2ee0812e2615 181 int ix = r;
taylorza 0:2ee0812e2615 182 int iy = 0;
taylorza 0:2ee0812e2615 183 int err = 1 - r;
taylorza 0:2ee0812e2615 184
taylorza 0:2ee0812e2615 185 while(ix >= iy)
taylorza 0:2ee0812e2615 186 {
taylorza 0:2ee0812e2615 187 setPixel(x + ix, y + iy, color);
taylorza 0:2ee0812e2615 188 setPixel(x + iy, y + ix, color);
taylorza 0:2ee0812e2615 189 setPixel(x - ix, y + iy, color);
taylorza 0:2ee0812e2615 190 setPixel(x - iy, y + ix, color);
taylorza 0:2ee0812e2615 191 setPixel(x - ix, y - iy, color);
taylorza 0:2ee0812e2615 192 setPixel(x - iy, y - ix, color);
taylorza 0:2ee0812e2615 193 setPixel(x + ix, y - iy, color);
taylorza 0:2ee0812e2615 194 setPixel(x + iy, y - ix, color);
taylorza 0:2ee0812e2615 195 iy++;
taylorza 0:2ee0812e2615 196 if (err < 0)
taylorza 0:2ee0812e2615 197 {
taylorza 0:2ee0812e2615 198 err += 2 * iy + 1;
taylorza 0:2ee0812e2615 199 }
taylorza 0:2ee0812e2615 200 else
taylorza 0:2ee0812e2615 201 {
taylorza 0:2ee0812e2615 202 ix--;
taylorza 0:2ee0812e2615 203 err += 2 * (iy - ix + 1);
taylorza 0:2ee0812e2615 204 }
taylorza 0:2ee0812e2615 205 }
taylorza 0:2ee0812e2615 206 }
taylorza 0:2ee0812e2615 207
taylorza 0:2ee0812e2615 208 void LCD_ST7735::drawEllipse(int x, int y, int rx, int ry, uint16_t color)
taylorza 0:2ee0812e2615 209 {
taylorza 0:2ee0812e2615 210 int a2 = rx * rx;
taylorza 0:2ee0812e2615 211 int b2 = ry * ry;
taylorza 0:2ee0812e2615 212 int fa2 = 4 * a2;
taylorza 0:2ee0812e2615 213 int fb2 = 4 * b2;
taylorza 0:2ee0812e2615 214
taylorza 0:2ee0812e2615 215 int ix, iy, sigma;
taylorza 0:2ee0812e2615 216 for (ix = 0, iy = ry, sigma = 2 * b2 + a2 * (1 - 2 * ry); b2 * ix <= a2 * iy; ix++)
taylorza 0:2ee0812e2615 217 {
taylorza 0:2ee0812e2615 218 setPixel(x + ix, y + iy, color);
taylorza 0:2ee0812e2615 219 setPixel(x - ix, y + iy, color);
taylorza 0:2ee0812e2615 220 setPixel(x + ix, y - iy, color);
taylorza 0:2ee0812e2615 221 setPixel(x - ix, y - iy, color);
taylorza 0:2ee0812e2615 222 if (sigma >= 0)
taylorza 0:2ee0812e2615 223 {
taylorza 0:2ee0812e2615 224 sigma+= fa2 * (1 - iy);
taylorza 0:2ee0812e2615 225 iy--;
taylorza 0:2ee0812e2615 226 }
taylorza 0:2ee0812e2615 227 sigma += b2 * ((4 * ix) + 6);
taylorza 0:2ee0812e2615 228 }
taylorza 0:2ee0812e2615 229
taylorza 0:2ee0812e2615 230 for (ix = rx, iy = 0, sigma = 2 * a2 + b2 * (1 - 2 * rx); a2 * iy <= b2 * ix; iy++)
taylorza 0:2ee0812e2615 231 {
taylorza 0:2ee0812e2615 232 setPixel(x + ix, y + iy, color);
taylorza 0:2ee0812e2615 233 setPixel(x - ix, y + iy, color);
taylorza 0:2ee0812e2615 234 setPixel(x + ix, y - iy, color);
taylorza 0:2ee0812e2615 235 setPixel(x - ix, y - iy, color);
taylorza 0:2ee0812e2615 236 if (sigma >= 0)
taylorza 0:2ee0812e2615 237 {
taylorza 0:2ee0812e2615 238 sigma+= fb2 * (1 - ix);
taylorza 0:2ee0812e2615 239 ix--;
taylorza 0:2ee0812e2615 240 }
taylorza 0:2ee0812e2615 241 sigma += a2 * ((4 * iy) + 6);
taylorza 0:2ee0812e2615 242 }
taylorza 0:2ee0812e2615 243 }
taylorza 0:2ee0812e2615 244 void LCD_ST7735::fillRect(int x1, int y1, int x2, int y2, uint16_t fillColor)
taylorza 0:2ee0812e2615 245 {
taylorza 0:2ee0812e2615 246 clipRect(x1, y1, x2, y2);
taylorza 0:2ee0812e2615 247 int c = ((x2-x1) * (y2-y1)) << 1;
taylorza 0:2ee0812e2615 248 uint8_t colorHigh = fillColor >> 8;
taylorza 0:2ee0812e2615 249 uint8_t colorLow = fillColor;
taylorza 0:2ee0812e2615 250 beginBatchCommand(CMD_RAMWR);
taylorza 0:2ee0812e2615 251 while(c--)
taylorza 0:2ee0812e2615 252 {
taylorza 0:2ee0812e2615 253 writeBatchData(colorHigh, colorLow);
taylorza 0:2ee0812e2615 254 }
taylorza 0:2ee0812e2615 255 endBatchCommand();
taylorza 0:2ee0812e2615 256 }
taylorza 0:2ee0812e2615 257
taylorza 0:2ee0812e2615 258 void LCD_ST7735::fillRect(int x1, int y1, int x2, int y2, uint16_t borderColor, uint16_t fillColor)
taylorza 0:2ee0812e2615 259 {
taylorza 0:2ee0812e2615 260 if (x1 > x2) swap(x1, x2);
taylorza 0:2ee0812e2615 261 if (y1 > y2) swap(y1, y2);
taylorza 0:2ee0812e2615 262
taylorza 0:2ee0812e2615 263 drawRect(x1, y1, x2, y2, borderColor);
taylorza 0:2ee0812e2615 264 clipRect(x1 + 1, y1 + 1, x2 - 1, y2 - 1);
taylorza 0:2ee0812e2615 265 int c = ((x2-x1-2) * (y2-y1-2)) << 1;
taylorza 0:2ee0812e2615 266 uint8_t colorHigh = fillColor >> 8;
taylorza 0:2ee0812e2615 267 uint8_t colorLow = fillColor;
taylorza 0:2ee0812e2615 268 beginBatchCommand(CMD_RAMWR);
taylorza 0:2ee0812e2615 269 while(c--)
taylorza 0:2ee0812e2615 270 {
taylorza 0:2ee0812e2615 271 writeBatchData(colorHigh, colorLow);
taylorza 0:2ee0812e2615 272 }
taylorza 0:2ee0812e2615 273 endBatchCommand();
taylorza 0:2ee0812e2615 274 }
taylorza 0:2ee0812e2615 275
taylorza 0:2ee0812e2615 276 void LCD_ST7735::fillCircle(int x, int y, int r, uint16_t borderColor, uint16_t fillColor)
taylorza 0:2ee0812e2615 277 {
taylorza 0:2ee0812e2615 278 int ix = r;
taylorza 0:2ee0812e2615 279 int iy = 0;
taylorza 0:2ee0812e2615 280 int err = 1 - r;
taylorza 0:2ee0812e2615 281
taylorza 0:2ee0812e2615 282 while(ix >= iy)
taylorza 0:2ee0812e2615 283 {
taylorza 0:2ee0812e2615 284 setPixel(x - ix, y + iy, borderColor);
taylorza 0:2ee0812e2615 285 setPixel(x + ix, y + iy, borderColor);
taylorza 0:2ee0812e2615 286 drawHorizLine(x - ix + 1, y + iy, x + ix - 1, fillColor);
taylorza 0:2ee0812e2615 287
taylorza 0:2ee0812e2615 288 setPixel(x - iy, y + ix, borderColor);
taylorza 0:2ee0812e2615 289 setPixel(x + iy, y + ix, borderColor);
taylorza 0:2ee0812e2615 290 drawHorizLine(x - iy + 1, y + ix, x + iy - 1, fillColor);
taylorza 0:2ee0812e2615 291
taylorza 0:2ee0812e2615 292 setPixel(x - ix, y - iy, borderColor);
taylorza 0:2ee0812e2615 293 setPixel(x + ix, y - iy, borderColor);
taylorza 0:2ee0812e2615 294 drawHorizLine(x - ix + 1, y - iy, x + ix - 1, fillColor);
taylorza 0:2ee0812e2615 295
taylorza 0:2ee0812e2615 296 setPixel(x - iy, y - ix, borderColor);
taylorza 0:2ee0812e2615 297 setPixel(x + iy, y - ix, borderColor);
taylorza 0:2ee0812e2615 298 drawHorizLine(x - iy + 1, y - ix, x + iy - 1, fillColor);
taylorza 0:2ee0812e2615 299 iy++;
taylorza 0:2ee0812e2615 300 if (err < 0)
taylorza 0:2ee0812e2615 301 {
taylorza 0:2ee0812e2615 302 err += 2 * iy + 1;
taylorza 0:2ee0812e2615 303 }
taylorza 0:2ee0812e2615 304 else
taylorza 0:2ee0812e2615 305 {
taylorza 0:2ee0812e2615 306 ix--;
taylorza 0:2ee0812e2615 307 err += 2 * (iy - ix + 1);
taylorza 0:2ee0812e2615 308 }
taylorza 0:2ee0812e2615 309 }
taylorza 0:2ee0812e2615 310 }
taylorza 0:2ee0812e2615 311
taylorza 0:2ee0812e2615 312 void LCD_ST7735::fillEllipse(int x, int y, int rx, int ry, uint16_t borderColor, uint16_t fillColor)
taylorza 0:2ee0812e2615 313 {
taylorza 0:2ee0812e2615 314 int a2 = rx * rx;
taylorza 0:2ee0812e2615 315 int b2 = ry * ry;
taylorza 0:2ee0812e2615 316 int fa2 = 4 * a2;
taylorza 0:2ee0812e2615 317 int fb2 = 4 * b2;
taylorza 0:2ee0812e2615 318
taylorza 0:2ee0812e2615 319 int ix, iy, sigma;
taylorza 0:2ee0812e2615 320 for (ix = 0, iy = ry, sigma = 2 * b2 + a2 * (1 - 2 * ry); b2 * ix <= a2 * iy; ix++)
taylorza 0:2ee0812e2615 321 {
taylorza 0:2ee0812e2615 322 setPixel(x + ix, y + iy, borderColor);
taylorza 0:2ee0812e2615 323 setPixel(x - ix, y + iy, borderColor);
taylorza 0:2ee0812e2615 324 drawHorizLine(x - ix + 1, y + iy, x + ix - 1, fillColor);
taylorza 0:2ee0812e2615 325
taylorza 0:2ee0812e2615 326 setPixel(x + ix, y - iy, borderColor);
taylorza 0:2ee0812e2615 327 setPixel(x - ix, y - iy, borderColor);
taylorza 0:2ee0812e2615 328 drawHorizLine(x - ix + 1, y - iy, x + ix - 1, fillColor);
taylorza 0:2ee0812e2615 329
taylorza 0:2ee0812e2615 330 if (sigma >= 0)
taylorza 0:2ee0812e2615 331 {
taylorza 0:2ee0812e2615 332 sigma+= fa2 * (1 - iy);
taylorza 0:2ee0812e2615 333 iy--;
taylorza 0:2ee0812e2615 334 }
taylorza 0:2ee0812e2615 335 sigma += b2 * ((4 * ix) + 6);
taylorza 0:2ee0812e2615 336 }
taylorza 0:2ee0812e2615 337
taylorza 0:2ee0812e2615 338 for (ix = rx, iy = 0, sigma = 2 * a2 + b2 * (1 - 2 * rx); a2 * iy <= b2 * ix; iy++)
taylorza 0:2ee0812e2615 339 {
taylorza 0:2ee0812e2615 340 setPixel(x + ix, y + iy, borderColor);
taylorza 0:2ee0812e2615 341 setPixel(x - ix, y + iy, borderColor);
taylorza 0:2ee0812e2615 342 drawHorizLine(x - ix + 1, y + iy, x + ix - 1, fillColor);
taylorza 0:2ee0812e2615 343
taylorza 0:2ee0812e2615 344 setPixel(x + ix, y - iy, borderColor);
taylorza 0:2ee0812e2615 345 setPixel(x - ix, y - iy, borderColor);
taylorza 0:2ee0812e2615 346 drawHorizLine(x - ix + 1, y - iy, x + ix - 1, fillColor);
taylorza 0:2ee0812e2615 347 if (sigma >= 0)
taylorza 0:2ee0812e2615 348 {
taylorza 0:2ee0812e2615 349 sigma+= fb2 * (1 - ix);
taylorza 0:2ee0812e2615 350 ix--;
taylorza 0:2ee0812e2615 351 }
taylorza 0:2ee0812e2615 352 sigma += a2 * ((4 * iy) + 6);
taylorza 0:2ee0812e2615 353 }
taylorza 0:2ee0812e2615 354 }
taylorza 0:2ee0812e2615 355
taylorza 0:2ee0812e2615 356 void LCD_ST7735::drawBitmap(int x, int y, const uint16_t *pbmp)
taylorza 0:2ee0812e2615 357 {
taylorza 0:2ee0812e2615 358 int w = *pbmp++;
taylorza 0:2ee0812e2615 359 int h = *pbmp++;
taylorza 0:2ee0812e2615 360
taylorza 3:a93fe5f207f5 361 drawBitmap(x, y, pbmp, 0, 0, w, h);
taylorza 0:2ee0812e2615 362 }
taylorza 0:2ee0812e2615 363
taylorza 0:2ee0812e2615 364 void LCD_ST7735::drawBitmap(int x, int y, const uint16_t *pbmp, int srcX, int srcY, int srcWidth, int srcHeight)
taylorza 0:2ee0812e2615 365 {
taylorza 3:a93fe5f207f5 366 // Clip if out of screen
taylorza 3:a93fe5f207f5 367 if ((x >= _width) || (x + srcWidth < 0) ||
taylorza 3:a93fe5f207f5 368 (y >= _height) || (y + srcHeight < 0))
taylorza 3:a93fe5f207f5 369 {
taylorza 3:a93fe5f207f5 370 return;
taylorza 3:a93fe5f207f5 371 }
taylorza 3:a93fe5f207f5 372
taylorza 3:a93fe5f207f5 373 // Clip X
taylorza 3:a93fe5f207f5 374 if (x < 0) { srcX += -x; srcWidth += x; x = 0; }
taylorza 3:a93fe5f207f5 375 if (x + srcWidth >= _width) { srcWidth += _width - (x + srcWidth); }
taylorza 3:a93fe5f207f5 376
taylorza 3:a93fe5f207f5 377 // Clip Y
taylorza 3:a93fe5f207f5 378 if (y < 0) {srcY += -y; srcHeight += y; y = 0; }
taylorza 3:a93fe5f207f5 379 if (y + srcHeight >= _height) { srcHeight += _height - (y + srcHeight); }
taylorza 3:a93fe5f207f5 380
taylorza 0:2ee0812e2615 381 int w = *pbmp++;
taylorza 0:2ee0812e2615 382 int h = *pbmp++;
taylorza 0:2ee0812e2615 383
taylorza 0:2ee0812e2615 384 clip(x, y, srcWidth, srcHeight);
taylorza 0:2ee0812e2615 385 beginBatchCommand(CMD_RAMWR);
taylorza 0:2ee0812e2615 386 const uint16_t *p = pbmp + srcX + (srcY * w);
taylorza 0:2ee0812e2615 387 for(int iy = 0; iy < srcHeight; ++iy)
taylorza 0:2ee0812e2615 388 {
taylorza 0:2ee0812e2615 389 for(int ix = 0; ix < srcWidth; ++ix)
taylorza 0:2ee0812e2615 390 {
taylorza 0:2ee0812e2615 391 writeBatchData(*(p + ix));
taylorza 0:2ee0812e2615 392 }
taylorza 0:2ee0812e2615 393 p += w;
taylorza 0:2ee0812e2615 394 }
taylorza 0:2ee0812e2615 395 endBatchCommand();
taylorza 0:2ee0812e2615 396 }
taylorza 0:2ee0812e2615 397
taylorza 0:2ee0812e2615 398 void LCD_ST7735::drawBitmap(int x, int y, Bitmap4bpp &bmp, int srcX, int srcY, int srcWidth, int srcHeight)
taylorza 0:2ee0812e2615 399 {
taylorza 3:a93fe5f207f5 400 // Clip if out of screen
taylorza 3:a93fe5f207f5 401 if ((x >= _width) || (x + srcWidth < 0) ||
taylorza 3:a93fe5f207f5 402 (y >= _height) || (y + srcHeight < 0))
taylorza 3:a93fe5f207f5 403 {
taylorza 3:a93fe5f207f5 404 return;
taylorza 3:a93fe5f207f5 405 }
taylorza 3:a93fe5f207f5 406
taylorza 3:a93fe5f207f5 407 // Clip X
taylorza 3:a93fe5f207f5 408 if (x < 0) { srcX += -x; srcWidth += x; x = 0; }
taylorza 3:a93fe5f207f5 409 if (x + srcWidth >= _width) { srcWidth += _width - (x + srcWidth); }
taylorza 3:a93fe5f207f5 410
taylorza 3:a93fe5f207f5 411 // Clip Y
taylorza 3:a93fe5f207f5 412 if (y < 0) {srcY += -y; srcHeight += y; y = 0; }
taylorza 3:a93fe5f207f5 413 if (y + srcHeight >= _height) { srcHeight += _height - (y + srcHeight); }
taylorza 3:a93fe5f207f5 414
taylorza 0:2ee0812e2615 415 int stride = bmp.getStride();
taylorza 0:2ee0812e2615 416
taylorza 0:2ee0812e2615 417 bool oddStart = srcX & 0x01;
taylorza 0:2ee0812e2615 418 bool oddWidth = srcWidth & 0x01;
taylorza 0:2ee0812e2615 419 bool oddEnd = oddStart ^ oddWidth;
taylorza 0:2ee0812e2615 420
taylorza 0:2ee0812e2615 421 int startX = oddStart ? 1 : 0;
taylorza 0:2ee0812e2615 422 int endX = (oddEnd ? srcWidth : srcWidth + 1) >> 1;
taylorza 0:2ee0812e2615 423
taylorza 0:2ee0812e2615 424 const uint8_t *p = bmp.getBitmapData() + (srcX >> 1) + (srcY * stride);
taylorza 0:2ee0812e2615 425
taylorza 0:2ee0812e2615 426 clip(x, y, srcWidth, srcHeight);
taylorza 0:2ee0812e2615 427 beginBatchCommand(CMD_RAMWR);
taylorza 0:2ee0812e2615 428 for(int iy = 0; iy < srcHeight; ++iy, p += stride)
taylorza 0:2ee0812e2615 429 {
taylorza 0:2ee0812e2615 430 if (oddStart) writeBatchData(_palette[*p & 0x0f]);
taylorza 0:2ee0812e2615 431 for(int ix = startX; ix < endX; ++ix)
taylorza 0:2ee0812e2615 432 {
taylorza 0:2ee0812e2615 433 uint8_t c = *(p + ix);
taylorza 0:2ee0812e2615 434 writeBatchData(_palette[(c >> 4) & 0x0f]);
taylorza 0:2ee0812e2615 435 writeBatchData(_palette[c & 0x0f]);
taylorza 0:2ee0812e2615 436 }
taylorza 0:2ee0812e2615 437 if (oddEnd) writeBatchData(_palette[(*(p + endX) >> 4) & 0x0f]);
taylorza 0:2ee0812e2615 438 }
taylorza 0:2ee0812e2615 439 endBatchCommand();
taylorza 0:2ee0812e2615 440 }
taylorza 0:2ee0812e2615 441
taylorza 0:2ee0812e2615 442 void LCD_ST7735::setForegroundColor(uint16_t color)
taylorza 0:2ee0812e2615 443 {
taylorza 0:2ee0812e2615 444 _foregroundColorHigh = color >> 8;
taylorza 0:2ee0812e2615 445 _foregroundColorLow = color;
taylorza 0:2ee0812e2615 446 }
taylorza 0:2ee0812e2615 447
taylorza 0:2ee0812e2615 448 void LCD_ST7735::setBackgroundColor(uint16_t color)
taylorza 0:2ee0812e2615 449 {
taylorza 0:2ee0812e2615 450 _backgroundColorHigh = color >> 8;
taylorza 0:2ee0812e2615 451 _backgroundColorLow = color;
taylorza 0:2ee0812e2615 452 }
taylorza 0:2ee0812e2615 453
taylorza 0:2ee0812e2615 454 void LCD_ST7735::drawString(const uint8_t *pFont, int x, int y, const char *pString)
taylorza 0:2ee0812e2615 455 {
taylorza 0:2ee0812e2615 456 char *p = (char*)pString;
taylorza 0:2ee0812e2615 457 while(*p != 0)
taylorza 0:2ee0812e2615 458 {
taylorza 0:2ee0812e2615 459 drawChar(pFont, x, y, *p++);
taylorza 0:2ee0812e2615 460 x += 8;
taylorza 0:2ee0812e2615 461 }
taylorza 0:2ee0812e2615 462 }
taylorza 0:2ee0812e2615 463
taylorza 0:2ee0812e2615 464 void LCD_ST7735::selectDevice()
taylorza 0:2ee0812e2615 465 {
taylorza 0:2ee0812e2615 466 _spi.prepareFastSPI();
taylorza 0:2ee0812e2615 467 }
taylorza 0:2ee0812e2615 468
taylorza 0:2ee0812e2615 469 void LCD_ST7735::drawVertLine(int x1, int y1, int y2, uint16_t color)
taylorza 0:2ee0812e2615 470 {
taylorza 0:2ee0812e2615 471 clipRect(x1, y1, x1, y2);
taylorza 0:2ee0812e2615 472 beginBatchCommand(CMD_RAMWR);
taylorza 0:2ee0812e2615 473 int c = (y2 - y1) << 1;
taylorza 0:2ee0812e2615 474 uint8_t colorHigh = color >> 8;
taylorza 0:2ee0812e2615 475 uint8_t colorLow = color;
taylorza 0:2ee0812e2615 476 for (int i = 0; i < c; ++i)
taylorza 0:2ee0812e2615 477 {
taylorza 0:2ee0812e2615 478 writeBatchData(colorHigh, colorLow);
taylorza 0:2ee0812e2615 479 }
taylorza 0:2ee0812e2615 480 endBatchCommand();
taylorza 0:2ee0812e2615 481 }
taylorza 0:2ee0812e2615 482
taylorza 0:2ee0812e2615 483 void LCD_ST7735::drawHorizLine(int x1, int y1, int x2, uint16_t color)
taylorza 0:2ee0812e2615 484 {
taylorza 0:2ee0812e2615 485 clipRect(x1, y1, x2, y1);
taylorza 0:2ee0812e2615 486 beginBatchCommand(CMD_RAMWR);
taylorza 0:2ee0812e2615 487 int c = (x2 - x1) << 1;
taylorza 0:2ee0812e2615 488 uint8_t colorHigh = color >> 8;
taylorza 0:2ee0812e2615 489 uint8_t colorLow = color;
taylorza 0:2ee0812e2615 490 for (int i = 0; i < c; ++i)
taylorza 0:2ee0812e2615 491 {
taylorza 0:2ee0812e2615 492 writeBatchData(colorHigh, colorLow);
taylorza 0:2ee0812e2615 493 }
taylorza 0:2ee0812e2615 494 endBatchCommand();
taylorza 0:2ee0812e2615 495 }
taylorza 0:2ee0812e2615 496
taylorza 0:2ee0812e2615 497 void LCD_ST7735::drawChar(const uint8_t *pFont, int x, int y, char c)
taylorza 0:2ee0812e2615 498 {
taylorza 0:2ee0812e2615 499 const uint8_t *pChar = pFont + (c * 8);
taylorza 0:2ee0812e2615 500
taylorza 0:2ee0812e2615 501 clip(x, y, 8, 8);
taylorza 0:2ee0812e2615 502 beginBatchCommand(CMD_RAMWR);
taylorza 0:2ee0812e2615 503 for(int r = 0; r < 8; ++r)
taylorza 0:2ee0812e2615 504 {
taylorza 0:2ee0812e2615 505 uint8_t b = pChar[r];
taylorza 0:2ee0812e2615 506 for(int c = 0; c < 8; ++c)
taylorza 0:2ee0812e2615 507 {
taylorza 0:2ee0812e2615 508 if (b & 0x80)
taylorza 0:2ee0812e2615 509 {
taylorza 0:2ee0812e2615 510 writeBatchData(_foregroundColorHigh);
taylorza 0:2ee0812e2615 511 writeBatchData(_foregroundColorLow);
taylorza 0:2ee0812e2615 512 }
taylorza 0:2ee0812e2615 513 else
taylorza 0:2ee0812e2615 514 {
taylorza 0:2ee0812e2615 515 writeBatchData(_backgroundColorHigh);
taylorza 0:2ee0812e2615 516 writeBatchData(_backgroundColorLow);
taylorza 0:2ee0812e2615 517 }
taylorza 0:2ee0812e2615 518
taylorza 0:2ee0812e2615 519 b <<= 1;
taylorza 0:2ee0812e2615 520 }
taylorza 0:2ee0812e2615 521 }
taylorza 0:2ee0812e2615 522 endBatchCommand();
taylorza 0:2ee0812e2615 523 }
taylorza 0:2ee0812e2615 524
taylorza 0:2ee0812e2615 525 void LCD_ST7735::initDisplay()
taylorza 0:2ee0812e2615 526 {
taylorza 0:2ee0812e2615 527 selectDevice();
taylorza 0:2ee0812e2615 528 reset();
taylorza 0:2ee0812e2615 529
taylorza 0:2ee0812e2615 530 writeCommand(CMD_SLPOUT);
taylorza 0:2ee0812e2615 531
taylorza 0:2ee0812e2615 532 write(CMD_FRMCTR1, (uint8_t[]){0x01, 0x2c, 0x2d}, 3);
taylorza 0:2ee0812e2615 533 write(CMD_FRMCTR2, (uint8_t[]){0x01, 0x2c, 0x2d}, 3);
taylorza 0:2ee0812e2615 534 write(CMD_FRMCTR3, (uint8_t[]){0x01, 0x2c, 0x2d, 0x01, 0x2c, 0x2d}, 6);
taylorza 0:2ee0812e2615 535
taylorza 0:2ee0812e2615 536 write(CMD_INVCTR, (uint8_t[]){0x07}, 1);
taylorza 0:2ee0812e2615 537
taylorza 0:2ee0812e2615 538 write(CMD_PWCTR1, (uint8_t[]){0xa2, 0x02, 0x84}, 3);
taylorza 0:2ee0812e2615 539 write(CMD_PWCTR2, (uint8_t[]){0xc5}, 1);
taylorza 0:2ee0812e2615 540 write(CMD_PWCTR3, (uint8_t[]){0x0a, 0x00}, 2);
taylorza 0:2ee0812e2615 541 write(CMD_PWCTR4, (uint8_t[]){0x8a, 0x2a}, 2);
taylorza 0:2ee0812e2615 542 write(CMD_PWCTR5, (uint8_t[]){0x8a, 0xee}, 2);
taylorza 0:2ee0812e2615 543
taylorza 0:2ee0812e2615 544 write(CMD_VMCTR1, (uint8_t[]){0x0e}, 1);
taylorza 0:2ee0812e2615 545
taylorza 0:2ee0812e2615 546 write(CMD_MADCTL, (uint8_t[]){0xc0 | _colorFilter}, 1);
taylorza 0:2ee0812e2615 547
taylorza 0:2ee0812e2615 548 // Gama sequence
taylorza 0:2ee0812e2615 549 write(CMD_GAMCTRP1, (uint8_t[])
taylorza 0:2ee0812e2615 550 {
taylorza 0:2ee0812e2615 551 0x0f, 0x1a,
taylorza 0:2ee0812e2615 552 0x0f, 0x18,
taylorza 0:2ee0812e2615 553 0x2f, 0x28,
taylorza 0:2ee0812e2615 554 0x20, 0x22,
taylorza 0:2ee0812e2615 555 0x1f, 0x1b,
taylorza 0:2ee0812e2615 556 0x23, 0x37,
taylorza 0:2ee0812e2615 557 0x00, 0x07,
taylorza 0:2ee0812e2615 558 0x02, 0x10
taylorza 0:2ee0812e2615 559 }, 16);
taylorza 0:2ee0812e2615 560
taylorza 0:2ee0812e2615 561 write(CMD_GAMCTRN1, (uint8_t[])
taylorza 0:2ee0812e2615 562 {
taylorza 0:2ee0812e2615 563 0x0f, 0x1b,
taylorza 0:2ee0812e2615 564 0x0f, 0x17,
taylorza 0:2ee0812e2615 565 0x33, 0x2c,
taylorza 0:2ee0812e2615 566 0x29, 0x2e,
taylorza 0:2ee0812e2615 567 0x30, 0x30,
taylorza 0:2ee0812e2615 568 0x39, 0x3f,
taylorza 0:2ee0812e2615 569 0x00, 0x07,
taylorza 0:2ee0812e2615 570 0x03, 0x10
taylorza 0:2ee0812e2615 571 }, 16);
taylorza 0:2ee0812e2615 572
taylorza 0:2ee0812e2615 573 write(CMD_CASET, (uint8_t[]){0x00, 0x00, 0x00, 0x7f}, 4);
taylorza 0:2ee0812e2615 574 write(CMD_RASET, (uint8_t[]){0x00, 0x00, 0x00, 0x9f}, 4);
taylorza 0:2ee0812e2615 575
taylorza 0:2ee0812e2615 576 write(CMD_EXTCTRL, (uint8_t[]){0x01}, 1);
taylorza 0:2ee0812e2615 577
taylorza 0:2ee0812e2615 578 // Disable RAM power save
taylorza 0:2ee0812e2615 579 write(0xf6, (uint8_t[]){0x00}, 1);
taylorza 0:2ee0812e2615 580
taylorza 0:2ee0812e2615 581 // 65k color mode
taylorza 0:2ee0812e2615 582 write(CMD_COLMOD, (uint8_t[]){0x05}, 1);
taylorza 0:2ee0812e2615 583
taylorza 0:2ee0812e2615 584 // Enable display
taylorza 0:2ee0812e2615 585 writeCommand(CMD_DISPON);
taylorza 0:2ee0812e2615 586
taylorza 0:2ee0812e2615 587 setBacklight(true);
taylorza 0:2ee0812e2615 588 }
taylorza 0:2ee0812e2615 589
taylorza 0:2ee0812e2615 590 void LCD_ST7735::reset()
taylorza 0:2ee0812e2615 591 {
taylorza 0:2ee0812e2615 592 _reset = 0;
taylorza 0:2ee0812e2615 593 wait_us(100);
taylorza 0:2ee0812e2615 594 _reset = 1;
taylorza 0:2ee0812e2615 595 wait_us(100);
taylorza 0:2ee0812e2615 596 }
taylorza 0:2ee0812e2615 597
taylorza 0:2ee0812e2615 598 void LCD_ST7735::clip(int x, int y, int w, int h)
taylorza 0:2ee0812e2615 599 {
taylorza 0:2ee0812e2615 600 clipRect(x, y, (x + w) - 1, (y + h) - 1);
taylorza 0:2ee0812e2615 601 }
taylorza 0:2ee0812e2615 602
taylorza 0:2ee0812e2615 603 void LCD_ST7735::clipRect(int x1, int y1, int x2, int y2)
taylorza 0:2ee0812e2615 604 {
taylorza 0:2ee0812e2615 605 uint8_t x1l = (uint8_t)x1;
taylorza 0:2ee0812e2615 606 //uint8_t x1h = (uint8_t)(x1 >> 8);
taylorza 0:2ee0812e2615 607 uint8_t x2l = (uint8_t)x2;
taylorza 0:2ee0812e2615 608 //uint8_t x2h = (uint8_t)(x2 >> 8);
taylorza 0:2ee0812e2615 609 write(CMD_CASET, (uint8_t[]){0, x1l, 0, x2l}, 4);
taylorza 0:2ee0812e2615 610
taylorza 0:2ee0812e2615 611 uint8_t y1l = (uint8_t)y1;
taylorza 0:2ee0812e2615 612 //uint8_t y1h = (uint8_t)(y1 >> 8);
taylorza 0:2ee0812e2615 613 uint8_t y2l = (uint8_t)y2;
taylorza 0:2ee0812e2615 614 //uint8_t y2h = (uint8_t)(y2 >> 8);
taylorza 0:2ee0812e2615 615 write(CMD_RASET, (uint8_t[]){0, y1l, 0, y2l}, 4);
taylorza 0:2ee0812e2615 616 }
taylorza 0:2ee0812e2615 617
taylorza 0:2ee0812e2615 618 void LCD_ST7735::writeCommand(uint8_t cmd)
taylorza 0:2ee0812e2615 619 {
taylorza 0:2ee0812e2615 620 _cs = 0;
taylorza 0:2ee0812e2615 621 _ds = 0;
taylorza 0:2ee0812e2615 622 _spi.fastWrite(cmd);
taylorza 0:2ee0812e2615 623 _spi.waitWhileBusy();
taylorza 0:2ee0812e2615 624 _spi.clearRx();
taylorza 0:2ee0812e2615 625 _cs = 1;
taylorza 0:2ee0812e2615 626 }
taylorza 0:2ee0812e2615 627
taylorza 0:2ee0812e2615 628 void LCD_ST7735::write(uint8_t cmd, uint8_t data[], int dataLen)
taylorza 0:2ee0812e2615 629 {
taylorza 0:2ee0812e2615 630 _cs = 0;
taylorza 0:2ee0812e2615 631 _ds = 0;
taylorza 0:2ee0812e2615 632 _spi.fastWrite(cmd);
taylorza 0:2ee0812e2615 633 _spi.waitWhileBusy();
taylorza 0:2ee0812e2615 634 if (data != NULL & dataLen > 0)
taylorza 0:2ee0812e2615 635 {
taylorza 0:2ee0812e2615 636 _ds = 1;
taylorza 0:2ee0812e2615 637 for(int i = 0; i < dataLen; ++i)
taylorza 0:2ee0812e2615 638 {
taylorza 0:2ee0812e2615 639 _spi.fastWrite(data[i]);
taylorza 0:2ee0812e2615 640 }
taylorza 0:2ee0812e2615 641 _spi.waitWhileBusy();
taylorza 0:2ee0812e2615 642 _ds = 0;
taylorza 0:2ee0812e2615 643 }
taylorza 0:2ee0812e2615 644 _spi.clearRx();
taylorza 0:2ee0812e2615 645 _cs = 1;
taylorza 0:2ee0812e2615 646 }
taylorza 0:2ee0812e2615 647
taylorza 0:2ee0812e2615 648 void LCD_ST7735::write(uint8_t cmd, uint16_t data)
taylorza 0:2ee0812e2615 649 {
taylorza 0:2ee0812e2615 650 _cs = 0;
taylorza 0:2ee0812e2615 651 _ds = 0;
taylorza 0:2ee0812e2615 652 _spi.fastWrite(cmd);
taylorza 0:2ee0812e2615 653 _spi.waitWhileBusy();
taylorza 0:2ee0812e2615 654 _ds = 1;
taylorza 0:2ee0812e2615 655 _spi.fastWrite(data >> 8);
taylorza 0:2ee0812e2615 656 _spi.fastWrite(data);
taylorza 0:2ee0812e2615 657 _spi.waitWhileBusy();
taylorza 0:2ee0812e2615 658 _spi.clearRx();
taylorza 0:2ee0812e2615 659 _ds = 0;
taylorza 0:2ee0812e2615 660 _cs = 1;
taylorza 0:2ee0812e2615 661 }
taylorza 0:2ee0812e2615 662
taylorza 0:2ee0812e2615 663 void LCD_ST7735::beginBatchCommand(uint8_t cmd)
taylorza 0:2ee0812e2615 664 {
taylorza 0:2ee0812e2615 665 _cs = 0;
taylorza 0:2ee0812e2615 666 _ds = 0;
taylorza 0:2ee0812e2615 667 _spi.fastWrite(cmd);
taylorza 0:2ee0812e2615 668 _spi.waitWhileBusy();
taylorza 0:2ee0812e2615 669 _ds = 1;
taylorza 0:2ee0812e2615 670 }
taylorza 0:2ee0812e2615 671
taylorza 0:2ee0812e2615 672 void LCD_ST7735::writeBatchData(uint8_t data)
taylorza 0:2ee0812e2615 673 {
taylorza 0:2ee0812e2615 674 _spi.fastWrite(data);
taylorza 0:2ee0812e2615 675 }
taylorza 0:2ee0812e2615 676
taylorza 0:2ee0812e2615 677 void LCD_ST7735::writeBatchData(uint8_t dataHigh, uint8_t dataLow)
taylorza 0:2ee0812e2615 678 {
taylorza 0:2ee0812e2615 679 _spi.fastWrite(dataHigh);
taylorza 0:2ee0812e2615 680 _spi.fastWrite(dataLow);
taylorza 0:2ee0812e2615 681 }
taylorza 0:2ee0812e2615 682
taylorza 0:2ee0812e2615 683
taylorza 0:2ee0812e2615 684 void LCD_ST7735::writeBatchData(uint16_t data)
taylorza 0:2ee0812e2615 685 {
taylorza 0:2ee0812e2615 686 _spi.fastWrite(data >> 8);
taylorza 0:2ee0812e2615 687 _spi.fastWrite(data);
taylorza 0:2ee0812e2615 688 }
taylorza 0:2ee0812e2615 689
taylorza 0:2ee0812e2615 690 void LCD_ST7735::endBatchCommand()
taylorza 0:2ee0812e2615 691 {
taylorza 0:2ee0812e2615 692 _spi.waitWhileBusy();
taylorza 0:2ee0812e2615 693 _spi.clearRx();
taylorza 0:2ee0812e2615 694 _ds = 0;
taylorza 0:2ee0812e2615 695 _cs = 1;
taylorza 0:2ee0812e2615 696 }
taylorza 0:2ee0812e2615 697
taylorza 3:a93fe5f207f5 698