This is a port of Henning Kralsen's UTFT library for Arduino/chipKIT to mbed, refactored to make full use of C inheritance and access control, in order to reduce work when implementing new drivers and at the same time make the code more readable and easier to maintain. As of now supported are SSD1289 (16-bit interface), HX8340-B (serial interface) and ST7735 (serial interface). Drivers for other controllers will be added as time and resources to acquire the displays to test the code permit.

Dependents:   UTFT_SSD1289

Fork of TFTLCD by Todor Todorov

Revision:
25:6cffb758c075
Parent:
24:ac6e35658037
Child:
26:28f64fbcf7df
--- a/ili9328.cpp	Sat Jun 15 05:34:53 2013 +0000
+++ b/ili9328.cpp	Sun Jun 16 02:53:06 2013 +0000
@@ -52,29 +52,49 @@
     wait_ms( 15 );
     
     Activate();
-    /*
-    short payload = 0;
+    
+    short drivOut = 0;
+    short entryMod = 0;
+    short gateScan = 0x2700;
     switch ( _orientation )
     {
+        case LANDSCAPE:
+            drivOut = 0x0100;
+            entryMod |= 0x0038;
+            gateScan |= 0x0000;
+            break;
+            
+        case LANDSCAPE_REV:
+            drivOut = 0x0000;
+            entryMod |= 0x0038;
+            gateScan |= 0x8000;
+            break;
+            
+        case PORTRAIT_REV:
+            drivOut = 0x0000;
+            entryMod |= 0x0030;
+            gateScan |= 0x0000;
+            break;
+            
         case PORTRAIT:
         default:
-            payload |= 0x0020;
+            drivOut = 0x0100;
+            entryMod |= 0x0030;
+            gateScan |= 0x8000;
             break;
     }
     switch ( _colorDepth )
     {
         case RGB16:
         default:
-            payload |= 0x1000;
+            entryMod |= 0x1000;
             break;
     }
-    //WriteCmdData( REG_ENTRY_MOD, payload );
-    */
     
     WriteCmdData( 0xE5, 0x78F0 ); // set SRAM internal timing
-    WriteCmdData( 0x01, 0x0100 ); // set Driver Output Control
+    WriteCmdData( 0x01, drivOut ); // set Driver Output Control
     WriteCmdData( 0x02, 0x0200 ); // set 1 line inversion
-    WriteCmdData( 0x03, 0x1030 ); // set GRAM write direction and BGR=1.
+    WriteCmdData( 0x03, entryMod ); // set GRAM write direction and BGR=1.
     WriteCmdData( 0x04, 0x0000 ); // Resize register
     WriteCmdData( 0x08, 0x0207 ); // set the back porch and front porch
     WriteCmdData( 0x09, 0x0000 ); // set non-display area refresh cycle ISC[3:0]
@@ -116,7 +136,7 @@
     WriteCmdData( 0x51, 0x00EF ); // Horizontal GRAM End Address
     WriteCmdData( 0x52, 0x0000 ); // Vertical GRAM Start Address
     WriteCmdData( 0x53, 0x013F ); // Vertical GRAM Start Address
-    WriteCmdData( 0x60, 0xA700 ); // Gate Scan Line
+    WriteCmdData( 0x60, gateScan ); // Gate Scan Line (0xA700)
     WriteCmdData( 0x61, 0x0000 ); // NDL,VLE, REV
     WriteCmdData( 0x6A, 0x0000 ); // set scrolling line
     //-------------- Partial Display Control ---------//
@@ -136,13 +156,13 @@
 
 void ILI9328_LCD::Sleep( void )
 {
-    //WriteCmdData( 0x10, 0x0001 ); // sleep mode: 0 = exit, 1 = enter
+    WriteCmdData( 0x10, 0x0001 );//0x1692 ); // enter sleep mode
     LCD::Sleep();
 }
 
 void ILI9328_LCD::WakeUp( void )
 {
-    //WriteCmdData( 0x10, 0x0000 ); // sleep mode: 0 = exit, 1 = enter
+    WriteCmdData( 0x10, 0x0000 );//0x1690 ); // exit sleep mode
     LCD::WakeUp();
 }
 
@@ -162,12 +182,29 @@
 
 void ILI9328_LCD::SetXY( unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2 )
 {
-    WriteCmdData( 0x20, x1 );
-    WriteCmdData( 0x21, y1 );
-    WriteCmdData( 0x50, x1 );
-    WriteCmdData( 0x52, y1 );
-    WriteCmdData( 0x51, x2 );
-    WriteCmdData( 0x53, y2 );
+    switch ( _orientation )
+    {
+        case LANDSCAPE:
+        case LANDSCAPE_REV:
+            WriteCmdData( 0x20, y1 );
+            WriteCmdData( 0x21, x1 );
+            WriteCmdData( 0x50, y1 );
+            WriteCmdData( 0x52, x1 );
+            WriteCmdData( 0x51, y2 );
+            WriteCmdData( 0x53, x2 );
+            break;
+            
+        case PORTRAIT_REV:
+        case PORTRAIT:
+        default:
+            WriteCmdData( 0x20, x1 );
+            WriteCmdData( 0x21, y1 );
+            WriteCmdData( 0x50, x1 );
+            WriteCmdData( 0x52, y1 );
+            WriteCmdData( 0x51, x2 );
+            WriteCmdData( 0x53, y2 );
+            break;
+    }
     WriteCmd( 0x22 );
 }