Library to control a QVGA TFT connected to SPI. You can use printf to print text The lib can handle different fonts, draw lines, circles, rect and bmp

SPI_TFT.h

Committer:
dreschpe
Date:
2011-07-12
Revision:
0:cccc5726bdf3
Child:
1:aa3356b16080

File content as of revision 0:cccc5726bdf3:

/* mbed library for 240*320 pixel display TFT based on HX8347D LCD Controller
 * Copyright (c) 2011 Peter Drescher - DC2PD
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */

#ifndef MBED_SPI_TFT_H
#define MBED_SPI_TFT_H

#include "mbed.h"
#include "GraphicsDisplay.h"

#define RGB(r,g,b)  (((r&0xF8)<<8)|((g&0xFC)<<3)|((b&0xF8)>>3)) //5 red | 6 green | 5 blue

#define SPI_START   (0x70)              /* Start byte for SPI transfer        */
#define SPI_RD      (0x01)              /* WR bit 1 within start              */
#define SPI_WR      (0x00)              /* WR bit 0 within start              */
#define SPI_DATA    (0x02)              /* RS bit 1 within start byte         */
#define SPI_INDEX   (0x00)              /* RS bit 0 within start byte         */


/* some RGB color definitions                                                 */
#define Black           0x0000      /*   0,   0,   0 */
#define Navy            0x000F      /*   0,   0, 128 */
#define DarkGreen       0x03E0      /*   0, 128,   0 */
#define DarkCyan        0x03EF      /*   0, 128, 128 */
#define Maroon          0x7800      /* 128,   0,   0 */
#define Purple          0x780F      /* 128,   0, 128 */
#define Olive           0x7BE0      /* 128, 128,   0 */
#define LightGrey       0xC618      /* 192, 192, 192 */
#define DarkGrey        0x7BEF      /* 128, 128, 128 */
#define Blue            0x001F      /*   0,   0, 255 */
#define Green           0x07E0      /*   0, 255,   0 */
#define Cyan            0x07FF      /*   0, 255, 255 */
#define Red             0xF800      /* 255,   0,   0 */
#define Magenta         0xF81F      /* 255,   0, 255 */
#define Yellow          0xFFE0      /* 255, 255, 0   */
#define White           0xFFFF      /* 255, 255, 255 */



class SPI_TFT : public GraphicsDisplay {
public:
    SPI_TFT(PinName mosi, PinName miso, PinName sclk, PinName cs, PinName reset,const char* name ="TFT");
    virtual int width();
    virtual int height();
    virtual void pixel(int x, int y, int colour);
    void circle(int x, int y, int r, int colour); 
    void line(int x0, int y0, int x1, int y1, int colour);
    void rect(int x0, int y0, int x1, int y1, int colour);
    void fillrect(int x0, int y0, int x1, int y1, int colour);
    void locate(int column, int row);
    virtual void cls (void);   
    int columns(void);
    int rows(void);
    int _putc(int value);
    virtual void character(int col, int row, int c);
    void Bitmap(unsigned int x, unsigned int y, unsigned int w, unsigned int h,unsigned char *bitmap);
    void set_font(unsigned char* f);
    void set_orientation(unsigned int o);
    
    SPI _spi;
    DigitalOut _cs;
    DigitalOut _reset;
    unsigned char* font;
    
protected:
    void hline(int x0, int x1, int y, int colour);
    void vline(int y0, int y1, int x, int colour);
    void window (unsigned int x, unsigned int y, unsigned int w, unsigned int h);
    void WindowMax (void);
    void tft_reset();
    void wr_dat(int value);
    void wr_cmd(int value);
    void wr_dat_start();
    void wr_dat_stop();
    void wr_dat_only(unsigned short dat);
    unsigned short rd_dat(void);
    void wr_reg (unsigned char reg, unsigned short val);
    unsigned short rd_reg (unsigned char reg);
    
    unsigned int orientation;
    unsigned int char_x;
    
};

#endif