for Arduino TFT LCD Screen 160x128

Dependents:   TFTLCDSCREEN Pong_ILI9163C

Fork of TFT_ILI9163C by _ peu605

Committer:
billycorgan123
Date:
Fri Mar 04 08:55:32 2016 +0000
Revision:
12:f0799be044ff
Parent:
10:1ebc27775d92
first trial with Arduino TFT LCD Screen, ILI9163

Who changed what in which revision?

UserRevisionLine numberNew 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 */
billycorgan123 12:f0799be044ff 23 #define _TFTWIDTH 128 //the REAL W resolution of the TFT 128
billycorgan123 12:f0799be044ff 24 #define _TFTHEIGHT 160 //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 */
billycorgan123 12:f0799be044ff 55 #define _TFTWIDTH 128 //the REAL W resolution of the TFT 128
billycorgan123 12:f0799be044ff 56 #define _TFTHEIGHT 160 //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 };