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

Dependents:   FRDM_tocos_x2_FIXED

Committer:
king33jp
Date:
Sun Oct 02 13:20:50 2016 +0000
Revision:
5:18920a7a693e
Parent:
1:a3651128e297
all change fixed.; rectfill modify; reverse fix; and; orientation command added.; onley 0 and 2 is valid.

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