Programme de test pour lcd ITDB02
Fork of TFTLCD by
Diff: st7735.cpp
- Revision:
- 20:4bdca8d8dadc
- Parent:
- 15:af3cd35886fb
- Child:
- 22:4c169297f374
--- a/st7735.cpp Thu Dec 13 03:37:22 2012 +0000 +++ b/st7735.cpp Fri Dec 21 06:05:15 2012 +0000 @@ -162,9 +162,9 @@ WriteCmd( 0x36 ); //MX, MY, RGB mode switch ( _orientation ) { - case LANDSCAPE: WriteByteData( 0xB8 ); break; + case LANDSCAPE: WriteByteData( 0x6C ); break; case PORTRAIT_REV: WriteByteData( 0xDC ); break; - case LANDSCAPE_REV: WriteByteData( 0x6C ); break; + case LANDSCAPE_REV: WriteByteData( 0xB8 ); break; case PORTRAIT: default: WriteByteData( 0x08 ); break; } @@ -217,7 +217,7 @@ serializeByte( data ); } -void ST7735_LCD::SetXY( uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2 ) +void ST7735_LCD::SetXY( unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2 ) { WriteCmdData( 0x2a, x1 ); WriteData( x2 ); @@ -226,22 +226,56 @@ WriteCmd( 0x2c ); } -void ST7735_LCD::SetPixelColor( unsigned int color ) +void ST7735_LCD::SetPixelColor( unsigned int color, colordepth_t mode ) { - unsigned char r, g, b; - r = ( color >> 16 ) & 0xFF; - g = ( color >> 8 ) & 0xFF; - b = color & 0xFF; + unsigned char r = 0, g = 0, b = 0; + unsigned short clr; if ( _colorDepth == RGB16 ) { - unsigned short clr = ( ( ( ( r ) & 0xF8 ) | ( ( g ) >> 5 ) ) << 8 ) | ( ( ( ( g ) & 0x1C ) << 3 ) | ( ( b ) >> 3 ) ); - WriteData( clr ); + switch ( mode ) + { + case RGB16: + WriteData( color & 0xFFFF ); + break; + case RGB18: + r = ( color >> 10 ) & 0xF8; + g = ( color >> 4 ) & 0xFC; + b = ( color >> 1 ) & 0x1F; + clr = ( ( r | ( g >> 5 ) ) << 8 ) | ( ( g << 3 ) | b ); + WriteData( clr ); + break; + case RGB24: + r = ( color >> 16 ) & 0xF8; + g = ( color >> 8 ) & 0xFC; + b = color & 0xF8; + clr = ( ( r | ( g >> 5 ) ) << 8 ) | ( ( g << 3 ) | ( b >> 3 ) ); + WriteData( clr ); + break; + } } else if ( _colorDepth == RGB18 ) { - WriteByteData( r & 0xFC ); - WriteByteData( g & 0xFC ); - WriteByteData( b & 0xFC ); + switch ( mode ) + { + case RGB16: + r = ( ( color >> 8 ) & 0xF8 ) | ( ( color & 0x8000 ) >> 13 ); + g = ( color >> 3 ) & 0xFC; + b = ( ( color << 3 ) & 0xFC ) | ( ( color >> 3 ) & 0x01 ); + break; + case RGB18: + b = ( color << 2 ) & 0xFC; + g = ( color >> 4 ) & 0xFC; + r = ( color >> 10 ) & 0xFC; + break; + case RGB24: + r = ( color >> 16 ) & 0xFC; + g = ( color >> 8 ) & 0xFC; + b = color & 0xFC; + break; + } + WriteByteData( r ); + WriteByteData( g ); + WriteByteData( b ); } }