Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of TFTLCD by
Revision 15:af3cd35886fb, committed 2012-12-11
- 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
--- 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 );
