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

Files at this revision

API Documentation at this revision

Comitter:
dreschpe
Date:
Wed Jul 13 08:25:10 2011 +0000
Parent:
0:cccc5726bdf3
Child:
2:0cc880f230ad
Commit message:
Add Docu

Changed in this revision

SPI_TFT.c Show annotated file Show diff for this revision Revisions of this file
SPI_TFT.h Show annotated file Show diff for this revision Revisions of this file
--- 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;
--- a/SPI_TFT.h	Tue Jul 12 08:27:34 2011 +0000
+++ b/SPI_TFT.h	Wed Jul 13 08:25:10 2011 +0000
@@ -13,6 +13,42 @@
 #ifndef MBED_SPI_TFT_H
 #define MBED_SPI_TFT_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
+ */
+
+
 #include "mbed.h"
 #include "GraphicsDisplay.h"
 
@@ -45,24 +81,164 @@
 
 
 
+
+
 class SPI_TFT : public GraphicsDisplay {
 public:
+
+/** 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
+ *
+ */ 
     SPI_TFT(PinName mosi, PinName miso, PinName sclk, PinName cs, PinName reset,const char* name ="TFT");
+    
+/** Get the width of the screen in pixel
+ *
+ * @param 
+ * @returns width of screen in pixel
+ *
+ */    
     virtual int width();
+
+/** Get the height of the screen in pixel
+ *
+ * @param  
+ * @returns height of screen in pixel 
+ *
+ */     
     virtual int height();
+    
+/** Draw a pixel at x,y with color 
+ *  
+ * @param x horizontal position
+ * @param y vertical position
+ * @param color 16 bit pixel color
+ **/    
     virtual void pixel(int x, int y, int colour);
+    
+/** draw a circle
+ *
+ * @param x0,y0 center
+ * @param r radius
+ * @param color 16 bit color                                                                 *
+ *
+ */    
     void circle(int x, int y, int r, int colour); 
+    
+/** draw a 1 pixel line
+ *
+ * @param x0,y0 start point
+ * @param x1,y1 stop point
+ * @param color 16 bit color
+ *
+ **/    
     void line(int x0, int y0, int x1, int y1, int colour);
+    
+/** draw a rect
+ *
+ * @param x0,y0 top left corner
+ * @param x1,y1 down right corner
+ * @param color 16 bit color
+ *                                                   *
+ **/    
     void rect(int x0, int y0, int x1, int y1, int colour);
+    
+/** draw a filled rect
+ *
+ * @param x0,y0 top left corner
+ * @param x1,y1 down right corner
+ * @param color 16 bit color
+ *
+ **/    
     void fillrect(int x0, int y0, int x1, int y1, int colour);
+    
+ /** setup cursor position
+ *
+ * @param column 0 to max
+ * @param row 0 to max 
+ * max depend on font size
+ **/   
     void locate(int column, int row);
+    
+ /** Fill the screen with _backgroun color
+ *
+ **/   
     virtual void cls (void);   
+    
+/** calculate the max number of char in a line
+ *
+ * @returns max columns
+ * depends on actual font size
+ *
+ */    
     int columns(void);
+    
+/** calculate the max number of columns
+ *
+ * @returns max column
+ * depends on actual font size
+ *
+ */   
     int rows(void);
+    
+/** put a char on the screen
+ *
+ * @param value char to print
+ * @returns printed char
+ *
+ */
     int _putc(int value);
+    
+/** 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
+ *
+ */    
     virtual void character(int col, int row, int c);
+    
+/** 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 Bitmap(unsigned int x, unsigned int y, unsigned int w, unsigned int h,unsigned char *bitmap);
+    
+ /** 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 set_font(unsigned char* f);
+   
+/** Set the orientation of the screen
+ *  x,y: 0,0 is always top left 
+ *
+ * @param o direction to use the screen (0-3) 90° Steps  
+ *
+ */  
     void set_orientation(unsigned int o);
     
     SPI _spi;
@@ -71,18 +247,95 @@
     unsigned char* font;
     
 protected:
+
+/** draw a horizontal line
+ *
+ * @param x0 horizontal start
+ * @param x1 horizontal stop
+ * @param y vertical position
+ * @param color 16 bit color                                               
+ *
+ **/
     void hline(int x0, int x1, int y, int colour);
+    
+ /** draw a vertical line
+ *
+ * @param x horizontal position
+ * @param y0 vertical start 
+ * @param y1 vertical stop
+ * @param color 16 bit color
+ **/
     void vline(int y0, int y1, int x, int colour);
+    
+/** 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 window (unsigned int x, unsigned int y, unsigned int w, unsigned int h);
+    
+  /** Set draw window region to whole screen
+ *
+ **/  
     void WindowMax (void);
+    
+/** Init the HX8347D controller 
+ *
+ */    
     void tft_reset();
+    
+ /** Write data to the LCD controller
+ *
+ * @param dat data written to LCD controller
+ * 
+ */   
     void wr_dat(int value);
+    
+ /** Write a command the LCD controller 
+ *
+ * @param cmd: command to be written   
+ *
+ */   
     void wr_cmd(int value);
+    
+ /** Start data sequence to the LCD controller
+ * 
+ */   
     void wr_dat_start();
+    
+/** Stop of data writing to the LCD controller
+ *   
+ */  
     void wr_dat_stop();
+    
+/** write data to the LCD controller
+ *
+ * @param data to be written 
+ *                                           *
+ */    
     void wr_dat_only(unsigned short dat);
+    
+/** Read data from the LCD controller
+ *
+ * @returns data from LCD controller
+ *  
+ */    
     unsigned short rd_dat(void);
+    
+ /** Write a value to the to a LCD register
+ *
+ * @param reg register to be written
+ * @param val data to be written
+ */   
     void wr_reg (unsigned char reg, unsigned short val);
+    
+/** Read a LCD register
+ *
+ * @param reg register to be read
+ * @returns value of the register 
+ */    
     unsigned short rd_reg (unsigned char reg);
     
     unsigned int orientation;