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

Revision:
6:fc33e4a5713e
Parent:
5:2db1b8070d94
Child:
7:4781bb8eed45
--- a/SPI_TFT.cpp	Sat Jul 30 22:15:35 2011 +0000
+++ b/SPI_TFT.cpp	Wed Aug 31 20:51:14 2011 +0000
@@ -9,6 +9,10 @@
  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  * THE SOFTWARE.
  */
+ 
+ 
+// fix bmp padding for Bitmap function 
+
 
 #include "SPI_TFT.h"
 #include "mbed.h"
@@ -534,10 +538,9 @@
 
 
 
-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;
+void SPI_TFT::locate(int x, int y) {
+    char_x = x;
+    char_y = y;
 }
 
 
@@ -555,24 +558,22 @@
 
 
 int SPI_TFT::_putc(int value) {
-    if (value == '\n') {
-        _column = 0;
+    if (value == '\n') {    // new line
         char_x = 0;
-        _row++;
-        if (_row >= rows()) {
-            _row = 0;
+        char_y = char_y + font[2];
+        if (char_y >= height() - font[2]) {
+            char_y = 0;
         }
     } else {
-        character(_column, _row, value);
-        _column++;
-    }
+        character(char_x, char_y, value);
+     }
     return value;
 }
 
 
 
 
-void SPI_TFT::character(int col, int row, int c) {
+void SPI_TFT::character(int x, int y, int c) {
     unsigned int hor,vert,offset,bpl,j,i,b;
     unsigned char* zeichen;
     unsigned char z,w;
@@ -587,16 +588,13 @@
 
     if (char_x + hor > width()) {
         char_x = 0;
-        _column = 0;
-        _row ++;
-        row++;
-        if (_row >= rows()) {
-            _row = 0;
-            row=0;
+        char_y = char_y + vert;
+       if (char_y >= height() - font[2]) {
+            char_y = 0;
         }
     }
 
-    window(char_x, row * vert,hor,vert); // char box
+    window(char_x, char_y,hor,vert); // char box
     wr_cmd(0x22);
     wr_dat_start();
     zeichen = &font[((c -32) * offset) + 4]; // start of char bitmap
@@ -632,19 +630,26 @@
 
 
 void SPI_TFT::Bitmap(unsigned int x, unsigned int y, unsigned int w, unsigned int h,unsigned char *bitmap) {
-    unsigned int    i,j;
+    unsigned int    i,j,padd;
     unsigned short *bitmap_ptr = (unsigned short *)bitmap;
+    // the lines are padded to multiple of 4 bytes in a bitmap 
+    padd = -1;
+    do {
+        padd ++;
+    } while (2*(w + padd)%4 != 0);
     window(x, y, w, h);
     wr_cmd(0x22);
     wr_dat_start();
     _spi.format(16,3);
-    bitmap_ptr += ((h - 1)*w);
+    bitmap_ptr += ((h - 1)* (w + padd));
+    //bitmap_ptr -= padd;      
     for (j = 0; j < h; j++) {        //Lines
         for (i = 0; i < w; i++) {     // copy pixel data to TFT
             _spi.write(*bitmap_ptr);    // one line
             bitmap_ptr++;
         }
         bitmap_ptr -= 2*w;
+        bitmap_ptr -= padd;
     }
     _spi.format(8,3);
     wr_dat_stop();