Library for 1.8 inch 160*180 TFT Display. Nice fonts in different formats.

Revision:
0:3015b613b20d
Child:
1:6a6d8d2b19f1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ST7735.h	Sat Aug 15 10:58:51 2015 +0000
@@ -0,0 +1,181 @@
+#ifndef ST7735_H
+#define ST7735_H
+
+#include "mbed.h"
+
+// Comment out the #defines below with // to stop that font being loaded
+// If all fonts are loaded the total space required is ablout 17890 bytes
+
+#define LOAD_FONT2 // Small font, needs ~3092 bytes in FLASH
+#define LOAD_FONT4 // Medium font, needs ~8126 bytes in FLASH
+#define LOAD_FONT6 // Large font, needs ~4404 bytes in FLASH
+#define LOAD_FONT7 // 7 segment font, needs ~3652 bytes in FLASH
+#define LOAD_FONT8 // Large font needs ~10kbytes, only 1234567890:.
+
+#define pgm_read_byte(addr) (*(const unsigned char *)(addr))
+#define pgm_read_word(addr) (*(const unsigned short *)(addr))
+
+#define swap(a, b) { int16_t t = a; a = b; b = t; }
+
+#define INITR_GREENTAB  0x0
+#define INITR_REDTAB    0x1
+#define INITR_BLACKTAB  0x2
+
+#define ST7735_TFTWIDTH  128
+#define ST7735_TFTHEIGHT 160
+
+#define ST7735_NOP     0x00
+#define ST7735_SWRESET 0x01
+#define ST7735_RDDID   0x04
+#define ST7735_RDDST   0x09
+
+#define ST7735_SLPIN   0x10
+#define ST7735_SLPOUT  0x11
+#define ST7735_PTLON   0x12
+#define ST7735_NORON   0x13
+
+#define ST7735_INVOFF  0x20
+#define ST7735_INVON   0x21
+#define ST7735_DISPOFF 0x28
+#define ST7735_DISPON  0x29
+#define ST7735_CASET   0x2A
+#define ST7735_RASET   0x2B
+#define ST7735_RAMWR   0x2C
+#define ST7735_RAMRD   0x2E
+
+#define ST7735_PTLAR   0x30
+#define ST7735_COLMOD  0x3A
+#define ST7735_MADCTL  0x36
+
+#define ST7735_FRMCTR1 0xB1
+#define ST7735_FRMCTR2 0xB2
+#define ST7735_FRMCTR3 0xB3
+#define ST7735_INVCTR  0xB4
+#define ST7735_DISSET5 0xB6
+
+#define ST7735_PWCTR1  0xC0
+#define ST7735_PWCTR2  0xC1
+#define ST7735_PWCTR3  0xC2
+#define ST7735_PWCTR4  0xC3
+#define ST7735_PWCTR5  0xC4
+#define ST7735_VMCTR1  0xC5
+
+#define ST7735_RDID1   0xDA
+#define ST7735_RDID2   0xDB
+#define ST7735_RDID3   0xDC
+#define ST7735_RDID4   0xDD
+
+#define ST7735_PWCTR6  0xFC
+
+#define ST7735_GMCTRP1 0xE0
+#define ST7735_GMCTRN1 0xE1
+
+// Color definitions
+#define ST7735_BLACK      0x0000
+#define ST7735_BLUE       0x001F
+#define ST7735_RED        0xF800
+#define ST7735_GREEN      0x07E0
+#define ST7735_CYAN       0x07FF
+#define ST7735_MAGENTA    0xF81F
+#define ST7735_YELLOW     0xFFE0
+#define ST7735_WHITE      0xFFFF
+#define ST7735_GREY       0x39C4
+#define ST7735_NAVY       0x000F
+#define ST7735_DARKGREEN  0x03E0
+#define ST7735_MAROON     0x7800
+#define ST7735_PURPLE     0x780F
+#define ST7735_OLIVE      0x7BE0
+#define ST7735_LIGHTGREY  0xC618
+#define ST7735_DARKGREY   0x7BEF
+#define ST7735_BROWN      0xFD20
+#define ST7735_PINK       0xF81F
+
+#define MADCTL_MY  0x80
+#define MADCTL_MX  0x40
+#define MADCTL_MV  0x20
+#define MADCTL_ML  0x10
+#define MADCTL_RGB 0x00
+#define MADCTL_BGR 0x08
+#define MADCTL_MH  0x04
+
+class ST7735
+{
+
+public:
+    /** Create a ST7735 object connected to the specified pins
+    *
+    * @param ce   Pin connected to chip enable
+    * @param dc   Pin connected to data/command select
+    * @param mosi Pin connected to data input 
+    * @param sclk Pin connected to serial clock
+    *
+    */
+    ST7735(PinName cePin, PinName dcPin, PinName mosiPin, PinName sclkPin);
+    
+private:
+    void writecommand(char c);
+    void writedata(char c); 
+    void initSPI();
+    void commonInit(const uint8_t *cmdList);
+    void commandList(const uint8_t *addr);
+    
+public:
+    uint8_t tabcolor;      
+    uint8_t colstart, rowstart; // some displays need this changed
+    void initB();
+    void initR(uint8_t options);
+    void setRotation(uint8_t m);
+    void fillScreen(uint16_t color);
+    void fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color);
+    void setAddrWindow(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1);
+    void pushColor(uint16_t color);  
+    void invertDisplay(bool i);
+    void drawPixel(int16_t x, int16_t y, uint16_t color);
+    void drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color);
+    void drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color);
+    uint16_t Color565(uint8_t r, uint8_t g, uint8_t b);
+    void drawLine(int16_t x0, int16_t y0, int16_t x1, int16_t y1, uint16_t color);
+    void drawRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color);
+    void drawCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color);
+    void drawCircleHelper( int16_t x0, int16_t y0, int16_t r, uint8_t cornername, uint16_t color);
+    void fillCircle(int16_t x0, int16_t y0, int16_t r, uint16_t color);
+    void fillCircleHelper(int16_t x0, int16_t y0, int16_t r, uint8_t cornername, int16_t delta, uint16_t color);
+    void drawTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color);
+    void fillTriangle ( int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2, uint16_t color);
+    void drawRoundRect(int16_t x, int16_t y, int16_t w, int16_t h, int16_t r, uint16_t color);
+    void fillRoundRect(int16_t x, int16_t y, int16_t w, int16_t h, int16_t r, uint16_t color);
+    void setCursor(int16_t x, int16_t y);
+    void setTextSize(uint8_t s);
+    void setTextColor(uint16_t c);
+    void setTextColor(uint16_t c, uint16_t b);
+    void setTextWrap(bool w);
+    uint8_t getRotation(void);
+    void drawBitmap(int16_t x, int16_t y, const uint8_t *bitmap, int16_t w, int16_t h, uint16_t color);
+    int drawUnicode(unsigned int uniCode, int x, int y, int font);
+    int drawNumber(long long_num,int poX, int poY, int font);
+    int drawChar(char c, int x, int y, int font);
+    int drawString(char *string, int poX, int poY, int font);    
+    int drawCentreString(char *string, int dX, int poY, int font);
+    int drawRightString(char *string, int dX, int poY, int font);
+    int drawFloat(float floatNumber, int decimal, int poX, int poY, int font);
+
+    
+    
+private: 
+    SPI*    spi;
+    DigitalOut* ce;
+    DigitalOut* rst;
+    DigitalOut* dc;
+
+protected:
+    static const int16_t WIDTH = ST7735_TFTWIDTH;   // This is the 'raw' display w/h - never changes
+    static const int16_t HEIGHT = ST7735_TFTHEIGHT;  
+    int16_t _width, _height; // Display w/h as modified by current rotation
+    uint16_t textcolor, textbgcolor;
+    uint8_t textsize, rotation;
+    bool wrap; // If set, 'wrap' text at right edge of display 
+    int16_t cursor_x;
+    int16_t cursor_y;
+};
+
+#endif