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.
Dependents: GR-PEACH_TFTLCD_8bit
Fork of TFTLCD_8bit by
Diff: ssd1289.cpp
- Revision:
- 15:af3cd35886fb
- Parent:
- 12:d0978272a340
- Child:
- 16:4ccc2fa2cfec
--- 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 )
+ {
+ }
}
