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. This fork is for 8 bit interface. I will add proper switch in later commit

Dependents:   KL25Z_ILI9325

Fork of TFTLCD by Todor Todorov

Committer:
ttodorov
Date:
Sat Jan 26 04:36:46 2013 +0000
Revision:
22:4c169297f374
Parent:
20:4bdca8d8dadc
- added PWM backlight control

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ttodorov 9:58b328831d0a 1 /** \file st7735.h
ttodorov 9:58b328831d0a 2 * \brief mbed TFT LCD controller for displays with the ST7735 IC.
ttodorov 9:58b328831d0a 3 * \copyright GNU Public License, v2. or later
ttodorov 9:58b328831d0a 4 *
ttodorov 9:58b328831d0a 5 * A known display with this type of controller chip is the ITDB02-1.8SP
ttodorov 9:58b328831d0a 6 * from http://imall.iteadstudio.com
ttodorov 9:58b328831d0a 7 *
ttodorov 9:58b328831d0a 8 * This library is based on the Arduino/chipKIT UTFT library by Henning
ttodorov 9:58b328831d0a 9 * Karlsen, http://henningkarlsen.com/electronics/library.php?id=52
ttodorov 9:58b328831d0a 10 *
ttodorov 9:58b328831d0a 11 * Copyright (C)2010-2012 Henning Karlsen. All right reserved.
ttodorov 9:58b328831d0a 12 *
ttodorov 9:58b328831d0a 13 * Copyright (C)2012 Todor Todorov.
ttodorov 9:58b328831d0a 14 *
ttodorov 9:58b328831d0a 15 * This library is free software; you can redistribute it and/or
ttodorov 9:58b328831d0a 16 * modify it under the terms of the GNU Lesser General Public
ttodorov 9:58b328831d0a 17 * License as published by the Free Software Foundation; either
ttodorov 9:58b328831d0a 18 * version 2.1 of the License, or (at your option) any later version.
ttodorov 9:58b328831d0a 19 *
ttodorov 9:58b328831d0a 20 * This library is distributed in the hope that it will be useful,
ttodorov 9:58b328831d0a 21 * but WITHOUT ANY WARRANTY; without even the implied warranty of
ttodorov 9:58b328831d0a 22 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
ttodorov 9:58b328831d0a 23 * Lesser General Public License for more details.
ttodorov 9:58b328831d0a 24 *
ttodorov 9:58b328831d0a 25 * You should have received a copy of the GNU Lesser General Public
ttodorov 9:58b328831d0a 26 * License along with this library; if not, write to:
ttodorov 9:58b328831d0a 27 *
ttodorov 9:58b328831d0a 28 * Free Software Foundation, Inc.
ttodorov 9:58b328831d0a 29 * 51 Franklin St, 5th Floor, Boston, MA 02110-1301, USA
ttodorov 9:58b328831d0a 30 *
ttodorov 9:58b328831d0a 31 *********************************************************************/
ttodorov 9:58b328831d0a 32 #ifndef TFTLCD_ST7735_H
ttodorov 9:58b328831d0a 33 #define TFTLCD_ST7735_H
ttodorov 9:58b328831d0a 34
ttodorov 9:58b328831d0a 35 #include "lcd_base.h"
ttodorov 9:58b328831d0a 36
ttodorov 9:58b328831d0a 37 #ifdef __cplusplus
ttodorov 9:58b328831d0a 38 extern "C" {
ttodorov 9:58b328831d0a 39 #endif
ttodorov 9:58b328831d0a 40
ttodorov 9:58b328831d0a 41 /** Represents a LCD instance.
ttodorov 9:58b328831d0a 42 *
ttodorov 9:58b328831d0a 43 * This is the utility class, through which the display can be manipulated
ttodorov 9:58b328831d0a 44 * and graphics objects can be shown to the user. A known display, which
ttodorov 9:58b328831d0a 45 * works with this library is the ITDB02-1.8SP from iTeadStudio - a RGB TFT
ttodorov 9:58b328831d0a 46 * with 128x160 pixels resolution and 262K colors, using serail interface.
ttodorov 9:58b328831d0a 47 *
ttodorov 9:58b328831d0a 48 * The display needs 5 or 6 pins to work with mbed, uses +3.3V for backlight,
ttodorov 9:58b328831d0a 49 * power and logic, thus can be interfaced directly to the mbed kit without
ttodorov 9:58b328831d0a 50 * the need of shields or level shifters as with Arduino.
ttodorov 9:58b328831d0a 51 *
ttodorov 9:58b328831d0a 52 * How to use:
ttodorov 9:58b328831d0a 53 * \code
ttodorov 9:58b328831d0a 54 * // include the library, this will also pull in the header for the provided fonts
ttodorov 9:58b328831d0a 55 * #include "st7735.h"
ttodorov 9:58b328831d0a 56 *
ttodorov 9:58b328831d0a 57 * // create the lcd instance
ttodorov 9:58b328831d0a 58 * ST7735_LCD lcd( p14, p13, p12, p11, p10 ); // control pins
ttodorov 9:58b328831d0a 59 *
ttodorov 9:58b328831d0a 60 * int main()
ttodorov 9:58b328831d0a 61 * {
ttodorov 9:58b328831d0a 62 * // initialize display - place it in standard portrait mode and set background to black and
ttodorov 9:58b328831d0a 63 * // foreground to white color.
ttodorov 9:58b328831d0a 64 * lcd.Initialize();
ttodorov 9:58b328831d0a 65 * // set current font to the smallest 8x12 pixels font.
ttodorov 9:58b328831d0a 66 * lcd.SetFont( Font8x12 );
ttodorov 9:58b328831d0a 67 * // print something on the screen
ttodorov 9:58b328831d0a 68 * lcd.Print( "Hello, World!", CENTER, 25 ); // align text to center horizontally and use starndard colors
ttodorov 9:58b328831d0a 69 *
ttodorov 9:58b328831d0a 70 * while ( 1 ) { }
ttodorov 9:58b328831d0a 71 * }
ttodorov 9:58b328831d0a 72 *
ttodorov 9:58b328831d0a 73 * \endcode
ttodorov 9:58b328831d0a 74 * \version 0.1
ttodorov 9:58b328831d0a 75 * \author Todor Todorov
ttodorov 9:58b328831d0a 76 */
ttodorov 9:58b328831d0a 77 class ST7735_LCD : public LCD
ttodorov 9:58b328831d0a 78 {
ttodorov 9:58b328831d0a 79 public:
ttodorov 9:58b328831d0a 80 /** Creates a new instance of the class.
ttodorov 9:58b328831d0a 81 *
ttodorov 9:58b328831d0a 82 * \param CS Pin for the ChipSelect signal.
ttodorov 9:58b328831d0a 83 * \param RESET Pin for the RESET line.
ttodorov 9:58b328831d0a 84 * \param RS Pin for the RS signal.
ttodorov 9:58b328831d0a 85 * \param SCL Pin for the serial clock line.
ttodorov 9:58b328831d0a 86 * \param SDA Pin for the serial data line.
ttodorov 9:58b328831d0a 87 * \param BL Pin for controlling the backlight. By default not used.
ttodorov 22:4c169297f374 88 * \param blType The backlight type, the default is to utilize the pin - if supplied - as a simple on/off switch
ttodorov 22:4c169297f374 89 * \param defaultBacklightLevel If using PWM to control backlight, this would be the default brightness in percent after LCD initialization.
ttodorov 9:58b328831d0a 90 */
ttodorov 22:4c169297f374 91 ST7735_LCD( PinName CS, PinName RESET, PinName RS, PinName SCL, PinName SDA, PinName BL = NC, backlight_t blType = Constant, float defaultBackLightLevel = 1.0 );
ttodorov 9:58b328831d0a 92
ttodorov 9:58b328831d0a 93 /** Initialize display.
ttodorov 9:58b328831d0a 94 *
ttodorov 9:58b328831d0a 95 * Wakes up the display from sleep, initializes power parameters.
ttodorov 9:58b328831d0a 96 * This function must be called first, befor any painting on the
ttodorov 9:58b328831d0a 97 * display is done, otherwise the positioning of graphical elements
ttodorov 9:58b328831d0a 98 * will not work properly and any paynt operation will not be visible
ttodorov 9:58b328831d0a 99 * or produce garbage.
ttodorov 9:58b328831d0a 100 *
ttodorov 9:58b328831d0a 101 * \param oritentation The display orientation, landscape is default.
ttodorov 12:d0978272a340 102 * \param colors The correct color depth to use for the pixel data.
ttodorov 9:58b328831d0a 103 */
ttodorov 12:d0978272a340 104 virtual void Initialize( orientation_t orientation = LANDSCAPE, colordepth_t colors = RGB16 );
ttodorov 9:58b328831d0a 105
ttodorov 9:58b328831d0a 106 /** Puts the display to sleep.
ttodorov 9:58b328831d0a 107 *
ttodorov 9:58b328831d0a 108 * When the display is in sleep mode, its power consumption is
ttodorov 9:58b328831d0a 109 * minimized. Before new pixel data can be written to the display
ttodorov 9:58b328831d0a 110 * memory, the controller needs to be brought out of sleep mode.
ttodorov 9:58b328831d0a 111 * \sa #WakeUp( void );
ttodorov 9:58b328831d0a 112 * \remarks The result of this operation might not be exactly as
ttodorov 9:58b328831d0a 113 * expected. Putting the display to sleep will cause the
ttodorov 9:58b328831d0a 114 * controller to switch to the standard color of the LCD,
ttodorov 9:58b328831d0a 115 * so depending on whether the display is normally white,
ttodorov 9:58b328831d0a 116 * or normally dark, the screen might or might not go
ttodorov 9:58b328831d0a 117 * dark. Additional power saving can be achieved, if
ttodorov 9:58b328831d0a 118 * the backlight of the used display is not hardwired on
ttodorov 9:58b328831d0a 119 * the PCB and can be controlled via the BL pin.
ttodorov 9:58b328831d0a 120 */
ttodorov 9:58b328831d0a 121 virtual void Sleep( void );
ttodorov 9:58b328831d0a 122
ttodorov 9:58b328831d0a 123 /** Wakes up the display from sleep mode.
ttodorov 9:58b328831d0a 124 *
ttodorov 9:58b328831d0a 125 * This function needs to be called before any other, when the
ttodorov 9:58b328831d0a 126 * display has been put into sleep mode by a previois call to
ttodorov 9:58b328831d0a 127 * #Sleep( void ).
ttodorov 9:58b328831d0a 128 */
ttodorov 9:58b328831d0a 129 virtual void WakeUp( void );
ttodorov 9:58b328831d0a 130
ttodorov 9:58b328831d0a 131 protected:
ttodorov 9:58b328831d0a 132 /** Sends a command to the display.
ttodorov 9:58b328831d0a 133 *
ttodorov 9:58b328831d0a 134 * \param cmd The display command.
ttodorov 9:58b328831d0a 135 * \remarks Commands are controller-specific and this function needs to
ttodorov 9:58b328831d0a 136 * be implemented separately for each available controller.
ttodorov 9:58b328831d0a 137 */
ttodorov 9:58b328831d0a 138 virtual void WriteCmd( unsigned short cmd );
ttodorov 9:58b328831d0a 139
ttodorov 9:58b328831d0a 140 /** Sends pixel data to the display.
ttodorov 9:58b328831d0a 141 *
ttodorov 9:58b328831d0a 142 * \param data The display data.
ttodorov 9:58b328831d0a 143 * \remarks Sendin data is controller-specific and this function needs to
ttodorov 9:58b328831d0a 144 * be implemented separately for each available controller.
ttodorov 9:58b328831d0a 145 */
ttodorov 9:58b328831d0a 146 virtual void WriteData( unsigned short data );
ttodorov 9:58b328831d0a 147
ttodorov 9:58b328831d0a 148 /** Writes a single byte of pixel data to the display.
ttodorov 9:58b328831d0a 149 *
ttodorov 9:58b328831d0a 150 * \param data The data to be written.
ttodorov 9:58b328831d0a 151 * \remarks Sendin data is controller-specific and this function needs to
ttodorov 9:58b328831d0a 152 * be implemented separately for each available controller.
ttodorov 9:58b328831d0a 153 */
ttodorov 9:58b328831d0a 154 virtual void WriteByteData( unsigned char data );
ttodorov 9:58b328831d0a 155
ttodorov 9:58b328831d0a 156 /** Assigns a chunk of the display memory to receive data.
ttodorov 9:58b328831d0a 157 *
ttodorov 9:58b328831d0a 158 * When data is sent to the display after this function completes, the opertion will
ttodorov 9:58b328831d0a 159 * start from the begining of the assigned address (pixel position) and the pointer
ttodorov 9:58b328831d0a 160 * will be automatically incremented so that the next data write operation will continue
ttodorov 9:58b328831d0a 161 * with the next pixel from the memory block. If more data is written than available
ttodorov 9:58b328831d0a 162 * pixels, at the end of the block the pointer will jump back to its beginning and
ttodorov 9:58b328831d0a 163 * commence again, until the next address change command is sent to the display.
ttodorov 9:58b328831d0a 164 *
ttodorov 9:58b328831d0a 165 * \param x1 The X coordinate of the pixel at the beginning of the block.
ttodorov 9:58b328831d0a 166 * \param y1 The Y coordinate of the pixel at the beginning of the block.
ttodorov 9:58b328831d0a 167 * \param x2 The X coordinate of the pixel at the end of the block.
ttodorov 9:58b328831d0a 168 * \param y2 The Y coordinate of the pixel at the end of the block.
ttodorov 9:58b328831d0a 169 * \remarks Addressing commands are controller-specific and this function needs to be
ttodorov 9:58b328831d0a 170 * implemented separately for each available controller.
ttodorov 9:58b328831d0a 171 */
ttodorov 20:4bdca8d8dadc 172 virtual void SetXY( unsigned short x1, unsigned short y1, unsigned short x2, unsigned short y2 );
ttodorov 9:58b328831d0a 173
ttodorov 10:69571adcfad5 174 /** Sets the color of the pixel at the address pointer of the controller.
ttodorov 10:69571adcfad5 175 *
ttodorov 10:69571adcfad5 176 * This function is to be provided by each implementation separately in
ttodorov 10:69571adcfad5 177 * order to account for different color depth used by the controller.
ttodorov 10:69571adcfad5 178 * \param color The color of the pixel.
ttodorov 20:4bdca8d8dadc 179 * \param mode The depth (palette) of the color.
ttodorov 10:69571adcfad5 180 */
ttodorov 20:4bdca8d8dadc 181 virtual void SetPixelColor( unsigned int color, colordepth_t mode = RGB24 );
ttodorov 10:69571adcfad5 182
ttodorov 9:58b328831d0a 183 private:
ttodorov 9:58b328831d0a 184 void serializeByte( unsigned char data );
ttodorov 9:58b328831d0a 185
ttodorov 9:58b328831d0a 186 private:
ttodorov 9:58b328831d0a 187 DigitalOut _lcd_pin_scl, _lcd_pin_sda;
ttodorov 9:58b328831d0a 188 DigitalOut* _lcd_pin_bl;
ttodorov 9:58b328831d0a 189 };
ttodorov 9:58b328831d0a 190
ttodorov 9:58b328831d0a 191 #ifdef __cplusplus
ttodorov 9:58b328831d0a 192 }
ttodorov 9:58b328831d0a 193 #endif
ttodorov 9:58b328831d0a 194
ttodorov 9:58b328831d0a 195 #endif /* TFTLCD_ST7735_H */