Added methods and features
Fork of SPI_TFT_ILI9341 by
Diff: SPI_TFT_ILI9341.h
- Revision:
- 8:8593d3668153
- Parent:
- 6:fe07ae8329f7
- Child:
- 9:6d30a225a5c7
--- a/SPI_TFT_ILI9341.h Sun Jan 26 20:54:21 2014 +0000 +++ b/SPI_TFT_ILI9341.h Wed Apr 02 19:20:09 2014 +0000 @@ -20,10 +20,24 @@ #include "mbed.h" #include "GraphicsDisplay.h" +/* Enable or disable 16 bit SPI communication */ +#if defined TARGET_KL25Z +//Always disable for KL25Z since it does not support 16 bit SPI. +#define SPI_16 0 +#else +//Disable anyhow since 16 bit SPI does not really seem to improve performance.. +#define SPI_16 0 +//#define SPI_16 1 +#endif + +/* Default Display Dimensions */ +#define TFT_WIDTH 240 +#define TFT_HEIGHT 320 + +/* Compute RGB color in 565 format */ #define RGB(r,g,b) (((r&0xF8)<<8)|((g&0xFC)<<3)|((b&0xF8)>>3)) //5 red | 6 green | 5 blue - -/* some RGB color definitions */ +/* Some RGB color definitions in 888 format */ #define Black 0x0000 /* 0, 0, 0 */ #define Navy 0x000F /* 0, 0, 128 */ #define DarkGreen 0x03E0 /* 0, 128, 0 */ @@ -44,6 +58,50 @@ #define GreenYellow 0xAFE5 /* 173, 255, 47 */ +/** + * @brief ILI9341 Registers + */ +#define ILI9341_DISPLAY_RST 0x01 /* SW reset */ + +#define ILI9341_SLEEP_OUT 0x11 /* Sleep out register */ +#define ILI9341_GAMMA 0x26 /* Gamma register */ +#define ILI9341_DISPLAY_OFF 0x28 /* Display off register */ +#define ILI9341_DISPLAY_ON 0x29 /* Display on register */ +#define ILI9341_COLUMN_ADDR 0x2A /* Colomn address register */ +#define ILI9341_PAGE_ADDR 0x2B /* Page address register */ +#define ILI9341_GRAM 0x2C /* GRAM register */ +// +// +#define ILI9341_TEAR_OFF 0x34 /* tearing effect off */ +#define ILI9341_TEAR_ON 0x35 /* tearing effect on */ + +#define ILI9341_MAC 0x36 /* Memory Access Control register*/ +#define ILI9341_PIXEL_FORMAT 0x3A /* Pixel Format register */ + +#define ILI9341_WDB 0x51 /* Write Brightness Display register */ +#define ILI9341_WCD 0x53 /* Write Control Display register*/ +#define ILI9341_RGB_INTERFACE 0xB0 /* RGB Interface Signal Control */ +#define ILI9341_FRC 0xB1 /* Frame Rate Control register */ +#define ILI9341_BPC 0xB5 /* Blanking Porch Control register*/ +#define ILI9341_DFC 0xB6 /* Display Function Control register*/ +#define ILI9341_ENTRY_MODE 0xB7 /* Display Entry mode register*/ +// +#define ILI9341_POWER1 0xC0 /* Power Control 1 register */ +#define ILI9341_POWER2 0xC1 /* Power Control 2 register */ +#define ILI9341_VCOM1 0xC5 /* VCOM Control 1 register */ +#define ILI9341_VCOM2 0xC7 /* VCOM Control 2 register */ +#define ILI9341_POWERA 0xCB /* Power control A register */ +#define ILI9341_POWERB 0xCF /* Power control B register */ +#define ILI9341_PGAMMA 0xE0 /* Positive Gamma Correction register*/ +#define ILI9341_NGAMMA 0xE1 /* Negative Gamma Correction register*/ +#define ILI9341_DTCA 0xE8 /* Driver timing control A */ +#define ILI9341_DTCB 0xEA /* Driver timing control B */ +#define ILI9341_POWER_SEQ 0xED /* Power on sequence register */ +#define ILI9341_3GAMMA_EN 0xF2 /* 3 Gamma enable register */ +#define ILI9341_INTERFACE 0xF6 /* Interface control register */ +#define ILI9341_PRC 0xF7 /* Pump ratio control register */ + + /** Display control class, based on GraphicsDisplay and TextDisplay * * Example: @@ -81,6 +139,14 @@ class SPI_TFT_ILI9341 : public GraphicsDisplay { public: + /** Display origin */ + enum Origin { + Origin_LeftTop=0, /**< Left Top of panel is origin */ + Origin_RightTop, /**< Right Top of panel is origin */ + Origin_RightBot, /**< Right Bottom of panel is origin */ + Origin_LeftBot /**< Left Bottom panel is origin */ + }; + /** Create a SPI_TFT object connected to SPI and three pins * * @param mosi pin connected to SDO of display @@ -89,20 +155,20 @@ * @param cs pin connected to CS of display * @param reset pin connected to RESET of display * @param dc pin connected to WR of display - * the IM pins have to be set to 1110 (3-0) + * The IM pins have to be set to 1110 (3-0). Note: the M24SR board uses 0110 which also works. */ SPI_TFT_ILI9341(PinName mosi, PinName miso, PinName sclk, PinName cs, PinName reset, PinName dc, const char* name ="TFT"); - /** Get the width of the screen in pixel + /** Get the width of the screen in pixels * - * @returns width of screen in pixel + * @returns width of screen in pixels * */ virtual int width(); - /** Get the height of the screen in pixel + /** Get the height of the screen in pixels * - * @returns height of screen in pixel + * @returns height of screen in pixels * */ virtual int height(); @@ -113,7 +179,7 @@ * @param y vertical position * @param color 16 bit pixel color */ - virtual void pixel(int x, int y,int colour); + virtual void pixel(int x, int y, int colour); /** draw a circle * @@ -167,11 +233,12 @@ */ virtual void locate(int x, int y); - /** Fill the screen with _backgroun color - * - */ - virtual void cls (void); - + /** Fill the screen with _background color + * @param none + * @return none + */ + virtual void cls(); + /** calculate the max number of char in a line * * @returns max columns @@ -209,7 +276,7 @@ * * @param x,y : upper left corner * @param w width of bitmap - * @param h high of bitmap + * @param h height of bitmap * @param *bitmap pointer to the bitmap data * * bitmap format: 16 bit R5 G6 B5 @@ -223,7 +290,7 @@ * cast the pointer to (unsigned char *) : * tft.Bitmap(10,40,309,50,(unsigned char *)scala); */ - void Bitmap(unsigned int x, unsigned int y, unsigned int w, unsigned int h,unsigned char *bitmap); + void Bitmap(unsigned int x, unsigned int y, unsigned int w, unsigned int h, unsigned char *bitmap); /** paint a 16 bit BMP from filesytem on the TFT (slow) @@ -246,7 +313,18 @@ int BMP_16(unsigned int x, unsigned int y, const char *Name_BMP); - + + +/******************************************************************************* +* Function Name : WriteBMP_FAT +* @brief Displays a bitmap picture loaded in Flash. +* @param Xpos: specifies the X position. +* @param Ypos: specifies the Y position. +* @param BmpAddress: Bmp picture address in Flash. +* @return None +*******************************************************************************/ + void WriteBMP_FAT(uint16_t Xpos, uint16_t Ypos, const char* BmpName); + /** select the font to use * @@ -269,7 +347,8 @@ * @param o direction to use the screen (0-3) * */ - void set_orientation(unsigned int o); +//WH void set_orientation(unsigned int o); + void set_origin(Origin origin); /** read out the manufacturer ID of the LCD @@ -279,14 +358,12 @@ int Read_ID(void); - - SPI _spi; - DigitalOut _cs; - DigitalOut _reset; - DigitalOut _dc; - unsigned char* font; - - +//These should move to protected section +// SPI _spi; +// DigitalOut _cs; +// DigitalOut _reset; +// DigitalOut _dc; +// unsigned char* font; protected: @@ -294,7 +371,7 @@ /** Set draw window region to whole screen * */ - void WindowMax (void); + void window_max (void); /** draw a horizontal line @@ -390,13 +467,20 @@ */ //unsigned short rd_reg (unsigned char reg); - unsigned char spi_port; - unsigned int orientation; +//WH unsigned char spi_port; + //WHunsigned int orientation; + Origin _origin; unsigned int char_x; unsigned int char_y; - PinName clk; - - +// PinName clk; + + + SPI _spi; + DigitalOut _cs; + DigitalOut _reset; + DigitalOut _dc; + unsigned char* _font; + }; #endif