for Arduino TFT LCD Screen 160x128
Dependents: TFTLCDSCREEN Pong_ILI9163C
Fork of TFT_ILI9163C by
TFT_ILI9163C_BASE.h@10:1ebc27775d92, 2015-03-02 (annotated)
- Committer:
- peu605
- Date:
- Mon Mar 02 11:38:50 2015 +0000
- Revision:
- 10:1ebc27775d92
- Parent:
- 7:3dcb98ecf29f
- Child:
- 12:f0799be044ff
scroll test
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
peu605 | 7:3dcb98ecf29f | 1 | #include "mbed.h" |
peu605 | 7:3dcb98ecf29f | 2 | #include <Adafruit_GFX.h> |
peu605 | 7:3dcb98ecf29f | 3 | |
peu605 | 7:3dcb98ecf29f | 4 | |
peu605 | 7:3dcb98ecf29f | 5 | //----- Define here witch display you own |
peu605 | 7:3dcb98ecf29f | 6 | #define __144_RED_PCB__ //128x128 |
peu605 | 7:3dcb98ecf29f | 7 | //#define __22_RED_PCB__ //240x320 |
peu605 | 7:3dcb98ecf29f | 8 | //#define __144_AITENDO_PCB__ //128x128 |
peu605 | 7:3dcb98ecf29f | 9 | //--------------------------------------- |
peu605 | 7:3dcb98ecf29f | 10 | |
peu605 | 7:3dcb98ecf29f | 11 | //ILI9163C versions------------------------ |
peu605 | 7:3dcb98ecf29f | 12 | #if defined(__144_RED_PCB__) |
peu605 | 7:3dcb98ecf29f | 13 | /* |
peu605 | 7:3dcb98ecf29f | 14 | This display: |
peu605 | 7:3dcb98ecf29f | 15 | http://www.ebay.com/itm/Replace-Nokia-5110-LCD-1-44-Red-Serial-128X128-SPI-Color-TFT-LCD-Display-Module-/271422122271 |
peu605 | 7:3dcb98ecf29f | 16 | This particular display has a design error! The controller has 3 pins to configure to constrain |
peu605 | 7:3dcb98ecf29f | 17 | the memory and resolution to a fixed dimension (in that case 128x128) but they leaved those pins |
peu605 | 7:3dcb98ecf29f | 18 | configured for 128x160 so there was several pixel memory addressing problems. |
peu605 | 7:3dcb98ecf29f | 19 | I solved by setup several parameters that dinamically fix the resolution as needit so below |
peu605 | 7:3dcb98ecf29f | 20 | the parameters for this diplay. If you have a strain or a correct display (can happen with chinese) |
peu605 | 7:3dcb98ecf29f | 21 | you can copy those parameters and create setup for different displays. |
peu605 | 7:3dcb98ecf29f | 22 | */ |
peu605 | 7:3dcb98ecf29f | 23 | #define _TFTWIDTH 128 //the REAL W resolution of the TFT |
peu605 | 7:3dcb98ecf29f | 24 | #define _TFTHEIGHT 128 //the REAL H resolution of the TFT |
peu605 | 7:3dcb98ecf29f | 25 | #define _GRAMWIDTH 128 |
peu605 | 7:3dcb98ecf29f | 26 | #define _GRAMHEIGH 160 |
peu605 | 7:3dcb98ecf29f | 27 | // #define _GRAMSIZE _GRAMWIDTH * _GRAMHEIGH //*see note 1 |
peu605 | 7:3dcb98ecf29f | 28 | #define _GRAMSIZE _TFTWIDTH * _TFTHEIGHT //this is enough to fill visible area |
peu605 | 7:3dcb98ecf29f | 29 | #define __COLORSPC 1 // 1:GBR - 0:RGB |
peu605 | 7:3dcb98ecf29f | 30 | #define __GAMMASET1 //uncomment for another gamma |
peu605 | 7:3dcb98ecf29f | 31 | #define __OFFSET (_GRAMHEIGH - _TFTHEIGHT) // 32 *see note 2 |
peu605 | 7:3dcb98ecf29f | 32 | //Tested! |
peu605 | 7:3dcb98ecf29f | 33 | |
peu605 | 7:3dcb98ecf29f | 34 | #elif defined (__22_RED_PCB__) |
peu605 | 7:3dcb98ecf29f | 35 | /* |
peu605 | 7:3dcb98ecf29f | 36 | Like this one: |
peu605 | 7:3dcb98ecf29f | 37 | http://www.ebay.it/itm/2-2-Serial-SPI-TFT-LCD-Display-Module-240x320-Chip-ILI9340C-PCB-Adapter-SD-Card-/281304733556 |
peu605 | 7:3dcb98ecf29f | 38 | Not tested! |
peu605 | 7:3dcb98ecf29f | 39 | */ |
peu605 | 7:3dcb98ecf29f | 40 | #define _TFTWIDTH 240 //the REAL W resolution of the TFT |
peu605 | 7:3dcb98ecf29f | 41 | #define _TFTHEIGHT 320 //the REAL H resolution of the TFT |
peu605 | 7:3dcb98ecf29f | 42 | #define _GRAMWIDTH 240 |
peu605 | 7:3dcb98ecf29f | 43 | #define _GRAMHEIGH 320 |
peu605 | 7:3dcb98ecf29f | 44 | #define _GRAMSIZE _GRAMWIDTH * _GRAMHEIGH |
peu605 | 7:3dcb98ecf29f | 45 | #define __COLORSPC 1 // 1:GBR - 0:RGB |
peu605 | 7:3dcb98ecf29f | 46 | #define __GAMMASET1 //uncomment for another gamma |
peu605 | 7:3dcb98ecf29f | 47 | #define __OFFSET 0 |
peu605 | 7:3dcb98ecf29f | 48 | |
peu605 | 7:3dcb98ecf29f | 49 | #elif defined(__144_AITENDO_PCB__) |
peu605 | 7:3dcb98ecf29f | 50 | /* |
peu605 | 7:3dcb98ecf29f | 51 | This display: |
peu605 | 7:3dcb98ecf29f | 52 | http://www.aitendo.com/product/3857 |
peu605 | 7:3dcb98ecf29f | 53 | M014C9163SPI |
peu605 | 7:3dcb98ecf29f | 54 | */ |
peu605 | 7:3dcb98ecf29f | 55 | #define _TFTWIDTH 128 //the REAL W resolution of the TFT |
peu605 | 7:3dcb98ecf29f | 56 | #define _TFTHEIGHT 128 //the REAL H resolution of the TFT |
peu605 | 7:3dcb98ecf29f | 57 | #define _GRAMWIDTH 128 |
peu605 | 7:3dcb98ecf29f | 58 | #define _GRAMHEIGH 128 |
peu605 | 7:3dcb98ecf29f | 59 | #define _GRAMSIZE _GRAMWIDTH * _GRAMHEIGH |
peu605 | 7:3dcb98ecf29f | 60 | #define __COLORSPC 1 // 1:GBR - 0:RGB |
peu605 | 7:3dcb98ecf29f | 61 | #define __GAMMASET1 //uncomment for another gamma |
peu605 | 7:3dcb98ecf29f | 62 | #define __OFFSET 0 |
peu605 | 7:3dcb98ecf29f | 63 | |
peu605 | 7:3dcb98ecf29f | 64 | #else |
peu605 | 7:3dcb98ecf29f | 65 | #define _TFTWIDTH 128 //128 |
peu605 | 7:3dcb98ecf29f | 66 | #define _TFTHEIGHT 160 //160 |
peu605 | 7:3dcb98ecf29f | 67 | #define _GRAMWIDTH 128 |
peu605 | 7:3dcb98ecf29f | 68 | #define _GRAMHEIGH 160 |
peu605 | 7:3dcb98ecf29f | 69 | #define _GRAMSIZE _GRAMWIDTH * _GRAMHEIGH |
peu605 | 7:3dcb98ecf29f | 70 | #define __COLORSPC 1 // 1:GBR - 0:RGB |
peu605 | 7:3dcb98ecf29f | 71 | #define __GAMMASET1 |
peu605 | 7:3dcb98ecf29f | 72 | #define __OFFSET 0 |
peu605 | 7:3dcb98ecf29f | 73 | #endif |
peu605 | 7:3dcb98ecf29f | 74 | /* |
peu605 | 7:3dcb98ecf29f | 75 | Note 1: The __144_RED_PCB__ display has hardware addressing of 128 x 160 |
peu605 | 7:3dcb98ecf29f | 76 | but the tft resolution it's 128 x 128 so the dram should be set correctly |
peu605 | 7:3dcb98ecf29f | 77 | |
peu605 | 7:3dcb98ecf29f | 78 | Note 2: This is the offset between image in RAM and TFT. In that case 160 - 128 = 32; |
peu605 | 7:3dcb98ecf29f | 79 | */ |
peu605 | 7:3dcb98ecf29f | 80 | //--------- Keep out hands from here!------------- |
peu605 | 7:3dcb98ecf29f | 81 | // Color definitions |
peu605 | 7:3dcb98ecf29f | 82 | #define BLACK 0x0000 |
peu605 | 7:3dcb98ecf29f | 83 | #define BLUE 0x001F |
peu605 | 7:3dcb98ecf29f | 84 | #define RED 0xF800 |
peu605 | 7:3dcb98ecf29f | 85 | #define GREEN 0x07E0 |
peu605 | 7:3dcb98ecf29f | 86 | #define CYAN 0x07FF |
peu605 | 7:3dcb98ecf29f | 87 | #define MAGENTA 0xF81F |
peu605 | 7:3dcb98ecf29f | 88 | #define YELLOW 0xFFE0 |
peu605 | 7:3dcb98ecf29f | 89 | #define WHITE 0xFFFF |
peu605 | 7:3dcb98ecf29f | 90 | #define TRANSPARENT -1 |
peu605 | 7:3dcb98ecf29f | 91 | |
peu605 | 7:3dcb98ecf29f | 92 | //ILI9163C registers----------------------- |
peu605 | 7:3dcb98ecf29f | 93 | #define CMD_NOP 0x00//Non operation |
peu605 | 7:3dcb98ecf29f | 94 | #define CMD_SWRESET 0x01//Soft Reset |
peu605 | 7:3dcb98ecf29f | 95 | #define CMD_SLPIN 0x10//Sleep ON |
peu605 | 7:3dcb98ecf29f | 96 | #define CMD_SLPOUT 0x11//Sleep OFF |
peu605 | 7:3dcb98ecf29f | 97 | #define CMD_PTLON 0x12//Partial Mode ON |
peu605 | 7:3dcb98ecf29f | 98 | #define CMD_NORML 0x13//Normal Display ON |
peu605 | 7:3dcb98ecf29f | 99 | #define CMD_DINVOF 0x20//Display Inversion OFF |
peu605 | 7:3dcb98ecf29f | 100 | #define CMD_DINVON 0x21//Display Inversion ON |
peu605 | 7:3dcb98ecf29f | 101 | #define CMD_GAMMASET 0x26//Gamma Set (0x01[1],0x02[2],0x04[3],0x08[4]) |
peu605 | 7:3dcb98ecf29f | 102 | #define CMD_DISPOFF 0x28//Display OFF |
peu605 | 7:3dcb98ecf29f | 103 | #define CMD_DISPON 0x29//Display ON |
peu605 | 7:3dcb98ecf29f | 104 | #define CMD_IDLEON 0x39//Idle Mode ON |
peu605 | 7:3dcb98ecf29f | 105 | #define CMD_IDLEOF 0x38//Idle Mode OFF |
peu605 | 7:3dcb98ecf29f | 106 | #define CMD_CLMADRS 0x2A//Column Address Set |
peu605 | 7:3dcb98ecf29f | 107 | #define CMD_PGEADRS 0x2B//Page Address Set |
peu605 | 7:3dcb98ecf29f | 108 | |
peu605 | 7:3dcb98ecf29f | 109 | #define CMD_RAMWR 0x2C//Memory Write |
peu605 | 7:3dcb98ecf29f | 110 | #define CMD_RAMRD 0x2E//Memory Read |
peu605 | 7:3dcb98ecf29f | 111 | #define CMD_CLRSPACE 0x2D//Color Space : 4K/65K/262K |
peu605 | 7:3dcb98ecf29f | 112 | #define CMD_PARTAREA 0x30//Partial Area |
peu605 | 7:3dcb98ecf29f | 113 | #define CMD_VSCLLDEF 0x33//Vertical Scroll Definition |
peu605 | 7:3dcb98ecf29f | 114 | #define CMD_TEFXLON 0x34//Tearing Effect Line ON |
peu605 | 7:3dcb98ecf29f | 115 | #define CMD_TEFXLOF 0x35//Tearing Effect Line OFF |
peu605 | 7:3dcb98ecf29f | 116 | #define CMD_MADCTL 0x36//Memory Access Control |
peu605 | 10:1ebc27775d92 | 117 | #define CMD_VSSTADRS 0x37//Vertical Scrolling Start address |
peu605 | 7:3dcb98ecf29f | 118 | |
peu605 | 7:3dcb98ecf29f | 119 | #define CMD_PIXFMT 0x3A//Interface Pixel Format |
peu605 | 7:3dcb98ecf29f | 120 | #define CMD_FRMCTR1 0xB1//Frame Rate Control (In normal mode/Full colors) |
peu605 | 7:3dcb98ecf29f | 121 | #define CMD_FRMCTR2 0xB2//Frame Rate Control(In Idle mode/8-colors) |
peu605 | 7:3dcb98ecf29f | 122 | #define CMD_FRMCTR3 0xB3//Frame Rate Control(In Partial mode/full colors) |
peu605 | 7:3dcb98ecf29f | 123 | #define CMD_DINVCTR 0xB4//Display Inversion Control |
peu605 | 7:3dcb98ecf29f | 124 | #define CMD_RGBBLK 0xB5//RGB Interface Blanking Porch setting |
peu605 | 7:3dcb98ecf29f | 125 | #define CMD_DFUNCTR 0xB6//Display Fuction set 5 |
peu605 | 7:3dcb98ecf29f | 126 | #define CMD_SDRVDIR 0xB7//Source Driver Direction Control |
peu605 | 7:3dcb98ecf29f | 127 | #define CMD_GDRVDIR 0xB8//Gate Driver Direction Control |
peu605 | 7:3dcb98ecf29f | 128 | |
peu605 | 7:3dcb98ecf29f | 129 | #define CMD_PWCTR1 0xC0//Power_Control1 |
peu605 | 7:3dcb98ecf29f | 130 | #define CMD_PWCTR2 0xC1//Power_Control2 |
peu605 | 7:3dcb98ecf29f | 131 | #define CMD_PWCTR3 0xC2//Power_Control3 |
peu605 | 7:3dcb98ecf29f | 132 | #define CMD_PWCTR4 0xC3//Power_Control4 |
peu605 | 7:3dcb98ecf29f | 133 | #define CMD_PWCTR5 0xC4//Power_Control5 |
peu605 | 7:3dcb98ecf29f | 134 | #define CMD_VCOMCTR1 0xC5//VCOM_Control 1 |
peu605 | 7:3dcb98ecf29f | 135 | #define CMD_VCOMCTR2 0xC6//VCOM_Control 2 |
peu605 | 7:3dcb98ecf29f | 136 | #define CMD_VCOMOFFS 0xC7//VCOM Offset Control |
peu605 | 7:3dcb98ecf29f | 137 | #define CMD_PGAMMAC 0xE0//Positive Gamma Correction Setting |
peu605 | 7:3dcb98ecf29f | 138 | #define CMD_NGAMMAC 0xE1//Negative Gamma Correction Setting |
peu605 | 7:3dcb98ecf29f | 139 | #define CMD_GAMRSEL 0xF2//GAM_R_SEL |
peu605 | 7:3dcb98ecf29f | 140 | |
peu605 | 7:3dcb98ecf29f | 141 | |
peu605 | 7:3dcb98ecf29f | 142 | class TFT_ILI9163C_BASE : public Adafruit_GFX, public SPI { |
peu605 | 7:3dcb98ecf29f | 143 | |
peu605 | 7:3dcb98ecf29f | 144 | public: |
peu605 | 7:3dcb98ecf29f | 145 | |
peu605 | 7:3dcb98ecf29f | 146 | TFT_ILI9163C_BASE(PinName mosi, PinName miso, PinName sclk, PinName cs, PinName dc, PinName reset); |
peu605 | 7:3dcb98ecf29f | 147 | TFT_ILI9163C_BASE(PinName mosi, PinName miso, PinName sclk, PinName cs, PinName dc); |
peu605 | 7:3dcb98ecf29f | 148 | |
peu605 | 7:3dcb98ecf29f | 149 | void begin(void), |
peu605 | 7:3dcb98ecf29f | 150 | setAddrWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1),//graphic Addressing |
peu605 | 7:3dcb98ecf29f | 151 | setCursor(int16_t x,int16_t y),//char addressing |
peu605 | 7:3dcb98ecf29f | 152 | pushColor(uint16_t color), |
peu605 | 7:3dcb98ecf29f | 153 | clearScreen(uint16_t color=0x0000),//same as fillScreen |
peu605 | 7:3dcb98ecf29f | 154 | setRotation(uint8_t r); |
peu605 | 10:1ebc27775d92 | 155 | |
peu605 | 10:1ebc27775d92 | 156 | void display(bool onOff), |
peu605 | 10:1ebc27775d92 | 157 | sleepMode(bool mode), |
peu605 | 10:1ebc27775d92 | 158 | defineScrollArea(uint16_t taf,uint16_t bfa), |
peu605 | 10:1ebc27775d92 | 159 | scroll(uint16_t ssa); |
peu605 | 7:3dcb98ecf29f | 160 | |
peu605 | 7:3dcb98ecf29f | 161 | virtual void fillScreen(uint16_t color=0x0000), |
peu605 | 7:3dcb98ecf29f | 162 | drawPixel(int16_t x, int16_t y, uint16_t color), |
peu605 | 7:3dcb98ecf29f | 163 | drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color), |
peu605 | 7:3dcb98ecf29f | 164 | drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color), |
peu605 | 7:3dcb98ecf29f | 165 | fillRect(int16_t x, int16_t y, int16_t w, int16_t h,uint16_t color), |
peu605 | 7:3dcb98ecf29f | 166 | invertDisplay(bool i); |
peu605 | 7:3dcb98ecf29f | 167 | |
peu605 | 7:3dcb98ecf29f | 168 | uint16_t Color565(uint8_t r, uint8_t g, uint8_t b); |
peu605 | 7:3dcb98ecf29f | 169 | void setBitrate(uint32_t n); |
peu605 | 7:3dcb98ecf29f | 170 | |
peu605 | 7:3dcb98ecf29f | 171 | protected: |
peu605 | 7:3dcb98ecf29f | 172 | |
peu605 | 7:3dcb98ecf29f | 173 | DigitalOut _cs; |
peu605 | 7:3dcb98ecf29f | 174 | DigitalOut _dc; |
peu605 | 7:3dcb98ecf29f | 175 | PinName _resetPinName; |
peu605 | 7:3dcb98ecf29f | 176 | |
peu605 | 7:3dcb98ecf29f | 177 | private: |
peu605 | 7:3dcb98ecf29f | 178 | |
peu605 | 7:3dcb98ecf29f | 179 | virtual void init(PinName cs, PinName dc); |
peu605 | 7:3dcb98ecf29f | 180 | virtual void selectSlave(); |
peu605 | 7:3dcb98ecf29f | 181 | virtual void deselectSlave(); |
peu605 | 7:3dcb98ecf29f | 182 | virtual void setCommandMode(); |
peu605 | 7:3dcb98ecf29f | 183 | virtual void setDataMode(); |
peu605 | 7:3dcb98ecf29f | 184 | virtual void writecommand(uint8_t c); |
peu605 | 7:3dcb98ecf29f | 185 | virtual void writedata(uint8_t d); |
peu605 | 7:3dcb98ecf29f | 186 | virtual void writedata16(uint16_t d); |
peu605 | 7:3dcb98ecf29f | 187 | virtual void writedata32(uint16_t d1, uint16_t d2); |
peu605 | 7:3dcb98ecf29f | 188 | virtual void writedata16burst(uint16_t d, int32_t len); |
peu605 | 7:3dcb98ecf29f | 189 | |
peu605 | 7:3dcb98ecf29f | 190 | uint8_t _Mactrl_Data;//container for the memory access control data |
peu605 | 7:3dcb98ecf29f | 191 | uint8_t _colorspaceData; |
peu605 | 10:1ebc27775d92 | 192 | uint8_t sleep; |
peu605 | 7:3dcb98ecf29f | 193 | void colorSpace(uint8_t cspace); |
peu605 | 7:3dcb98ecf29f | 194 | void chipInit(); |
peu605 | 7:3dcb98ecf29f | 195 | bool boundaryCheck(int16_t x,int16_t y); |
peu605 | 7:3dcb98ecf29f | 196 | void homeAddress(); |
peu605 | 7:3dcb98ecf29f | 197 | |
peu605 | 7:3dcb98ecf29f | 198 | }; |