Platform game written for the GHI/OutrageousCircuits RETRO game device. Navigate the caves collecting all the pickups and avoiding the creatures and haunted mine carts that patrol the caves. Oh and remember to watch out for the poisonous plants... This game demonstrates the ability to have multiple animated sprites where the sprites can overlap the background environment. See how the player moves past the fence and climbs the wall in the 3rd screen.

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