skydarc meneldoll / Mbed OS test_TFT_11_v5
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers ST7735.h Source File

ST7735.h

00001 /***************************************************
00002   This is a library for the Adafruit 1.8" SPI display.
00003   This library works with the Adafruit 1.8" TFT Breakout w/SD card
00004   ----> http://www.adafruit.com/products/358
00005   as well as Adafruit raw 1.8" TFT display
00006   ----> http://www.adafruit.com/products/618
00007  
00008   Check out the links above for our tutorials and wiring diagrams
00009   These displays use SPI to communicate, 4 or 5 pins are required to
00010   interface (RST is optional)
00011   Adafruit invests time and resources providing this open source code,
00012   please support Adafruit and open-source hardware by purchasing
00013   products from Adafruit!
00014 
00015   Written by Limor Fried/Ladyada for Adafruit Industries.
00016   MIT license, all text above must be included in any redistribution
00017  ****************************************************/
00018 
00019 #ifndef _ADAFRUIT_ST7735H_
00020 #define _ADAFRUIT_ST7735H_
00021 
00022 #include "mbed.h"
00023 #include "GFX.h"
00024 
00025 #define boolean bool
00026 
00027 // some flags for initR() :(
00028 // some flags for initR() :(
00029 #define INITR_GREENTAB 0x0
00030 #define INITR_REDTAB   0x1
00031 #define INITR_BLACKTAB   0x2
00032 
00033 #define INITR_18GREENTAB    INITR_GREENTAB
00034 #define INITR_18REDTAB      INITR_REDTAB
00035 #define INITR_18BLACKTAB    INITR_BLACKTAB
00036 #define INITR_144GREENTAB   0x1
00037 #define INITR_MINI160x80    0x4
00038 #define INITR_MINI160x80_RS    0x5
00039 // for 1.44 and mini
00040 #define ST7735_TFTWIDTH_128  128
00041 // for mini
00042 #define ST7735_TFTWIDTH_80   80
00043 // for 1.44" display
00044 #define ST7735_TFTHEIGHT_128 128
00045 // for 1.8" and mini display
00046 #define ST7735_TFTHEIGHT_160  161
00047 
00048 #define ST7735_NOP     0x00
00049 #define ST7735_SWRESET 0x01
00050 #define ST7735_RDDID   0x04
00051 #define ST7735_RDDST   0x09
00052 
00053 #define ST7735_SLPIN   0x10
00054 #define ST7735_SLPOUT  0x11
00055 #define ST7735_PTLON   0x12
00056 #define ST7735_NORON   0x13
00057 
00058 #define ST7735_INVOFF  0x20
00059 #define ST7735_INVON   0x21
00060 #define ST7735_DISPOFF 0x28
00061 #define ST7735_DISPON  0x29
00062 #define ST7735_CASET   0x2A
00063 #define ST7735_RASET   0x2B
00064 #define ST7735_RAMWR   0x2C
00065 #define ST7735_RAMRD   0x2E
00066 
00067 #define ST7735_PTLAR   0x30
00068 #define ST7735_VSCRDEF 0x33
00069 #define ST7735_COLMOD  0x3A
00070 #define ST7735_MADCTL  0x36
00071 #define ST7735_VSCRSADD 0x37
00072 #define ST7735_FRMCTR1 0xB1
00073 #define ST7735_FRMCTR2 0xB2
00074 #define ST7735_FRMCTR3 0xB3
00075 #define ST7735_INVCTR  0xB4
00076 #define ST7735_DISSET5 0xB6
00077 
00078 #define ST7735_PWCTR1  0xC0
00079 #define ST7735_PWCTR2  0xC1
00080 #define ST7735_PWCTR3  0xC2
00081 #define ST7735_PWCTR4  0xC3
00082 #define ST7735_PWCTR5  0xC4
00083 #define ST7735_VMCTR1  0xC5
00084 
00085 #define ST7735_RDID1   0xDA
00086 #define ST7735_RDID2   0xDB
00087 #define ST7735_RDID3   0xDC
00088 #define ST7735_RDID4   0xDD
00089 
00090 #define ST7735_PWCTR6  0xFC
00091 
00092 #define ST7735_GMCTRP1 0xE0
00093 #define ST7735_GMCTRN1 0xE1
00094 
00095 // Color definitions
00096 #define ST7735_BLACK   0x0000
00097 #define ST7735_BLUE    0x001F
00098 #define ST7735_RED     0xF800
00099 #define ST7735_GREEN   0x07E0
00100 #define ST7735_CYAN    0x07FF
00101 #define ST7735_MAGENTA 0xF81F
00102 #define ST7735_YELLOW  0xFFE0
00103 #define ST7735_WHITE   0xFFFF
00104 
00105 // scroll definition
00106 #define BOTTOM_TO_TOP  0
00107 #define TOP_TO_BOTTOM  1
00108 
00109 
00110 
00111 typedef struct 
00112     {
00113       float xpos, ypos;
00114       short zpos, speed;
00115       unsigned int color;
00116     } STAR;
00117 
00118 class ST7735 : public GFX {
00119 
00120  public:
00121 
00122   ST7735(PinName mosi, PinName miso, PinName sck, PinName CS, PinName RS, PinName RST);
00123 
00124   void     initB(void);                             // for ST7735B displays
00125   void     initR(uint8_t options = INITR_GREENTAB); // for ST7735R
00126   void     setAddrWindow(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1);
00127   void     pushColor(uint16_t color);
00128 
00129   void     fillScreen(uint16_t color);
00130   void     drawPixel(int16_t x, int16_t y, uint16_t color);
00131   void     drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color);
00132   void     drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color);
00133   void     fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color);
00134   void     invertDisplay(boolean i);
00135   void     DrawBMP(int offsetx, int offsety, FILE *Image);
00136   void     DrawRam(unsigned int x, unsigned int y, unsigned int w, unsigned int h, int *Image);
00137   void     DrawGIF(int offsetx, int offsety, FILE *Image);
00138   void     DrawANI(int offsetx, int offsety, FILE *Image, int frame);
00139   void     DrawStarfield(int centerx, int centery, int acc, int color, int NbrsStars, int duration);
00140   void     setRotation(uint8_t r);
00141   void     setScrollDefinition(uint8_t top_fix_height, uint8_t bottom_fix_height, int _scroll_direction);
00142   void     VerticalScroll(uint8_t _vsp);
00143   void     scrollBmp(uint8_t top_fix_height, uint8_t bottom_fix_height, int _scroll_direction, int *bitmap);
00144   
00145   uint16_t Color565(uint8_t r, uint8_t g, uint8_t b);
00146   char*    Color565string(uint8_t r, uint8_t g, uint8_t b);
00147   
00148   void     read_area(unsigned int x, unsigned int y, unsigned int w, unsigned int h);
00149   void     setAddrWindow2(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1);
00150   
00151  private:
00152   uint8_t  tabcolor;
00153   void     spiwrite(uint8_t),
00154            writecommand(uint8_t c),
00155            writedata(uint8_t d),
00156            commandList(uint8_t *addr),
00157            commonInit(uint8_t *cmdList);
00158 
00159   uint8_t  colstart, rowstart, xstart, ystart, _tft_type, _orientation; // some displays need this changed
00160   
00161     SPI lcdPort;            // does SPI MOSI, MISO and SCK
00162     DigitalOut _cs;         // does SPI CE
00163     DigitalOut _rs;         // register/date select
00164     DigitalOut _rst;        // does 3310 LCD_RST
00165     
00166 
00167 
00168     
00169     void init_star(STAR* star, int i);
00170     
00171     int oct2dec(int n);
00172     int bitExtracted(int number, int k, int p) ;
00173     
00174     void        makeTable(void);
00175     uint16_t    readTable(unsigned int y, unsigned int x);
00176     void        addrowTable(uint16_t *row);
00177     void        supprTable(void);
00178     
00179 };
00180 
00181 
00182 #endif