Landtiger (LPC1768) graphics LCD demo.

Dependencies:   Tiger_LCD mbed

Dependents:   Tiger_LCD

See here for more info.

Committer:
wim
Date:
Tue Nov 06 21:39:33 2012 +0000
Revision:
2:43ede88fb5a3
Parent:
1:ea0f7b1c5daf
Child:
3:2dccfa0121de
cpp version and graphics test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wim 0:a8090b59eb05 1 /******************************************************************************/
wim 2:43ede88fb5a3 2 /* GLCD::LPC1700 low-level Graphic LCD (320x240 pixels) for LandTiger */
wim 0:a8090b59eb05 3 /* */
wim 0:a8090b59eb05 4 /******************************************************************************/
wim 0:a8090b59eb05 5 /* This file is modified from the uVision/ARM development tools. */
wim 0:a8090b59eb05 6 /* Copyright (c) 2005-2009 Keil Software. All rights reserved. */
wim 0:a8090b59eb05 7 /* This software may only be used under the terms of a valid, current, */
wim 0:a8090b59eb05 8 /* end user licence from KEIL for a compatible version of KEIL software */
wim 0:a8090b59eb05 9 /* development tools. Nothing else gives you the right to use this software. */
wim 0:a8090b59eb05 10 /******************************************************************************/
wim 0:a8090b59eb05 11
wim 0:a8090b59eb05 12 #include "mbed.h"
wim 0:a8090b59eb05 13 #include "GLCD.h"
wim 2:43ede88fb5a3 14 #include "GLCD_Config.h"
wim 0:a8090b59eb05 15 #include "Font_24x16.h"
wim 0:a8090b59eb05 16
wim 0:a8090b59eb05 17 /*********************** Hardware specific configuration **********************/
wim 0:a8090b59eb05 18
wim 0:a8090b59eb05 19 /* LandTiger 8bit to 16bit LCD Interface
wim 0:a8090b59eb05 20
wim 0:a8090b59eb05 21 PINS:
wim 0:a8090b59eb05 22 - EN = P0.19
wim 0:a8090b59eb05 23 - LE = P0.20
wim 0:a8090b59eb05 24 - DIR = P0.21
wim 0:a8090b59eb05 25 - CS = P0.22
wim 0:a8090b59eb05 26 - RS = P0.23
wim 0:a8090b59eb05 27 - WR = P0.24
wim 0:a8090b59eb05 28 - RD = P0.25
wim 0:a8090b59eb05 29 - DB[0.7] = P2.0...P2.7
wim 0:a8090b59eb05 30 - DB[8.15]= P2.0...P2.7 */
wim 0:a8090b59eb05 31
wim 0:a8090b59eb05 32 #define PIN_EN (1 << 19)
wim 0:a8090b59eb05 33 #define PIN_LE (1 << 20)
wim 0:a8090b59eb05 34 #define PIN_DIR (1 << 21)
wim 0:a8090b59eb05 35 #define PIN_CS (1 << 22)
wim 0:a8090b59eb05 36 #define PIN_RS (1 << 23)
wim 0:a8090b59eb05 37 #define PIN_WR (1 << 24)
wim 0:a8090b59eb05 38 #define PIN_RD (1 << 25)
wim 0:a8090b59eb05 39
wim 0:a8090b59eb05 40 /*------------------------- Speed dependant settings -------------------------*/
wim 0:a8090b59eb05 41
wim 0:a8090b59eb05 42 /* If processor works on high frequency delay has to be increased, it can be
wim 0:a8090b59eb05 43 increased by factor 2^N by this constant */
wim 0:a8090b59eb05 44 #define DELAY_2N 18
wim 0:a8090b59eb05 45
wim 0:a8090b59eb05 46 /*---------------------- Graphic LCD size definitions ------------------------*/
wim 0:a8090b59eb05 47
wim 0:a8090b59eb05 48 #define WIDTH 320 /* Screen Width (in pixels) */
wim 0:a8090b59eb05 49 #define HEIGHT 240 /* Screen Hight (in pixels) */
wim 0:a8090b59eb05 50 #define BPP 16 /* Bits per pixel */
wim 0:a8090b59eb05 51 #define BYPP ((BPP+7)/8) /* Bytes per pixel */
wim 0:a8090b59eb05 52
wim 0:a8090b59eb05 53 /*--------------- Graphic LCD interface hardware definitions -----------------*/
wim 0:a8090b59eb05 54
wim 0:a8090b59eb05 55 /* Pin EN setting to 0 or 1 */
wim 0:a8090b59eb05 56 #define LCD_EN(x) ((x) ? (LPC_GPIO0->FIOSET = PIN_EN) : (LPC_GPIO0->FIOCLR = PIN_EN));
wim 0:a8090b59eb05 57 /* Pin LE setting to 0 or 1 */
wim 0:a8090b59eb05 58 #define LCD_LE(x) ((x) ? (LPC_GPIO0->FIOSET = PIN_LE) : (LPC_GPIO0->FIOCLR = PIN_LE));
wim 0:a8090b59eb05 59 /* Pin DIR setting to 0 or 1 */
wim 0:a8090b59eb05 60 #define LCD_DIR(x) ((x) ? (LPC_GPIO0->FIOSET = PIN_DIR) : (LPC_GPIO0->FIOCLR = PIN_DIR));
wim 0:a8090b59eb05 61 /* Pin CS setting to 0 or 1 */
wim 0:a8090b59eb05 62 #define LCD_CS(x) ((x) ? (LPC_GPIO0->FIOSET = PIN_CS) : (LPC_GPIO0->FIOCLR = PIN_CS));
wim 0:a8090b59eb05 63 /* Pin RS setting to 0 or 1 */
wim 0:a8090b59eb05 64 #define LCD_RS(x) ((x) ? (LPC_GPIO0->FIOSET = PIN_RS) : (LPC_GPIO0->FIOCLR = PIN_RS));
wim 0:a8090b59eb05 65 /* Pin WR setting to 0 or 1 */
wim 0:a8090b59eb05 66 #define LCD_WR(x) ((x) ? (LPC_GPIO0->FIOSET = PIN_WR) : (LPC_GPIO0->FIOCLR = PIN_WR));
wim 0:a8090b59eb05 67 /* Pin RD setting to 0 or 1 */
wim 0:a8090b59eb05 68 #define LCD_RD(x) ((x) ? (LPC_GPIO0->FIOSET = PIN_RD) : (LPC_GPIO0->FIOCLR = PIN_RD));
wim 0:a8090b59eb05 69
wim 0:a8090b59eb05 70
wim 0:a8090b59eb05 71 /*---------------------------- Global variables ------------------------------*/
wim 0:a8090b59eb05 72
wim 0:a8090b59eb05 73 /******************************************************************************/
wim 2:43ede88fb5a3 74 //static volatile unsigned short ____textColor = Black, _______backColor = White;
wim 2:43ede88fb5a3 75 //static unsigned short ___driverCode;
wim 0:a8090b59eb05 76
wim 0:a8090b59eb05 77 /************************ Local auxiliary functions ***************************/
wim 0:a8090b59eb05 78
wim 2:43ede88fb5a3 79 #define swap(type, i, j) {type t = i; i = j; j = t;}
wim 2:43ede88fb5a3 80
wim 2:43ede88fb5a3 81 // rrrrrggggggbbbbb
wim 2:43ede88fb5a3 82 #define RGB24toRGB16(r,g,b) ((r & 0xF8)<<8) | ((g & 0xFC)<<3) | ((b & 0xF8)>>3)
wim 2:43ede88fb5a3 83
wim 2:43ede88fb5a3 84
wim 0:a8090b59eb05 85 /*******************************************************************************
wim 0:a8090b59eb05 86 * Delay in while loop cycles *
wim 0:a8090b59eb05 87 * Parameter: cnt: number of while cycles to delay *
wim 0:a8090b59eb05 88 * Return: *
wim 0:a8090b59eb05 89 *******************************************************************************/
wim 0:a8090b59eb05 90
wim 2:43ede88fb5a3 91 static __inline void delay (int cnt) {
wim 0:a8090b59eb05 92
wim 0:a8090b59eb05 93 cnt <<= DELAY_2N;
wim 0:a8090b59eb05 94 while (cnt--);
wim 0:a8090b59eb05 95 }
wim 0:a8090b59eb05 96
wim 2:43ede88fb5a3 97 static __inline __asm void wait()
wim 0:a8090b59eb05 98 {
wim 0:a8090b59eb05 99 nop
wim 0:a8090b59eb05 100 BX lr
wim 0:a8090b59eb05 101 }
wim 0:a8090b59eb05 102
wim 2:43ede88fb5a3 103 static __inline void wait_delay(int count)
wim 0:a8090b59eb05 104 {
wim 0:a8090b59eb05 105 while(count--);
wim 0:a8090b59eb05 106 }
wim 0:a8090b59eb05 107
wim 2:43ede88fb5a3 108
wim 2:43ede88fb5a3 109 GLCD::GLCD() {
wim 2:43ede88fb5a3 110 Init();
wim 2:43ede88fb5a3 111 }
wim 2:43ede88fb5a3 112
wim 2:43ede88fb5a3 113
wim 0:a8090b59eb05 114 /*******************************************************************************
wim 0:a8090b59eb05 115 * Send 1 short to LCD *
wim 0:a8090b59eb05 116 * Parameter: data: data to be sent *
wim 0:a8090b59eb05 117 * Return: *
wim 0:a8090b59eb05 118 *******************************************************************************/
wim 0:a8090b59eb05 119
wim 2:43ede88fb5a3 120 unsigned char GLCD::lcd_send (unsigned short data) {
wim 0:a8090b59eb05 121
wim 0:a8090b59eb05 122 LPC_GPIO2->FIODIR |= 0x000000ff; //P2.0...P2.7 Output
wim 0:a8090b59eb05 123 LCD_DIR(1) //Interface A->B
wim 0:a8090b59eb05 124 LCD_EN(0) //Enable 2A->2B
wim 0:a8090b59eb05 125 LPC_GPIO2->FIOPIN = data; //Write D0..D7
wim 0:a8090b59eb05 126 LCD_LE(1)
wim 0:a8090b59eb05 127 LCD_LE(0) //latch D0..D7
wim 0:a8090b59eb05 128 LPC_GPIO2->FIOPIN = data >> 8; //Write D8..D15
wim 0:a8090b59eb05 129 return(1);
wim 0:a8090b59eb05 130 }
wim 0:a8090b59eb05 131
wim 0:a8090b59eb05 132
wim 0:a8090b59eb05 133 /*******************************************************************************
wim 0:a8090b59eb05 134 * read 1 short from LCD *
wim 0:a8090b59eb05 135 * Parameter: *
wim 0:a8090b59eb05 136 * Return: short data from LCD *
wim 0:a8090b59eb05 137 *******************************************************************************/
wim 0:a8090b59eb05 138
wim 2:43ede88fb5a3 139 unsigned short GLCD::lcd_read (void) {
wim 0:a8090b59eb05 140 unsigned short id;
wim 0:a8090b59eb05 141 LPC_GPIO2->FIODIR &= 0xffffff00; //P2.0...P2.7 Input
wim 0:a8090b59eb05 142 LCD_DIR(0) //Interface B->A
wim 0:a8090b59eb05 143 LCD_EN(0) //Enable 2B->2A
wim 0:a8090b59eb05 144 wait_delay(80); //delay some times
wim 0:a8090b59eb05 145 id = LPC_GPIO2->FIOPIN & 0x00ff; //Read D8..D15
wim 0:a8090b59eb05 146 LCD_EN(1) //Enable 1B->1A
wim 0:a8090b59eb05 147 wait_delay(80); //delay some times
wim 0:a8090b59eb05 148 id = (id << 8) | (LPC_GPIO2->FIOPIN & 0x00ff); //Read D0..D7
wim 0:a8090b59eb05 149 LCD_DIR(1)
wim 0:a8090b59eb05 150 return(id);
wim 0:a8090b59eb05 151 }
wim 0:a8090b59eb05 152
wim 0:a8090b59eb05 153 /*******************************************************************************
wim 0:a8090b59eb05 154 * Write command to LCD controller *
wim 0:a8090b59eb05 155 * Parameter: c: command to be written *
wim 0:a8090b59eb05 156 * Return: *
wim 0:a8090b59eb05 157 *******************************************************************************/
wim 0:a8090b59eb05 158
wim 2:43ede88fb5a3 159 void GLCD::wr_cmd (unsigned char c) {
wim 0:a8090b59eb05 160
wim 0:a8090b59eb05 161 LCD_RS(0)
wim 0:a8090b59eb05 162 LCD_RD(1)
wim 0:a8090b59eb05 163 lcd_send(c);
wim 0:a8090b59eb05 164 LCD_WR(0)
wim 0:a8090b59eb05 165 wait();
wim 0:a8090b59eb05 166 LCD_WR(1)
wim 0:a8090b59eb05 167 }
wim 0:a8090b59eb05 168
wim 0:a8090b59eb05 169
wim 0:a8090b59eb05 170 /*******************************************************************************
wim 0:a8090b59eb05 171 * Write data to LCD controller *
wim 0:a8090b59eb05 172 * Parameter: c: data to be written *
wim 0:a8090b59eb05 173 * Return: *
wim 0:a8090b59eb05 174 *******************************************************************************/
wim 0:a8090b59eb05 175
wim 2:43ede88fb5a3 176 void GLCD::wr_dat (unsigned short c) {
wim 0:a8090b59eb05 177
wim 0:a8090b59eb05 178 LCD_RS(1)
wim 0:a8090b59eb05 179 LCD_RD(1)
wim 0:a8090b59eb05 180 lcd_send(c);
wim 0:a8090b59eb05 181 LCD_WR(0)
wim 0:a8090b59eb05 182 wait();
wim 0:a8090b59eb05 183 LCD_WR(1)
wim 0:a8090b59eb05 184 }
wim 0:a8090b59eb05 185
wim 0:a8090b59eb05 186 /*******************************************************************************
wim 0:a8090b59eb05 187 * Read data from LCD controller *
wim 0:a8090b59eb05 188 * Parameter: *
wim 0:a8090b59eb05 189 * Return: read data *
wim 0:a8090b59eb05 190 *******************************************************************************/
wim 0:a8090b59eb05 191
wim 2:43ede88fb5a3 192 unsigned short GLCD::rd_dat (void) {
wim 0:a8090b59eb05 193 unsigned short val = 0;
wim 0:a8090b59eb05 194
wim 0:a8090b59eb05 195 LCD_RS(1)
wim 0:a8090b59eb05 196 LCD_WR(1)
wim 0:a8090b59eb05 197 LCD_RD(0)
wim 0:a8090b59eb05 198 val = lcd_read();
wim 0:a8090b59eb05 199 LCD_RD(1)
wim 0:a8090b59eb05 200 return val;
wim 0:a8090b59eb05 201 }
wim 0:a8090b59eb05 202
wim 0:a8090b59eb05 203 /*******************************************************************************
wim 0:a8090b59eb05 204 * Start of data writing to LCD controller *
wim 0:a8090b59eb05 205 * Parameter: *
wim 0:a8090b59eb05 206 * Return: *
wim 0:a8090b59eb05 207 *******************************************************************************/
wim 0:a8090b59eb05 208
wim 2:43ede88fb5a3 209 void GLCD::wr_dat_start (void) {
wim 0:a8090b59eb05 210
wim 0:a8090b59eb05 211 LCD_CS(0)
wim 0:a8090b59eb05 212 LCD_RS(1)
wim 0:a8090b59eb05 213 }
wim 0:a8090b59eb05 214
wim 0:a8090b59eb05 215
wim 0:a8090b59eb05 216 /*******************************************************************************
wim 0:a8090b59eb05 217 * Stop of data writing to LCD controller *
wim 0:a8090b59eb05 218 * Parameter: *
wim 0:a8090b59eb05 219 * Return: *
wim 0:a8090b59eb05 220 *******************************************************************************/
wim 0:a8090b59eb05 221
wim 2:43ede88fb5a3 222 void GLCD::wr_dat_stop (void) {
wim 0:a8090b59eb05 223
wim 0:a8090b59eb05 224 LCD_CS(1)
wim 0:a8090b59eb05 225 }
wim 0:a8090b59eb05 226
wim 0:a8090b59eb05 227
wim 0:a8090b59eb05 228 /*******************************************************************************
wim 0:a8090b59eb05 229 * Data writing to LCD controller *
wim 0:a8090b59eb05 230 * Parameter: c: data to be written *
wim 0:a8090b59eb05 231 * Return: *
wim 0:a8090b59eb05 232 *******************************************************************************/
wim 0:a8090b59eb05 233
wim 2:43ede88fb5a3 234 void GLCD::wr_dat_only (unsigned short c) {
wim 0:a8090b59eb05 235
wim 0:a8090b59eb05 236 lcd_send(c);
wim 0:a8090b59eb05 237 LCD_WR(0)
wim 0:a8090b59eb05 238 wait();
wim 0:a8090b59eb05 239 LCD_WR(1)
wim 0:a8090b59eb05 240 }
wim 0:a8090b59eb05 241
wim 0:a8090b59eb05 242
wim 0:a8090b59eb05 243 /*******************************************************************************
wim 0:a8090b59eb05 244 * Write to LCD register *
wim 0:a8090b59eb05 245 * Parameter: reg: register to be read *
wim 0:a8090b59eb05 246 * val: value to write to register *
wim 0:a8090b59eb05 247 *******************************************************************************/
wim 0:a8090b59eb05 248
wim 2:43ede88fb5a3 249 void GLCD::wr_reg (unsigned char reg, unsigned short val) {
wim 0:a8090b59eb05 250
wim 0:a8090b59eb05 251 LCD_CS(0)
wim 0:a8090b59eb05 252 wr_cmd(reg);
wim 0:a8090b59eb05 253 wr_dat(val);
wim 0:a8090b59eb05 254 LCD_CS(1)
wim 0:a8090b59eb05 255 }
wim 0:a8090b59eb05 256
wim 0:a8090b59eb05 257
wim 0:a8090b59eb05 258 /*******************************************************************************
wim 0:a8090b59eb05 259 * Read from LCD register *
wim 0:a8090b59eb05 260 * Parameter: reg: register to be read *
wim 0:a8090b59eb05 261 * Return: value read from register *
wim 0:a8090b59eb05 262 *******************************************************************************/
wim 0:a8090b59eb05 263
wim 2:43ede88fb5a3 264 unsigned short GLCD::rd_reg (unsigned short reg) {
wim 0:a8090b59eb05 265 unsigned short val = 0;
wim 0:a8090b59eb05 266
wim 0:a8090b59eb05 267 LCD_CS(0)
wim 0:a8090b59eb05 268 wr_cmd(reg);
wim 0:a8090b59eb05 269 val = rd_dat();
wim 0:a8090b59eb05 270 LCD_CS(1)
wim 0:a8090b59eb05 271 return (val);
wim 0:a8090b59eb05 272 }
wim 0:a8090b59eb05 273
wim 0:a8090b59eb05 274
wim 0:a8090b59eb05 275 /************************ Exported functions **********************************/
wim 0:a8090b59eb05 276
wim 0:a8090b59eb05 277 /*******************************************************************************
wim 0:a8090b59eb05 278 * Initialize the Graphic LCD controller *
wim 0:a8090b59eb05 279 * Parameter: *
wim 0:a8090b59eb05 280 * Return: *
wim 0:a8090b59eb05 281 *******************************************************************************/
wim 0:a8090b59eb05 282
wim 2:43ede88fb5a3 283 void GLCD::Init (void) {
wim 0:a8090b59eb05 284
wim 0:a8090b59eb05 285 /* Configure the LCD Control pins */
wim 0:a8090b59eb05 286 LPC_GPIO0->FIODIR |= 0x03f80000;
wim 0:a8090b59eb05 287 LPC_GPIO0->FIOSET = 0x03f80000;
wim 0:a8090b59eb05 288
wim 0:a8090b59eb05 289 delay(5); /* Delay 50 ms */
wim 0:a8090b59eb05 290
wim 2:43ede88fb5a3 291 _driverCode = rd_reg(0x00);
wim 0:a8090b59eb05 292
wim 2:43ede88fb5a3 293 switch (_driverCode) {
wim 0:a8090b59eb05 294
wim 0:a8090b59eb05 295 case LGDP4531_ID: { //2.8" TFT LCD Module, DriverIC is LGDP4531
wim 0:a8090b59eb05 296
wim 2:43ede88fb5a3 297 #ifndef DISABLE_LGDP4531
wim 0:a8090b59eb05 298 wr_reg(0x00,0x0001);
wim 0:a8090b59eb05 299 wr_reg(0x10,0x0628);
wim 0:a8090b59eb05 300 wr_reg(0x12,0x0006);
wim 0:a8090b59eb05 301 wr_reg(0x13,0x0A32);
wim 0:a8090b59eb05 302 wr_reg(0x11,0x0040);
wim 0:a8090b59eb05 303 wr_reg(0x15,0x0050);
wim 0:a8090b59eb05 304 wr_reg(0x12,0x0016);
wim 0:a8090b59eb05 305 delay(15);
wim 0:a8090b59eb05 306 wr_reg(0x10,0x5660);
wim 0:a8090b59eb05 307 delay(15);
wim 0:a8090b59eb05 308 wr_reg(0x13,0x2A4E);
wim 0:a8090b59eb05 309 wr_reg(0x01,0x0100);
wim 0:a8090b59eb05 310 wr_reg(0x02,0x0300);
wim 0:a8090b59eb05 311
wim 0:a8090b59eb05 312 wr_reg(0x03,0x1030);
wim 0:a8090b59eb05 313
wim 0:a8090b59eb05 314 wr_reg(0x08,0x0202);
wim 0:a8090b59eb05 315 wr_reg(0x0A,0x0000);
wim 0:a8090b59eb05 316 wr_reg(0x30,0x0000);
wim 0:a8090b59eb05 317 wr_reg(0x31,0x0402);
wim 0:a8090b59eb05 318 wr_reg(0x32,0x0106);
wim 0:a8090b59eb05 319 wr_reg(0x33,0x0700);
wim 0:a8090b59eb05 320 wr_reg(0x34,0x0104);
wim 0:a8090b59eb05 321 wr_reg(0x35,0x0301);
wim 0:a8090b59eb05 322 wr_reg(0x36,0x0707);
wim 0:a8090b59eb05 323 wr_reg(0x37,0x0305);
wim 0:a8090b59eb05 324 wr_reg(0x38,0x0208);
wim 0:a8090b59eb05 325 wr_reg(0x39,0x0F0B);
wim 0:a8090b59eb05 326 delay(15);
wim 0:a8090b59eb05 327 wr_reg(0x41,0x0002);
wim 0:a8090b59eb05 328 wr_reg(0x60,0x2700);
wim 0:a8090b59eb05 329 wr_reg(0x61,0x0001);
wim 0:a8090b59eb05 330 wr_reg(0x90,0x0119);
wim 0:a8090b59eb05 331 wr_reg(0x92,0x010A);
wim 0:a8090b59eb05 332 wr_reg(0x93,0x0004);
wim 0:a8090b59eb05 333 wr_reg(0xA0,0x0100);
wim 0:a8090b59eb05 334 delay(15);
wim 0:a8090b59eb05 335 wr_reg(0xA0,0x0000);
wim 0:a8090b59eb05 336 delay(20);
wim 2:43ede88fb5a3 337 #endif
wim 0:a8090b59eb05 338 break;
wim 0:a8090b59eb05 339 }
wim 0:a8090b59eb05 340
wim 0:a8090b59eb05 341 case ILI9328_ID:
wim 0:a8090b59eb05 342 case ILI9325_ID: { //2.8" TFT LCD Module, DriverIC is ILI9325
wim 0:a8090b59eb05 343
wim 2:43ede88fb5a3 344 #ifndef DISABLE_ILI9325
wim 0:a8090b59eb05 345 wr_reg(0x00e7,0x0010);
wim 0:a8090b59eb05 346 wr_reg(0x0000,0x0001); //start internal osc
wim 0:a8090b59eb05 347 wr_reg(0x0001,0x0100);
wim 0:a8090b59eb05 348 wr_reg(0x0002,0x0700); //power on sequence
wim 0:a8090b59eb05 349 wr_reg(0x0003,(1<<12)|(1<<5)|(1<<4) ); //65K
wim 0:a8090b59eb05 350 wr_reg(0x0004,0x0000);
wim 0:a8090b59eb05 351 wr_reg(0x0008,0x0207);
wim 0:a8090b59eb05 352 wr_reg(0x0009,0x0000);
wim 0:a8090b59eb05 353 wr_reg(0x000a,0x0000); //display setting
wim 0:a8090b59eb05 354 wr_reg(0x000c,0x0001); //display setting
wim 0:a8090b59eb05 355 wr_reg(0x000d,0x0000); //0f3c
wim 0:a8090b59eb05 356 wr_reg(0x000f,0x0000);
wim 0:a8090b59eb05 357 //Power On sequence //
wim 0:a8090b59eb05 358 wr_reg(0x0010,0x0000);
wim 0:a8090b59eb05 359 wr_reg(0x0011,0x0007);
wim 0:a8090b59eb05 360 wr_reg(0x0012,0x0000);
wim 0:a8090b59eb05 361 wr_reg(0x0013,0x0000);
wim 0:a8090b59eb05 362 delay(15);
wim 0:a8090b59eb05 363 wr_reg(0x0010,0x1590);
wim 0:a8090b59eb05 364 wr_reg(0x0011,0x0227);
wim 0:a8090b59eb05 365 delay(15);
wim 0:a8090b59eb05 366 wr_reg(0x0012,0x009c);
wim 0:a8090b59eb05 367 delay(15);
wim 0:a8090b59eb05 368 wr_reg(0x0013,0x1900);
wim 0:a8090b59eb05 369 wr_reg(0x0029,0x0023);
wim 0:a8090b59eb05 370 wr_reg(0x002b,0x000e);
wim 0:a8090b59eb05 371 delay(15);
wim 0:a8090b59eb05 372 wr_reg(0x0020,0x0000);
wim 0:a8090b59eb05 373 wr_reg(0x0021,0x0000);
wim 0:a8090b59eb05 374 ///////////////////////////////////////////////////////
wim 0:a8090b59eb05 375 delay(15);
wim 0:a8090b59eb05 376 wr_reg(0x0030,0x0007);
wim 0:a8090b59eb05 377 wr_reg(0x0031,0x0707);
wim 0:a8090b59eb05 378 wr_reg(0x0032,0x0006);
wim 0:a8090b59eb05 379 wr_reg(0x0035,0x0704);
wim 0:a8090b59eb05 380 wr_reg(0x0036,0x1f04);
wim 0:a8090b59eb05 381 wr_reg(0x0037,0x0004);
wim 0:a8090b59eb05 382 wr_reg(0x0038,0x0000);
wim 0:a8090b59eb05 383 wr_reg(0x0039,0x0706);
wim 0:a8090b59eb05 384 wr_reg(0x003c,0x0701);
wim 0:a8090b59eb05 385 wr_reg(0x003d,0x000f);
wim 0:a8090b59eb05 386 delay(15);
wim 0:a8090b59eb05 387 wr_reg(0x0050,0x0000);
wim 0:a8090b59eb05 388 wr_reg(0x0051,0x00ef);
wim 0:a8090b59eb05 389 wr_reg(0x0052,0x0000);
wim 0:a8090b59eb05 390 wr_reg(0x0053,0x013f);
wim 0:a8090b59eb05 391 wr_reg(0x0060,0xa700);
wim 0:a8090b59eb05 392 wr_reg(0x0061,0x0001);
wim 0:a8090b59eb05 393 wr_reg(0x006a,0x0000);
wim 0:a8090b59eb05 394 wr_reg(0x0080,0x0000);
wim 0:a8090b59eb05 395 wr_reg(0x0081,0x0000);
wim 0:a8090b59eb05 396 wr_reg(0x0082,0x0000);
wim 0:a8090b59eb05 397 wr_reg(0x0083,0x0000);
wim 0:a8090b59eb05 398 wr_reg(0x0084,0x0000);
wim 0:a8090b59eb05 399 wr_reg(0x0085,0x0000);
wim 0:a8090b59eb05 400
wim 0:a8090b59eb05 401 wr_reg(0x0090,0x0010);
wim 0:a8090b59eb05 402 wr_reg(0x0092,0x0000);
wim 0:a8090b59eb05 403 wr_reg(0x0093,0x0003);
wim 0:a8090b59eb05 404 wr_reg(0x0095,0x0110);
wim 0:a8090b59eb05 405 wr_reg(0x0097,0x0000);
wim 0:a8090b59eb05 406 wr_reg(0x0098,0x0000);
wim 0:a8090b59eb05 407 //display on sequence
wim 0:a8090b59eb05 408 wr_reg(0x0007,0x0133);
wim 0:a8090b59eb05 409 wr_reg(0x0020,0x0000);
wim 0:a8090b59eb05 410 wr_reg(0x0021,0x0000);
wim 2:43ede88fb5a3 411 #endif
wim 0:a8090b59eb05 412 break;
wim 0:a8090b59eb05 413 }
wim 0:a8090b59eb05 414
wim 0:a8090b59eb05 415 case ILI9320_ID: { //3.2" TFT LCD Module,DriverIC is ILI9320
wim 2:43ede88fb5a3 416
wim 2:43ede88fb5a3 417 #ifndef DISABLE_ILI9320
wim 0:a8090b59eb05 418 /* Start Initial Sequence --------------------------------------------------*/
wim 0:a8090b59eb05 419 wr_reg(0xE5, 0x8000); /* Set the internal vcore voltage */
wim 0:a8090b59eb05 420 wr_reg(0x00, 0x0001); /* Start internal OSC */
wim 0:a8090b59eb05 421 wr_reg(0x01, 0x0100); /* Set SS and SM bit */
wim 0:a8090b59eb05 422 wr_reg(0x02, 0x0700); /* Set 1 line inversion */
wim 0:a8090b59eb05 423 wr_reg(0x03, 0x1030); /* Set GRAM write direction and BGR=1 */
wim 0:a8090b59eb05 424 wr_reg(0x04, 0x0000); /* Resize register */
wim 0:a8090b59eb05 425 wr_reg(0x08, 0x0202); /* 2 lines each, back and front porch */
wim 0:a8090b59eb05 426 wr_reg(0x09, 0x0000); /* Set non-disp area refresh cyc ISC */
wim 0:a8090b59eb05 427 wr_reg(0x0A, 0x0000); /* FMARK function */
wim 0:a8090b59eb05 428 wr_reg(0x0C, 0x0000); /* RGB interface setting */
wim 0:a8090b59eb05 429 wr_reg(0x0D, 0x0000); /* Frame marker Position */
wim 0:a8090b59eb05 430 wr_reg(0x0F, 0x0000); /* RGB interface polarity */
wim 0:a8090b59eb05 431
wim 0:a8090b59eb05 432 /* Power On sequence -------------------------------------------------------*/
wim 0:a8090b59eb05 433 wr_reg(0x10, 0x0000); /* Reset Power Control 1 */
wim 0:a8090b59eb05 434 wr_reg(0x11, 0x0000); /* Reset Power Control 2 */
wim 0:a8090b59eb05 435 wr_reg(0x12, 0x0000); /* Reset Power Control 3 */
wim 0:a8090b59eb05 436 wr_reg(0x13, 0x0000); /* Reset Power Control 4 */
wim 0:a8090b59eb05 437 delay(20); /* Discharge cap power voltage (200ms)*/
wim 0:a8090b59eb05 438 wr_reg(0x10, 0x17B0); /* SAP, BT[3:0], AP, DSTB, SLP, STB */
wim 0:a8090b59eb05 439 wr_reg(0x11, 0x0137); /* DC1[2:0], DC0[2:0], VC[2:0] */
wim 0:a8090b59eb05 440 delay(5); /* Delay 50 ms */
wim 0:a8090b59eb05 441 wr_reg(0x12, 0x0139); /* VREG1OUT voltage */
wim 0:a8090b59eb05 442 delay(5); /* Delay 50 ms */
wim 0:a8090b59eb05 443 wr_reg(0x13, 0x1D00); /* VDV[4:0] for VCOM amplitude */
wim 0:a8090b59eb05 444 wr_reg(0x29, 0x0013); /* VCM[4:0] for VCOMH */
wim 0:a8090b59eb05 445 delay(5); /* Delay 50 ms */
wim 0:a8090b59eb05 446 wr_reg(0x20, 0x0000); /* GRAM horizontal Address */
wim 0:a8090b59eb05 447 wr_reg(0x21, 0x0000); /* GRAM Vertical Address */
wim 0:a8090b59eb05 448
wim 0:a8090b59eb05 449 /* Adjust the Gamma Curve --------------------------------------------------*/
wim 0:a8090b59eb05 450 wr_reg(0x30, 0x0006);
wim 0:a8090b59eb05 451 wr_reg(0x31, 0x0101);
wim 0:a8090b59eb05 452 wr_reg(0x32, 0x0003);
wim 0:a8090b59eb05 453 wr_reg(0x35, 0x0106);
wim 0:a8090b59eb05 454 wr_reg(0x36, 0x0B02);
wim 0:a8090b59eb05 455 wr_reg(0x37, 0x0302);
wim 0:a8090b59eb05 456 wr_reg(0x38, 0x0707);
wim 0:a8090b59eb05 457 wr_reg(0x39, 0x0007);
wim 0:a8090b59eb05 458 wr_reg(0x3C, 0x0600);
wim 0:a8090b59eb05 459 wr_reg(0x3D, 0x020B);
wim 0:a8090b59eb05 460
wim 0:a8090b59eb05 461 /* Set GRAM area -----------------------------------------------------------*/
wim 0:a8090b59eb05 462 wr_reg(0x50, 0x0000); /* Horizontal GRAM Start Address */
wim 0:a8090b59eb05 463 wr_reg(0x51, (HEIGHT-1)); /* Horizontal GRAM End Address */
wim 0:a8090b59eb05 464 wr_reg(0x52, 0x0000); /* Vertical GRAM Start Address */
wim 0:a8090b59eb05 465 wr_reg(0x53, (WIDTH-1)); /* Vertical GRAM End Address */
wim 0:a8090b59eb05 466 wr_reg(0x60, 0x2700); /* Gate Scan Line */
wim 0:a8090b59eb05 467 wr_reg(0x61, 0x0001); /* NDL,VLE, REV */
wim 0:a8090b59eb05 468 wr_reg(0x6A, 0x0000); /* Set scrolling line */
wim 0:a8090b59eb05 469
wim 0:a8090b59eb05 470 /* Partial Display Control -------------------------------------------------*/
wim 0:a8090b59eb05 471 wr_reg(0x80, 0x0000);
wim 0:a8090b59eb05 472 wr_reg(0x81, 0x0000);
wim 0:a8090b59eb05 473 wr_reg(0x82, 0x0000);
wim 0:a8090b59eb05 474 wr_reg(0x83, 0x0000);
wim 0:a8090b59eb05 475 wr_reg(0x84, 0x0000);
wim 0:a8090b59eb05 476 wr_reg(0x85, 0x0000);
wim 0:a8090b59eb05 477
wim 0:a8090b59eb05 478 /* Panel Control -----------------------------------------------------------*/
wim 0:a8090b59eb05 479 wr_reg(0x90, 0x0010);
wim 0:a8090b59eb05 480 wr_reg(0x92, 0x0000);
wim 0:a8090b59eb05 481 wr_reg(0x93, 0x0003);
wim 0:a8090b59eb05 482 wr_reg(0x95, 0x0110);
wim 0:a8090b59eb05 483 wr_reg(0x97, 0x0000);
wim 0:a8090b59eb05 484 wr_reg(0x98, 0x0000);
wim 2:43ede88fb5a3 485 #endif
wim 0:a8090b59eb05 486
wim 0:a8090b59eb05 487 break;
wim 0:a8090b59eb05 488 }
wim 0:a8090b59eb05 489
wim 0:a8090b59eb05 490 case ILI9331_ID: {
wim 2:43ede88fb5a3 491
wim 2:43ede88fb5a3 492 #ifndef DISABLE_ILI9331
wim 0:a8090b59eb05 493 wr_reg(0x00E7, 0x1014);
wim 0:a8090b59eb05 494 wr_reg(0x0001, 0x0100); /* set SS and SM bit */
wim 0:a8090b59eb05 495 wr_reg(0x0002, 0x0200); /* set 1 line inversion */
wim 0:a8090b59eb05 496 wr_reg(0x0003, 0x1030); /* set GRAM write direction and BGR=1 */
wim 0:a8090b59eb05 497 wr_reg(0x0008, 0x0202); /* set the back porch and front porch */
wim 0:a8090b59eb05 498 wr_reg(0x0009, 0x0000); /* set non-display area refresh cycle ISC[3:0] */
wim 0:a8090b59eb05 499 wr_reg(0x000A, 0x0000); /* FMARK function */
wim 0:a8090b59eb05 500 wr_reg(0x000C, 0x0000); /* RGB interface setting */
wim 0:a8090b59eb05 501 wr_reg(0x000D, 0x0000); /* Frame marker Position */
wim 0:a8090b59eb05 502 wr_reg(0x000F, 0x0000); /* RGB interface polarity */
wim 0:a8090b59eb05 503 /* Power On sequence */
wim 0:a8090b59eb05 504 wr_reg(0x0010, 0x0000); /* SAP, BT[3:0], AP, DSTB, SLP, STB   */
wim 0:a8090b59eb05 505 wr_reg(0x0011, 0x0007); /* DC1[2:0], DC0[2:0], VC[2:0] */
wim 0:a8090b59eb05 506 wr_reg(0x0012, 0x0000); /* VREG1OUT voltage   */
wim 0:a8090b59eb05 507 wr_reg(0x0013, 0x0000); /* VDV[4:0] for VCOM amplitude */
wim 0:a8090b59eb05 508 delay(200); /* delay 200 ms */
wim 0:a8090b59eb05 509 wr_reg(0x0010, 0x1690); /* SAP, BT[3:0], AP, DSTB, SLP, STB   */
wim 0:a8090b59eb05 510 wr_reg(0x0011, 0x0227); /* DC1[2:0], DC0[2:0], VC[2:0] */
wim 0:a8090b59eb05 511 delay(50); /* delay 50 ms */
wim 0:a8090b59eb05 512 wr_reg(0x0012, 0x000C); /* Internal reference voltage= Vci   */
wim 0:a8090b59eb05 513 delay(50); /* delay 50 ms */
wim 0:a8090b59eb05 514 wr_reg(0x0013, 0x0800); /* Set VDV[4:0] for VCOM amplitude */
wim 0:a8090b59eb05 515 wr_reg(0x0029, 0x0011); /* Set VCM[5:0] for VCOMH */
wim 0:a8090b59eb05 516 wr_reg(0x002B, 0x000B); /* Set Frame Rate */
wim 0:a8090b59eb05 517 delay(50); /* delay 50 ms */
wim 0:a8090b59eb05 518 wr_reg(0x0020, 0x0000); /* GRAM horizontal Address */
wim 0:a8090b59eb05 519 wr_reg(0x0021, 0x0000); /* GRAM Vertical Address */
wim 0:a8090b59eb05 520 /* Adjust the Gamma Curve */
wim 0:a8090b59eb05 521 wr_reg(0x0030, 0x0000);
wim 0:a8090b59eb05 522 wr_reg(0x0031, 0x0106);
wim 0:a8090b59eb05 523 wr_reg(0x0032, 0x0000);
wim 0:a8090b59eb05 524 wr_reg(0x0035, 0x0204);
wim 0:a8090b59eb05 525 wr_reg(0x0036, 0x160A);
wim 0:a8090b59eb05 526 wr_reg(0x0037, 0x0707);
wim 0:a8090b59eb05 527 wr_reg(0x0038, 0x0106);
wim 0:a8090b59eb05 528 wr_reg(0x0039, 0x0707);
wim 0:a8090b59eb05 529 wr_reg(0x003C, 0x0402);
wim 0:a8090b59eb05 530 wr_reg(0x003D, 0x0C0F);
wim 0:a8090b59eb05 531 /* Set GRAM area */
wim 0:a8090b59eb05 532 wr_reg(0x0050, 0x0000); /* Horizontal GRAM Start Address */
wim 0:a8090b59eb05 533 wr_reg(0x0051, 0x00EF); /* Horizontal GRAM End Address */
wim 0:a8090b59eb05 534 wr_reg(0x0052, 0x0000); /* Vertical GRAM Start Address */
wim 0:a8090b59eb05 535 wr_reg(0x0053, 0x013F); /* Vertical GRAM Start Address */
wim 0:a8090b59eb05 536 wr_reg(0x0060, 0x2700); /* Gate Scan Line */
wim 0:a8090b59eb05 537 wr_reg(0x0061, 0x0001); /*  NDL,VLE, REV */
wim 0:a8090b59eb05 538 wr_reg(0x006A, 0x0000); /* set scrolling line */
wim 0:a8090b59eb05 539 /* Partial Display Control */
wim 0:a8090b59eb05 540 wr_reg(0x0080, 0x0000);
wim 0:a8090b59eb05 541 wr_reg(0x0081, 0x0000);
wim 0:a8090b59eb05 542 wr_reg(0x0082, 0x0000);
wim 0:a8090b59eb05 543 wr_reg(0x0083, 0x0000);
wim 0:a8090b59eb05 544 wr_reg(0x0084, 0x0000);
wim 0:a8090b59eb05 545 wr_reg(0x0085, 0x0000);
wim 0:a8090b59eb05 546 /* Panel Control */
wim 0:a8090b59eb05 547 wr_reg(0x0090, 0x0010);
wim 0:a8090b59eb05 548 wr_reg(0x0092, 0x0600);
wim 0:a8090b59eb05 549 wr_reg(0x0007,0x0021);
wim 0:a8090b59eb05 550 delay(50); /* delay 50 ms */
wim 0:a8090b59eb05 551 wr_reg(0x0007,0x0061);
wim 0:a8090b59eb05 552 delay(50); /* delay 50 ms */
wim 0:a8090b59eb05 553 wr_reg(0x0007,0x0133); /* 262K color and display ON */
wim 2:43ede88fb5a3 554 #endif
wim 0:a8090b59eb05 555 break;
wim 0:a8090b59eb05 556 }
wim 0:a8090b59eb05 557
wim 0:a8090b59eb05 558 case SSD1289_ID: { //3.2" TFT LCD Module,DriverIC is SSD1289
wim 2:43ede88fb5a3 559
wim 2:43ede88fb5a3 560 #ifndef DISABLE_SSD1289_ID
wim 1:ea0f7b1c5daf 561 wr_reg(0x0007,0x0233); delay(5); //0x0233 Set this first or init fails !
wim 1:ea0f7b1c5daf 562
wim 0:a8090b59eb05 563 wr_reg(0x0000,0x0001); delay(5); // osc en
wim 0:a8090b59eb05 564
wim 0:a8090b59eb05 565 wr_reg(0x0003,0xA8A4); delay(5); // powercontrol 1 0xA8A4
wim 0:a8090b59eb05 566 wr_reg(0x000C,0x0000); delay(5); // powercontrol 2
wim 0:a8090b59eb05 567 wr_reg(0x000D,0x080C); delay(5); // powercontrol 3
wim 0:a8090b59eb05 568 wr_reg(0x000E,0x2B00); delay(5); // powercontrol 4
wim 0:a8090b59eb05 569 wr_reg(0x001E,0x00B0); delay(5); // powercontrol 5
wim 0:a8090b59eb05 570
wim 0:a8090b59eb05 571 //orig wr_reg(0x0001,0x2b3F); delay(5); // 0x2b3f Mux=320, BGR, RL=0, TB=1
wim 0:a8090b59eb05 572 wr_reg(0x0001,0x6B3F); delay(5); // 0x6B3F Mux=320, BGR, RL=1, TB=1
wim 0:a8090b59eb05 573 // wr_reg(0x0001,0x293F); delay(5); // 0x293f Mux=320, BGR, RL=0, TB=0
wim 0:a8090b59eb05 574
wim 0:a8090b59eb05 575
wim 0:a8090b59eb05 576 wr_reg(0x0002,0x0600); delay(5); // Driver AC mode
wim 0:a8090b59eb05 577 wr_reg(0x0010,0x0000); delay(5); // Exit Sleep
wim 0:a8090b59eb05 578
wim 0:a8090b59eb05 579 wr_reg(0x0011,0x6078); delay(5); // Entry mode 0x6078 = 65k colors, Hor and Vert Addr Incr, AM=1 vert writing dir
wim 0:a8090b59eb05 580 // wr_reg(0x0011,0x4030); delay(5); // Entry mode 0x4030 = 262k colors, Hor and Vert Addr Incr. AM=0 hor writing dir
wim 0:a8090b59eb05 581
wim 0:a8090b59eb05 582 wr_reg(0x0005,0x0000); delay(5); // Compare Regs (default)
wim 0:a8090b59eb05 583 wr_reg(0x0006,0x0000); delay(5);
wim 0:a8090b59eb05 584
wim 0:a8090b59eb05 585 wr_reg(0x0016,0xEF1C); delay(5); // Hor Porch (default)
wim 0:a8090b59eb05 586 wr_reg(0x0017,0x0003); delay(5); // Ver Porch (default 0103)
wim 0:a8090b59eb05 587 wr_reg(0x0007,0x0233); delay(5); //0x0233
wim 0:a8090b59eb05 588 wr_reg(0x000B,0x0000); delay(5); // Frame cycle control default 5308)
wim 0:a8090b59eb05 589
wim 0:a8090b59eb05 590 wr_reg(0x000F,0x0000); delay(5); // Gate scan start position
wim 0:a8090b59eb05 591
wim 0:a8090b59eb05 592 wr_reg(0x0041,0x0000); delay(5); // Vert Scroll control
wim 0:a8090b59eb05 593 wr_reg(0x0042,0x0000); delay(5);
wim 0:a8090b59eb05 594
wim 0:a8090b59eb05 595 wr_reg(0x0048,0x0000); delay(5); // First screen pos (default)
wim 0:a8090b59eb05 596 wr_reg(0x0049,0x013F); delay(5);
wim 0:a8090b59eb05 597
wim 0:a8090b59eb05 598 wr_reg(0x004A,0x0000); delay(5); // Second screen pos
wim 0:a8090b59eb05 599 wr_reg(0x004B,0x0000); delay(5);
wim 0:a8090b59eb05 600
wim 0:a8090b59eb05 601 wr_reg(0x0044,0xEF00); delay(5); // Hor addr pos
wim 0:a8090b59eb05 602 wr_reg(0x0045,0x0000); delay(5); // Vert Addr pos
wim 0:a8090b59eb05 603 wr_reg(0x0046,0x013F); delay(5);
wim 0:a8090b59eb05 604
wim 0:a8090b59eb05 605 wr_reg(0x0030,0x0707); delay(5); // Gamma
wim 0:a8090b59eb05 606 wr_reg(0x0031,0x0204); delay(5);
wim 0:a8090b59eb05 607 wr_reg(0x0032,0x0204); delay(5);
wim 0:a8090b59eb05 608 wr_reg(0x0033,0x0502); delay(5);
wim 0:a8090b59eb05 609 wr_reg(0x0034,0x0507); delay(5);
wim 0:a8090b59eb05 610 wr_reg(0x0035,0x0204); delay(5);
wim 0:a8090b59eb05 611 wr_reg(0x0036,0x0204); delay(5);
wim 0:a8090b59eb05 612 wr_reg(0x0037,0x0502); delay(5);
wim 0:a8090b59eb05 613 wr_reg(0x003A,0x0302); delay(5);
wim 0:a8090b59eb05 614 wr_reg(0x003B,0x0302); delay(5);
wim 0:a8090b59eb05 615
wim 0:a8090b59eb05 616 wr_reg(0x0023,0x0000); delay(5); // Write data mask (default)
wim 0:a8090b59eb05 617 wr_reg(0x0024,0x0000); delay(5);
wim 0:a8090b59eb05 618
wim 0:a8090b59eb05 619 wr_reg(0x0025,0x8000); delay(5); // Frame freq 65 Hz
wim 0:a8090b59eb05 620 wr_reg(0x004e,0); // Start x
wim 0:a8090b59eb05 621 wr_reg(0x004f,0); // Start y
wim 2:43ede88fb5a3 622 #endif
wim 0:a8090b59eb05 623 break;
wim 0:a8090b59eb05 624 }
wim 0:a8090b59eb05 625
wim 0:a8090b59eb05 626
wim 0:a8090b59eb05 627 case SSD1298_ID: {
wim 2:43ede88fb5a3 628
wim 2:43ede88fb5a3 629 #ifndef DISABLE_SSD1298_ID
wim 0:a8090b59eb05 630 wr_reg(0x0028,0x0006);
wim 0:a8090b59eb05 631 wr_reg(0x0000,0x0001);
wim 0:a8090b59eb05 632 wr_reg(0x0003,0xaea4); /* power control 1---line frequency and VHG,VGL voltage */
wim 0:a8090b59eb05 633 wr_reg(0x000c,0x0004); /* power control 2---VCIX2 output voltage */
wim 0:a8090b59eb05 634 wr_reg(0x000d,0x000c); /* power control 3---Vlcd63 voltage */
wim 0:a8090b59eb05 635 wr_reg(0x000e,0x2800); /* power control 4---VCOMA voltage VCOML=VCOMH*0.9475-VCOMA */
wim 0:a8090b59eb05 636 wr_reg(0x001e,0x00b5); /* POWER CONTROL 5---VCOMH voltage */
wim 0:a8090b59eb05 637 wr_reg(0x0001,0x3b3f);
wim 0:a8090b59eb05 638 wr_reg(0x0002,0x0600);
wim 0:a8090b59eb05 639 wr_reg(0x0010,0x0000);
wim 0:a8090b59eb05 640 wr_reg(0x0011,0x6830);
wim 0:a8090b59eb05 641 wr_reg(0x0005,0x0000);
wim 0:a8090b59eb05 642 wr_reg(0x0006,0x0000);
wim 0:a8090b59eb05 643 wr_reg(0x0016,0xef1c);
wim 0:a8090b59eb05 644 wr_reg(0x0007,0x0033); /* Display control 1 */
wim 0:a8090b59eb05 645 /* when GON=1 and DTE=0,all gate outputs become VGL */
wim 0:a8090b59eb05 646 /* when GON=1 and DTE=0,all gate outputs become VGH */
wim 0:a8090b59eb05 647 /* non-selected gate wires become VGL */
wim 0:a8090b59eb05 648 wr_reg(0x000b,0x0000);
wim 0:a8090b59eb05 649 wr_reg(0x000f,0x0000);
wim 0:a8090b59eb05 650 wr_reg(0x0041,0x0000);
wim 0:a8090b59eb05 651 wr_reg(0x0042,0x0000);
wim 0:a8090b59eb05 652 wr_reg(0x0048,0x0000);
wim 0:a8090b59eb05 653 wr_reg(0x0049,0x013f);
wim 0:a8090b59eb05 654 wr_reg(0x004a,0x0000);
wim 0:a8090b59eb05 655 wr_reg(0x004b,0x0000);
wim 0:a8090b59eb05 656 wr_reg(0x0044,0xef00); /* Horizontal RAM start and end address */
wim 0:a8090b59eb05 657 wr_reg(0x0045,0x0000); /* Vretical RAM start address */
wim 0:a8090b59eb05 658 wr_reg(0x0046,0x013f); /* Vretical RAM end address */
wim 0:a8090b59eb05 659 wr_reg(0x004e,0x0000); /* set GDDRAM x address counter */
wim 0:a8090b59eb05 660 wr_reg(0x004f,0x0000); /* set GDDRAM y address counter */
wim 0:a8090b59eb05 661 /* y control */
wim 0:a8090b59eb05 662 wr_reg(0x0030,0x0707);
wim 0:a8090b59eb05 663 wr_reg(0x0031,0x0202);
wim 0:a8090b59eb05 664 wr_reg(0x0032,0x0204);
wim 0:a8090b59eb05 665 wr_reg(0x0033,0x0502);
wim 0:a8090b59eb05 666 wr_reg(0x0034,0x0507);
wim 0:a8090b59eb05 667 wr_reg(0x0035,0x0204);
wim 0:a8090b59eb05 668 wr_reg(0x0036,0x0204);
wim 0:a8090b59eb05 669 wr_reg(0x0037,0x0502);
wim 0:a8090b59eb05 670 wr_reg(0x003a,0x0302);
wim 0:a8090b59eb05 671 wr_reg(0x003b,0x0302);
wim 0:a8090b59eb05 672 wr_reg(0x0023,0x0000);
wim 0:a8090b59eb05 673 wr_reg(0x0024,0x0000);
wim 0:a8090b59eb05 674 wr_reg(0x0025,0x8000);
wim 0:a8090b59eb05 675 wr_reg(0x0026,0x7000);
wim 0:a8090b59eb05 676 wr_reg(0x0020,0xb0eb);
wim 0:a8090b59eb05 677 wr_reg(0x0027,0x007c);
wim 2:43ede88fb5a3 678 #endif
wim 0:a8090b59eb05 679 break;
wim 0:a8090b59eb05 680 }
wim 0:a8090b59eb05 681
wim 0:a8090b59eb05 682 case SSD2119_ID: {
wim 2:43ede88fb5a3 683
wim 2:43ede88fb5a3 684 #ifndef DISABLE_SSD2119_ID
wim 0:a8090b59eb05 685 /* POWER ON & RESET DISPLAY OFF */
wim 0:a8090b59eb05 686 wr_reg(0x28,0x0006);
wim 0:a8090b59eb05 687 wr_reg(0x00,0x0001);
wim 0:a8090b59eb05 688 wr_reg(0x10,0x0000);
wim 0:a8090b59eb05 689 wr_reg(0x01,0x72ef);
wim 0:a8090b59eb05 690 wr_reg(0x02,0x0600);
wim 0:a8090b59eb05 691 wr_reg(0x03,0x6a38);
wim 0:a8090b59eb05 692 wr_reg(0x11,0x6874);
wim 0:a8090b59eb05 693 wr_reg(0x0f,0x0000); /* RAM WRITE DATA MASK */
wim 0:a8090b59eb05 694 wr_reg(0x0b,0x5308); /* RAM WRITE DATA MASK */
wim 0:a8090b59eb05 695 wr_reg(0x0c,0x0003);
wim 0:a8090b59eb05 696 wr_reg(0x0d,0x000a);
wim 0:a8090b59eb05 697 wr_reg(0x0e,0x2e00);
wim 0:a8090b59eb05 698 wr_reg(0x1e,0x00be);
wim 0:a8090b59eb05 699 wr_reg(0x25,0x8000);
wim 0:a8090b59eb05 700 wr_reg(0x26,0x7800);
wim 0:a8090b59eb05 701 wr_reg(0x27,0x0078);
wim 0:a8090b59eb05 702 wr_reg(0x4e,0x0000);
wim 0:a8090b59eb05 703 wr_reg(0x4f,0x0000);
wim 0:a8090b59eb05 704 wr_reg(0x12,0x08d9);
wim 0:a8090b59eb05 705 /* Adjust the Gamma Curve */
wim 0:a8090b59eb05 706 wr_reg(0x30,0x0000);
wim 0:a8090b59eb05 707 wr_reg(0x31,0x0104);
wim 0:a8090b59eb05 708 wr_reg(0x32,0x0100);
wim 0:a8090b59eb05 709 wr_reg(0x33,0x0305);
wim 0:a8090b59eb05 710 wr_reg(0x34,0x0505);
wim 0:a8090b59eb05 711 wr_reg(0x35,0x0305);
wim 0:a8090b59eb05 712 wr_reg(0x36,0x0707);
wim 0:a8090b59eb05 713 wr_reg(0x37,0x0300);
wim 0:a8090b59eb05 714 wr_reg(0x3a,0x1200);
wim 0:a8090b59eb05 715 wr_reg(0x3b,0x0800);
wim 0:a8090b59eb05 716 wr_reg(0x07,0x0033);
wim 2:43ede88fb5a3 717 #endif
wim 0:a8090b59eb05 718 break;
wim 0:a8090b59eb05 719 }
wim 0:a8090b59eb05 720
wim 0:a8090b59eb05 721
wim 0:a8090b59eb05 722
wim 0:a8090b59eb05 723 #if(0)
wim 0:a8090b59eb05 724
wim 0:a8090b59eb05 725 // Note: unprintable char hidden as space and as nl !!!
wim 0:a8090b59eb05 726  case R61505U_ID1:
wim 0:a8090b59eb05 727  case R61505U_ID2:  {
wim 0:a8090b59eb05 728
wim 2:43ede88fb5a3 729 #ifndef DISABLE_R61505U
wim 0:a8090b59eb05 730       /* second release on 3/5  ,luminance is acceptable,water wave appear during camera preview */
wim 0:a8090b59eb05 731        wr_reg(0x0007,0x0000);
wim 0:a8090b59eb05 732        delay(50);  /* delay 50 ms */      
wim 0:a8090b59eb05 733        wr_reg(0x0012,0x011C);    /* why need to set several times?   */
wim 0:a8090b59eb05 734        wr_reg(0x00A4,0x0001);    /* NVM */
wim 0:a8090b59eb05 735        wr_reg(0x0008,0x000F);
wim 0:a8090b59eb05 736        wr_reg(0x000A,0x0008);
wim 0:a8090b59eb05 737        wr_reg(0x000D,0x0008);
wim 0:a8090b59eb05 738        /* GAMMA CONTROL */
wim 0:a8090b59eb05 739        wr_reg(0x0030,0x0707);
wim 0:a8090b59eb05 740        wr_reg(0x0031,0x0007);
wim 0:a8090b59eb05 741        wr_reg(0x0032,0x0603);
wim 0:a8090b59eb05 742        wr_reg(0x0033,0x0700);
wim 0:a8090b59eb05 743        wr_reg(0x0034,0x0202);
wim 0:a8090b59eb05 744        wr_reg(0x0035,0x0002);
wim 0:a8090b59eb05 745        wr_reg(0x0036,0x1F0F);
wim 0:a8090b59eb05 746        wr_reg(0x0037,0x0707);
wim 0:a8090b59eb05 747        wr_reg(0x0038,0x0000);
wim 0:a8090b59eb05 748        wr_reg(0x0039,0x0000);
wim 0:a8090b59eb05 749        wr_reg(0x003A,0x0707);
wim 0:a8090b59eb05 750        wr_reg(0x003B,0x0000);
wim 0:a8090b59eb05 751        wr_reg(0x003C,0x0007);
wim 0:a8090b59eb05 752        wr_reg(0x003D,0x0000);
wim 0:a8090b59eb05 753        delay(50);  /* delay 50 ms */      
wim 0:a8090b59eb05 754        wr_reg(0x0007,0x0001);
wim 0:a8090b59eb05 755        wr_reg(0x0017,0x0001);    /* Power supply startup enable */
wim 0:a8090b59eb05 756        delay(50);  /* delay 50 ms */      
wim 0:a8090b59eb05 757        /* power control */
wim 0:a8090b59eb05 758        wr_reg(0x0010,0x17A0);
wim 0:a8090b59eb05 759        wr_reg(0x0011,0x0217); /* reference voltage VC[2:0]   Vciout = 1.00*Vcivl */
wim 0:a8090b59eb05 760        wr_reg(0x0012,0x011E); /* Vreg1out = Vcilvl*1.80   is it the same as Vgama1out ?   */
wim 0:a8090b59eb05 761        wr_reg(0x0013,0x0F00); /* VDV[4:0]-->VCOM Amplitude VcomL = VcomH - Vcom Ampl */
wim 0:a8090b59eb05 762        wr_reg(0x002A,0x0000);
wim 0:a8090b59eb05 763        wr_reg(0x0029,0x000A); /* Vcomh = VCM1[4:0]*Vreg1out    gate source voltage?? */
wim 0:a8090b59eb05 764        wr_reg(0x0012,0x013E); /* power supply on */
wim 0:a8090b59eb05 765        /* Coordinates Control */
wim 0:a8090b59eb05 766        wr_reg(0x0050,0x0000);
wim 0:a8090b59eb05 767        wr_reg(0x0051,0x00EF);
wim 0:a8090b59eb05 768        wr_reg(0x0052,0x0000);
wim 0:a8090b59eb05 769        wr_reg(0x0053,0x013F);
wim 0:a8090b59eb05 770        /* Pannel Image Control */
wim 0:a8090b59eb05 771        wr_reg(0x0060,0x2700);
wim 0:a8090b59eb05 772        wr_reg(0x0061,0x0001);
wim 0:a8090b59eb05 773        wr_reg(0x006A,0x0000);
wim 0:a8090b59eb05 774        wr_reg(0x0080,0x0000);
wim 0:a8090b59eb05 775        /* Partial Image Control */
wim 0:a8090b59eb05 776        wr_reg(0x0081,0x0000);
wim 0:a8090b59eb05 777        wr_reg(0x0082,0x0000);
wim 0:a8090b59eb05 778        wr_reg(0x0083,0x0000);
wim 0:a8090b59eb05 779        wr_reg(0x0084,0x0000);
wim 0:a8090b59eb05 780        wr_reg(0x0085,0x0000);
wim 0:a8090b59eb05 781        /* Panel Interface Control */
wim 0:a8090b59eb05 782        wr_reg(0x0090,0x0013);      /* frenqucy */   
wim 0:a8090b59eb05 783        wr_reg(0x0092,0x0300);
wim 0:a8090b59eb05 784        wr_reg(0x0093,0x0005);
wim 0:a8090b59eb05 785        wr_reg(0x0095,0x0000);
wim 0:a8090b59eb05 786        wr_reg(0x0097,0x0000);
wim 0:a8090b59eb05 787        wr_reg(0x0098,0x0000);
wim 0:a8090b59eb05 788
wim 0:a8090b59eb05 789        wr_reg(0x0001,0x0100);
wim 0:a8090b59eb05 790        wr_reg(0x0002,0x0700);
wim 0:a8090b59eb05 791        wr_reg(0x0003,0x1030);
wim 0:a8090b59eb05 792        wr_reg(0x0004,0x0000);
wim 0:a8090b59eb05 793        wr_reg(0x000C,0x0000);
wim 0:a8090b59eb05 794        wr_reg(0x000F,0x0000);
wim 0:a8090b59eb05 795        wr_reg(0x0020,0x0000);
wim 0:a8090b59eb05 796        wr_reg(0x0021,0x0000);
wim 0:a8090b59eb05 797        wr_reg(0x0007,0x0021);
wim 0:a8090b59eb05 798        delay(200);  /* delay 200 ms */      
wim 0:a8090b59eb05 799        wr_reg(0x0007,0x0061);
wim 0:a8090b59eb05 800        delay(200);  /* delay 200 ms */      
wim 0:a8090b59eb05 801        wr_reg(0x0007,0x0173);
wim 2:43ede88fb5a3 802 #endif
wim 0:a8090b59eb05 803 break;
wim 0:a8090b59eb05 804    } 
wim 0:a8090b59eb05 805
wim 0:a8090b59eb05 806  case SPFD5408B_ID: {
wim 2:43ede88fb5a3 807
wim 2:43ede88fb5a3 808 #ifndef DISABLE_SPFD5408B
wim 0:a8090b59eb05 809       wr_reg(0x0001,0x0100);     /* Driver Output Contral Register */
wim 0:a8090b59eb05 810       wr_reg(0x0002,0x0700);      /* LCD Driving Waveform Contral */
wim 0:a8090b59eb05 811       wr_reg(0x0003,0x1030);     /* Entry ModeÉèÖÃ */
wim 0:a8090b59eb05 812       
wim 0:a8090b59eb05 813       wr_reg(0x0004,0x0000);     /* Scalling Control register */
wim 0:a8090b59eb05 814       wr_reg(0x0008,0x0207);     /* Display Control 2 */
wim 0:a8090b59eb05 815       wr_reg(0x0009,0x0000);     /* Display Control 3 */
wim 0:a8090b59eb05 816       wr_reg(0x000A,0x0000);     /* Frame Cycle Control */
wim 0:a8090b59eb05 817       wr_reg(0x000C,0x0000);     /* External Display Interface Control 1 */
wim 0:a8090b59eb05 818       wr_reg(0x000D,0x0000);      /* Frame Maker Position */
wim 0:a8090b59eb05 819       wr_reg(0x000F,0x0000);     /* External Display Interface Control 2 */
wim 0:a8090b59eb05 820       delay(50);
wim 0:a8090b59eb05 821       wr_reg(0x0007,0x0101);     /* Display Control */
wim 0:a8090b59eb05 822       delay(50);
wim 0:a8090b59eb05 823       wr_reg(0x0010,0x16B0);      /* Power Control 1 */
wim 0:a8090b59eb05 824       wr_reg(0x0011,0x0001);      /* Power Control 2 */
wim 0:a8090b59eb05 825       wr_reg(0x0017,0x0001);      /* Power Control 3 */
wim 0:a8090b59eb05 826       wr_reg(0x0012,0x0138);      /* Power Control 4 */
wim 0:a8090b59eb05 827       wr_reg(0x0013,0x0800);      /* Power Control 5 */
wim 0:a8090b59eb05 828       wr_reg(0x0029,0x0009);     /* NVM read data 2 */
wim 0:a8090b59eb05 829       wr_reg(0x002a,0x0009);     /* NVM read data 3 */
wim 0:a8090b59eb05 830       wr_reg(0x00a4,0x0000); 
wim 0:a8090b59eb05 831       wr_reg(0x0050,0x0000);     /* ÉèÖòÙ×÷´°¿ÚµÄXÖῪʼÁÐ */
wim 0:a8090b59eb05 832       wr_reg(0x0051,0x00EF);     /* ÉèÖòÙ×÷´°¿ÚµÄXÖá½áÊøÁÐ */
wim 0:a8090b59eb05 833       wr_reg(0x0052,0x0000);     /* ÉèÖòÙ×÷´°¿ÚµÄYÖῪʼÐÐ */
wim 0:a8090b59eb05 834       wr_reg(0x0053,0x013F);     /* ÉèÖòÙ×÷´°¿ÚµÄYÖá½áÊøÐÐ */
wim 0:a8090b59eb05 835          
wim 0:a8090b59eb05 836       wr_reg(0x0060,0x2700);     /* Driver Output Control */
wim 0:a8090b59eb05 837                                 /* ÉèÖÃÆÁÄ»µÄµãÊýÒÔ¼°É¨ÃèµÄÆðʼÐÐ */
wim 0:a8090b59eb05 838       wr_reg(0x0061,0x0003);     /* Driver Output Control */
wim 0:a8090b59eb05 839       wr_reg(0x006A,0x0000);     /* Vertical Scroll Control */
wim 0:a8090b59eb05 840       
wim 0:a8090b59eb05 841       wr_reg(0x0080,0x0000);     /* Display Position ¨C Partial Display 1 */
wim 0:a8090b59eb05 842       wr_reg(0x0081,0x0000);     /* RAM Address Start ¨C Partial Display 1 */
wim 0:a8090b59eb05 843       wr_reg(0x0082,0x0000);     /* RAM address End - Partial Display 1 */
wim 0:a8090b59eb05 844       wr_reg(0x0083,0x0000);     /* Display Position ¨C Partial Display 2 */
wim 0:a8090b59eb05 845       wr_reg(0x0084,0x0000);     /* RAM Address Start ¨C Partial Display 2 */
wim 0:a8090b59eb05 846       wr_reg(0x0085,0x0000);     /* RAM address End ¨C Partail Display2 */
wim 0:a8090b59eb05 847       wr_reg(0x0090,0x0013);     /* Frame Cycle Control */
wim 0:a8090b59eb05 848       wr_reg(0x0092,0x0000);      /* Panel Interface Control 2 */
wim 0:a8090b59eb05 849       wr_reg(0x0093,0x0003);     /* Panel Interface control 3 */
wim 0:a8090b59eb05 850       wr_reg(0x0095,0x0110);     /* Frame Cycle Control */
wim 0:a8090b59eb05 851       wr_reg(0x0007,0x0173);
wim 2:43ede88fb5a3 852 #endif
wim 0:a8090b59eb05 853 break;
wim 0:a8090b59eb05 854    }
wim 0:a8090b59eb05 855
wim 0:a8090b59eb05 856   case LGDP4531_ID: {
wim 2:43ede88fb5a3 857
wim 2:43ede88fb5a3 858 #ifndef DISABLE_LGDP4531
wim 0:a8090b59eb05 859       /* Setup display */
wim 0:a8090b59eb05 860       wr_reg(0x00,0x0001);
wim 0:a8090b59eb05 861       wr_reg(0x10,0x0628);
wim 0:a8090b59eb05 862       wr_reg(0x12,0x0006);
wim 0:a8090b59eb05 863       wr_reg(0x13,0x0A32);
wim 0:a8090b59eb05 864       wr_reg(0x11,0x0040);
wim 0:a8090b59eb05 865       wr_reg(0x15,0x0050);
wim 0:a8090b59eb05 866       wr_reg(0x12,0x0016);
wim 0:a8090b59eb05 867       delay(50);
wim 0:a8090b59eb05 868       wr_reg(0x10,0x5660);
wim 0:a8090b59eb05 869       delay(50);
wim 0:a8090b59eb05 870       wr_reg(0x13,0x2A4E);
wim 0:a8090b59eb05 871       wr_reg(0x01,0x0100);
wim 0:a8090b59eb05 872       wr_reg(0x02,0x0300);   
wim 0:a8090b59eb05 873       wr_reg(0x03,0x1030);      
wim 0:a8090b59eb05 874       wr_reg(0x08,0x0202);
wim 0:a8090b59eb05 875       wr_reg(0x0A,0x0000);
wim 0:a8090b59eb05 876       wr_reg(0x30,0x0000);
wim 0:a8090b59eb05 877       wr_reg(0x31,0x0402);
wim 0:a8090b59eb05 878       wr_reg(0x32,0x0106);
wim 0:a8090b59eb05 879       wr_reg(0x33,0x0700);
wim 0:a8090b59eb05 880       wr_reg(0x34,0x0104);
wim 0:a8090b59eb05 881       wr_reg(0x35,0x0301);
wim 0:a8090b59eb05 882       wr_reg(0x36,0x0707);
wim 0:a8090b59eb05 883       wr_reg(0x37,0x0305);
wim 0:a8090b59eb05 884       wr_reg(0x38,0x0208);
wim 0:a8090b59eb05 885       wr_reg(0x39,0x0F0B);
wim 0:a8090b59eb05 886       delay(50);
wim 0:a8090b59eb05 887       wr_reg(0x41,0x0002);
wim 0:a8090b59eb05 888       wr_reg(0x60,0x2700);
wim 0:a8090b59eb05 889       wr_reg(0x61,0x0001);
wim 0:a8090b59eb05 890       wr_reg(0x90,0x0119);
wim 0:a8090b59eb05 891       wr_reg(0x92,0x010A);
wim 0:a8090b59eb05 892       wr_reg(0x93,0x0004);
wim 0:a8090b59eb05 893       wr_reg(0xA0,0x0100);
wim 0:a8090b59eb05 894       delay(50);
wim 0:a8090b59eb05 895       wr_reg(0x07,0x0133);
wim 0:a8090b59eb05 896       delay(50);
wim 0:a8090b59eb05 897       wr_reg(0xA0,0x0000);
wim 2:43ede88fb5a3 898 #endif
wim 0:a8090b59eb05 899 break;
wim 0:a8090b59eb05 900    }
wim 0:a8090b59eb05 901
wim 0:a8090b59eb05 902   case LGDP4535_ID: {   
wim 2:43ede88fb5a3 903
wim 2:43ede88fb5a3 904 #ifndef DISABLE_LGDP4535
wim 0:a8090b59eb05 905       wr_reg(0x15, 0x0030);     /* Set the internal vcore voltage */                                             
wim 0:a8090b59eb05 906       wr_reg(0x9A, 0x0010);     /* Start internal OSC */
wim 0:a8090b59eb05 907       wr_reg(0x11, 0x0020);        /* set SS and SM bit */
wim 0:a8090b59eb05 908       wr_reg(0x10, 0x3428);        /* set 1 line inversion */
wim 0:a8090b59eb05 909       wr_reg(0x12, 0x0002);        /* set GRAM write direction and BGR=1 */
wim 0:a8090b59eb05 910       wr_reg(0x13, 0x1038);        /* Resize register */
wim 0:a8090b59eb05 911       delay(40);
wim 0:a8090b59eb05 912       wr_reg(0x12, 0x0012);        /* set the back porch and front porch */
wim 0:a8090b59eb05 913       delay(40);
wim 0:a8090b59eb05 914       wr_reg(0x10, 0x3420);        /* set non-display area refresh cycle ISC[3:0] */
wim 0:a8090b59eb05 915       wr_reg(0x13, 0x3045);        /* FMARK function */
wim 0:a8090b59eb05 916       delay(70);
wim 0:a8090b59eb05 917       wr_reg(0x30, 0x0000);      /* RGB interface setting */
wim 0:a8090b59eb05 918       wr_reg(0x31, 0x0402);        /* Frame marker Position */
wim 0:a8090b59eb05 919       wr_reg(0x32, 0x0307);      /* RGB interface polarity */
wim 0:a8090b59eb05 920       wr_reg(0x33, 0x0304);      /* SAP, BT[3:0], AP, DSTB, SLP, STB */
wim 0:a8090b59eb05 921       wr_reg(0x34, 0x0004);      /* DC1[2:0], DC0[2:0], VC[2:0] */
wim 0:a8090b59eb05 922       wr_reg(0x35, 0x0401);      /* VREG1OUT voltage */
wim 0:a8090b59eb05 923       wr_reg(0x36, 0x0707);      /* VDV[4:0] for VCOM amplitude */
wim 0:a8090b59eb05 924       wr_reg(0x37, 0x0305);      /* SAP, BT[3:0], AP, DSTB, SLP, STB */
wim 0:a8090b59eb05 925       wr_reg(0x38, 0x0610);      /* DC1[2:0], DC0[2:0], VC[2:0] */
wim 0:a8090b59eb05 926       wr_reg(0x39, 0x0610);      /* VREG1OUT voltage */
wim 0:a8090b59eb05 927       wr_reg(0x01, 0x0100);      /* VDV[4:0] for VCOM amplitude */
wim 0:a8090b59eb05 928       wr_reg(0x02, 0x0300);      /* VCM[4:0] for VCOMH */
wim 0:a8090b59eb05 929       wr_reg(0x03, 0x1030);      /* GRAM horizontal Address */
wim 0:a8090b59eb05 930       wr_reg(0x08, 0x0808);      /* GRAM Vertical Address */
wim 0:a8090b59eb05 931       wr_reg(0x0A, 0x0008);      
wim 0:a8090b59eb05 932       wr_reg(0x60, 0x2700);        /* Gate Scan Line */
wim 0:a8090b59eb05 933       wr_reg(0x61, 0x0001);        /* NDL,VLE, REV */
wim 0:a8090b59eb05 934       wr_reg(0x90, 0x013E);
wim 0:a8090b59eb05 935       wr_reg(0x92, 0x0100);
wim 0:a8090b59eb05 936       wr_reg(0x93, 0x0100);
wim 0:a8090b59eb05 937       wr_reg(0xA0, 0x3000);
wim 0:a8090b59eb05 938       wr_reg(0xA3, 0x0010);
wim 0:a8090b59eb05 939       wr_reg(0x07, 0x0001);
wim 0:a8090b59eb05 940       wr_reg(0x07, 0x0021);
wim 0:a8090b59eb05 941       wr_reg(0x07, 0x0023);
wim 0:a8090b59eb05 942       wr_reg(0x07, 0x0033);
wim 0:a8090b59eb05 943       wr_reg(0x07, 0x0133);
wim 2:43ede88fb5a3 944 #endif
wim 0:a8090b59eb05 945 break;
wim 0:a8090b59eb05 946    }
wim 0:a8090b59eb05 947
wim 0:a8090b59eb05 948   case HX8347D_ID: {
wim 2:43ede88fb5a3 949
wim 2:43ede88fb5a3 950 #ifndef DISABLE_HX8347D
wim 0:a8090b59eb05 951       /* Start Initial Sequence */
wim 0:a8090b59eb05 952       wr_reg(0xEA,0x00);                         
wim 0:a8090b59eb05 953       wr_reg(0xEB,0x20);                                                     
wim 0:a8090b59eb05 954       wr_reg(0xEC,0x0C);                                                   
wim 0:a8090b59eb05 955       wr_reg(0xED,0xC4);                                                   
wim 0:a8090b59eb05 956       wr_reg(0xE8,0x40);                                                     
wim 0:a8090b59eb05 957       wr_reg(0xE9,0x38);                                                   
wim 0:a8090b59eb05 958       wr_reg(0xF1,0x01);                                                   
wim 0:a8090b59eb05 959       wr_reg(0xF2,0x10);                                                   
wim 0:a8090b59eb05 960       wr_reg(0x27,0xA3);                                                   
wim 0:a8090b59eb05 961       /* GAMMA SETTING */
wim 0:a8090b59eb05 962       wr_reg(0x40,0x01);                           
wim 0:a8090b59eb05 963       wr_reg(0x41,0x00);                                                   
wim 0:a8090b59eb05 964       wr_reg(0x42,0x00);                                                   
wim 0:a8090b59eb05 965       wr_reg(0x43,0x10);                                                   
wim 0:a8090b59eb05 966       wr_reg(0x44,0x0E);                                                   
wim 0:a8090b59eb05 967       wr_reg(0x45,0x24);                                                 
wim 0:a8090b59eb05 968       wr_reg(0x46,0x04);                                                 
wim 0:a8090b59eb05 969       wr_reg(0x47,0x50);                                                   
wim 0:a8090b59eb05 970       wr_reg(0x48,0x02);                                                   
wim 0:a8090b59eb05 971       wr_reg(0x49,0x13);                                                 
wim 0:a8090b59eb05 972       wr_reg(0x4A,0x19);                                                 
wim 0:a8090b59eb05 973       wr_reg(0x4B,0x19);                                                 
wim 0:a8090b59eb05 974       wr_reg(0x4C,0x16);                                                 
wim 0:a8090b59eb05 975       wr_reg(0x50,0x1B);                                                   
wim 0:a8090b59eb05 976       wr_reg(0x51,0x31);                                                   
wim 0:a8090b59eb05 977       wr_reg(0x52,0x2F);                                                     
wim 0:a8090b59eb05 978       wr_reg(0x53,0x3F);                                                   
wim 0:a8090b59eb05 979       wr_reg(0x54,0x3F);                                                     
wim 0:a8090b59eb05 980       wr_reg(0x55,0x3E);                                                     
wim 0:a8090b59eb05 981       wr_reg(0x56,0x2F);                                                   
wim 0:a8090b59eb05 982       wr_reg(0x57,0x7B);                                                     
wim 0:a8090b59eb05 983       wr_reg(0x58,0x09);                                                 
wim 0:a8090b59eb05 984       wr_reg(0x59,0x06);                                                 
wim 0:a8090b59eb05 985       wr_reg(0x5A,0x06);                                                   
wim 0:a8090b59eb05 986       wr_reg(0x5B,0x0C);                                                   
wim 0:a8090b59eb05 987       wr_reg(0x5C,0x1D);                                                   
wim 0:a8090b59eb05 988       wr_reg(0x5D,0xCC);                                                   
wim 0:a8090b59eb05 989       /* Power Voltage Setting */
wim 0:a8090b59eb05 990       wr_reg(0x1B,0x18);                                                   
wim 0:a8090b59eb05 991       wr_reg(0x1A,0x01);                                                   
wim 0:a8090b59eb05 992       wr_reg(0x24,0x15);                                                   
wim 0:a8090b59eb05 993       wr_reg(0x25,0x50);                                                   
wim 0:a8090b59eb05 994       wr_reg(0x23,0x8B);                                                   
wim 0:a8090b59eb05 995       wr_reg(0x18,0x36);                           
wim 0:a8090b59eb05 996       wr_reg(0x19,0x01);                                                   
wim 0:a8090b59eb05 997       wr_reg(0x01,0x00);                                                   
wim 0:a8090b59eb05 998       wr_reg(0x1F,0x88);                                                   
wim 0:a8090b59eb05 999       delay(50);
wim 0:a8090b59eb05 1000       wr_reg(0x1F,0x80);                                                 
wim 0:a8090b59eb05 1001       delay(50);
wim 0:a8090b59eb05 1002       wr_reg(0x1F,0x90);                                                   
wim 0:a8090b59eb05 1003       delay(50);
wim 0:a8090b59eb05 1004       wr_reg(0x1F,0xD0);                                                   
wim 0:a8090b59eb05 1005       delay(50);
wim 0:a8090b59eb05 1006       wr_reg(0x17,0x05);                                                   
wim 0:a8090b59eb05 1007       wr_reg(0x36,0x00);                                                   
wim 0:a8090b59eb05 1008       wr_reg(0x28,0x38);                                                 
wim 0:a8090b59eb05 1009       delay(50);
wim 2:43ede88fb5a3 1010       wr_reg(0x28,0x3C); 
wim 2:43ede88fb5a3 1011 #endif
wim 0:a8090b59eb05 1012 break;
wim 0:a8090b59eb05 1013    }
wim 0:a8090b59eb05 1014
wim 0:a8090b59eb05 1015   case ST7781_ID: {
wim 2:43ede88fb5a3 1016
wim 2:43ede88fb5a3 1017 #ifndef DISABLE_ST7781
wim 0:a8090b59eb05 1018       /* Start Initial Sequence */
wim 0:a8090b59eb05 1019       wr_reg(0x00FF,0x0001);
wim 0:a8090b59eb05 1020       wr_reg(0x00F3,0x0008);
wim 0:a8090b59eb05 1021       wr_reg(0x0001,0x0100);
wim 0:a8090b59eb05 1022       wr_reg(0x0002,0x0700);
wim 0:a8090b59eb05 1023       wr_reg(0x0003,0x1030); 
wim 0:a8090b59eb05 1024       wr_reg(0x0008,0x0302);
wim 0:a8090b59eb05 1025       wr_reg(0x0008,0x0207);
wim 0:a8090b59eb05 1026       wr_reg(0x0009,0x0000);
wim 0:a8090b59eb05 1027       wr_reg(0x000A,0x0000);
wim 0:a8090b59eb05 1028       wr_reg(0x0010,0x0000); 
wim 0:a8090b59eb05 1029       wr_reg(0x0011,0x0005);
wim 0:a8090b59eb05 1030       wr_reg(0x0012,0x0000);
wim 0:a8090b59eb05 1031       wr_reg(0x0013,0x0000);
wim 0:a8090b59eb05 1032       delay(50);
wim 0:a8090b59eb05 1033       wr_reg(0x0010,0x12B0);
wim 0:a8090b59eb05 1034       delay(50);
wim 0:a8090b59eb05 1035       wr_reg(0x0011,0x0007);
wim 0:a8090b59eb05 1036       delay(50);
wim 0:a8090b59eb05 1037       wr_reg(0x0012,0x008B);
wim 0:a8090b59eb05 1038       delay(50);   
wim 0:a8090b59eb05 1039       wr_reg(0x0013,0x1700);
wim 0:a8090b59eb05 1040       delay(50);   
wim 0:a8090b59eb05 1041       wr_reg(0x0029,0x0022);      
wim 0:a8090b59eb05 1042       wr_reg(0x0030,0x0000);
wim 0:a8090b59eb05 1043       wr_reg(0x0031,0x0707);
wim 0:a8090b59eb05 1044       wr_reg(0x0032,0x0505);
wim 0:a8090b59eb05 1045       wr_reg(0x0035,0x0107);
wim 0:a8090b59eb05 1046       wr_reg(0x0036,0x0008);
wim 0:a8090b59eb05 1047       wr_reg(0x0037,0x0000);
wim 0:a8090b59eb05 1048       wr_reg(0x0038,0x0202);
wim 0:a8090b59eb05 1049       wr_reg(0x0039,0x0106);
wim 0:a8090b59eb05 1050       wr_reg(0x003C,0x0202);
wim 0:a8090b59eb05 1051       wr_reg(0x003D,0x0408);
wim 0:a8090b59eb05 1052       delay(50);            
wim 0:a8090b59eb05 1053       wr_reg(0x0050,0x0000);      
wim 0:a8090b59eb05 1054       wr_reg(0x0051,0x00EF);      
wim 0:a8090b59eb05 1055       wr_reg(0x0052,0x0000);      
wim 0:a8090b59eb05 1056       wr_reg(0x0053,0x013F);      
wim 0:a8090b59eb05 1057       wr_reg(0x0060,0xA700);      
wim 0:a8090b59eb05 1058       wr_reg(0x0061,0x0001);
wim 0:a8090b59eb05 1059       wr_reg(0x0090,0x0033);            
wim 0:a8090b59eb05 1060       wr_reg(0x002B,0x000B);      
wim 0:a8090b59eb05 1061       wr_reg(0x0007,0x0133);
wim 2:43ede88fb5a3 1062 #endif
wim 0:a8090b59eb05 1063 break;
wim 0:a8090b59eb05 1064    }
wim 0:a8090b59eb05 1065 #endif
wim 0:a8090b59eb05 1066
wim 0:a8090b59eb05 1067 default: {
wim 0:a8090b59eb05 1068 /* special ID */
wim 2:43ede88fb5a3 1069 _driverCode = rd_reg(0x67);
wim 2:43ede88fb5a3 1070
wim 2:43ede88fb5a3 1071 if (_driverCode == HX8347A_ID) {
wim 2:43ede88fb5a3 1072
wim 2:43ede88fb5a3 1073 #ifndef DISABLE_HX8347A
wim 0:a8090b59eb05 1074 wr_reg(0x0042,0x0008);
wim 0:a8090b59eb05 1075 /* Gamma setting */
wim 0:a8090b59eb05 1076 wr_reg(0x0046,0x00B4);
wim 0:a8090b59eb05 1077 wr_reg(0x0047,0x0043);
wim 0:a8090b59eb05 1078 wr_reg(0x0048,0x0013);
wim 0:a8090b59eb05 1079 wr_reg(0x0049,0x0047);
wim 0:a8090b59eb05 1080 wr_reg(0x004A,0x0014);
wim 0:a8090b59eb05 1081 wr_reg(0x004B,0x0036);
wim 0:a8090b59eb05 1082 wr_reg(0x004C,0x0003);
wim 0:a8090b59eb05 1083 wr_reg(0x004D,0x0046);
wim 0:a8090b59eb05 1084 wr_reg(0x004E,0x0005);
wim 0:a8090b59eb05 1085 wr_reg(0x004F,0x0010);
wim 0:a8090b59eb05 1086 wr_reg(0x0050,0x0008);
wim 0:a8090b59eb05 1087 wr_reg(0x0051,0x000a);
wim 0:a8090b59eb05 1088 /* Window Setting */
wim 0:a8090b59eb05 1089 wr_reg(0x0002,0x0000);
wim 0:a8090b59eb05 1090 wr_reg(0x0003,0x0000);
wim 0:a8090b59eb05 1091 wr_reg(0x0004,0x0000);
wim 0:a8090b59eb05 1092 wr_reg(0x0005,0x00EF);
wim 0:a8090b59eb05 1093 wr_reg(0x0006,0x0000);
wim 0:a8090b59eb05 1094 wr_reg(0x0007,0x0000);
wim 0:a8090b59eb05 1095 wr_reg(0x0008,0x0001);
wim 0:a8090b59eb05 1096 wr_reg(0x0009,0x003F);
wim 0:a8090b59eb05 1097 delay(10);
wim 0:a8090b59eb05 1098 wr_reg(0x0001,0x0006);
wim 0:a8090b59eb05 1099 wr_reg(0x0016,0x00C8);
wim 0:a8090b59eb05 1100 wr_reg(0x0023,0x0095);
wim 0:a8090b59eb05 1101 wr_reg(0x0024,0x0095);
wim 0:a8090b59eb05 1102 wr_reg(0x0025,0x00FF);
wim 0:a8090b59eb05 1103 wr_reg(0x0027,0x0002);
wim 0:a8090b59eb05 1104 wr_reg(0x0028,0x0002);
wim 0:a8090b59eb05 1105 wr_reg(0x0029,0x0002);
wim 0:a8090b59eb05 1106 wr_reg(0x002A,0x0002);
wim 0:a8090b59eb05 1107 wr_reg(0x002C,0x0002);
wim 0:a8090b59eb05 1108 wr_reg(0x002D,0x0002);
wim 0:a8090b59eb05 1109 wr_reg(0x003A,0x0001);
wim 0:a8090b59eb05 1110 wr_reg(0x003B,0x0001);
wim 0:a8090b59eb05 1111 wr_reg(0x003C,0x00F0);
wim 0:a8090b59eb05 1112 wr_reg(0x003D,0x0000);
wim 0:a8090b59eb05 1113 delay(20);
wim 0:a8090b59eb05 1114 wr_reg(0x0035,0x0038);
wim 0:a8090b59eb05 1115 wr_reg(0x0036,0x0078);
wim 0:a8090b59eb05 1116 wr_reg(0x003E,0x0038);
wim 0:a8090b59eb05 1117 wr_reg(0x0040,0x000F);
wim 0:a8090b59eb05 1118 wr_reg(0x0041,0x00F0);
wim 0:a8090b59eb05 1119 wr_reg(0x0038,0x0000);
wim 0:a8090b59eb05 1120 /* Power Setting */
wim 0:a8090b59eb05 1121 wr_reg(0x0019,0x0049);
wim 0:a8090b59eb05 1122 wr_reg(0x0093,0x000A);
wim 0:a8090b59eb05 1123 delay(10);
wim 0:a8090b59eb05 1124 wr_reg(0x0020,0x0020);
wim 0:a8090b59eb05 1125 wr_reg(0x001D,0x0003);
wim 0:a8090b59eb05 1126 wr_reg(0x001E,0x0000);
wim 0:a8090b59eb05 1127 wr_reg(0x001F,0x0009);
wim 0:a8090b59eb05 1128 wr_reg(0x0044,0x0053);
wim 0:a8090b59eb05 1129 wr_reg(0x0045,0x0010);
wim 0:a8090b59eb05 1130 delay(10);
wim 0:a8090b59eb05 1131 wr_reg(0x001C,0x0004);
wim 0:a8090b59eb05 1132 delay(20);
wim 0:a8090b59eb05 1133 wr_reg(0x0043,0x0080);
wim 0:a8090b59eb05 1134 delay(5);
wim 0:a8090b59eb05 1135 wr_reg(0x001B,0x000a);
wim 0:a8090b59eb05 1136 delay(40);
wim 0:a8090b59eb05 1137 wr_reg(0x001B,0x0012);
wim 0:a8090b59eb05 1138 delay(40);
wim 0:a8090b59eb05 1139 /* Display On Setting */
wim 0:a8090b59eb05 1140 wr_reg(0x0090,0x007F);
wim 0:a8090b59eb05 1141 wr_reg(0x0026,0x0004);
wim 0:a8090b59eb05 1142 delay(40);
wim 0:a8090b59eb05 1143 wr_reg(0x0026,0x0024);
wim 0:a8090b59eb05 1144 wr_reg(0x0026,0x002C);
wim 0:a8090b59eb05 1145 delay(40);
wim 0:a8090b59eb05 1146 wr_reg(0x0070,0x0008);
wim 0:a8090b59eb05 1147 wr_reg(0x0026,0x003C);
wim 0:a8090b59eb05 1148 wr_reg(0x0057,0x0002);
wim 0:a8090b59eb05 1149 wr_reg(0x0055,0x0000);
wim 0:a8090b59eb05 1150 wr_reg(0x0057,0x0000);
wim 2:43ede88fb5a3 1151 #endif
wim 0:a8090b59eb05 1152 } // if
wim 2:43ede88fb5a3 1153
wim 0:a8090b59eb05 1154 break;
wim 0:a8090b59eb05 1155 } // default case
wim 0:a8090b59eb05 1156
wim 0:a8090b59eb05 1157 } // end switch
wim 0:a8090b59eb05 1158
wim 2:43ede88fb5a3 1159 _textColor = Black;
wim 2:43ede88fb5a3 1160 _backColor = White;
wim 0:a8090b59eb05 1161 }
wim 0:a8090b59eb05 1162
wim 0:a8090b59eb05 1163
wim 2:43ede88fb5a3 1164 int GLCD::getDisplayXSize()
wim 2:43ede88fb5a3 1165 {
wim 2:43ede88fb5a3 1166 return HEIGHT;
wim 2:43ede88fb5a3 1167 }
wim 0:a8090b59eb05 1168
wim 2:43ede88fb5a3 1169 int GLCD::getDisplayYSize()
wim 2:43ede88fb5a3 1170 {
wim 2:43ede88fb5a3 1171 return WIDTH;
wim 2:43ede88fb5a3 1172 }
wim 0:a8090b59eb05 1173
wim 0:a8090b59eb05 1174
wim 0:a8090b59eb05 1175 /*******************************************************************************
wim 0:a8090b59eb05 1176 * Get LCD Controller ID *
wim 0:a8090b59eb05 1177 * Parameter: *
wim 0:a8090b59eb05 1178 * Return: short Controller ID *
wim 0:a8090b59eb05 1179 *******************************************************************************/
wim 2:43ede88fb5a3 1180 unsigned short GLCD::getDriverCode () {
wim 0:a8090b59eb05 1181
wim 2:43ede88fb5a3 1182 return (_driverCode);
wim 0:a8090b59eb05 1183 }
wim 0:a8090b59eb05 1184
wim 0:a8090b59eb05 1185
wim 0:a8090b59eb05 1186 /*******************************************************************************
wim 0:a8090b59eb05 1187 * Set draw window region to whole screen *
wim 0:a8090b59eb05 1188 * Parameter: *
wim 0:a8090b59eb05 1189 * Return: *
wim 0:a8090b59eb05 1190 *******************************************************************************/
wim 0:a8090b59eb05 1191
wim 2:43ede88fb5a3 1192 void GLCD::WindowMax (void) {
wim 0:a8090b59eb05 1193
wim 2:43ede88fb5a3 1194 if(_driverCode==SSD1289_ID)
wim 0:a8090b59eb05 1195 {
wim 0:a8090b59eb05 1196 wr_reg(0x44, 0); /* Horizontal GRAM Start Address */
wim 0:a8090b59eb05 1197 wr_reg(0x44, 0 |((HEIGHT-1)<<8)); /* Horizontal GRAM End Address (-1) */
wim 0:a8090b59eb05 1198 wr_reg(0x45, 0); /* Vertical GRAM Start Address */
wim 0:a8090b59eb05 1199 wr_reg(0x46, WIDTH-1); /* Vertical GRAM End Address (-1) */
wim 0:a8090b59eb05 1200 }
wim 0:a8090b59eb05 1201 else
wim 0:a8090b59eb05 1202 {
wim 0:a8090b59eb05 1203 wr_reg(0x50, 0); /* Horizontal GRAM Start Address */
wim 0:a8090b59eb05 1204 wr_reg(0x51, HEIGHT-1); /* Horizontal GRAM End Address (-1) */
wim 0:a8090b59eb05 1205 wr_reg(0x52, 0); /* Vertical GRAM Start Address */
wim 0:a8090b59eb05 1206 wr_reg(0x53, WIDTH-1); /* Vertical GRAM End Address (-1) */
wim 0:a8090b59eb05 1207 }
wim 0:a8090b59eb05 1208 }
wim 0:a8090b59eb05 1209
wim 0:a8090b59eb05 1210 /*******************************************************************************
wim 0:a8090b59eb05 1211 * Set draw window region *
wim 0:a8090b59eb05 1212 * Parameter: *
wim 0:a8090b59eb05 1213 * Return: *
wim 0:a8090b59eb05 1214 *******************************************************************************/
wim 0:a8090b59eb05 1215
wim 2:43ede88fb5a3 1216 void GLCD::Window (int x1, int y1, int x2, int y2) {
wim 0:a8090b59eb05 1217
wim 2:43ede88fb5a3 1218 if(_driverCode==SSD1289_ID)
wim 0:a8090b59eb05 1219 {
wim 0:a8090b59eb05 1220 // wr_reg(0x44, x1); /* Horizontal GRAM Start Address */
wim 0:a8090b59eb05 1221 // wr_reg(0x44, 0 | (x2<<8)); /* Horizontal GRAM End Address */
wim 0:a8090b59eb05 1222
wim 2:43ede88fb5a3 1223 //Note x,y flipped for landscape
wim 0:a8090b59eb05 1224 wr_reg(0x44, ((y2 & 0xFF) <<8) | (y1 & 0xFF)); /* Horizontal GRAM End Address | Start Address */
wim 0:a8090b59eb05 1225 wr_reg(0x45, x1); /* Vertical GRAM Start Address */
wim 0:a8090b59eb05 1226 wr_reg(0x46, x2); /* Vertical GRAM End Address */
wim 0:a8090b59eb05 1227
wim 0:a8090b59eb05 1228 wr_reg(0x4e, y1); // Init x,y to start of window
wim 0:a8090b59eb05 1229 wr_reg(0x4f, x1);
wim 0:a8090b59eb05 1230 }
wim 0:a8090b59eb05 1231 else
wim 0:a8090b59eb05 1232 {
wim 0:a8090b59eb05 1233 wr_reg(0x50, x1); /* Horizontal GRAM Start Address */
wim 0:a8090b59eb05 1234 wr_reg(0x51, x2); /* Horizontal GRAM End Address */
wim 0:a8090b59eb05 1235 wr_reg(0x52, y1); /* Vertical GRAM Start Address */
wim 0:a8090b59eb05 1236 wr_reg(0x53, y2); /* Vertical GRAM End Address */
wim 0:a8090b59eb05 1237 }
wim 0:a8090b59eb05 1238 }
wim 0:a8090b59eb05 1239
wim 0:a8090b59eb05 1240 /*******************************************************************************
wim 0:a8090b59eb05 1241 * Draw a pixel in foreground color *
wim 0:a8090b59eb05 1242 * Parameter: x: horizontal position *
wim 0:a8090b59eb05 1243 * y: vertical position *
wim 0:a8090b59eb05 1244 * Return: *
wim 0:a8090b59eb05 1245 *******************************************************************************/
wim 0:a8090b59eb05 1246
wim 2:43ede88fb5a3 1247 void GLCD::drawPixel (unsigned int x, unsigned int y) {
wim 0:a8090b59eb05 1248 // Set Cursor
wim 2:43ede88fb5a3 1249 if(_driverCode==SSD1289_ID)
wim 2:43ede88fb5a3 1250 {
wim 2:43ede88fb5a3 1251 wr_reg(0x4e, y);
wim 2:43ede88fb5a3 1252 // wr_reg(0x4f, WIDTH-1-x);
wim 2:43ede88fb5a3 1253 wr_reg(0x4f, x);
wim 2:43ede88fb5a3 1254 }
wim 2:43ede88fb5a3 1255 else
wim 2:43ede88fb5a3 1256 {
wim 2:43ede88fb5a3 1257 wr_reg(0x20, y);
wim 2:43ede88fb5a3 1258 // wr_reg(0x21, WIDTH-1-x);
wim 2:43ede88fb5a3 1259 wr_reg(0x21, x);
wim 2:43ede88fb5a3 1260 }
wim 2:43ede88fb5a3 1261 LCD_CS(0)
wim 2:43ede88fb5a3 1262 wr_cmd(0x22);
wim 2:43ede88fb5a3 1263 wr_dat(_textColor);
wim 2:43ede88fb5a3 1264 LCD_CS(1)
wim 2:43ede88fb5a3 1265 }
wim 2:43ede88fb5a3 1266
wim 2:43ede88fb5a3 1267 void GLCD::drawPixel (unsigned int x, unsigned int y, unsigned short color)
wim 2:43ede88fb5a3 1268 {
wim 2:43ede88fb5a3 1269 // Set Cursor
wim 2:43ede88fb5a3 1270 if(_driverCode==SSD1289_ID)
wim 0:a8090b59eb05 1271 {
wim 0:a8090b59eb05 1272 wr_reg(0x4e, y);
wim 0:a8090b59eb05 1273 wr_reg(0x4f, WIDTH-1-x);
wim 0:a8090b59eb05 1274 }
wim 0:a8090b59eb05 1275 else
wim 0:a8090b59eb05 1276 {
wim 0:a8090b59eb05 1277 wr_reg(0x20, y);
wim 0:a8090b59eb05 1278 wr_reg(0x21, WIDTH-1-x);
wim 0:a8090b59eb05 1279 }
wim 0:a8090b59eb05 1280 LCD_CS(0)
wim 0:a8090b59eb05 1281 wr_cmd(0x22);
wim 2:43ede88fb5a3 1282 wr_dat(color);
wim 0:a8090b59eb05 1283 LCD_CS(1)
wim 0:a8090b59eb05 1284 }
wim 0:a8090b59eb05 1285
wim 0:a8090b59eb05 1286
wim 2:43ede88fb5a3 1287 void GLCD::drawPixel (unsigned int x, unsigned int y, uint8_t r, uint8_t g, uint8_t b)
wim 2:43ede88fb5a3 1288 {
wim 2:43ede88fb5a3 1289 // unsigned short color = ((r & 0xF8)<<8) | ((g & 0xFC)<<3) | ((b & 0xF8)>>3); // rrrrrggggggbbbbb
wim 2:43ede88fb5a3 1290 unsigned short color = RGB24toRGB16(r,g,b);
wim 2:43ede88fb5a3 1291
wim 2:43ede88fb5a3 1292
wim 2:43ede88fb5a3 1293 // Set Cursor
wim 2:43ede88fb5a3 1294 if(_driverCode==SSD1289_ID)
wim 2:43ede88fb5a3 1295 {
wim 2:43ede88fb5a3 1296 wr_reg(0x4e, y);
wim 2:43ede88fb5a3 1297 // wr_reg(0x4f, WIDTH-1-x);
wim 2:43ede88fb5a3 1298 wr_reg(0x4f, x);
wim 2:43ede88fb5a3 1299 }
wim 2:43ede88fb5a3 1300 else
wim 2:43ede88fb5a3 1301 {
wim 2:43ede88fb5a3 1302 wr_reg(0x20, y);
wim 2:43ede88fb5a3 1303 // wr_reg(0x21, WIDTH-1-x);
wim 2:43ede88fb5a3 1304 wr_reg(0x21, x);
wim 2:43ede88fb5a3 1305 }
wim 2:43ede88fb5a3 1306 LCD_CS(0)
wim 2:43ede88fb5a3 1307 wr_cmd(0x22);
wim 2:43ede88fb5a3 1308 wr_dat(color);
wim 2:43ede88fb5a3 1309 LCD_CS(1)
wim 2:43ede88fb5a3 1310 }
wim 2:43ede88fb5a3 1311
wim 2:43ede88fb5a3 1312
wim 2:43ede88fb5a3 1313
wim 2:43ede88fb5a3 1314
wim 0:a8090b59eb05 1315 /*******************************************************************************
wim 0:a8090b59eb05 1316 * Set foreground color *
wim 0:a8090b59eb05 1317 * Parameter: color: foreground color *
wim 0:a8090b59eb05 1318 * Return: *
wim 0:a8090b59eb05 1319 *******************************************************************************/
wim 0:a8090b59eb05 1320
wim 2:43ede88fb5a3 1321 void GLCD::setColor (unsigned short color) {
wim 2:43ede88fb5a3 1322
wim 2:43ede88fb5a3 1323 _textColor = color;
wim 2:43ede88fb5a3 1324 }
wim 0:a8090b59eb05 1325
wim 2:43ede88fb5a3 1326 void GLCD::setColor (uint8_t r, uint8_t g, uint8_t b) {
wim 2:43ede88fb5a3 1327 unsigned short color = RGB24toRGB16(r,g,b);
wim 2:43ede88fb5a3 1328
wim 2:43ede88fb5a3 1329 _textColor = color;
wim 0:a8090b59eb05 1330 }
wim 0:a8090b59eb05 1331
wim 0:a8090b59eb05 1332
wim 2:43ede88fb5a3 1333
wim 2:43ede88fb5a3 1334
wim 2:43ede88fb5a3 1335
wim 0:a8090b59eb05 1336 /*******************************************************************************
wim 0:a8090b59eb05 1337 * Set background color *
wim 0:a8090b59eb05 1338 * Parameter: color: background color *
wim 0:a8090b59eb05 1339 * Return: *
wim 0:a8090b59eb05 1340 *******************************************************************************/
wim 0:a8090b59eb05 1341
wim 2:43ede88fb5a3 1342 void GLCD::setBackColor (unsigned short color) {
wim 2:43ede88fb5a3 1343
wim 2:43ede88fb5a3 1344 _backColor = color;
wim 2:43ede88fb5a3 1345 }
wim 0:a8090b59eb05 1346
wim 2:43ede88fb5a3 1347
wim 2:43ede88fb5a3 1348 void GLCD::setBackColor (uint8_t r, uint8_t g, uint8_t b) {
wim 2:43ede88fb5a3 1349 unsigned short color = RGB24toRGB16(r,g,b);
wim 2:43ede88fb5a3 1350
wim 2:43ede88fb5a3 1351 _backColor = color;
wim 0:a8090b59eb05 1352 }
wim 0:a8090b59eb05 1353
wim 0:a8090b59eb05 1354
wim 0:a8090b59eb05 1355 /*******************************************************************************
wim 0:a8090b59eb05 1356 * Clear display *
wim 0:a8090b59eb05 1357 * Parameter: color: display clearing color *
wim 0:a8090b59eb05 1358 * Return: *
wim 0:a8090b59eb05 1359 *******************************************************************************/
wim 0:a8090b59eb05 1360
wim 2:43ede88fb5a3 1361 void GLCD::clearScreen (unsigned short color) {
wim 0:a8090b59eb05 1362 unsigned int i;
wim 0:a8090b59eb05 1363
wim 2:43ede88fb5a3 1364 WindowMax();
wim 0:a8090b59eb05 1365
wim 0:a8090b59eb05 1366 // Set Cursor
wim 2:43ede88fb5a3 1367 if (_driverCode==SSD1289_ID)
wim 0:a8090b59eb05 1368 {
wim 0:a8090b59eb05 1369 wr_reg(0x4e, 0);
wim 0:a8090b59eb05 1370 wr_reg(0x4f, 0);
wim 0:a8090b59eb05 1371 }
wim 0:a8090b59eb05 1372 else
wim 0:a8090b59eb05 1373 {
wim 0:a8090b59eb05 1374 wr_reg(0x20, 0);
wim 0:a8090b59eb05 1375 wr_reg(0x21, 0);
wim 0:a8090b59eb05 1376 }
wim 0:a8090b59eb05 1377 LCD_CS(0)
wim 0:a8090b59eb05 1378 wr_cmd(0x22);
wim 0:a8090b59eb05 1379 wr_dat_start();
wim 0:a8090b59eb05 1380 for(i = 0; i < (WIDTH*HEIGHT); i++)
wim 0:a8090b59eb05 1381 wr_dat_only(color);
wim 0:a8090b59eb05 1382 wr_dat_stop();
wim 0:a8090b59eb05 1383 }
wim 0:a8090b59eb05 1384
wim 0:a8090b59eb05 1385
wim 0:a8090b59eb05 1386 /*******************************************************************************
wim 0:a8090b59eb05 1387 * Draw character on given position *
wim 0:a8090b59eb05 1388 * Parameter: x: horizontal position *
wim 0:a8090b59eb05 1389 * y: vertical position *
wim 0:a8090b59eb05 1390 * c: pointer to character bitmap *
wim 0:a8090b59eb05 1391 * Return: *
wim 0:a8090b59eb05 1392 *******************************************************************************/
wim 0:a8090b59eb05 1393
wim 2:43ede88fb5a3 1394 void GLCD::DrawChar (unsigned int x, unsigned int y, unsigned short *c) {
wim 0:a8090b59eb05 1395 int idx = 0, i, j;
wim 0:a8090b59eb05 1396
wim 1:ea0f7b1c5daf 1397 //wh x = WIDTH-x-CHAR_W;
wim 0:a8090b59eb05 1398
wim 2:43ede88fb5a3 1399 if(_driverCode==SSD1289_ID)
wim 0:a8090b59eb05 1400 {
wim 1:ea0f7b1c5daf 1401 //wh wr_reg(0x44, y); /* Horizontal GRAM Start Address */
wim 0:a8090b59eb05 1402 wr_reg(0x44, y |((y+CHAR_H-1)<<8)); /* Horizontal GRAM End Address (-1) */
wim 0:a8090b59eb05 1403 wr_reg(0x45, x); /* Vertical GRAM Start Address */
wim 0:a8090b59eb05 1404 wr_reg(0x46, x+CHAR_W-1); /* Vertical GRAM End Address (-1) */
wim 0:a8090b59eb05 1405
wim 0:a8090b59eb05 1406 wr_reg(0x4e, y);
wim 0:a8090b59eb05 1407 wr_reg(0x4f, x);
wim 0:a8090b59eb05 1408 }
wim 0:a8090b59eb05 1409 else
wim 0:a8090b59eb05 1410 {
wim 0:a8090b59eb05 1411 wr_reg(0x50, y); /* Horizontal GRAM Start Address */
wim 0:a8090b59eb05 1412 wr_reg(0x51, y+CHAR_H-1); /* Horizontal GRAM End Address (-1) */
wim 0:a8090b59eb05 1413 wr_reg(0x52, x); /* Vertical GRAM Start Address */
wim 0:a8090b59eb05 1414 wr_reg(0x53, x+CHAR_W-1); /* Vertical GRAM End Address (-1) */
wim 0:a8090b59eb05 1415
wim 0:a8090b59eb05 1416 wr_reg(0x20, y);
wim 0:a8090b59eb05 1417 wr_reg(0x21, x);
wim 0:a8090b59eb05 1418 }
wim 0:a8090b59eb05 1419 LCD_CS(0)
wim 0:a8090b59eb05 1420 wr_cmd(0x22);
wim 0:a8090b59eb05 1421 wr_dat_start();
wim 0:a8090b59eb05 1422 for (j = 0; j < CHAR_H; j++) {
wim 1:ea0f7b1c5daf 1423 //wh for (i = CHAR_W-1; i >= 0; i--) {
wim 1:ea0f7b1c5daf 1424 for (i = 0; i < CHAR_W; i++) {
wim 0:a8090b59eb05 1425 if((c[idx] & (1 << i)) == 0x00) {
wim 2:43ede88fb5a3 1426 wr_dat_only(_backColor);
wim 0:a8090b59eb05 1427 } else {
wim 2:43ede88fb5a3 1428 wr_dat_only(_textColor);
wim 0:a8090b59eb05 1429 }
wim 0:a8090b59eb05 1430 }
wim 0:a8090b59eb05 1431 c++;
wim 0:a8090b59eb05 1432 }
wim 0:a8090b59eb05 1433 wr_dat_stop();
wim 0:a8090b59eb05 1434 }
wim 0:a8090b59eb05 1435
wim 0:a8090b59eb05 1436
wim 0:a8090b59eb05 1437 /*******************************************************************************
wim 0:a8090b59eb05 1438 * Display character on given line *
wim 0:a8090b59eb05 1439 * Parameter: ln: line number *
wim 0:a8090b59eb05 1440 * col: column number *
wim 0:a8090b59eb05 1441 * c: ascii character *
wim 0:a8090b59eb05 1442 * Return: *
wim 0:a8090b59eb05 1443 *******************************************************************************/
wim 0:a8090b59eb05 1444
wim 2:43ede88fb5a3 1445 void GLCD::DisplayChar (unsigned int ln, unsigned int col, unsigned char c) {
wim 0:a8090b59eb05 1446
wim 0:a8090b59eb05 1447 c -= 32;
wim 1:ea0f7b1c5daf 1448 // x = column, y = line
wim 2:43ede88fb5a3 1449 DrawChar(col * CHAR_W, ln * CHAR_H, (unsigned short *)&Font_24x16[c * CHAR_H]);
wim 1:ea0f7b1c5daf 1450
wim 0:a8090b59eb05 1451 }
wim 0:a8090b59eb05 1452
wim 0:a8090b59eb05 1453
wim 0:a8090b59eb05 1454 /*******************************************************************************
wim 0:a8090b59eb05 1455 * Disply string on given line *
wim 0:a8090b59eb05 1456 * Parameter: ln: line number *
wim 0:a8090b59eb05 1457 * col: column number *
wim 0:a8090b59eb05 1458 * s: pointer to string *
wim 0:a8090b59eb05 1459 * Return: *
wim 0:a8090b59eb05 1460 *******************************************************************************/
wim 0:a8090b59eb05 1461
wim 2:43ede88fb5a3 1462 void GLCD::DisplayString (unsigned int ln, unsigned int col, unsigned char *s) {
wim 0:a8090b59eb05 1463
wim 2:43ede88fb5a3 1464 WindowMax();
wim 0:a8090b59eb05 1465 while (*s) {
wim 2:43ede88fb5a3 1466 DisplayChar(ln, col++, *s++);
wim 0:a8090b59eb05 1467 }
wim 0:a8090b59eb05 1468 }
wim 0:a8090b59eb05 1469
wim 0:a8090b59eb05 1470
wim 0:a8090b59eb05 1471 /*******************************************************************************
wim 0:a8090b59eb05 1472 * Clear given line *
wim 0:a8090b59eb05 1473 * Parameter: ln: line number *
wim 0:a8090b59eb05 1474 * Return: *
wim 0:a8090b59eb05 1475 *******************************************************************************/
wim 0:a8090b59eb05 1476
wim 2:43ede88fb5a3 1477 void GLCD::ClearLn (unsigned int ln) {
wim 0:a8090b59eb05 1478
wim 2:43ede88fb5a3 1479 WindowMax();
wim 2:43ede88fb5a3 1480 DisplayString(ln, 0, (unsigned char*) " ");
wim 0:a8090b59eb05 1481 }
wim 0:a8090b59eb05 1482
wim 0:a8090b59eb05 1483 //SSD1289
wim 0:a8090b59eb05 1484 //static void lcd_SetCursor(unsigned int x,unsigned int y)
wim 0:a8090b59eb05 1485 //{
wim 0:a8090b59eb05 1486 // write_reg(0x004e,x); /* 0-239 */
wim 0:a8090b59eb05 1487 // write_reg(0x004f,y); /* 0-319 */
wim 0:a8090b59eb05 1488 //}
wim 0:a8090b59eb05 1489
wim 0:a8090b59eb05 1490
wim 2:43ede88fb5a3 1491 void GLCD::drawHLine(int x, int y, int l)
wim 0:a8090b59eb05 1492 {
wim 0:a8090b59eb05 1493 // char ch, cl;
wim 0:a8090b59eb05 1494
wim 0:a8090b59eb05 1495 // ch=((fcolorr&248)|fcolorg>>5);
wim 0:a8090b59eb05 1496 // cl=((fcolorg&28)<<3|fcolorb>>3);
wim 0:a8090b59eb05 1497
wim 0:a8090b59eb05 1498 // cbi(P_CS, B_CS);
wim 0:a8090b59eb05 1499
wim 2:43ede88fb5a3 1500 Window (x, y, x+l, y);
wim 0:a8090b59eb05 1501
wim 0:a8090b59eb05 1502 // for (int i=0; i<l+1; i++)
wim 0:a8090b59eb05 1503 // {
wim 0:a8090b59eb05 1504 // LCD_Write_DATA(ch, cl);
wim 0:a8090b59eb05 1505 // }
wim 0:a8090b59eb05 1506
wim 0:a8090b59eb05 1507 LCD_CS(0)
wim 0:a8090b59eb05 1508 wr_cmd(0x22);
wim 0:a8090b59eb05 1509
wim 0:a8090b59eb05 1510 wr_dat_start();
wim 0:a8090b59eb05 1511 for (int i=0; i<l; i++)
wim 2:43ede88fb5a3 1512 wr_dat_only(_textColor);
wim 0:a8090b59eb05 1513 wr_dat_stop();
wim 0:a8090b59eb05 1514
wim 0:a8090b59eb05 1515 // sbi(P_CS, B_CS);
wim 0:a8090b59eb05 1516 // clrXY();
wim 2:43ede88fb5a3 1517 WindowMax();
wim 0:a8090b59eb05 1518 }
wim 0:a8090b59eb05 1519
wim 2:43ede88fb5a3 1520 void GLCD::drawVLine(int x, int y, int l)
wim 0:a8090b59eb05 1521 {
wim 0:a8090b59eb05 1522 // char ch, cl;
wim 0:a8090b59eb05 1523
wim 0:a8090b59eb05 1524 // ch=((fcolorr&248)|fcolorg>>5);
wim 0:a8090b59eb05 1525 // cl=((fcolorg&28)<<3|fcolorb>>3);
wim 0:a8090b59eb05 1526
wim 0:a8090b59eb05 1527 // cbi(P_CS, B_CS);
wim 2:43ede88fb5a3 1528 Window(x, y, x, y+l);
wim 0:a8090b59eb05 1529 // for (int i=0; i<l; i++)
wim 0:a8090b59eb05 1530 // {
wim 2:43ede88fb5a3 1531 // GLCD::wr_dat(ch, cl);
wim 0:a8090b59eb05 1532 // }
wim 0:a8090b59eb05 1533 LCD_CS(0)
wim 0:a8090b59eb05 1534 wr_cmd(0x22);
wim 0:a8090b59eb05 1535
wim 0:a8090b59eb05 1536 wr_dat_start();
wim 0:a8090b59eb05 1537 for (int i=0; i<l; i++)
wim 2:43ede88fb5a3 1538 wr_dat_only(_textColor);
wim 0:a8090b59eb05 1539 wr_dat_stop();
wim 0:a8090b59eb05 1540
wim 0:a8090b59eb05 1541
wim 0:a8090b59eb05 1542 // sbi(P_CS, B_CS);
wim 0:a8090b59eb05 1543 // clrXY();
wim 2:43ede88fb5a3 1544 WindowMax();
wim 0:a8090b59eb05 1545 }
wim 0:a8090b59eb05 1546
wim 0:a8090b59eb05 1547
wim 2:43ede88fb5a3 1548 void GLCD::drawRect(int x1, int y1, int x2, int y2)
wim 0:a8090b59eb05 1549 {
wim 2:43ede88fb5a3 1550 //int tmp;
wim 0:a8090b59eb05 1551
wim 0:a8090b59eb05 1552 if (x1>x2)
wim 0:a8090b59eb05 1553 {
wim 0:a8090b59eb05 1554 swap(int, x1, x2);
wim 0:a8090b59eb05 1555 }
wim 0:a8090b59eb05 1556 if (y1>y2)
wim 0:a8090b59eb05 1557 {
wim 0:a8090b59eb05 1558 swap(int, y1, y2);
wim 0:a8090b59eb05 1559 }
wim 0:a8090b59eb05 1560
wim 2:43ede88fb5a3 1561 drawHLine(x1, y1, x2-x1);
wim 2:43ede88fb5a3 1562 drawHLine(x1, y2, x2-x1);
wim 2:43ede88fb5a3 1563 drawVLine(x1, y1, y2-y1);
wim 2:43ede88fb5a3 1564 drawVLine(x2, y1, y2-y1);
wim 2:43ede88fb5a3 1565 }
wim 2:43ede88fb5a3 1566
wim 2:43ede88fb5a3 1567
wim 2:43ede88fb5a3 1568 /// Replace by faster Bresenham int
wim 2:43ede88fb5a3 1569 void GLCD::drawLine(int x1, int y1, int x2, int y2)
wim 2:43ede88fb5a3 1570 {
wim 2:43ede88fb5a3 1571 // int tmp;
wim 2:43ede88fb5a3 1572 double delta, tx, ty;
wim 2:43ede88fb5a3 1573 // double m, b, dx, dy;
wim 2:43ede88fb5a3 1574 // char ch, cl;
wim 2:43ede88fb5a3 1575
wim 2:43ede88fb5a3 1576 if (((x2-x1)<0))
wim 2:43ede88fb5a3 1577 {
wim 2:43ede88fb5a3 1578 swap(int, x1, x2);
wim 2:43ede88fb5a3 1579 swap(int, y1, y2);
wim 2:43ede88fb5a3 1580 }
wim 2:43ede88fb5a3 1581 if (((y2-y1)<0))
wim 2:43ede88fb5a3 1582 {
wim 2:43ede88fb5a3 1583 swap(int, x1, x2);
wim 2:43ede88fb5a3 1584 swap(int, y1, y2);
wim 2:43ede88fb5a3 1585 }
wim 2:43ede88fb5a3 1586
wim 2:43ede88fb5a3 1587 if (y1==y2)
wim 2:43ede88fb5a3 1588 {
wim 2:43ede88fb5a3 1589 if (x1>x2)
wim 2:43ede88fb5a3 1590 {
wim 2:43ede88fb5a3 1591 swap(int, x1, x2);
wim 2:43ede88fb5a3 1592 }
wim 2:43ede88fb5a3 1593 drawHLine(x1, y1, x2-x1);
wim 2:43ede88fb5a3 1594 }
wim 2:43ede88fb5a3 1595 else if (x1==x2)
wim 2:43ede88fb5a3 1596 {
wim 2:43ede88fb5a3 1597 if (y1>y2)
wim 2:43ede88fb5a3 1598 {
wim 2:43ede88fb5a3 1599 swap(int, y1, y2);
wim 2:43ede88fb5a3 1600 }
wim 2:43ede88fb5a3 1601 drawVLine(x1, y1, y2-y1);
wim 2:43ede88fb5a3 1602 }
wim 2:43ede88fb5a3 1603 else if (abs(x2-x1)>abs(y2-y1))
wim 2:43ede88fb5a3 1604 {
wim 2:43ede88fb5a3 1605 delta=(double(y2-y1)/double(x2-x1));
wim 2:43ede88fb5a3 1606 ty=double(y1);
wim 2:43ede88fb5a3 1607 if (x1>x2)
wim 2:43ede88fb5a3 1608 {
wim 2:43ede88fb5a3 1609 for (int i=x1; i>=x2; i--)
wim 2:43ede88fb5a3 1610 {
wim 2:43ede88fb5a3 1611 drawPixel(i, int(ty+0.5));
wim 2:43ede88fb5a3 1612 ty=ty-delta;
wim 2:43ede88fb5a3 1613 }
wim 2:43ede88fb5a3 1614 }
wim 2:43ede88fb5a3 1615 else
wim 2:43ede88fb5a3 1616 {
wim 2:43ede88fb5a3 1617 for (int i=x1; i<=x2; i++)
wim 2:43ede88fb5a3 1618 {
wim 2:43ede88fb5a3 1619 drawPixel(i, int(ty+0.5));
wim 2:43ede88fb5a3 1620 ty=ty+delta;
wim 2:43ede88fb5a3 1621 }
wim 2:43ede88fb5a3 1622 }
wim 2:43ede88fb5a3 1623
wim 2:43ede88fb5a3 1624 }
wim 2:43ede88fb5a3 1625 else
wim 2:43ede88fb5a3 1626 {
wim 2:43ede88fb5a3 1627 delta=(float(x2-x1)/float(y2-y1));
wim 2:43ede88fb5a3 1628 tx=float(x1);
wim 2:43ede88fb5a3 1629 if (y1>y2)
wim 2:43ede88fb5a3 1630 {
wim 2:43ede88fb5a3 1631 for (int i=y2+1; i>y1; i--)
wim 2:43ede88fb5a3 1632 {
wim 2:43ede88fb5a3 1633 drawPixel(int(tx+0.5), i);
wim 2:43ede88fb5a3 1634 tx=tx+delta;
wim 2:43ede88fb5a3 1635 }
wim 2:43ede88fb5a3 1636 }
wim 2:43ede88fb5a3 1637 else
wim 2:43ede88fb5a3 1638 {
wim 2:43ede88fb5a3 1639 for (int i=y1; i<y2+1; i++)
wim 2:43ede88fb5a3 1640 {
wim 2:43ede88fb5a3 1641 drawPixel(int(tx+0.5), i);
wim 2:43ede88fb5a3 1642 tx=tx+delta;
wim 2:43ede88fb5a3 1643 }
wim 2:43ede88fb5a3 1644 }
wim 2:43ede88fb5a3 1645 }
wim 2:43ede88fb5a3 1646
wim 2:43ede88fb5a3 1647 WindowMax();
wim 2:43ede88fb5a3 1648 }
wim 2:43ede88fb5a3 1649
wim 2:43ede88fb5a3 1650 void GLCD::drawRoundRect(int x1, int y1, int x2, int y2)
wim 2:43ede88fb5a3 1651 {
wim 2:43ede88fb5a3 1652 // int tmp;
wim 2:43ede88fb5a3 1653
wim 2:43ede88fb5a3 1654 if (x1>x2)
wim 2:43ede88fb5a3 1655 {
wim 2:43ede88fb5a3 1656 swap(int, x1, x2);
wim 2:43ede88fb5a3 1657 }
wim 2:43ede88fb5a3 1658 if (y1>y2)
wim 2:43ede88fb5a3 1659 {
wim 2:43ede88fb5a3 1660 swap(int, y1, y2);
wim 2:43ede88fb5a3 1661 }
wim 2:43ede88fb5a3 1662 if ((x2-x1)>4 && (y2-y1)>4)
wim 2:43ede88fb5a3 1663 {
wim 2:43ede88fb5a3 1664 drawPixel(x1+1,y1+1);
wim 2:43ede88fb5a3 1665 drawPixel(x2-1,y1+1);
wim 2:43ede88fb5a3 1666 drawPixel(x1+1,y2-1);
wim 2:43ede88fb5a3 1667 drawPixel(x2-1,y2-1);
wim 2:43ede88fb5a3 1668 drawHLine(x1+2, y1, x2-x1-4);
wim 2:43ede88fb5a3 1669 drawHLine(x1+2, y2, x2-x1-4);
wim 2:43ede88fb5a3 1670 drawVLine(x1, y1+2, y2-y1-4);
wim 2:43ede88fb5a3 1671 drawVLine(x2, y1+2, y2-y1-4);
wim 2:43ede88fb5a3 1672 }
wim 0:a8090b59eb05 1673 }
wim 0:a8090b59eb05 1674
wim 2:43ede88fb5a3 1675 void GLCD::fillRect(int x1, int y1, int x2, int y2)
wim 2:43ede88fb5a3 1676 {
wim 2:43ede88fb5a3 1677 // int tmp;
wim 2:43ede88fb5a3 1678
wim 2:43ede88fb5a3 1679 if (x1>x2)
wim 2:43ede88fb5a3 1680 {
wim 2:43ede88fb5a3 1681 swap(int, x1, x2);
wim 2:43ede88fb5a3 1682 }
wim 2:43ede88fb5a3 1683 if (y1>y2)
wim 2:43ede88fb5a3 1684 {
wim 2:43ede88fb5a3 1685 swap(int, y1, y2);
wim 2:43ede88fb5a3 1686 }
wim 2:43ede88fb5a3 1687
wim 2:43ede88fb5a3 1688 // if (orient==PORTRAIT)
wim 2:43ede88fb5a3 1689 // {
wim 2:43ede88fb5a3 1690 // for (int i=0; i<((y2-y1)/2)+1; i++)
wim 2:43ede88fb5a3 1691 // {
wim 2:43ede88fb5a3 1692 // drawHLine(x1, y1+i, x2-x1);
wim 2:43ede88fb5a3 1693 // drawHLine(x1, y2-i, x2-x1);
wim 2:43ede88fb5a3 1694 // }
wim 2:43ede88fb5a3 1695 // }
wim 2:43ede88fb5a3 1696 // else
wim 2:43ede88fb5a3 1697 // {
wim 2:43ede88fb5a3 1698 for (int i=0; i<((x2-x1)/2)+1; i++)
wim 2:43ede88fb5a3 1699 {
wim 2:43ede88fb5a3 1700 drawVLine(x1+i, y1, y2-y1);
wim 2:43ede88fb5a3 1701 drawVLine(x2-i, y1, y2-y1);
wim 2:43ede88fb5a3 1702 }
wim 2:43ede88fb5a3 1703 // }
wim 2:43ede88fb5a3 1704 }
wim 2:43ede88fb5a3 1705
wim 2:43ede88fb5a3 1706 void GLCD::fillRoundRect(int x1, int y1, int x2, int y2)
wim 2:43ede88fb5a3 1707 {
wim 2:43ede88fb5a3 1708 // int tmp;
wim 2:43ede88fb5a3 1709
wim 2:43ede88fb5a3 1710 if (x1>x2)
wim 2:43ede88fb5a3 1711 {
wim 2:43ede88fb5a3 1712 swap(int, x1, x2);
wim 2:43ede88fb5a3 1713 }
wim 2:43ede88fb5a3 1714 if (y1>y2)
wim 2:43ede88fb5a3 1715 {
wim 2:43ede88fb5a3 1716 swap(int, y1, y2);
wim 2:43ede88fb5a3 1717 }
wim 2:43ede88fb5a3 1718
wim 2:43ede88fb5a3 1719 if ((x2-x1)>4 && (y2-y1)>4)
wim 2:43ede88fb5a3 1720 {
wim 2:43ede88fb5a3 1721 for (int i=0; i<((y2-y1)/2)+1; i++)
wim 2:43ede88fb5a3 1722 {
wim 2:43ede88fb5a3 1723 switch(i)
wim 2:43ede88fb5a3 1724 {
wim 2:43ede88fb5a3 1725 case 0:
wim 2:43ede88fb5a3 1726 drawHLine(x1+2, y1+i, x2-x1-4);
wim 2:43ede88fb5a3 1727 drawHLine(x1+2, y2-i, x2-x1-4);
wim 2:43ede88fb5a3 1728 break;
wim 2:43ede88fb5a3 1729 case 1:
wim 2:43ede88fb5a3 1730 drawHLine(x1+1, y1+i, x2-x1-2);
wim 2:43ede88fb5a3 1731 drawHLine(x1+1, y2-i, x2-x1-2);
wim 2:43ede88fb5a3 1732 break;
wim 2:43ede88fb5a3 1733 default:
wim 2:43ede88fb5a3 1734 drawHLine(x1, y1+i, x2-x1);
wim 2:43ede88fb5a3 1735 drawHLine(x1, y2-i, x2-x1);
wim 2:43ede88fb5a3 1736 }
wim 2:43ede88fb5a3 1737 }
wim 2:43ede88fb5a3 1738 }
wim 2:43ede88fb5a3 1739 }
wim 2:43ede88fb5a3 1740
wim 2:43ede88fb5a3 1741 void GLCD::drawCircle(int x, int y, int radius)
wim 2:43ede88fb5a3 1742 {
wim 2:43ede88fb5a3 1743 int f = 1 - radius;
wim 2:43ede88fb5a3 1744 int ddF_x = 1;
wim 2:43ede88fb5a3 1745 int ddF_y = -2 * radius;
wim 2:43ede88fb5a3 1746 int x1 = 0;
wim 2:43ede88fb5a3 1747 int y1 = radius;
wim 2:43ede88fb5a3 1748 // char ch, cl;
wim 2:43ede88fb5a3 1749
wim 2:43ede88fb5a3 1750 // ch=((fcolorr&248)|fcolorg>>5);
wim 2:43ede88fb5a3 1751 // cl=((fcolorg&28)<<3|fcolorb>>3);
wim 2:43ede88fb5a3 1752
wim 2:43ede88fb5a3 1753 // cbi(P_CS, B_CS);
wim 2:43ede88fb5a3 1754 drawPixel(x, y + radius);
wim 2:43ede88fb5a3 1755
wim 2:43ede88fb5a3 1756 drawPixel(x, y - radius);
wim 2:43ede88fb5a3 1757
wim 2:43ede88fb5a3 1758 drawPixel(x + radius, y);
wim 2:43ede88fb5a3 1759
wim 2:43ede88fb5a3 1760 drawPixel(x - radius, y);
wim 2:43ede88fb5a3 1761
wim 2:43ede88fb5a3 1762
wim 2:43ede88fb5a3 1763 while(x1 < y1)
wim 2:43ede88fb5a3 1764 {
wim 2:43ede88fb5a3 1765 if(f >= 0)
wim 2:43ede88fb5a3 1766 {
wim 2:43ede88fb5a3 1767 y1--;
wim 2:43ede88fb5a3 1768 ddF_y += 2;
wim 2:43ede88fb5a3 1769 f += ddF_y;
wim 2:43ede88fb5a3 1770 }
wim 2:43ede88fb5a3 1771 x1++;
wim 2:43ede88fb5a3 1772 ddF_x += 2;
wim 2:43ede88fb5a3 1773 f += ddF_x;
wim 2:43ede88fb5a3 1774 drawPixel(x + x1, y + y1);
wim 2:43ede88fb5a3 1775
wim 2:43ede88fb5a3 1776 drawPixel(x - x1, y + y1);
wim 2:43ede88fb5a3 1777
wim 2:43ede88fb5a3 1778 drawPixel(x + x1, y - y1);
wim 2:43ede88fb5a3 1779
wim 2:43ede88fb5a3 1780 drawPixel(x - x1, y - y1);
wim 2:43ede88fb5a3 1781
wim 2:43ede88fb5a3 1782 drawPixel(x + y1, y + x1);
wim 2:43ede88fb5a3 1783
wim 2:43ede88fb5a3 1784 drawPixel(x - y1, y + x1);
wim 2:43ede88fb5a3 1785
wim 2:43ede88fb5a3 1786 drawPixel(x + y1, y - x1);
wim 2:43ede88fb5a3 1787
wim 2:43ede88fb5a3 1788 drawPixel(x - y1, y - x1);
wim 2:43ede88fb5a3 1789
wim 2:43ede88fb5a3 1790 }
wim 2:43ede88fb5a3 1791 // sbi(P_CS, B_CS);
wim 2:43ede88fb5a3 1792 // clrXY();
wim 2:43ede88fb5a3 1793 }
wim 2:43ede88fb5a3 1794
wim 2:43ede88fb5a3 1795 void GLCD::fillCircle(int x, int y, int radius)
wim 2:43ede88fb5a3 1796 {
wim 2:43ede88fb5a3 1797 // cbi(P_CS, B_CS);
wim 2:43ede88fb5a3 1798 for(int y1=-radius; y1<=radius; y1++)
wim 2:43ede88fb5a3 1799 for(int x1=-radius; x1<=radius; x1++)
wim 2:43ede88fb5a3 1800 if(x1*x1+y1*y1 <= radius*radius)
wim 2:43ede88fb5a3 1801 {
wim 2:43ede88fb5a3 1802 drawPixel(x+x1, y+y1);
wim 2:43ede88fb5a3 1803 }
wim 2:43ede88fb5a3 1804 // sbi(P_CS, B_CS);
wim 2:43ede88fb5a3 1805 // clrXY();
wim 2:43ede88fb5a3 1806 }
wim 2:43ede88fb5a3 1807
wim 2:43ede88fb5a3 1808
wim 2:43ede88fb5a3 1809
wim 2:43ede88fb5a3 1810
wim 2:43ede88fb5a3 1811 void GLCD::lcdOff()
wim 2:43ede88fb5a3 1812 {
wim 2:43ede88fb5a3 1813 }
wim 2:43ede88fb5a3 1814
wim 2:43ede88fb5a3 1815 void GLCD::lcdOn()
wim 2:43ede88fb5a3 1816 {
wim 2:43ede88fb5a3 1817 }
wim 2:43ede88fb5a3 1818
wim 2:43ede88fb5a3 1819 void GLCD::setContrast(char c)
wim 2:43ede88fb5a3 1820 {
wim 2:43ede88fb5a3 1821 }
wim 2:43ede88fb5a3 1822
wim 2:43ede88fb5a3 1823
wim 0:a8090b59eb05 1824
wim 0:a8090b59eb05 1825
wim 0:a8090b59eb05 1826
wim 0:a8090b59eb05 1827 /*******************************************************************************
wim 0:a8090b59eb05 1828 * Draw bargraph *
wim 0:a8090b59eb05 1829 * Parameter: x: horizontal position *
wim 0:a8090b59eb05 1830 * y: vertical position *
wim 0:a8090b59eb05 1831 * w: maximum width of bargraph (in pixels) *
wim 0:a8090b59eb05 1832 * val: value of active bargraph (in 1/1024) *
wim 0:a8090b59eb05 1833 * Return: *
wim 0:a8090b59eb05 1834 *******************************************************************************/
wim 0:a8090b59eb05 1835
wim 2:43ede88fb5a3 1836 void GLCD::Bargraph (unsigned int x, unsigned int y, unsigned int w, unsigned int h, unsigned int val) {
wim 0:a8090b59eb05 1837 int i,j;
wim 0:a8090b59eb05 1838
wim 0:a8090b59eb05 1839 x = WIDTH-x-w;
wim 2:43ede88fb5a3 1840 if(_driverCode==SSD1289_ID)
wim 0:a8090b59eb05 1841 {
wim 0:a8090b59eb05 1842 wr_reg(0x44, y); /* Horizontal GRAM Start Address */
wim 0:a8090b59eb05 1843 wr_reg(0x44, y |((y+CHAR_H-1)<<8)); /* Horizontal GRAM End Address (-1) */
wim 0:a8090b59eb05 1844 wr_reg(0x45, x); /* Vertical GRAM Start Address */
wim 0:a8090b59eb05 1845 wr_reg(0x46, x+w-1); /* Vertical GRAM End Address (-1) */
wim 0:a8090b59eb05 1846 }
wim 0:a8090b59eb05 1847 else
wim 0:a8090b59eb05 1848 {
wim 0:a8090b59eb05 1849 wr_reg(0x50, y); /* Horizontal GRAM Start Address */
wim 0:a8090b59eb05 1850 wr_reg(0x51, y+CHAR_H-1); /* Horizontal GRAM End Address (-1) */
wim 0:a8090b59eb05 1851 wr_reg(0x52, x); /* Vertical GRAM Start Address */
wim 0:a8090b59eb05 1852 wr_reg(0x53, x+w-1); /* Vertical GRAM End Address (-1) */
wim 0:a8090b59eb05 1853 }
wim 0:a8090b59eb05 1854
wim 0:a8090b59eb05 1855 val = (val * w) >> 10; /* Scale value for 24x12 characters */
wim 2:43ede88fb5a3 1856 if(_driverCode==SSD1289_ID)
wim 0:a8090b59eb05 1857 {
wim 0:a8090b59eb05 1858 wr_reg(0x4e, y);
wim 0:a8090b59eb05 1859 wr_reg(0x4f, x);
wim 0:a8090b59eb05 1860 }
wim 0:a8090b59eb05 1861 else
wim 0:a8090b59eb05 1862 {
wim 0:a8090b59eb05 1863 wr_reg(0x20, y);
wim 0:a8090b59eb05 1864 wr_reg(0x21, x);
wim 0:a8090b59eb05 1865 }
wim 0:a8090b59eb05 1866 LCD_CS(0)
wim 0:a8090b59eb05 1867 wr_cmd(0x22);
wim 0:a8090b59eb05 1868 wr_dat_start();
wim 0:a8090b59eb05 1869 for (i = 0; i < h; i++) {
wim 0:a8090b59eb05 1870 for (j = w-1; j >= 0; j--) {
wim 0:a8090b59eb05 1871 if(j >= val) {
wim 2:43ede88fb5a3 1872 wr_dat_only(_backColor);
wim 0:a8090b59eb05 1873 } else {
wim 2:43ede88fb5a3 1874 wr_dat_only(_textColor);
wim 0:a8090b59eb05 1875 }
wim 0:a8090b59eb05 1876 }
wim 0:a8090b59eb05 1877 }
wim 0:a8090b59eb05 1878 wr_dat_stop();
wim 0:a8090b59eb05 1879 }
wim 0:a8090b59eb05 1880
wim 0:a8090b59eb05 1881
wim 0:a8090b59eb05 1882 /*******************************************************************************
wim 0:a8090b59eb05 1883 * Display graphical bitmap image at position x horizontally and y vertically *
wim 0:a8090b59eb05 1884 * (This function is optimized for 16 bits per pixel format, it has to be *
wim 0:a8090b59eb05 1885 * adapted for any other bits per pixel format) *
wim 0:a8090b59eb05 1886 * Parameter: x: horizontal position *
wim 0:a8090b59eb05 1887 * y: vertical position *
wim 0:a8090b59eb05 1888 * w: width of bitmap *
wim 0:a8090b59eb05 1889 * h: height of bitmap *
wim 0:a8090b59eb05 1890 * bitmap: address at which the bitmap data resides *
wim 0:a8090b59eb05 1891 * Return: *
wim 0:a8090b59eb05 1892 *******************************************************************************/
wim 0:a8090b59eb05 1893
wim 2:43ede88fb5a3 1894 void GLCD::Bitmap (unsigned int x, unsigned int y, unsigned int w, unsigned int h, unsigned char *bitmap) {
wim 0:a8090b59eb05 1895 unsigned int i, j;
wim 0:a8090b59eb05 1896 unsigned short *bitmap_ptr = (unsigned short *)bitmap;
wim 0:a8090b59eb05 1897
wim 0:a8090b59eb05 1898 x = WIDTH-x-w;
wim 2:43ede88fb5a3 1899 if(_driverCode==SSD1289_ID)
wim 0:a8090b59eb05 1900 {
wim 0:a8090b59eb05 1901 wr_reg(0x44, y); /* Horizontal GRAM Start Address */
wim 0:a8090b59eb05 1902 wr_reg(0x44, y |((y+h-1)<<8)); /* Horizontal GRAM End Address (-1) */
wim 0:a8090b59eb05 1903 wr_reg(0x45, x); /* Vertical GRAM Start Address */
wim 0:a8090b59eb05 1904 wr_reg(0x46, x+w-1); /* Vertical GRAM End Address (-1) */
wim 0:a8090b59eb05 1905 wr_reg(0x4e, y);
wim 0:a8090b59eb05 1906 wr_reg(0x4f, x);
wim 0:a8090b59eb05 1907 }
wim 0:a8090b59eb05 1908 else
wim 0:a8090b59eb05 1909 {
wim 0:a8090b59eb05 1910 wr_reg(0x50, y); /* Horizontal GRAM Start Address */
wim 0:a8090b59eb05 1911 wr_reg(0x51, y+h-1); /* Horizontal GRAM End Address (-1) */
wim 0:a8090b59eb05 1912 wr_reg(0x52, x); /* Vertical GRAM Start Address */
wim 0:a8090b59eb05 1913 wr_reg(0x53, x+w-1); /* Vertical GRAM End Address (-1) */
wim 0:a8090b59eb05 1914 wr_reg(0x20, y);
wim 0:a8090b59eb05 1915 wr_reg(0x21, x);
wim 0:a8090b59eb05 1916 }
wim 0:a8090b59eb05 1917 LCD_CS(0)
wim 0:a8090b59eb05 1918 wr_cmd(0x22);
wim 0:a8090b59eb05 1919 wr_dat_start();
wim 0:a8090b59eb05 1920 for (j = 0; j < h; j++) {
wim 0:a8090b59eb05 1921 bitmap_ptr += w-1;
wim 0:a8090b59eb05 1922 for (i = 0; i < w; i++) {
wim 0:a8090b59eb05 1923 wr_dat_only(*bitmap_ptr--);
wim 0:a8090b59eb05 1924 }
wim 0:a8090b59eb05 1925 bitmap_ptr += w+1;
wim 0:a8090b59eb05 1926 }
wim 0:a8090b59eb05 1927 wr_dat_stop();
wim 0:a8090b59eb05 1928 }
wim 0:a8090b59eb05 1929
wim 0:a8090b59eb05 1930
wim 0:a8090b59eb05 1931 /*******************************************************************************
wim 0:a8090b59eb05 1932 * Display graphical bmp file image at position x horizontally and y vertically *
wim 0:a8090b59eb05 1933 * (This function is optimized for 16 bits per pixel format, it has to be *
wim 0:a8090b59eb05 1934 * adapted for any other bits per pixel format) *
wim 0:a8090b59eb05 1935 * Parameter: x: horizontal position *
wim 0:a8090b59eb05 1936 * y: vertical position *
wim 0:a8090b59eb05 1937 * w: width of bitmap *
wim 0:a8090b59eb05 1938 * h: height of bitmap *
wim 0:a8090b59eb05 1939 * bmp: address at which the bmp data resides *
wim 0:a8090b59eb05 1940 * Return: *
wim 0:a8090b59eb05 1941 *******************************************************************************/
wim 0:a8090b59eb05 1942
wim 2:43ede88fb5a3 1943 void GLCD::Bmp (unsigned int x, unsigned int y, unsigned int w, unsigned int h, unsigned char *bmp) {
wim 0:a8090b59eb05 1944 unsigned int i, j;
wim 0:a8090b59eb05 1945 unsigned short *bitmap_ptr = (unsigned short *)bmp;
wim 0:a8090b59eb05 1946
wim 1:ea0f7b1c5daf 1947 //wh x = WIDTH-x-w;
wim 0:a8090b59eb05 1948
wim 2:43ede88fb5a3 1949 if(_driverCode==SSD1289_ID)
wim 0:a8090b59eb05 1950 {
wim 1:ea0f7b1c5daf 1951 //wh wr_reg(0x44, y); /* Horizontal GRAM Start Address */
wim 0:a8090b59eb05 1952 wr_reg(0x44, y |((y+h-1)<<8)); /* Horizontal GRAM End Address (-1) */
wim 0:a8090b59eb05 1953 wr_reg(0x45, x); /* Vertical GRAM Start Address */
wim 0:a8090b59eb05 1954 wr_reg(0x46, x+w-1); /* Vertical GRAM End Address (-1) */
wim 0:a8090b59eb05 1955 wr_reg(0x4e, y);
wim 0:a8090b59eb05 1956 wr_reg(0x4f, x);
wim 0:a8090b59eb05 1957 }
wim 0:a8090b59eb05 1958 else
wim 0:a8090b59eb05 1959 {
wim 0:a8090b59eb05 1960 wr_reg(0x50, y); /* Horizontal GRAM Start Address */
wim 0:a8090b59eb05 1961 wr_reg(0x51, y+h-1); /* Horizontal GRAM End Address (-1) */
wim 0:a8090b59eb05 1962 wr_reg(0x52, x); /* Vertical GRAM Start Address */
wim 0:a8090b59eb05 1963 wr_reg(0x53, x+w-1); /* Vertical GRAM End Address (-1) */
wim 0:a8090b59eb05 1964 wr_reg(0x20, y);
wim 0:a8090b59eb05 1965 wr_reg(0x21, x);
wim 0:a8090b59eb05 1966 }
wim 0:a8090b59eb05 1967 LCD_CS(0)
wim 0:a8090b59eb05 1968 wr_cmd(0x22);
wim 0:a8090b59eb05 1969 wr_dat_start();
wim 1:ea0f7b1c5daf 1970 // bitmap_ptr += (h*w)-1;
wim 1:ea0f7b1c5daf 1971 // for (j = 0; j < h; j++) {
wim 1:ea0f7b1c5daf 1972 // for (i = 0; i < w; i++) {
wim 1:ea0f7b1c5daf 1973 // wr_dat_only(*bitmap_ptr--);
wim 1:ea0f7b1c5daf 1974 // }
wim 1:ea0f7b1c5daf 1975 // }
wim 1:ea0f7b1c5daf 1976
wim 1:ea0f7b1c5daf 1977
wim 0:a8090b59eb05 1978 for (j = 0; j < h; j++) {
wim 0:a8090b59eb05 1979 for (i = 0; i < w; i++) {
wim 1:ea0f7b1c5daf 1980 wr_dat_only(*bitmap_ptr++);
wim 0:a8090b59eb05 1981 }
wim 0:a8090b59eb05 1982 }
wim 1:ea0f7b1c5daf 1983
wim 1:ea0f7b1c5daf 1984
wim 0:a8090b59eb05 1985 wr_dat_stop();
wim 0:a8090b59eb05 1986 }
wim 0:a8090b59eb05 1987
wim 0:a8090b59eb05 1988 /******************************************************************************/