This is a port of Henning Kralsen's UTFT library for Arduino/chipKIT to mbed, refactored to make full use of C inheritance and access control, in order to reduce work when implementing new drivers and at the same time make the code more readable and easier to maintain. As of now supported are SSD1289 (16-bit interface), HX8340-B (serial interface) and ST7735 (serial interface). Drivers for other controllers will be added as time and resources to acquire the displays to test the code permit.

Dependents:   UTFT_SSD1289

Fork of TFTLCD by Todor Todorov

Revision:
4:3ac4239f6c9c
Parent:
3:64a5b67d5b51
Child:
5:09b6d228ceea
--- a/ssd1289.h	Sun Dec 02 01:44:23 2012 +0000
+++ b/ssd1289.h	Sun Dec 02 05:44:52 2012 +0000
@@ -1,4 +1,4 @@
-/** \file ssd.h
+/** \file ssd1289.h
  *  \brief mbed TFT LCD controller for displays with the SSD1289 IC.
  *  \copyright GNU Public License, v2. or later
  *
@@ -40,7 +40,7 @@
  * works with this library is the ITDB02-3.2S from iTeadStudio - a RGB TFT
  * with 240x320 pixels resolution and 65K colors, using 16-bit interface.
  *
- * The display needs 20 or 21 pins to work with mbed, so it is possibly not
+ * The display needs 20 to 22 pins to work with mbed, so it is possibly not
  * the best of choices out there, but other than that it uses +3.3V for
  * power and logic, as well as the backlight, thus can be interfaced directly
  * to the mbed without the need of shields or level shifters as with Arduino.
@@ -53,7 +53,7 @@
  * // prepare the data bus for writing commands and pixel data
  * BusOut dataBus( p30, p29, p28, p27, p26, p25, p24, p23, p22, p21, p20, p19, p18, p17, p16, p15 ); // 16 pins
  * // create the lcd instance
- * SSD1289 lcd( p14, p13, p12, p11, &dataBus ); // control pins and data bus
+ * SSD1289_LCD lcd( p14, p13, p12, p11, &dataBus ); // control pins and data bus
  *
  * int main()
  * {
@@ -72,7 +72,7 @@
  * \version 0.1
  * \author Todor Todorov
  */
-class SSD1289LCD : public LCD
+class SSD1289_LCD : public LCD
 {
 public:
     /** Creates a new instance of the class.
@@ -82,11 +82,12 @@
      * \param RS Pin for the RS signal.
      * \param WR Pin for the WR signal.
      * \param DATA_PORT Address of the data bus for transfer of commands and pixel data.
+     * \param BL Pin for controlling the backlight. By default not used.
      * \param RD Pin for the RD signal. This line is not needed by the driver, so if you would like to
      *       use the pin on the mbed for something else, just pull-up the respective pin on the LCD high,
      *       and do not assign a value to this parameter when creating the controller instance.
      */
-    SSD1289LCD( PinName CS, PinName RESET, PinName RS, PinName WR, BusOut* DATA_PORT, PinName RD = NC );
+    SSD1289_LCD( PinName CS, PinName RESET, PinName RS, PinName WR, BusOut* DATA_PORT, PinName BL = NC, PinName RD = NC );
     
     /** Initialize display.
      *
@@ -100,14 +101,70 @@
      */
     virtual void Initialize( orientation_t orientation = LANDSCAPE );
     
+    /** Puts the display to sleep.
+     *
+     * When the display is in sleep mode, its power consumption is
+     * minimized.  Before new pixel data can be written to the display
+     * memory, the controller needs to be brought out of sleep mode.
+     * \sa #WakeUp( void );
+     * \remarks The result of this operation might not be exactly as
+     *          expected. Putting the display to sleep will cause the
+     *          controller to switch to the standard color of the LCD,
+     *          so depending on whether the display is normally white,
+     *          or normally dark, the screen might or might not go
+     *          dark.  Additional power saving can be achieved, if
+     *          the backlight of the used display is not hardwired on
+     *          the PCB and can be controlled via the BL pin.
+     */
+    virtual void Sleep( void );
+    
+    /** Wakes up the display from sleep mode.
+     *
+     * This function needs to be called before any other, when the
+     * display has been put into sleep mode by a previois call to
+     * #Sleep( void ).
+     */
+    virtual void WakeUp( void );
+    
 protected:
+    /** Sends a command to the display.
+     *
+     * \param cmd The display command.
+     * \remarks Commands are controller-specific and this function needs to
+     *          be implemented separately for each available controller.
+     */
     virtual void WriteCmd( unsigned short cmd );
+    
+    /** Sends pixel data to the display.
+     *
+     * \param data The display data.
+     * \remarks Sendin data is controller-specific and this function needs to
+     *          be implemented separately for each available controller.
+     */
     virtual void WriteData( unsigned short data );
+    
+    /** Assigns a chunk of the display memory to receive data.
+     *
+     * When data is sent to the display after this function completes, the opertion will
+     * start from the begining of the assigned address (pixel position) and the pointer
+     * will be automatically incremented so that the next data write operation will continue
+     * with the next pixel from the memory block.  If more data is written than available
+     * pixels, at the end of the block the pointer will jump back to its beginning and
+     * commence again, until the next address change command is sent to the display.
+     *
+     * \param x1 The X coordinate of the pixel at the beginning of the block.
+     * \param y1 The Y coordinate of the pixel at the beginning of the block.
+     * \param x2 The X coordinate of the pixel at the end of the block.
+     * \param y2 The Y coordinate of the pixel at the end of the block.
+     * \remarks Addressing commands are controller-specific and this function needs to be
+     *          implemented separately for each available controller.
+     */
     virtual void SetXY( uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2 );
     
 private:
-    DigitalOut _lcd_pin_reset, _lcd_pin_wr;
-    BusOut* _lcd_port;
+    DigitalOut  _lcd_pin_wr;
+    BusOut*     _lcd_port;
+    DigitalOut* _lcd_pin_bl;
     DigitalOut* _lcd_pin_rd;
 };