Code to run the cheap 2.4" TFT made by mcufriend.com on the STM nucleo. No modifications required, this plugs into the arduino header.

Dependents:   ST7735_V2_STM32F407

Fork of TFTLCD_8bit by Thiha Electronics

Revision:
12:d0978272a340
Parent:
11:aeceefc5f9f2
Child:
19:eb27effb8c07
--- a/lcd_base.h	Tue Dec 11 16:50:09 2012 +0000
+++ b/lcd_base.h	Tue Dec 11 18:11:14 2012 +0000
@@ -39,14 +39,16 @@
 #endif
 
 /** \def RGB(r,g,b)
- *  \brief Creates a RGB-565 color value.
+ *  \brief Creates a RGB color from distinct bytes for the red, green and blue components.
  *
  * Displays which use 16 bits to assign colors to a specific pixel, use
  * 5 bits for the red component, 6 bits for the green component and 5
- * bits for the blue component.  This macro converts the 3 full-size
- * RGB bytes into one 16-bit RGB-565 value.
+ * bits for the blue component.  Displays which have 18-bit color depth
+ * use 6 bits for red, 6 bits for green and 6 bits for blue component.
+ * This macro preserves the full 24-bit color depth, but it is the responsibility
+ * of the respective driver to convert the color value to the correct format.
  */
-#define RGB( r, g, b )          ( ( ( ( r ) & 248 ) | ( ( g ) >> 5 ) ) << 8 ) | ( ( ( ( g ) & 28 ) << 3 ) | ( ( b ) >> 3 ) )
+#define RGB( r, g, b )          ( ( r ) << 16 ) | ( ( g ) << 8 ) | ( b )
 /** \def COLOR_BLACK
  *  \brief Shorthand for RGB( 0, 0, 0 ).
  */
@@ -73,8 +75,10 @@
  */
 enum Orientation_enum
 {
-    PORTRAIT = 0, /**< Display height is bigger than its width. */ 
-    LANDSCAPE = 1, /**< Display width is bigger than its height. */
+    PORTRAIT = 0, /**< Display height is bigger than its width. View at 12 o'clock. */ 
+    LANDSCAPE = 1, /**< Display width is bigger than its height. View at 9 o'clock. */
+    PORTRAIT_REV = 2, /**< Display height is bigger than its width. View at 6 o'clock. */
+    LANDSCAPE_REV = 3, /**< Display width is bigger than its height. View at 3 o'clock. */
 };
 /** \typedef orientation_t
  *  \brief Convenience shortcut for display orientation.
@@ -125,6 +129,21 @@
  */
 typedef struct Font_struct font_metrics_t;
 
+/** \struct Bitmap_struct
+ *  \brief Describes an image.
+ */
+struct Bitmap_struct
+{
+    colordepth_t Format; /**< Color depth of the image. */
+    unsigned short Width; /**< Width of the image in pixels. */
+    unsigned short Height; /**< Height of the image in pixels. */
+    const void* PixelData; /**< Image pixel data. */
+};
+/** \typedef bitmap_t
+ *  \brief Convenience shortcut bitmap type.
+ */
+typedef struct Bitmap_struct bitmap_t;
+
 
 /** Base class for LCD implementations.
  *
@@ -148,8 +167,9 @@
      * This function is controller-specific and needs to be implemented
      * separately for each available display.
      * \param oritentation The display orientation, landscape is default.
+     * \param colors The correct color depth to use for the pixel data.
      */
-    virtual void Initialize( orientation_t orientation ) = 0;
+    virtual void Initialize( orientation_t orientation, colordepth_t colors ) = 0;
     
     /** Puts the display to sleep.
      *
@@ -187,10 +207,10 @@
      * in place, the new setting will be used for that single operation only and
      * will not change this value.
      *
-     * \param color The color to be used. The value must be in RGB-565 format.
+     * \param color The color to be used (24-bit color depth).
      * \sa #RGB(r,g,b)
      */
-    virtual void SetForeground( unsigned short color = COLOR_WHITE );
+    virtual void SetForeground( unsigned int color = COLOR_WHITE );
     
     /** Set the background color for painting.
      *
@@ -199,10 +219,10 @@
      * when the function is called, the new value will be used only for this
      * single call and will not change this setting.
      *
-     * \param color The background color as RGB-565 value.
+     * \param color The background color (24-bit color depth).
      * \sa #RGB(r,g,b)
      */
-    virtual void SetBackground( unsigned short color = COLOR_BLACK );
+    virtual void SetBackground( unsigned int color = COLOR_BLACK );
     
     /** Sets the font to be used for painting of text on the screen.
      * \param font A pointer to the font data.
@@ -240,7 +260,7 @@
      *
      * \param x The horizontal offset of the pixel from the upper left corner of the screen.
      * \param y The vertical offset of the pixel from the upper left corner of the screen.
-     * \param color The color to be used. Must be in RGB-565 format, or -1 for background and -2 for foreground color.
+     * \param color The color to be used. Use a custom color, or -1 for background and -2 for foreground color.
      */
     virtual void DrawPixel( unsigned short x, unsigned short y, int color = -2 );
     
@@ -250,7 +270,7 @@
      * \param y1 Vertical offset of the beginning point of the line.
      * \param x2 Horizontal offset of the end point of the line.
      * \param y2 Verical offset of the end point of the line.
-     * \param color The color to use for painting, in RGB-565 format, or -1 for background, or -2 for foreground.
+     * \param color The color to use for painting, or -1 for background, or -2 for foreground.
      */
     virtual void DrawLine( unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2, int color = -2 );
     
@@ -260,7 +280,7 @@
      * \param y1 The vertical offset of the beginning point of one of the rectangle's diagonals.
      * \param x2 The horizontal offset of the end point of the same of the rectangle's diagonals.
      * \param y2 The vertical offset of the end point of the same of the rectangle's diagonals.
-     * \param color The color to use for painting. -1 indicated background, -2 foreground, or custom color in RGB-565 format.
+     * \param color The color to use for painting. -1 indicated background, -2 foreground, or custom color.
      */
     virtual void DrawRect( unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2, int color = -2 );
     
@@ -270,7 +290,7 @@
      * \param y1 The vertical offset of the beginning point of one of the rectangle's diagonals.
      * \param x2 The horizontal offset of the end point of the same of the rectangle's diagonals.
      * \param y2 The vertical offset of the end point of the same of the rectangle's diagonals.
-     * \param color The color to use for painting. -1 indicated background, -2 foreground, or custom color in RGB-565 format.
+     * \param color The color to use for painting. -1 indicated background, -2 foreground, or custom color.
      */
     virtual void DrawRoundRect( unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2, int color = -2 );
     
@@ -280,7 +300,7 @@
      * \param y1 The vertical offset of the beginning point of one of the rectangle's diagonals.
      * \param x2 The horizontal offset of the end point of the same of the rectangle's diagonals.
      * \param y2 The vertical offset of the end point of the same of the rectangle's diagonals.
-     * \param color The color to use for painting. -1 indicated background, -2 foreground, or custom color in RGB-565 format.
+     * \param color The color to use for painting. -1 indicated background, -2 foreground, or custom color.
      */
     virtual void FillRect( unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2, int color = -2 );
     
@@ -290,7 +310,7 @@
      * \param y1 The vertical offset of the beginning point of one of the rectangle's diagonals.
      * \param x2 The horizontal offset of the end point of the same of the rectangle's diagonals.
      * \param y2 The vertical offset of the end point of the same of the rectangle's diagonals.
-     * \param color The color to use for painting. -1 indicated background, -2 foreground, or custom color in RGB-565 format.
+     * \param color The color to use for painting. -1 indicated background, -2 foreground, or custom color.
      */
     virtual void FillRoundRect( unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2, int color = -2 );
     
@@ -299,7 +319,7 @@
      * \param x The offset of the circle's center from the left edge of the screen.
      * \param y The offset of the circle's center from the top edge of the screen.
      * \param radius The circle's radius.
-     * \param color The color to use for painting. -1 indicated background, -2 foreground, or custom color in RGB-565 format.
+     * \param color The color to use for painting. -1 indicated background, -2 foreground, or custom color.
      */
     virtual void DrawCircle( unsigned short x, unsigned short y, unsigned short radius, int color = -2 );
     
@@ -308,7 +328,7 @@
      * \param x The offset of the circle's center from the left edge of the screen.
      * \param y The offset of the circle's center from the top edge of the screen.
      * \param radius The circle's radius.
-     * \param color The color to use for painting. -1 indicated background, -2 foreground, or custom color in RGB-565 format.
+     * \param color The color to use for painting. -1 indicated background, -2 foreground, or custom color.
      */
     virtual void FillCircle( unsigned short x, unsigned short y, unsigned short radius, int color = -2 );
     
@@ -333,13 +353,11 @@
      * http://henningkarlsen.com/electronics/library.php?id=52
      *
      * \param x Horizontal offset of the first pixel of the image.
-     * \param y Vertical offset of the first pixel of the image
-     * \param sx Width of the image.
-     * \param sy Height of the image.
-     * \param imgPixelData Image pixel array.
+     * \param y Vertical offset of the first pixel of the image.
+     * \param img Image data pointer.
      * \param scale A value of 1 will produce an image with its original size, while a different value will scale the image.
      */
-    virtual void DrawBitmap( unsigned short x, unsigned short y, unsigned short sx, unsigned short sy, const unsigned short* imgPixelData, unsigned char scale = 1 );
+    virtual void DrawBitmap( unsigned short x, unsigned short y, const bitmap_t* img, unsigned char scale = 1 );
     
     /** Draw an image on the screen.
      *
@@ -350,15 +368,13 @@
      * http://henningkarlsen.com/electronics/library.php?id=52
      *
      * \param x Horizontal offset of the first pixel of the image.
-     * \param y Vertical offset of the first pixel of the image
-     * \param sx Width of the image.
-     * \param sy Height of the image.
-     * \param imgPixelData Image pixel array.
+     * \param y Vertical offset of the first pixel of the image.
+     * \param img Image data pointer.
      * \param deg Angle to rotate the image before painting on screen, in degrees.
      * \param rox
      * \param roy
      */
-    virtual void DrawBitmap( unsigned short x, unsigned short y, unsigned short sx, unsigned short sy, const unsigned short* imgPixelData, unsigned short deg, unsigned short rox, unsigned short roy );
+    virtual void DrawBitmap( unsigned short x, unsigned short y, const bitmap_t* img, unsigned short deg, unsigned short rox, unsigned short roy );
     
 protected:
     /** Creates an instance of the class.
@@ -434,10 +450,10 @@
     /** Sets the color of the pixel at the address pointer of the controller.
      *
      * This function is to be provided by each implementation separately in
-     * order to account for different color depth used by the controller.
+     * order to account for different color depths used by the controller.
      * \param color The color of the pixel.
      */
-    virtual void SetPixelColor( unsigned short color ) = 0;
+    virtual void SetPixelColor( unsigned int color ) = 0;
     
     /** Draws a horizontal line.
      *
@@ -448,7 +464,7 @@
      * \param y Y coordinate of the starting point of the line.
      * \param len Length of the line.
      * \param color The color to use to draw the line. By default the global foreground color is used ( -2 ),
-     *              -1 switches to the default background color, or any other RGB-565 color can be used.
+     *              -1 switches to the default background color, or any custom color can be used.
      */
     virtual void DrawHLine( unsigned short x, unsigned short y, unsigned short len, int color = -2 );
     
@@ -461,7 +477,7 @@
      * \param y Y coordinate of the starting point of the line.
      * \param len Height of the line.
      * \param color The color to use to draw the line. By default the global foreground color is used ( -2 ),
-     *              -1 switches to the default background color, or any other RGB-565 color can be used.
+     *              -1 switches to the default background color, or any custom color can be used.
      */
     virtual void DrawVLine( unsigned short x, unsigned short y, unsigned short len, int color = -2 );
     
@@ -471,9 +487,9 @@
      * \param x X coordinate of the character position.
      * \param y Y coordinate of the character position.
      * \param fgColor Foreground color for drawing. By default the global foreground color is used ( -2 ),
-     *                -1 switches to the default background color, or any other RGB-565 color can be used.
+     *                -1 switches to the default background color, or any custom color can be used.
      * \param bgColor Background color for drawing. By default the global background color is used ( -1 ),
-     *                -2 switches to the default foreground color, or any other RGB-565 color can be used.
+     *                -2 switches to the default foreground color, or any custom color can be used.
      */
     virtual void PrintChar( char c, unsigned short x, unsigned short y, int fgColor = -2, int bgColor = -1 );
     
@@ -484,9 +500,9 @@
      * \param y Y coordinate of the character position.
      * \param pos Position of the character in the string from which it originates (used to rotate a whole string).
      * \param fgColor Foreground color for drawing. By default the global foreground color is used ( -2 ),
-     *                -1 switches to the default background color, or any other RGB-565 color can be used.
+     *                -1 switches to the default background color, or any custom color can be used.
      * \param bgColor Background color for drawing. By default the global background color is used ( -1 ),
-     *                -2 switches to the default foreground color, or any other RGB-565 color can be used.
+     *                -2 switches to the default foreground color, or any custom color can be used.
      * \param deg The angle at which to rotate. 
      */
     virtual void RotateChar( char c, unsigned short x, unsigned short y, int pos, int fgColor = -2, int bgColor = -1, unsigned short deg = 0 );
@@ -495,7 +511,8 @@
     unsigned short  _disp_width, _disp_height;
     DigitalOut      _lcd_pin_cs, _lcd_pin_rs, _lcd_pin_reset;
     orientation_t   _orientation;
-    unsigned short  _foreground, _background;
+    colordepth_t    _colorDepth;
+    unsigned int    _foreground, _background;
     font_metrics_t  _font;
 };