for TFT2P0327 aitendo.com 128*160 TFT LCD. LCD driver is S6D0151 Sumsung.

Dependents:   FRDM_tocos_x2_FIXED

Committer:
king33jp
Date:
Sun Aug 23 12:28:24 2015 +0000
Revision:
0:de7db46990d0
Child:
1:a3651128e297
new

Who changed what in which revision?

UserRevisionLine numberNew contents of line
king33jp 0:de7db46990d0 1 /* mbed library for 128*160 pixel display TFT based on S6D0151 LCD Controller
king33jp 0:de7db46990d0 2 * S6D0151 specific routines (initialization, window addressing, pixel output)
king33jp 0:de7db46990d0 3 *
king33jp 0:de7db46990d0 4 */
king33jp 0:de7db46990d0 5
king33jp 0:de7db46990d0 6 #ifndef MBED_S6D0151_TFT_H
king33jp 0:de7db46990d0 7 #define MBED_S6D0151_TFT_H
king33jp 0:de7db46990d0 8
king33jp 0:de7db46990d0 9 #include "mbed.h"
king33jp 0:de7db46990d0 10 #include "GraphicsDisplay.h"
king33jp 0:de7db46990d0 11
king33jp 0:de7db46990d0 12 #define RGB(r,g,b) (((r&0xF8)<<8)|((g&0xFC)<<3)|((b&0xF8)>>3)) //5 red | 6 green | 5 blue
king33jp 0:de7db46990d0 13
king33jp 0:de7db46990d0 14 /* some RGB color definitions */
king33jp 0:de7db46990d0 15 #define Black 0x0000 /* 0, 0, 0 */
king33jp 0:de7db46990d0 16 #define Navy 0x000F /* 0, 0, 128 */
king33jp 0:de7db46990d0 17 #define DarkGreen 0x03E0 /* 0, 128, 0 */
king33jp 0:de7db46990d0 18 #define DarkCyan 0x03EF /* 0, 128, 128 */
king33jp 0:de7db46990d0 19 #define Maroon 0x7800 /* 128, 0, 0 */
king33jp 0:de7db46990d0 20 #define Purple 0x780F /* 128, 0, 128 */
king33jp 0:de7db46990d0 21 #define Olive 0x7BE0 /* 128, 128, 0 */
king33jp 0:de7db46990d0 22 #define LightGrey 0xC618 /* 192, 192, 192 */
king33jp 0:de7db46990d0 23 #define DarkGrey 0x7BEF /* 128, 128, 128 */
king33jp 0:de7db46990d0 24 #define Blue 0x001F /* 0, 0, 255 */
king33jp 0:de7db46990d0 25 #define Green 0x07E0 /* 0, 255, 0 */
king33jp 0:de7db46990d0 26 #define Cyan 0x07FF /* 0, 255, 255 */
king33jp 0:de7db46990d0 27 #define Red 0xF800 /* 255, 0, 0 */
king33jp 0:de7db46990d0 28 #define Magenta 0xF81F /* 255, 0, 255 */
king33jp 0:de7db46990d0 29 #define Yellow 0xFFE0 /* 255, 255, 0 */
king33jp 0:de7db46990d0 30 #define White 0xFFFF /* 255, 255, 255 */
king33jp 0:de7db46990d0 31 #define Orange 0xFD20 /* 255, 165, 0 */
king33jp 0:de7db46990d0 32 #define GreenYellow 0xAFE5 /* 173, 255, 47 */
king33jp 0:de7db46990d0 33
king33jp 0:de7db46990d0 34 class S6D0151_TFT : public GraphicsDisplay {
king33jp 0:de7db46990d0 35 public:
king33jp 0:de7db46990d0 36
king33jp 0:de7db46990d0 37 /** Create a ST7735_TFT object connected to SPI and three pins. S6D0151 NOT requires rs pin.
king33jp 0:de7db46990d0 38 * for SPI connection,rs pin is included start byte data.
king33jp 0:de7db46990d0 39 * @param mosi,miso,sclk SPI
king33jp 0:de7db46990d0 40 * @param cs pin connected to CS of display (called SS for 'Slave Select' in ST7735 datasheet)
king33jp 0:de7db46990d0 41 * @param reset pin connected to RESET of display
king33jp 0:de7db46990d0 42 *
king33jp 0:de7db46990d0 43 */
king33jp 0:de7db46990d0 44 S6D0151_TFT(PinName mosi, PinName miso, PinName sclk, PinName cs, PinName reset,const char* name ="TFT");
king33jp 0:de7db46990d0 45
king33jp 0:de7db46990d0 46 /** Get the width of the screen in pixel
king33jp 0:de7db46990d0 47 *
king33jp 0:de7db46990d0 48 * @param
king33jp 0:de7db46990d0 49 * @returns width of screen in pixel
king33jp 0:de7db46990d0 50 *
king33jp 0:de7db46990d0 51 */
king33jp 0:de7db46990d0 52 virtual int width();
king33jp 0:de7db46990d0 53
king33jp 0:de7db46990d0 54 /** Get the height of the screen in pixel
king33jp 0:de7db46990d0 55 *
king33jp 0:de7db46990d0 56 * @returns height of screen in pixel
king33jp 0:de7db46990d0 57 *
king33jp 0:de7db46990d0 58 */
king33jp 0:de7db46990d0 59 virtual int height();
king33jp 0:de7db46990d0 60
king33jp 0:de7db46990d0 61 /** Draw a pixel at x,y with color
king33jp 0:de7db46990d0 62 *
king33jp 0:de7db46990d0 63 * @param x horizontal position
king33jp 0:de7db46990d0 64 * @param y vertical position
king33jp 0:de7db46990d0 65 * @param color 16 bit pixel color
king33jp 0:de7db46990d0 66 */
king33jp 0:de7db46990d0 67 virtual void pixel(int x, int y, int colour);
king33jp 0:de7db46990d0 68
king33jp 0:de7db46990d0 69
king33jp 0:de7db46990d0 70 /** draw a circle
king33jp 0:de7db46990d0 71 *
king33jp 0:de7db46990d0 72 * @param x0,y0 center
king33jp 0:de7db46990d0 73 * @param r radius
king33jp 0:de7db46990d0 74 * @param color 16 bit color *
king33jp 0:de7db46990d0 75 *
king33jp 0:de7db46990d0 76 */
king33jp 0:de7db46990d0 77
king33jp 0:de7db46990d0 78 void circle(int x, int y, int r, int colour);
king33jp 0:de7db46990d0 79
king33jp 0:de7db46990d0 80 /** draw a filled circle
king33jp 0:de7db46990d0 81 *
king33jp 0:de7db46990d0 82 * @param x0,y0 center
king33jp 0:de7db46990d0 83 * @param r radius
king33jp 0:de7db46990d0 84 * @param color 16 bit color *
king33jp 0:de7db46990d0 85 *
king33jp 0:de7db46990d0 86 * use circle with different radius,
king33jp 0:de7db46990d0 87 * can miss some pixel
king33jp 0:de7db46990d0 88 */
king33jp 0:de7db46990d0 89 void fillcircle(int x, int y, int r, int colour);
king33jp 0:de7db46990d0 90
king33jp 0:de7db46990d0 91 /** draw a filled circle v2
king33jp 0:de7db46990d0 92 *
king33jp 0:de7db46990d0 93 * @param x0,y0 center
king33jp 0:de7db46990d0 94 * @param r radius
king33jp 0:de7db46990d0 95 * @param color 16 bit color *
king33jp 0:de7db46990d0 96 *
king33jp 0:de7db46990d0 97 * use circle with different radius,
king33jp 0:de7db46990d0 98 * can miss some pixel
king33jp 0:de7db46990d0 99 */
king33jp 0:de7db46990d0 100 void fillcircle2(int x0, int y0, int r, int color);
king33jp 0:de7db46990d0 101
king33jp 0:de7db46990d0 102 /** draw a 1 pixel line
king33jp 0:de7db46990d0 103 *
king33jp 0:de7db46990d0 104 * @param x0,y0 start point
king33jp 0:de7db46990d0 105 * @param x1,y1 stop point
king33jp 0:de7db46990d0 106 * @param color 16 bit color
king33jp 0:de7db46990d0 107 *
king33jp 0:de7db46990d0 108 */
king33jp 0:de7db46990d0 109 void line(int x0, int y0, int x1, int y1, int colour);
king33jp 0:de7db46990d0 110
king33jp 0:de7db46990d0 111 /** draw a rect
king33jp 0:de7db46990d0 112 *
king33jp 0:de7db46990d0 113 * @param x0,y0 top left corner
king33jp 0:de7db46990d0 114 * @param x1,y1 down right corner
king33jp 0:de7db46990d0 115 * @param color 16 bit color
king33jp 0:de7db46990d0 116 * *
king33jp 0:de7db46990d0 117 */
king33jp 0:de7db46990d0 118 void rect(int x0, int y0, int x1, int y1, int colour);
king33jp 0:de7db46990d0 119
king33jp 0:de7db46990d0 120 /** draw a filled rect
king33jp 0:de7db46990d0 121 *
king33jp 0:de7db46990d0 122 * @param x0,y0 top left corner
king33jp 0:de7db46990d0 123 * @param x1,y1 down right corner
king33jp 0:de7db46990d0 124 * @param color 16 bit color
king33jp 0:de7db46990d0 125 *
king33jp 0:de7db46990d0 126 */
king33jp 0:de7db46990d0 127 void fillrect(int x0, int y0, int x1, int y1, int colour);
king33jp 0:de7db46990d0 128
king33jp 0:de7db46990d0 129 /** setup cursor position
king33jp 0:de7db46990d0 130 *
king33jp 0:de7db46990d0 131 * @param x x-position (top left)
king33jp 0:de7db46990d0 132 * @param y y-position
king33jp 0:de7db46990d0 133 */
king33jp 0:de7db46990d0 134 virtual void locate(int x, int y);
king33jp 0:de7db46990d0 135
king33jp 0:de7db46990d0 136 /** Fill the screen with _backgroun color
king33jp 0:de7db46990d0 137 *
king33jp 0:de7db46990d0 138 */
king33jp 0:de7db46990d0 139 virtual void cls (void);
king33jp 0:de7db46990d0 140
king33jp 0:de7db46990d0 141 /** calculate the max number of char in a line
king33jp 0:de7db46990d0 142 *
king33jp 0:de7db46990d0 143 * @returns max columns
king33jp 0:de7db46990d0 144 * depends on actual font size
king33jp 0:de7db46990d0 145 *
king33jp 0:de7db46990d0 146 */
king33jp 0:de7db46990d0 147 virtual int columns(void);
king33jp 0:de7db46990d0 148
king33jp 0:de7db46990d0 149 /** calculate the max number of columns
king33jp 0:de7db46990d0 150 *
king33jp 0:de7db46990d0 151 * @returns max column
king33jp 0:de7db46990d0 152 * depends on actual font size
king33jp 0:de7db46990d0 153 *
king33jp 0:de7db46990d0 154 */
king33jp 0:de7db46990d0 155 virtual int rows(void);
king33jp 0:de7db46990d0 156
king33jp 0:de7db46990d0 157 /** put a char on the screen
king33jp 0:de7db46990d0 158 *
king33jp 0:de7db46990d0 159 * @param value char to print
king33jp 0:de7db46990d0 160 * @returns printed char
king33jp 0:de7db46990d0 161 *
king33jp 0:de7db46990d0 162 */
king33jp 0:de7db46990d0 163 virtual int _putc(int value);
king33jp 0:de7db46990d0 164
king33jp 0:de7db46990d0 165 /** draw a character on given position out of the active font to the TFT
king33jp 0:de7db46990d0 166 *
king33jp 0:de7db46990d0 167 * @param x x-position of char (top left)
king33jp 0:de7db46990d0 168 * @param y y-position
king33jp 0:de7db46990d0 169 * @param c char to print
king33jp 0:de7db46990d0 170 *
king33jp 0:de7db46990d0 171 */
king33jp 0:de7db46990d0 172 virtual void character(int x, int y, int c);
king33jp 0:de7db46990d0 173
king33jp 0:de7db46990d0 174 /** paint a bitmap on the TFT
king33jp 0:de7db46990d0 175 *
king33jp 0:de7db46990d0 176 * @param x,y : upper left corner
king33jp 0:de7db46990d0 177 * @param w width of bitmap
king33jp 0:de7db46990d0 178 * @param h high of bitmap
king33jp 0:de7db46990d0 179 * @param *bitmap pointer to the bitmap data
king33jp 0:de7db46990d0 180 *
king33jp 0:de7db46990d0 181 * bitmap format: 16 bit R5 G6 B5
king33jp 0:de7db46990d0 182 *
king33jp 0:de7db46990d0 183 * use Gimp to create / load , save as BMP, option 16 bit R5 G6 B5
king33jp 0:de7db46990d0 184 * use winhex to load this file and mark data stating at offset 0x46 to end
king33jp 0:de7db46990d0 185 * use edit -> copy block -> C Source to export C array
king33jp 0:de7db46990d0 186 * paste this array into your program
king33jp 0:de7db46990d0 187 *
king33jp 0:de7db46990d0 188 * define the array as static const unsigned char to put it into flash memory
king33jp 0:de7db46990d0 189 * cast the pointer to (unsigned char *) :
king33jp 0:de7db46990d0 190 * tft.Bitmap(10,40,309,50,(unsigned char *)scala);
king33jp 0:de7db46990d0 191 */
king33jp 0:de7db46990d0 192 void Bitmap(unsigned int x, unsigned int y, unsigned int w, unsigned int h,unsigned char *bitmap);
king33jp 0:de7db46990d0 193
king33jp 0:de7db46990d0 194
king33jp 0:de7db46990d0 195 /** paint a 16 bit BMP from local filesytem on the TFT (slow)
king33jp 0:de7db46990d0 196 *
king33jp 0:de7db46990d0 197 * @param x,y : upper left corner
king33jp 0:de7db46990d0 198 * @param *Name_BMP name of the BMP file
king33jp 0:de7db46990d0 199 * @returns 1 if bmp file was found and painted
king33jp 0:de7db46990d0 200 * @returns -1 if bmp file was found not found
king33jp 0:de7db46990d0 201 * @returns -2 if bmp file is not 16bit
king33jp 0:de7db46990d0 202 * @returns -3 if bmp file is to big for screen
king33jp 0:de7db46990d0 203 * @returns -4 if buffer malloc go wrong
king33jp 0:de7db46990d0 204 *
king33jp 0:de7db46990d0 205 * bitmap format: 16 bit R5 G6 B5
king33jp 0:de7db46990d0 206 *
king33jp 0:de7db46990d0 207 * use Gimp to create / load , save as BMP, option 16 bit R5 G6 B5
king33jp 0:de7db46990d0 208 * copy to internal file system
king33jp 0:de7db46990d0 209 *
king33jp 0:de7db46990d0 210 */
king33jp 0:de7db46990d0 211
king33jp 0:de7db46990d0 212 int BMP_16(unsigned int x, unsigned int y, const char *Name_BMP);
king33jp 0:de7db46990d0 213
king33jp 0:de7db46990d0 214 /** select the font to use
king33jp 0:de7db46990d0 215 *
king33jp 0:de7db46990d0 216 * @param f pointer to font array
king33jp 0:de7db46990d0 217 *
king33jp 0:de7db46990d0 218 * font array can created with GLCD Font Creator from http://www.mikroe.com
king33jp 0:de7db46990d0 219 * you have to add 4 parameter at the beginning of the font array to use:
king33jp 0:de7db46990d0 220 * - the number of byte / char
king33jp 0:de7db46990d0 221 * - the vertial size in pixel
king33jp 0:de7db46990d0 222 * - the horizontal size in pixel
king33jp 0:de7db46990d0 223 * - the number of byte per vertical line
king33jp 0:de7db46990d0 224 * you also have to change the array to char[]
king33jp 0:de7db46990d0 225 *
king33jp 0:de7db46990d0 226 */
king33jp 0:de7db46990d0 227 void set_font(unsigned char* f);
king33jp 0:de7db46990d0 228
king33jp 0:de7db46990d0 229 /** Set the orientation of the screen
king33jp 0:de7db46990d0 230 * x,y: 0,0 is always top left
king33jp 0:de7db46990d0 231 *
king33jp 0:de7db46990d0 232 * @param o direction to use the screen (0-3)
king33jp 0:de7db46990d0 233 *
king33jp 0:de7db46990d0 234 */
king33jp 0:de7db46990d0 235 void set_orientation(unsigned int o);
king33jp 0:de7db46990d0 236
king33jp 0:de7db46990d0 237 SPI _spi;
king33jp 0:de7db46990d0 238 DigitalOut _cs;
king33jp 0:de7db46990d0 239 DigitalOut _reset;
king33jp 0:de7db46990d0 240 unsigned char* font;
king33jp 0:de7db46990d0 241
king33jp 0:de7db46990d0 242 protected:
king33jp 0:de7db46990d0 243
king33jp 0:de7db46990d0 244 /** draw a horizontal line
king33jp 0:de7db46990d0 245 *
king33jp 0:de7db46990d0 246 * @param x0 horizontal start
king33jp 0:de7db46990d0 247 * @param x1 horizontal stop
king33jp 0:de7db46990d0 248 * @param y vertical position
king33jp 0:de7db46990d0 249 * @param color 16 bit color
king33jp 0:de7db46990d0 250 *
king33jp 0:de7db46990d0 251 */
king33jp 0:de7db46990d0 252 void hline(int x0, int x1, int y, int colour);
king33jp 0:de7db46990d0 253
king33jp 0:de7db46990d0 254 /** draw a vertical line
king33jp 0:de7db46990d0 255 *
king33jp 0:de7db46990d0 256 * @param x horizontal position
king33jp 0:de7db46990d0 257 * @param y0 vertical start
king33jp 0:de7db46990d0 258 * @param y1 vertical stop
king33jp 0:de7db46990d0 259 * @param color 16 bit color
king33jp 0:de7db46990d0 260 */
king33jp 0:de7db46990d0 261 void vline(int y0, int y1, int x, int colour);
king33jp 0:de7db46990d0 262
king33jp 0:de7db46990d0 263 /** Set draw window region
king33jp 0:de7db46990d0 264 *
king33jp 0:de7db46990d0 265 * @param x horizontal position
king33jp 0:de7db46990d0 266 * @param y vertical position
king33jp 0:de7db46990d0 267 * @param w window width in pixel
king33jp 0:de7db46990d0 268 * @param h window height in pixels
king33jp 0:de7db46990d0 269 */
king33jp 0:de7db46990d0 270 virtual void window (unsigned int x, unsigned int y, unsigned int w, unsigned int h);
king33jp 0:de7db46990d0 271
king33jp 0:de7db46990d0 272 /** Set draw window region to whole screen
king33jp 0:de7db46990d0 273 *
king33jp 0:de7db46990d0 274 */
king33jp 0:de7db46990d0 275 void WindowMax (void);
king33jp 0:de7db46990d0 276
king33jp 0:de7db46990d0 277 /** Init the S6D0151 controller
king33jp 0:de7db46990d0 278 * reference demo code.
king33jp 0:de7db46990d0 279 */
king33jp 0:de7db46990d0 280 void tft_reset();
king33jp 0:de7db46990d0 281
king33jp 0:de7db46990d0 282
king33jp 0:de7db46990d0 283 /** Start data sequence to the LCD controller
king33jp 0:de7db46990d0 284 *
king33jp 0:de7db46990d0 285 */
king33jp 0:de7db46990d0 286 void wr_dat_start();
king33jp 0:de7db46990d0 287
king33jp 0:de7db46990d0 288 /** Stop of data writing to the LCD controller
king33jp 0:de7db46990d0 289 *
king33jp 0:de7db46990d0 290 */
king33jp 0:de7db46990d0 291 void wr_dat_stop();
king33jp 0:de7db46990d0 292
king33jp 0:de7db46990d0 293 /** Send register and data write to the LCD controller
king33jp 0:de7db46990d0 294 * Write to the Register in SPI.
king33jp 0:de7db46990d0 295 * And it will send two times since it sets the RS at the start Byte.
king33jp 0:de7db46990d0 296 */
king33jp 0:de7db46990d0 297 void regwr(unsigned short reg,unsigned short dat);
king33jp 0:de7db46990d0 298
king33jp 0:de7db46990d0 299 /** Send only register write to the LCD controller
king33jp 0:de7db46990d0 300 *
king33jp 0:de7db46990d0 301 */
king33jp 0:de7db46990d0 302 void reg0(unsigned short reg);
king33jp 0:de7db46990d0 303
king33jp 0:de7db46990d0 304 /** Set Wirte start address
king33jp 0:de7db46990d0 305 * GRAM ADDRESS SET (R21h)
king33jp 0:de7db46990d0 306 * addr = (((top&0xff)<<8)|(left&0xff));
king33jp 0:de7db46990d0 307 * regwr( 0x0021 , addr );
king33jp 0:de7db46990d0 308 */
king33jp 0:de7db46990d0 309 void set_start_address(int left,int top);
king33jp 0:de7db46990d0 310
king33jp 0:de7db46990d0 311
king33jp 0:de7db46990d0 312 unsigned int orientation;
king33jp 0:de7db46990d0 313 unsigned int char_x;
king33jp 0:de7db46990d0 314 unsigned int char_y;
king33jp 0:de7db46990d0 315
king33jp 0:de7db46990d0 316
king33jp 0:de7db46990d0 317 };
king33jp 0:de7db46990d0 318
king33jp 0:de7db46990d0 319 #endif