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
Diff: SPI_TFT.c
- Revision:
- 1:aa3356b16080
- Parent:
- 0:cccc5726bdf3
diff -r cccc5726bdf3 -r aa3356b16080 SPI_TFT.c --- a/SPI_TFT.c Tue Jul 12 08:27:34 2011 +0000 +++ b/SPI_TFT.c Wed Jul 13 08:25:10 2011 +0000 @@ -13,51 +13,12 @@ #include "SPI_TFT.h" #include "mbed.h" -/** Display control class, based on GraphicsDisplay and TextDisplay - * - * Example: - * @code - * #include "stdio.h" - * #include "mbed.h" - * #include "SPI_TFT.h" - * #include "string" - * #include "Arial12x12.h" - * #include "Arial24x23.h" - * - * - * - * // the TFT is connected to SPI pin 5-7 - * SPI_TFT TFT(p5, p6, p7, p8, p15,"TFT"); // mosi, miso, sclk, cs, reset - * - * int main() { - * TFT.claim(stdout); // send stdout to the TFT display - * //TFT.claim(stderr); // send stderr to the TFT display - * - * TFT.background(Black); // set background to black - * TFT.foreground(White); // set chars to white - * TFT.cls(); // clear the screen - * TFT.set_font((unsigned char*) Arial12x12); // select the font - * - * TFT.set_orientation(0); - * TFT.locate(0,0); - * printf(" Hello Mbed 0"); - * TFT.set_font((unsigned char*) Arial24x23); // select font 2 - * TFT.locate(2,5); - * TFT.printf("Bigger Font"); - * } - * @endcode - */ - -#define BPP 16 /* Bits per pixel -/** Create a SPI_TFT object connected to SPI and two pins - * - * @param mosi,miso,sclk SPI - * @param cs pin connected to CS of display - * @param reset pin connected to RESET of display - * - */ +#define BPP 16 // Bits per pixel + + + SPI_TFT::SPI_TFT(PinName mosi, PinName miso, PinName sclk, PinName cs, PinName reset, const char *name) : _spi(mosi, miso, sclk), _cs(cs), _reset(reset),GraphicsDisplay(name) { tft_reset(); @@ -65,38 +26,18 @@ char_x = 0; } - -/** Get the width of the screen in pixel - * - * @param - * @returns width of screen in pixel - * - */ - int SPI_TFT::width() { if(orientation == 0 || orientation == 2) return 240; else return 320; } - -/** Get the height of the screen in pixel - * - * @param - * @returns height of screen in pixel - * - */ int SPI_TFT::height() { if(orientation == 0 || orientation == 2) return 320; else return 240; } -/** Set the orientation of the screen - * x,y: 0,0 is always top left - * - * @param o direction to use the screen 1-4 - * - */ + void SPI_TFT::set_orientation(unsigned int o){ orientation = o; @@ -116,11 +57,7 @@ } } -/** Write a command the LCD controller - * - * @param cmd: command to be written - * - */ + void SPI_TFT::wr_cmd(int cmd) { _cs = 0; @@ -129,11 +66,7 @@ _cs = 1; } -/** Write data to the LCD controller - * - * @param dat data written to LCD controller - * - */ + void SPI_TFT::wr_dat(int dat) { _cs = 0; @@ -144,28 +77,20 @@ _cs = 1; } -/** Start data sequence to the LCD controller - * - */ + void SPI_TFT::wr_dat_start(void){ _cs = 0; _spi.write(SPI_START | SPI_WR | SPI_DATA); /* Write : RS = 1, RW = 0 */ } -/** Stop of data writing to the LCD controller - * - */ + void SPI_TFT::wr_dat_stop (void){ _cs = 1; } -/** write data to the LCD controller - * - * @param data to be written - * * - */ + void SPI_TFT::wr_dat_only (unsigned short dat) { @@ -174,11 +99,7 @@ _spi.format(8,3); // 8 bit Mode 3 } -/** Read data from the LCD controller - * - * @returns data from LCD controller - * - */ + unsigned short SPI_TFT::rd_dat (void) { unsigned short val = 0; @@ -193,11 +114,7 @@ return (val); } -/** Write a value to the to a LCD register - * - * @param reg register to be written - * @param val data to be written - */ + void SPI_TFT::wr_reg (unsigned char reg, unsigned short val) { @@ -205,11 +122,7 @@ wr_dat(val); } -/** Read a LCD register - * - * @param reg register to be read - * @returns value of the register - */ + unsigned short SPI_TFT::rd_reg (unsigned char reg) { @@ -217,9 +130,7 @@ return(rd_dat()); } -/** Init the HX8347D controller - * - */ + void SPI_TFT::tft_reset() { static unsigned short driverCode; @@ -319,12 +230,7 @@ } -/** Draw a pixel at x,y with color - * - * @param x horizontal position - * @param y vertical position - * @param color 16 bit pixel color - **/ + void SPI_TFT::pixel(int x, int y, int color) { wr_reg(0x03, (x >> 0)); @@ -336,13 +242,7 @@ } -/** Set draw window region - * - * @param x horizontal position - * @param y vertical position - * @param w window width in pixel - * @param h window height in pixels - **/ + void SPI_TFT::window (unsigned int x, unsigned int y, unsigned int w, unsigned int h) { wr_reg(0x03, (x >> 0)); @@ -358,18 +258,14 @@ -/** Set draw window region to whole screen - * - **/ + void SPI_TFT::WindowMax (void) { window (0, 0, width(), height()); } -/** Fill the screen with _backgroun color - * - **/ + void SPI_TFT::cls (void) { unsigned int i; WindowMax(); @@ -383,13 +279,7 @@ } -/** draw a circle - * - * @param x0,y0 center - * @param r radius - * @param color 16 bit color * - * - */ + void SPI_TFT::circle(int x0, int y0, int r, int color) { int draw_x0, draw_y0; @@ -515,14 +405,7 @@ return; } -/** draw a horizontal line - * - * @param x0 horizontal start - * @param x1 horizontal stop - * @param y vertical position - * @param color 16 bit color - * - **/ + void SPI_TFT::hline(int x0, int x1, int y, int color) { int w; w = x1 - x0 + 1; @@ -538,14 +421,7 @@ return; } -/** draw a vertical line - * - * @param x horizontal position - * @param y0 vertical start - * @param y1 vertical stop - * @param color 16 bit color - * - **/ + void SPI_TFT::vline(int x, int y0, int y1, int color) { int h; @@ -562,13 +438,7 @@ return; } -/** draw a 1 pixel line - * - * @param x0,y0 start point - * @param x1,y1 stop point - * @param color 16 bit color - * - **/ + void SPI_TFT::line(int x0, int y0, int x1, int y1, int color) { WindowMax(); @@ -660,13 +530,7 @@ } -/** draw a rect - * - * @param x0,y0 top left corner - * @param x1,y1 down right corner - * @param color 16 bit color - * * - **/ + void SPI_TFT::rect(int x0, int y0, int x1, int y1, int color) { @@ -685,13 +549,7 @@ return; } -/** draw a filled rect - * - * @param x0,y0 top left corner - * @param x1,y1 down right corner - * @param color 16 bit color - * - **/ + void SPI_TFT::fillrect(int x0, int y0, int x1, int y1, int color) { @@ -711,46 +569,26 @@ } -/** setup cursor position - * - * @param column 0 to max - * @param row 0 to max - * max depend on font size - **/ + void SPI_TFT::locate(int column, int row) { _column = column; char_x = font[1] * column; // get the horz. size of the actual font _row = row; } -/** calculate the max number of char in a line - * - * @returns max columns - * depends on actual font size - * - */ + int SPI_TFT::columns() { return width() / font[1]; } -/** calculate the max number of columns - * - * @returns max column - * depends on actual font size - * - */ + int SPI_TFT::rows() { return height() / font[2]; } -/** put a char on the screen - * - * @param value char to print - * @returns printed char - * - */ + int SPI_TFT::_putc(int value) { if(value == '\n') { @@ -768,13 +606,7 @@ } -/** draw a character on given position out of the active font to the TFT - * - * @param col column - * @param row row - * @param c char to print - * - */ + void SPI_TFT::character(int col, int row, int c){ unsigned int hor,vert,offset,bpl,j,i,b; @@ -828,40 +660,14 @@ } -/** select the font to use - * - * @param f pointer to font array - * - * font array can created with GLCD Font Creator from http://www.mikroe.com - * you have to add 4 parameter at the beginning of the font array to use: - * - the number of byte / char - * - the vertial size in pixel - * - the horizontal size in pixel - * - the number of byte per vertical line - * you also have to change the array to char[] - * - */ + void SPI_TFT::set_font(unsigned char* f){ font = f; } -/** paint a bitmap on the TFT - * - * @param x,y : upper left corner - * @param w width of bitmap - * @param h high of bitmap - * @param *bitmap pointer to the bitmap data - * - * bitmap format: 16 bit R5 G6 B5 - * - * use Gimp to create / load , save as BMP, option 16 bit R5 G6 B5 - * use winhex to load this file and mark data stating at offset 0x46 to end - * use edit -> copy block -> C Source to export C array - * paste this array into your program - * - */ + void SPI_TFT::Bitmap(unsigned int x, unsigned int y, unsigned int w, unsigned int h,unsigned char *bitmap){ unsigned int i,j;