SPI based library for the ST7735 LCD controller.

Dependents:   RayCastingEngine RETRO_LCD_PerformanceTest RETRO_loop_test RETRO_RickGame ... more

Committer:
taylorza
Date:
Fri Sep 19 02:43:29 2014 +0000
Revision:
0:7b3fb3085867
Child:
1:33ff5fad4320
Initial commit of the library

Who changed what in which revision?

UserRevisionLine numberNew contents of line
taylorza 0:7b3fb3085867 1 ///////////////////////////////////////////////////////////////////////////////
taylorza 0:7b3fb3085867 2 // LCD_ST7735 - Driver for ST7735 LCD display controller
taylorza 0:7b3fb3085867 3 // Author: Chris Taylor (taylorza)
taylorza 0:7b3fb3085867 4
taylorza 0:7b3fb3085867 5 #ifndef __LCD_ST7735__
taylorza 0:7b3fb3085867 6 #define __LCD_ST7735__
taylorza 0:7b3fb3085867 7 /** LCD_ST7735 is a simple driver for the ST7735 LCD controller. It provides basic drawing primitives sa well as text and font capabilities.
taylorza 0:7b3fb3085867 8 * The driver is currently hardcoded to support 65K colors using a 565 RGB pixel format.
taylorza 0:7b3fb3085867 9 */
taylorza 0:7b3fb3085867 10 class LCD_ST7735
taylorza 0:7b3fb3085867 11 {
taylorza 0:7b3fb3085867 12 public:
taylorza 0:7b3fb3085867 13 /**Creates an instance of the LCD_ST7735 driver
taylorza 0:7b3fb3085867 14 * @param backlightPin pin used to control the backlight
taylorza 0:7b3fb3085867 15 * @param resetPin pin used to reset the display controller
taylorza 0:7b3fb3085867 16 * @param dsPin pin used to put the display controller into data mode
taylorza 0:7b3fb3085867 17 * @param mosiPin SPI channel MOSI pin
taylorza 0:7b3fb3085867 18 * @param misoPin SPI channel MISO pin
taylorza 0:7b3fb3085867 19 * @param clkPin SPI channel clock pin
taylorza 0:7b3fb3085867 20 * @param csPin SPI chip select pin
taylorza 0:7b3fb3085867 21 */
taylorza 0:7b3fb3085867 22 LCD_ST7735(
taylorza 0:7b3fb3085867 23 PinName backlightPin,
taylorza 0:7b3fb3085867 24 PinName resetPin,
taylorza 0:7b3fb3085867 25 PinName dsPin,
taylorza 0:7b3fb3085867 26 PinName mosiPin,
taylorza 0:7b3fb3085867 27 PinName misoPin,
taylorza 0:7b3fb3085867 28 PinName clkPin,
taylorza 0:7b3fb3085867 29 PinName csPin
taylorza 0:7b3fb3085867 30 );
taylorza 0:7b3fb3085867 31
taylorza 0:7b3fb3085867 32 /** Control the display's backlight
taylorza 0:7b3fb3085867 33 * @param state true to turn the backlight on, false to turn it off
taylorza 0:7b3fb3085867 34 */
taylorza 0:7b3fb3085867 35 void setBacklight(bool state);
taylorza 0:7b3fb3085867 36
taylorza 0:7b3fb3085867 37 /** Clear the screen
taylorza 0:7b3fb3085867 38 * @param color The color used to clear the screen. Defaults to black if not passed.
taylorza 0:7b3fb3085867 39 */
taylorza 0:7b3fb3085867 40 void clearScreen(uint16_t color = 0x0000);
taylorza 0:7b3fb3085867 41
taylorza 0:7b3fb3085867 42 /** Set a pixel on the display to the specified color
taylorza 0:7b3fb3085867 43 * @param x The X coordinate of the pixel (0..127)
taylorza 0:7b3fb3085867 44 * @param y The Y coordinate of the pixel (0..159)
taylorza 0:7b3fb3085867 45 * @param color Color to set the pixel to.
taylorza 0:7b3fb3085867 46 */
taylorza 0:7b3fb3085867 47 void setPixel(int x, int y, uint16_t color);
taylorza 0:7b3fb3085867 48
taylorza 0:7b3fb3085867 49 /** Draw a line on the display
taylorza 0:7b3fb3085867 50 * @param x1 The X coordinate of the starting point on the line
taylorza 0:7b3fb3085867 51 * @param y1 The Y coordinate of the starting point on the line
taylorza 0:7b3fb3085867 52 * @param x2 The X coordinate of the end point on the line
taylorza 0:7b3fb3085867 53 * @param y2 The Y coordinate of the end point on the line
taylorza 0:7b3fb3085867 54 * @param color The color used to draw the pixel
taylorza 0:7b3fb3085867 55 */
taylorza 0:7b3fb3085867 56 void drawLine(int x1, int y1, int x2, int y2, uint16_t color);
taylorza 0:7b3fb3085867 57
taylorza 0:7b3fb3085867 58 /** Draw a rectangle on the display
taylorza 0:7b3fb3085867 59 * @param x1 The X coordinate of the upper left corner
taylorza 0:7b3fb3085867 60 * @param y1 The Y coordinate of the upper left corner
taylorza 0:7b3fb3085867 61 * @param x2 The X coordinate of the lower right corner
taylorza 0:7b3fb3085867 62 * @param y2 The Y coordinate of the lower right corner
taylorza 0:7b3fb3085867 63 * @param color The color used to draw the rectangle
taylorza 0:7b3fb3085867 64 */
taylorza 0:7b3fb3085867 65 void drawRect(int x1, int y1, int x2, int y2, uint16_t color);
taylorza 0:7b3fb3085867 66
taylorza 0:7b3fb3085867 67 /** Draw a circle on the display
taylorza 0:7b3fb3085867 68 * @param x The X coordinate of the center of the circle
taylorza 0:7b3fb3085867 69 * @param y The Y coordinate of the center of the circle
taylorza 0:7b3fb3085867 70 * @param r The radius of the circle
taylorza 0:7b3fb3085867 71 * @param color The color used to draw the circle
taylorza 0:7b3fb3085867 72 */
taylorza 0:7b3fb3085867 73 void drawCircle(int x, int y, int r, uint16_t color);
taylorza 0:7b3fb3085867 74
taylorza 0:7b3fb3085867 75 /** Draw a filled rectangle on the display
taylorza 0:7b3fb3085867 76 * @param x1 The X coordinate of the upper left corner
taylorza 0:7b3fb3085867 77 * @param y1 The Y coordinate of the upper left corner
taylorza 0:7b3fb3085867 78 * @param x2 The X coordinate of the lower right corner
taylorza 0:7b3fb3085867 79 * @param y2 The Y coordinate of the lower right corner
taylorza 0:7b3fb3085867 80 * @param borderColor The color used to draw the rectangle frame
taylorza 0:7b3fb3085867 81 * @param fillColor The color used to fill the rectangle
taylorza 0:7b3fb3085867 82 */
taylorza 0:7b3fb3085867 83 void fillRect(int x1, int y1, int x2, int y2, uint16_t borderColor, uint16_t fillColor);
taylorza 0:7b3fb3085867 84
taylorza 0:7b3fb3085867 85 /** Draw a filled circle on the display
taylorza 0:7b3fb3085867 86 * @param x The X coordinate of the center of the circle
taylorza 0:7b3fb3085867 87 * @param y The Y coordinate of the center of the circle
taylorza 0:7b3fb3085867 88 * @param borderColor The color used to draw the circumference of the circle
taylorza 0:7b3fb3085867 89 * @param fillColor The color used to fill the circle
taylorza 0:7b3fb3085867 90 */
taylorza 0:7b3fb3085867 91 void fillCircle(int x, int y, int r, uint16_t borderColor, uint16_t fillColor);
taylorza 0:7b3fb3085867 92
taylorza 0:7b3fb3085867 93 /** Draw a bitmap on the screen
taylorza 0:7b3fb3085867 94 * @param x The X coordinate location to draw the bitmap.
taylorza 0:7b3fb3085867 95 * @param y The Y coordinate location to draw the bitmap.
taylorza 0:7b3fb3085867 96 * @param pbmp Pointer to the bitmap.
taylorza 0:7b3fb3085867 97 * @note The bitmap is an single dimensional uint8_t (unsigned short) array.
taylorza 0:7b3fb3085867 98 * The first to elements of the array indicate the width and height of the bitmap repectively.
taylorza 0:7b3fb3085867 99 * The rest of the entries int the array make up the pixel data for the array.
taylorza 0:7b3fb3085867 100 */
taylorza 0:7b3fb3085867 101 void drawBitmap(int x, int y, const uint16_t *pbmp);
taylorza 0:7b3fb3085867 102
taylorza 0:7b3fb3085867 103 /** Set the foreground color used to render text
taylorza 0:7b3fb3085867 104 * @param color Color used when drawing text to the display
taylorza 0:7b3fb3085867 105 * @note The color can be changed multiple times to render text in various colors on the display
taylorza 0:7b3fb3085867 106 */
taylorza 0:7b3fb3085867 107 void setForegroundColor(uint16_t color);
taylorza 0:7b3fb3085867 108
taylorza 0:7b3fb3085867 109 /** Set the background color used to render text
taylorza 0:7b3fb3085867 110 * @param color Color used when drawing background portions of the text
taylorza 0:7b3fb3085867 111 * @note The color can be changed multiple times to render text with various background colors on the display
taylorza 0:7b3fb3085867 112 */
taylorza 0:7b3fb3085867 113 void setBackgroundColor(uint16_t color);
taylorza 0:7b3fb3085867 114
taylorza 0:7b3fb3085867 115 /** Draw a string to the screen using the currently active foreground and background colors
taylorza 0:7b3fb3085867 116 * @param pFont Pointer to the font used to render the string to the display
taylorza 0:7b3fb3085867 117 * @param x The X coordinate location to draw the string.
taylorza 0:7b3fb3085867 118 * @param y The Y coordinate location to draw the string.
taylorza 0:7b3fb3085867 119 * @param pString ASCIIZ string to draw to the display.
taylorza 0:7b3fb3085867 120 * @note The font is currently limited to an 8x8 font. See the font_IBM.h file for an example font.
taylorza 0:7b3fb3085867 121 */
taylorza 0:7b3fb3085867 122 void drawString(const uint8_t *pFont, int x, int y, const char *pString);
taylorza 0:7b3fb3085867 123
taylorza 0:7b3fb3085867 124 private:
taylorza 0:7b3fb3085867 125 void drawVertLine(int x1, int y1, int y2, uint16_t color);
taylorza 0:7b3fb3085867 126 void drawHorizLine(int x1, int y1, int x2, uint16_t color);
taylorza 0:7b3fb3085867 127 void drawChar(const uint8_t *pFont, int x, int y, char c);
taylorza 0:7b3fb3085867 128
taylorza 0:7b3fb3085867 129 private:
taylorza 0:7b3fb3085867 130 void swap(int &a, int &b);
taylorza 0:7b3fb3085867 131
taylorza 0:7b3fb3085867 132 private:
taylorza 0:7b3fb3085867 133 void initDisplay();
taylorza 0:7b3fb3085867 134 void reset();
taylorza 0:7b3fb3085867 135 void write(uint8_t cmd);
taylorza 0:7b3fb3085867 136 void write(uint8_t cmd, uint8_t data[], int dataLen);
taylorza 0:7b3fb3085867 137 void write(uint8_t cmd, uint16_t data);
taylorza 0:7b3fb3085867 138 void writeData(uint8_t data);
taylorza 0:7b3fb3085867 139 void beginBatchCommand(uint8_t cmd);
taylorza 0:7b3fb3085867 140 void writeBatchData(uint8_t data);
taylorza 0:7b3fb3085867 141 void writeBatchData(uint16_t data);
taylorza 0:7b3fb3085867 142 void endBatchCommand();
taylorza 0:7b3fb3085867 143
taylorza 0:7b3fb3085867 144 void clip(int x, int y, int w, int h);
taylorza 0:7b3fb3085867 145 void clipRect(int x1, int y1, int x2, int y2);
taylorza 0:7b3fb3085867 146
taylorza 0:7b3fb3085867 147 private:
taylorza 0:7b3fb3085867 148 uint16_t _foregroundColor;
taylorza 0:7b3fb3085867 149 uint16_t _backgroundColor;
taylorza 0:7b3fb3085867 150
taylorza 0:7b3fb3085867 151 private:
taylorza 0:7b3fb3085867 152 DigitalOut _backlight;
taylorza 0:7b3fb3085867 153 DigitalOut _reset;
taylorza 0:7b3fb3085867 154 DigitalOut _ds;
taylorza 0:7b3fb3085867 155 DigitalOut _cs;
taylorza 0:7b3fb3085867 156 SPI _spi;
taylorza 0:7b3fb3085867 157
taylorza 0:7b3fb3085867 158 private:
taylorza 0:7b3fb3085867 159 static const uint8_t CMD_SLPOUT = 0x11;
taylorza 0:7b3fb3085867 160 static const uint8_t CMD_DISPON = 0x29;
taylorza 0:7b3fb3085867 161 static const uint8_t CMD_CASET = 0x2a;
taylorza 0:7b3fb3085867 162 static const uint8_t CMD_RASET = 0x2b;
taylorza 0:7b3fb3085867 163 static const uint8_t CMD_RAMWR = 0x2c;
taylorza 0:7b3fb3085867 164
taylorza 0:7b3fb3085867 165 static const uint8_t CMD_MADCTL = 0x36;
taylorza 0:7b3fb3085867 166 static const uint8_t CMD_COLMOD = 0x3a;
taylorza 0:7b3fb3085867 167
taylorza 0:7b3fb3085867 168 static const uint8_t CMD_FRMCTR1 = 0xb1;
taylorza 0:7b3fb3085867 169 static const uint8_t CMD_FRMCTR2 = 0xb2;
taylorza 0:7b3fb3085867 170 static const uint8_t CMD_FRMCTR3 = 0xb3;
taylorza 0:7b3fb3085867 171 static const uint8_t CMD_INVCTR = 0xb4;
taylorza 0:7b3fb3085867 172
taylorza 0:7b3fb3085867 173 static const uint8_t CMD_PWCTR1 = 0xc0;
taylorza 0:7b3fb3085867 174 static const uint8_t CMD_PWCTR2 = 0xc1;
taylorza 0:7b3fb3085867 175 static const uint8_t CMD_PWCTR3 = 0xc2;
taylorza 0:7b3fb3085867 176 static const uint8_t CMD_PWCTR4 = 0xc3;
taylorza 0:7b3fb3085867 177 static const uint8_t CMD_PWCTR5 = 0xc4;
taylorza 0:7b3fb3085867 178 static const uint8_t CMD_VMCTR1 = 0xc5;
taylorza 0:7b3fb3085867 179
taylorza 0:7b3fb3085867 180 static const uint8_t CMD_GAMCTRP1 = 0xe0;
taylorza 0:7b3fb3085867 181 static const uint8_t CMD_GAMCTRN1 = 0xe1;
taylorza 0:7b3fb3085867 182
taylorza 0:7b3fb3085867 183 static const uint8_t CMD_EXTCTRL = 0xf0;
taylorza 0:7b3fb3085867 184 };
taylorza 0:7b3fb3085867 185
taylorza 0:7b3fb3085867 186 #endif // __LCD_ST7735__