for Arduino TFT LCD Screen 160x128
Dependents: TFTLCDSCREEN Pong_ILI9163C
Fork of TFT_ILI9163C by
Diff: TFT_ILI9163C_BASE.h
- Revision:
- 7:3dcb98ecf29f
- Child:
- 10:1ebc27775d92
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TFT_ILI9163C_BASE.h Sun Feb 01 15:36:04 2015 +0000 @@ -0,0 +1,191 @@ +#include "mbed.h" +#include <Adafruit_GFX.h> + + +//----- Define here witch display you own +#define __144_RED_PCB__ //128x128 +//#define __22_RED_PCB__ //240x320 +//#define __144_AITENDO_PCB__ //128x128 +//--------------------------------------- + +//ILI9163C versions------------------------ +#if defined(__144_RED_PCB__) +/* +This display: +http://www.ebay.com/itm/Replace-Nokia-5110-LCD-1-44-Red-Serial-128X128-SPI-Color-TFT-LCD-Display-Module-/271422122271 +This particular display has a design error! The controller has 3 pins to configure to constrain +the memory and resolution to a fixed dimension (in that case 128x128) but they leaved those pins +configured for 128x160 so there was several pixel memory addressing problems. +I solved by setup several parameters that dinamically fix the resolution as needit so below +the parameters for this diplay. If you have a strain or a correct display (can happen with chinese) +you can copy those parameters and create setup for different displays. +*/ + #define _TFTWIDTH 128 //the REAL W resolution of the TFT + #define _TFTHEIGHT 128 //the REAL H resolution of the TFT + #define _GRAMWIDTH 128 + #define _GRAMHEIGH 160 +// #define _GRAMSIZE _GRAMWIDTH * _GRAMHEIGH //*see note 1 + #define _GRAMSIZE _TFTWIDTH * _TFTHEIGHT //this is enough to fill visible area + #define __COLORSPC 1 // 1:GBR - 0:RGB + #define __GAMMASET1 //uncomment for another gamma + #define __OFFSET (_GRAMHEIGH - _TFTHEIGHT) // 32 *see note 2 + //Tested! + +#elif defined (__22_RED_PCB__) +/* +Like this one: +http://www.ebay.it/itm/2-2-Serial-SPI-TFT-LCD-Display-Module-240x320-Chip-ILI9340C-PCB-Adapter-SD-Card-/281304733556 +Not tested! +*/ + #define _TFTWIDTH 240 //the REAL W resolution of the TFT + #define _TFTHEIGHT 320 //the REAL H resolution of the TFT + #define _GRAMWIDTH 240 + #define _GRAMHEIGH 320 + #define _GRAMSIZE _GRAMWIDTH * _GRAMHEIGH + #define __COLORSPC 1 // 1:GBR - 0:RGB + #define __GAMMASET1 //uncomment for another gamma + #define __OFFSET 0 + +#elif defined(__144_AITENDO_PCB__) +/* +This display: +http://www.aitendo.com/product/3857 +M014C9163SPI +*/ + #define _TFTWIDTH 128 //the REAL W resolution of the TFT + #define _TFTHEIGHT 128 //the REAL H resolution of the TFT + #define _GRAMWIDTH 128 + #define _GRAMHEIGH 128 + #define _GRAMSIZE _GRAMWIDTH * _GRAMHEIGH + #define __COLORSPC 1 // 1:GBR - 0:RGB + #define __GAMMASET1 //uncomment for another gamma + #define __OFFSET 0 + +#else + #define _TFTWIDTH 128 //128 + #define _TFTHEIGHT 160 //160 + #define _GRAMWIDTH 128 + #define _GRAMHEIGH 160 + #define _GRAMSIZE _GRAMWIDTH * _GRAMHEIGH + #define __COLORSPC 1 // 1:GBR - 0:RGB + #define __GAMMASET1 + #define __OFFSET 0 +#endif +/* + Note 1: The __144_RED_PCB__ display has hardware addressing of 128 x 160 + but the tft resolution it's 128 x 128 so the dram should be set correctly + + Note 2: This is the offset between image in RAM and TFT. In that case 160 - 128 = 32; +*/ +//--------- Keep out hands from here!------------- +// Color definitions +#define BLACK 0x0000 +#define BLUE 0x001F +#define RED 0xF800 +#define GREEN 0x07E0 +#define CYAN 0x07FF +#define MAGENTA 0xF81F +#define YELLOW 0xFFE0 +#define WHITE 0xFFFF +#define TRANSPARENT -1 + +//ILI9163C registers----------------------- +#define CMD_NOP 0x00//Non operation +#define CMD_SWRESET 0x01//Soft Reset +#define CMD_SLPIN 0x10//Sleep ON +#define CMD_SLPOUT 0x11//Sleep OFF +#define CMD_PTLON 0x12//Partial Mode ON +#define CMD_NORML 0x13//Normal Display ON +#define CMD_DINVOF 0x20//Display Inversion OFF +#define CMD_DINVON 0x21//Display Inversion ON +#define CMD_GAMMASET 0x26//Gamma Set (0x01[1],0x02[2],0x04[3],0x08[4]) +#define CMD_DISPOFF 0x28//Display OFF +#define CMD_DISPON 0x29//Display ON +#define CMD_IDLEON 0x39//Idle Mode ON +#define CMD_IDLEOF 0x38//Idle Mode OFF +#define CMD_CLMADRS 0x2A//Column Address Set +#define CMD_PGEADRS 0x2B//Page Address Set + +#define CMD_RAMWR 0x2C//Memory Write +#define CMD_RAMRD 0x2E//Memory Read +#define CMD_CLRSPACE 0x2D//Color Space : 4K/65K/262K +#define CMD_PARTAREA 0x30//Partial Area +#define CMD_VSCLLDEF 0x33//Vertical Scroll Definition +#define CMD_TEFXLON 0x34//Tearing Effect Line ON +#define CMD_TEFXLOF 0x35//Tearing Effect Line OFF +#define CMD_MADCTL 0x36//Memory Access Control + +#define CMD_PIXFMT 0x3A//Interface Pixel Format +#define CMD_FRMCTR1 0xB1//Frame Rate Control (In normal mode/Full colors) +#define CMD_FRMCTR2 0xB2//Frame Rate Control(In Idle mode/8-colors) +#define CMD_FRMCTR3 0xB3//Frame Rate Control(In Partial mode/full colors) +#define CMD_DINVCTR 0xB4//Display Inversion Control +#define CMD_RGBBLK 0xB5//RGB Interface Blanking Porch setting +#define CMD_DFUNCTR 0xB6//Display Fuction set 5 +#define CMD_SDRVDIR 0xB7//Source Driver Direction Control +#define CMD_GDRVDIR 0xB8//Gate Driver Direction Control + +#define CMD_PWCTR1 0xC0//Power_Control1 +#define CMD_PWCTR2 0xC1//Power_Control2 +#define CMD_PWCTR3 0xC2//Power_Control3 +#define CMD_PWCTR4 0xC3//Power_Control4 +#define CMD_PWCTR5 0xC4//Power_Control5 +#define CMD_VCOMCTR1 0xC5//VCOM_Control 1 +#define CMD_VCOMCTR2 0xC6//VCOM_Control 2 +#define CMD_VCOMOFFS 0xC7//VCOM Offset Control +#define CMD_PGAMMAC 0xE0//Positive Gamma Correction Setting +#define CMD_NGAMMAC 0xE1//Negative Gamma Correction Setting +#define CMD_GAMRSEL 0xF2//GAM_R_SEL + + +class TFT_ILI9163C_BASE : public Adafruit_GFX, public SPI { + + public: + + TFT_ILI9163C_BASE(PinName mosi, PinName miso, PinName sclk, PinName cs, PinName dc, PinName reset); + TFT_ILI9163C_BASE(PinName mosi, PinName miso, PinName sclk, PinName cs, PinName dc); + + void begin(void), + setAddrWindow(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1),//graphic Addressing + setCursor(int16_t x,int16_t y),//char addressing + pushColor(uint16_t color), + clearScreen(uint16_t color=0x0000),//same as fillScreen + setRotation(uint8_t r); + + virtual void fillScreen(uint16_t color=0x0000), + drawPixel(int16_t x, int16_t y, uint16_t color), + drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color), + drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color), + fillRect(int16_t x, int16_t y, int16_t w, int16_t h,uint16_t color), + invertDisplay(bool i); + + uint16_t Color565(uint8_t r, uint8_t g, uint8_t b); + void setBitrate(uint32_t n); + + protected: + + DigitalOut _cs; + DigitalOut _dc; + PinName _resetPinName; + + private: + + virtual void init(PinName cs, PinName dc); + virtual void selectSlave(); + virtual void deselectSlave(); + virtual void setCommandMode(); + virtual void setDataMode(); + virtual void writecommand(uint8_t c); + virtual void writedata(uint8_t d); + virtual void writedata16(uint16_t d); + virtual void writedata32(uint16_t d1, uint16_t d2); + virtual void writedata16burst(uint16_t d, int32_t len); + + uint8_t _Mactrl_Data;//container for the memory access control data + uint8_t _colorspaceData; + void colorSpace(uint8_t cspace); + void chipInit(); + bool boundaryCheck(int16_t x,int16_t y); + void homeAddress(); + +};