Programme de test pour lcd ITDB02

Fork of TFTLCD by Todor Todorov

Files at this revision

API Documentation at this revision

Comitter:
ttodorov
Date:
Tue Dec 11 23:42:47 2012 +0000
Parent:
14:8efbe7361dae
Child:
16:4ccc2fa2cfec
Commit message:
- started rework of the SSD1289 driver to allow HW rotation of the display and 18-bit color mode

Changed in this revision

hx8340bs.cpp Show annotated file Show diff for this revision Revisions of this file
ssd1289.cpp Show annotated file Show diff for this revision Revisions of this file
st7735.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/hx8340bs.cpp	Tue Dec 11 20:52:22 2012 +0000
+++ b/hx8340bs.cpp	Tue Dec 11 23:42:47 2012 +0000
@@ -197,7 +197,7 @@
         unsigned short clr = ( ( ( ( r ) & 0xF8 ) | ( ( g ) >> 5 ) ) << 8 ) | ( ( ( ( g ) & 0x1C ) << 3 ) | ( ( b ) >> 3 ) );
         WriteData( clr );
     }
-    else
+    else if ( _colorDepth == RGB18 )
     {
         WriteByteData( r & 0xFC );
         WriteByteData( g & 0xFC );
--- a/ssd1289.cpp	Tue Dec 11 20:52:22 2012 +0000
+++ b/ssd1289.cpp	Tue Dec 11 23:42:47 2012 +0000
@@ -35,7 +35,7 @@
 void SSD1289_LCD::Initialize( orientation_t orientation, colordepth_t colors )
 {
     _orientation = orientation;
-    _colorDepth = RGB16;
+    _colorDepth = colors;
     
     _lcd_pin_reset = HIGH;
     wait_ms( 5 );
@@ -51,48 +51,126 @@
     wait_ms( 15 );
     
     Activate();
-    WriteCmdData( 0x00, 0x0001 ); wait_ms( 1 );
-    WriteCmdData( 0x03, 0xA8A4 ); wait_ms( 1 );
-    WriteCmdData( 0x0C, 0x0000 ); wait_ms( 1 );
-    WriteCmdData( 0x0D, 0x080C ); wait_ms( 1 );
-    WriteCmdData( 0x0E, 0x2B00 ); wait_ms( 1 );
-    WriteCmdData( 0x1E, 0x00B7 ); wait_ms( 1 );
-    WriteCmdData( 0x01, 0x2B3F ); wait_ms( 1 );
-    WriteCmdData( 0x02, 0x0600 ); wait_ms( 1 );
-    WriteCmdData( 0x10, 0x0000 ); wait_ms( 1 );
-    WriteCmdData( 0x11, 0x6070 ); wait_ms( 1 );
-    WriteCmdData( 0x05, 0x0000 ); wait_ms( 1 );
-    WriteCmdData( 0x06, 0x0000 ); wait_ms( 1 );
-    WriteCmdData( 0x16, 0xEF1C ); wait_ms( 1 );
-    WriteCmdData( 0x17, 0x0003 ); wait_ms( 1 );
-    WriteCmdData( 0x07, 0x0233 ); wait_ms( 1 );
-    WriteCmdData( 0x0B, 0x0000 ); wait_ms( 1 );
-    WriteCmdData( 0x0F, 0x0000 ); wait_ms( 1 );
-    WriteCmdData( 0x41, 0x0000 ); wait_ms( 1 );
-    WriteCmdData( 0x42, 0x0000 ); wait_ms( 1 );
-    WriteCmdData( 0x48, 0x0000 ); wait_ms( 1 );
-    WriteCmdData( 0x49, 0x013F ); wait_ms( 1 );
-    WriteCmdData( 0x4A, 0x0000 ); wait_ms( 1 );
-    WriteCmdData( 0x4B, 0x0000 ); wait_ms( 1 );
-    WriteCmdData( 0x44, 0xEF00 ); wait_ms( 1 );
-    WriteCmdData( 0x45, 0x0000 ); wait_ms( 1 );
-    WriteCmdData( 0x46, 0x013F ); wait_ms( 1 );
-    WriteCmdData( 0x30, 0x0707 ); wait_ms( 1 );
-    WriteCmdData( 0x31, 0x0204 ); wait_ms( 1 );
-    WriteCmdData( 0x32, 0x0204 ); wait_ms( 1 );
-    WriteCmdData( 0x33, 0x0502 ); wait_ms( 1 );
-    WriteCmdData( 0x34, 0x0507 ); wait_ms( 1 );
-    WriteCmdData( 0x35, 0x0204 ); wait_ms( 1 );
-    WriteCmdData( 0x36, 0x0204 ); wait_ms( 1 );
-    WriteCmdData( 0x37, 0x0502 ); wait_ms( 1 );
-    WriteCmdData( 0x3A, 0x0302 ); wait_ms( 1 );
-    WriteCmdData( 0x3B, 0x0302 ); wait_ms( 1 );
-    WriteCmdData( 0x23, 0x0000 ); wait_ms( 1 );
-    WriteCmdData( 0x24, 0x0000 ); wait_ms( 1 );
-    WriteCmdData( 0x25, 0x8000 ); wait_ms( 1 );
-    WriteCmdData( 0x4f, 0x0000 ); wait_ms( 1 );
-    WriteCmdData( 0x4e, 0x0000 ); wait_ms( 1 );
-    WriteCmd( 0x22 );
+    WriteCmdData( 0x00, 0x0001 ); // oscillator: 1 = on, 0 = off
+    wait_ms( 1 );
+    WriteCmdData( 0x03, 0xA8A4 ); // power control
+    wait_ms( 1 );
+    WriteCmdData( 0x0C, 0x0000 ); // power control 2
+    wait_ms( 1 );
+    WriteCmdData( 0x0D, 0x080C ); // power control 3
+    wait_ms( 1 );
+    WriteCmdData( 0x0E, 0x2B00 ); // power control 4
+    wait_ms( 1 );
+    WriteCmdData( 0x1E, 0x00B7 ); // power control 5
+    wait_ms( 1 );
+    WriteCmdData( 0x01, 0x2B3F ); // driver output control
+    wait_ms( 1 );
+    WriteCmdData( 0x02, 0x0600 ); // driving waveform control
+    wait_ms( 1 );
+    WriteCmdData( 0x10, 0x0000 ); // sleep mode: 0 = exit, 1 = enter
+    wait_ms( 1 );
+    if ( _colorDepth == RGB16 )
+    {
+        switch ( _orientation )
+        {
+            case LANDSCAPE:
+                WriteCmdData( 0x11, 0x6098 ); // entry mode
+                break;
+            case PORTRAIT_REV:
+                WriteCmdData( 0x11, 0x6080 ); // entry mode
+                break;
+            case LANDSCAPE_REV:
+                WriteCmdData( 0x11, 0x60A8 ); // entry mode
+                break;
+            case PORTRAIT:
+            default:
+                WriteCmdData( 0x11, 0x60B0 ); // entry mode
+                break;
+        }
+    }
+    else if ( _colorDepth == RGB18 )
+    {
+        switch ( _orientation )
+        {
+            case LANDSCAPE:
+                WriteCmdData( 0x11, 0x4098 ); // entry mode
+                break;
+            case PORTRAIT_REV:
+                WriteCmdData( 0x11, 0x4080 ); // entry mode
+                break;
+            case LANDSCAPE_REV:
+                WriteCmdData( 0x11, 0x40A8 ); // entry mode
+                break;
+            case PORTRAIT:
+            default:
+                WriteCmdData( 0x11, 0x40B0 ); // entry mode
+                break;
+        }
+    }
+    wait_ms( 1 );
+    WriteCmdData( 0x05, 0x0000 ); // compare register
+    wait_ms( 1 );
+    WriteCmdData( 0x06, 0x0000 ); // compare register
+    wait_ms( 1 );
+    WriteCmdData( 0x16, 0xEF1C ); // horizontal porch
+    wait_ms( 1 );
+    WriteCmdData( 0x17, 0x0003 ); // vertical porch
+    wait_ms( 1 );
+    WriteCmdData( 0x07, 0x0233 ); // display control
+    wait_ms( 1 );
+    WriteCmdData( 0x0B, 0x0000 ); // frame cycle control
+    wait_ms( 1 );
+    WriteCmdData( 0x0F, 0x0000 ); // gate scan position
+    wait_ms( 1 );
+    WriteCmdData( 0x41, 0x0000 ); // vertical scroll control
+    wait_ms( 1 );
+    WriteCmdData( 0x42, 0x0000 ); // vertical scroll control
+    wait_ms( 1 );
+    WriteCmdData( 0x48, 0x0000 ); // 1st screen driving position
+    wait_ms( 1 );
+    WriteCmdData( 0x49, 0x013F ); // 1st screen driving position
+    wait_ms( 1 );
+    WriteCmdData( 0x4A, 0x0000 ); // 2nd screen driving position
+    wait_ms( 1 );
+    WriteCmdData( 0x4B, 0x0000 ); // 2nd screen driving position
+    wait_ms( 1 );
+    WriteCmdData( 0x44, 0xEF00 ); // horizontal ram address position
+    wait_ms( 1 );
+    WriteCmdData( 0x45, 0x0000 ); // vertical ram address position
+    wait_ms( 1 );
+    WriteCmdData( 0x46, 0x013F ); // vertical ram address position
+    wait_ms( 1 );
+    WriteCmdData( 0x30, 0x0707 ); // gamma control
+    wait_ms( 1 );
+    WriteCmdData( 0x31, 0x0204 ); // gamma control
+    wait_ms( 1 );
+    WriteCmdData( 0x32, 0x0204 ); // gamma control
+    wait_ms( 1 );
+    WriteCmdData( 0x33, 0x0502 ); // gamma control
+    wait_ms( 1 );
+    WriteCmdData( 0x34, 0x0507 ); // gamma control
+    wait_ms( 1 );
+    WriteCmdData( 0x35, 0x0204 ); // gamma control
+    wait_ms( 1 );
+    WriteCmdData( 0x36, 0x0204 ); // gamma control
+    wait_ms( 1 );
+    WriteCmdData( 0x37, 0x0502 ); // gamma control
+    wait_ms( 1 );
+    WriteCmdData( 0x3A, 0x0302 ); // gamma control
+    wait_ms( 1 );
+    WriteCmdData( 0x3B, 0x0302 ); // gamma control
+    wait_ms( 1 );
+    WriteCmdData( 0x23, 0x0000 ); // GRAM write mask for red and green pins
+    wait_ms( 1 );
+    WriteCmdData( 0x24, 0x0000 ); // GRAM write mask for blue pins
+    wait_ms( 1 );
+    WriteCmdData( 0x25, 0x8000 ); // frame frequency control
+    wait_ms( 1 );
+    WriteCmdData( 0x4e, 0x0000 ); // ram address set
+    wait_ms( 1 );
+    WriteCmdData( 0x4f, 0x0000 ); // ram address set
+    wait_ms( 1 );
+    WriteCmd( 0x22 ); // write GRAM
     Deactivate();
 }
 
@@ -126,15 +204,6 @@
 
 void SSD1289_LCD::SetXY( uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2 )
 {
-    if ( _orientation == LANDSCAPE )
-    {
-        swap( uint16_t, x1, y1 )
-        swap( uint16_t, x2, y2 )
-        y1 = _disp_height - y1;
-        y2 = _disp_height - y2;
-        swap( uint16_t, y1, y2 )
-    }
-
     WriteCmdData( 0x44, ( x2 << 8 ) + x1 );
     WriteCmdData( 0x45, y1 );
     WriteCmdData( 0x46, y2 );
@@ -149,6 +218,12 @@
     r = ( color >> 16 ) & 0xFF;
     g = ( color >> 8 ) & 0xFF;
     b = color & 0xFF;
-    unsigned short clr = ( ( ( ( r ) & 0xF8 ) | ( ( g ) >> 5 ) ) << 8 ) | ( ( ( ( g ) & 0x1C ) << 3 ) | ( ( b ) >> 3 ) );
-    WriteData( clr );
+    if ( _colorDepth == RGB16 )
+    {
+        unsigned short clr = ( ( ( ( r ) & 0xF8 ) | ( ( g ) >> 5 ) ) << 8 ) | ( ( ( ( g ) & 0x1C ) << 3 ) | ( ( b ) >> 3 ) );
+        WriteData( clr );
+    }
+    else if ( _colorDepth == RGB18 )
+    {
+    }
 }
--- a/st7735.cpp	Tue Dec 11 20:52:22 2012 +0000
+++ b/st7735.cpp	Tue Dec 11 23:42:47 2012 +0000
@@ -237,7 +237,7 @@
         unsigned short clr = ( ( ( ( r ) & 0xF8 ) | ( ( g ) >> 5 ) ) << 8 ) | ( ( ( ( g ) & 0x1C ) << 3 ) | ( ( b ) >> 3 ) );
         WriteData( clr );
     }
-    else
+    else if ( _colorDepth == RGB18 )
     {
         WriteByteData( r & 0xFC );
         WriteByteData( g & 0xFC );