ILI9341_SPI

Dependencies:   fonts

Dependents:   ov7670_dma_nucleo_f4 NUCLEO-F446RE_testDCMI

Committer:
tmnt
Date:
Sun Nov 20 11:30:18 2016 +0000
Revision:
3:e56304370ff3
Parent:
0:2d4605aef62f
i

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tmnt 0:2d4605aef62f 1
tmnt 0:2d4605aef62f 2 #include <mbed.h>
tmnt 0:2d4605aef62f 3 #include "ILI9341.h"
tmnt 3:e56304370ff3 4 #include "font6x12.h"
tmnt 0:2d4605aef62f 5
tmnt 0:2d4605aef62f 6 ili9341_spi::ili9341_spi(SPI& _spi, PinName _cs,PinName _dc,PinName _rs) : spi(_spi), cs(_cs),dc(_dc),rs(_rs) {}
tmnt 0:2d4605aef62f 7
tmnt 0:2d4605aef62f 8
tmnt 0:2d4605aef62f 9 void ili9341_spi::window (unsigned int x, unsigned int y, unsigned int w, unsigned int h)
tmnt 0:2d4605aef62f 10 {
tmnt 0:2d4605aef62f 11 wr_cmd(0x2A);
tmnt 0:2d4605aef62f 12 spi.write(x >> 8);
tmnt 0:2d4605aef62f 13 spi.write(x);
tmnt 0:2d4605aef62f 14 spi.write((x+w-1) >> 8);
tmnt 0:2d4605aef62f 15 spi.write(x+w-1);
tmnt 0:2d4605aef62f 16
tmnt 0:2d4605aef62f 17 cs = 1;
tmnt 0:2d4605aef62f 18 wr_cmd(0x2B);
tmnt 0:2d4605aef62f 19 spi.write(y >> 8);
tmnt 0:2d4605aef62f 20 spi.write(y);
tmnt 0:2d4605aef62f 21 spi.write((y+h-1) >> 8);
tmnt 0:2d4605aef62f 22 spi.write(y+h-1);
tmnt 0:2d4605aef62f 23 cs = 1;
tmnt 0:2d4605aef62f 24 }
tmnt 0:2d4605aef62f 25 void ili9341_spi::wr_cmd(unsigned char cmd)
tmnt 0:2d4605aef62f 26 {
tmnt 0:2d4605aef62f 27 dc = 0;
tmnt 0:2d4605aef62f 28 cs = 0;
tmnt 0:2d4605aef62f 29 spi.write(cmd); // mbed lib
tmnt 0:2d4605aef62f 30 dc = 1;
tmnt 0:2d4605aef62f 31 }
tmnt 0:2d4605aef62f 32 void ili9341_spi::wr_dat(unsigned char dat)
tmnt 0:2d4605aef62f 33 {
tmnt 0:2d4605aef62f 34 spi.write(dat); // mbed lib
tmnt 0:2d4605aef62f 35 }
tmnt 0:2d4605aef62f 36 char ili9341_spi::rd_byte(unsigned char cmd)
tmnt 0:2d4605aef62f 37 {
tmnt 0:2d4605aef62f 38 char r;
tmnt 0:2d4605aef62f 39 dc = 0;
tmnt 0:2d4605aef62f 40 cs = 0;
tmnt 0:2d4605aef62f 41 spi.write(cmd); // mbed lib
tmnt 0:2d4605aef62f 42 cs = 1;
tmnt 0:2d4605aef62f 43 r = spi.write(0xff);
tmnt 0:2d4605aef62f 44 cs = 1;
tmnt 0:2d4605aef62f 45 return(r);
tmnt 0:2d4605aef62f 46 }
tmnt 0:2d4605aef62f 47 int ili9341_spi::rd_32(unsigned char cmd)
tmnt 0:2d4605aef62f 48 {
tmnt 0:2d4605aef62f 49 int d;
tmnt 0:2d4605aef62f 50 char r;
tmnt 0:2d4605aef62f 51 dc = 0;
tmnt 0:2d4605aef62f 52 cs = 0;
tmnt 0:2d4605aef62f 53 d = cmd;
tmnt 0:2d4605aef62f 54 d = d << 1;
tmnt 0:2d4605aef62f 55 spi.format(9,3); // we have to add a dummy clock cycle
tmnt 0:2d4605aef62f 56 spi.write(d);
tmnt 0:2d4605aef62f 57 spi.format(8,3);
tmnt 0:2d4605aef62f 58 dc = 1;
tmnt 0:2d4605aef62f 59 r = spi.write(0xff);
tmnt 0:2d4605aef62f 60 d = r;
tmnt 0:2d4605aef62f 61 r = spi.write(0xff);
tmnt 0:2d4605aef62f 62 d = (d << 8) | r;
tmnt 0:2d4605aef62f 63 r = spi.write(0xff);
tmnt 0:2d4605aef62f 64 d = (d << 8) | r;
tmnt 0:2d4605aef62f 65 r = spi.write(0xff);
tmnt 0:2d4605aef62f 66 d = (d << 8) | r;
tmnt 0:2d4605aef62f 67 cs = 1;
tmnt 0:2d4605aef62f 68 return(d);
tmnt 0:2d4605aef62f 69 }
tmnt 0:2d4605aef62f 70 int ili9341_spi:: Read_ID(void){
tmnt 0:2d4605aef62f 71 int r;
tmnt 0:2d4605aef62f 72 r = rd_byte(0x0A);
tmnt 0:2d4605aef62f 73 r = rd_byte(0x0A);
tmnt 0:2d4605aef62f 74 r = rd_byte(0x0A);
tmnt 0:2d4605aef62f 75 r = rd_byte(0x0A);
tmnt 0:2d4605aef62f 76 return(r);
tmnt 0:2d4605aef62f 77 }
tmnt 0:2d4605aef62f 78
tmnt 0:2d4605aef62f 79 void ili9341_spi::tft_reset()
tmnt 0:2d4605aef62f 80 {
tmnt 0:2d4605aef62f 81 cs = 1; // cs high
tmnt 0:2d4605aef62f 82 dc = 1; // dc high
tmnt 0:2d4605aef62f 83 rs = 0; // display reset
tmnt 0:2d4605aef62f 84
tmnt 0:2d4605aef62f 85 wait_us(50);
tmnt 0:2d4605aef62f 86 rs = 1; // end hardware reset
tmnt 0:2d4605aef62f 87 wait_ms(5);
tmnt 0:2d4605aef62f 88
tmnt 0:2d4605aef62f 89 wr_cmd(0x01); // SW reset
tmnt 0:2d4605aef62f 90 wait_ms(5);
tmnt 0:2d4605aef62f 91 wr_cmd(0x28); // display off
tmnt 0:2d4605aef62f 92
tmnt 0:2d4605aef62f 93 /* Start Initial Sequence ----------------------------------------------------*/
tmnt 0:2d4605aef62f 94 wr_cmd(0xCF);
tmnt 0:2d4605aef62f 95 spi.write(0x00);
tmnt 0:2d4605aef62f 96 spi.write(0x83);
tmnt 0:2d4605aef62f 97 spi.write(0x30);
tmnt 0:2d4605aef62f 98 cs = 1;
tmnt 0:2d4605aef62f 99
tmnt 0:2d4605aef62f 100 wr_cmd(0xED);
tmnt 0:2d4605aef62f 101 spi.write(0x64);
tmnt 0:2d4605aef62f 102 spi.write(0x03);
tmnt 0:2d4605aef62f 103 spi.write(0x12);
tmnt 0:2d4605aef62f 104 spi.write(0x81);
tmnt 0:2d4605aef62f 105 cs = 1;
tmnt 0:2d4605aef62f 106
tmnt 0:2d4605aef62f 107 wr_cmd(0xE8);
tmnt 0:2d4605aef62f 108 spi.write(0x85);
tmnt 0:2d4605aef62f 109 spi.write(0x01);
tmnt 0:2d4605aef62f 110 spi.write(0x79);
tmnt 0:2d4605aef62f 111 cs = 1;
tmnt 0:2d4605aef62f 112
tmnt 0:2d4605aef62f 113 wr_cmd(0xCB);
tmnt 0:2d4605aef62f 114 spi.write(0x39);
tmnt 0:2d4605aef62f 115 spi.write(0x2C);
tmnt 0:2d4605aef62f 116 spi.write(0x00);
tmnt 0:2d4605aef62f 117 spi.write(0x34);
tmnt 0:2d4605aef62f 118 spi.write(0x02);
tmnt 0:2d4605aef62f 119 cs = 1;
tmnt 0:2d4605aef62f 120
tmnt 0:2d4605aef62f 121 wr_cmd(0xF7);
tmnt 0:2d4605aef62f 122 spi.write(0x20);
tmnt 0:2d4605aef62f 123 cs = 1;
tmnt 0:2d4605aef62f 124
tmnt 0:2d4605aef62f 125 wr_cmd(0xEA);
tmnt 0:2d4605aef62f 126 spi.write(0x00);
tmnt 0:2d4605aef62f 127 spi.write(0x00);
tmnt 0:2d4605aef62f 128 cs = 1;
tmnt 0:2d4605aef62f 129
tmnt 0:2d4605aef62f 130 wr_cmd(0xC0); // POWER_CONTROL_1
tmnt 0:2d4605aef62f 131 spi.write(0x26);
tmnt 0:2d4605aef62f 132 cs = 1;
tmnt 0:2d4605aef62f 133
tmnt 0:2d4605aef62f 134 wr_cmd(0xC1); // POWER_CONTROL_2
tmnt 0:2d4605aef62f 135 spi.write(0x11);
tmnt 0:2d4605aef62f 136 cs = 1;
tmnt 0:2d4605aef62f 137
tmnt 0:2d4605aef62f 138 wr_cmd(0xC5); // VCOM_CONTROL_1
tmnt 0:2d4605aef62f 139 spi.write(0x35);
tmnt 0:2d4605aef62f 140 spi.write(0x3E);
tmnt 0:2d4605aef62f 141 cs = 1;
tmnt 0:2d4605aef62f 142
tmnt 0:2d4605aef62f 143 wr_cmd(0xC7); // VCOM_CONTROL_2
tmnt 0:2d4605aef62f 144 spi.write(0xBE);
tmnt 0:2d4605aef62f 145 cs = 1;
tmnt 0:2d4605aef62f 146
tmnt 0:2d4605aef62f 147 wr_cmd(0x36); // MEMORY_ACCESS_CONTROL
tmnt 0:2d4605aef62f 148 spi.write(0x48);
tmnt 0:2d4605aef62f 149 cs = 1;
tmnt 0:2d4605aef62f 150
tmnt 0:2d4605aef62f 151 wr_cmd(0x3A); // COLMOD_PIXEL_FORMAT_SET
tmnt 0:2d4605aef62f 152 spi.write(0x55); // 16 bit pixel
tmnt 0:2d4605aef62f 153 cs = 1;
tmnt 0:2d4605aef62f 154
tmnt 0:2d4605aef62f 155 wr_cmd(0xB1); // Frame Rate
tmnt 0:2d4605aef62f 156 spi.write(0x00);
tmnt 0:2d4605aef62f 157 spi.write(0x1B);
tmnt 0:2d4605aef62f 158 cs = 1;
tmnt 0:2d4605aef62f 159
tmnt 0:2d4605aef62f 160 wr_cmd(0xF2); // Gamma Function Disable
tmnt 0:2d4605aef62f 161 spi.write(0x08);
tmnt 0:2d4605aef62f 162 cs = 1;
tmnt 0:2d4605aef62f 163
tmnt 0:2d4605aef62f 164 wr_cmd(0x26);
tmnt 0:2d4605aef62f 165 spi.write(0x01); // gamma set for curve 01/2/04/08
tmnt 0:2d4605aef62f 166 cs = 1;
tmnt 0:2d4605aef62f 167
tmnt 0:2d4605aef62f 168 wr_cmd(0xE0); // positive gamma correction
tmnt 0:2d4605aef62f 169 spi.write(0x1F);
tmnt 0:2d4605aef62f 170 spi.write(0x1A);
tmnt 0:2d4605aef62f 171 spi.write(0x18);
tmnt 0:2d4605aef62f 172 spi.write(0x0A);
tmnt 0:2d4605aef62f 173 spi.write(0x0F);
tmnt 0:2d4605aef62f 174 spi.write(0x06);
tmnt 0:2d4605aef62f 175 spi.write(0x45);
tmnt 0:2d4605aef62f 176 spi.write(0x87);
tmnt 0:2d4605aef62f 177 spi.write(0x32);
tmnt 0:2d4605aef62f 178 spi.write(0x0A);
tmnt 0:2d4605aef62f 179 spi.write(0x07);
tmnt 0:2d4605aef62f 180 spi.write(0x02);
tmnt 0:2d4605aef62f 181 spi.write(0x07);
tmnt 0:2d4605aef62f 182 spi.write(0x05);
tmnt 0:2d4605aef62f 183 spi.write(0x00);
tmnt 0:2d4605aef62f 184 cs = 1;
tmnt 0:2d4605aef62f 185
tmnt 0:2d4605aef62f 186 wr_cmd(0xE1); // negativ gamma correction
tmnt 0:2d4605aef62f 187 spi.write(0x00);
tmnt 0:2d4605aef62f 188 spi.write(0x25);
tmnt 0:2d4605aef62f 189 spi.write(0x27);
tmnt 0:2d4605aef62f 190 spi.write(0x05);
tmnt 0:2d4605aef62f 191 spi.write(0x10);
tmnt 0:2d4605aef62f 192 spi.write(0x09);
tmnt 0:2d4605aef62f 193 spi.write(0x3A);
tmnt 0:2d4605aef62f 194 spi.write(0x78);
tmnt 0:2d4605aef62f 195 spi.write(0x4D);
tmnt 0:2d4605aef62f 196 spi.write(0x05);
tmnt 0:2d4605aef62f 197 spi.write(0x18);
tmnt 0:2d4605aef62f 198 spi.write(0x0D);
tmnt 0:2d4605aef62f 199 spi.write(0x38);
tmnt 0:2d4605aef62f 200 spi.write(0x3A);
tmnt 0:2d4605aef62f 201 spi.write(0x1F);
tmnt 0:2d4605aef62f 202 cs = 1;
tmnt 0:2d4605aef62f 203
tmnt 0:2d4605aef62f 204 wr_cmd(0x2A);
tmnt 0:2d4605aef62f 205 spi.write(0);
tmnt 0:2d4605aef62f 206 spi.write(0);
tmnt 0:2d4605aef62f 207 spi.write(0);
tmnt 3:e56304370ff3 208 spi.write(0x95);//95
tmnt 0:2d4605aef62f 209
tmnt 0:2d4605aef62f 210 cs = 1;
tmnt 0:2d4605aef62f 211 wr_cmd(0x2B);
tmnt 0:2d4605aef62f 212 spi.write(0);
tmnt 0:2d4605aef62f 213 spi.write(0);
tmnt 0:2d4605aef62f 214 spi.write(0x00);
tmnt 3:e56304370ff3 215 spi.write(0x90);//90
tmnt 0:2d4605aef62f 216 cs = 1;
tmnt 0:2d4605aef62f 217
tmnt 0:2d4605aef62f 218 //wr_cmd(0x34); // tearing effect off
tmnt 0:2d4605aef62f 219 //_cs = 1;
tmnt 0:2d4605aef62f 220
tmnt 0:2d4605aef62f 221 //wr_cmd(0x35); // tearing effect on
tmnt 0:2d4605aef62f 222 //_cs = 1;
tmnt 0:2d4605aef62f 223
tmnt 0:2d4605aef62f 224 wr_cmd(0xB7); // entry mode
tmnt 0:2d4605aef62f 225 spi.write(0x07);
tmnt 0:2d4605aef62f 226 cs = 1;
tmnt 0:2d4605aef62f 227
tmnt 0:2d4605aef62f 228 wr_cmd(0xB6); // display function control
tmnt 0:2d4605aef62f 229 spi.write(0x0A);
tmnt 0:2d4605aef62f 230 spi.write(0x82);
tmnt 0:2d4605aef62f 231 spi.write(0x27);
tmnt 0:2d4605aef62f 232 spi.write(0x00);
tmnt 0:2d4605aef62f 233 cs = 1;
tmnt 0:2d4605aef62f 234
tmnt 0:2d4605aef62f 235 wr_cmd(0x11); // sleep out
tmnt 0:2d4605aef62f 236 cs = 1;
tmnt 0:2d4605aef62f 237
tmnt 0:2d4605aef62f 238 wait_ms(100);
tmnt 0:2d4605aef62f 239
tmnt 0:2d4605aef62f 240 wr_cmd(0x29); // display on
tmnt 0:2d4605aef62f 241 cs = 1;
tmnt 0:2d4605aef62f 242
tmnt 0:2d4605aef62f 243 wait_ms(100);
tmnt 0:2d4605aef62f 244
tmnt 0:2d4605aef62f 245 }
tmnt 0:2d4605aef62f 246 void ili9341_spi::pixel(int x, int y, int color)
tmnt 0:2d4605aef62f 247 {
tmnt 0:2d4605aef62f 248 wr_cmd(0x2A);
tmnt 0:2d4605aef62f 249 spi.write(x >> 8);
tmnt 0:2d4605aef62f 250 spi.write(x);
tmnt 0:2d4605aef62f 251 cs = 1;
tmnt 0:2d4605aef62f 252 wr_cmd(0x2B);
tmnt 0:2d4605aef62f 253 spi.write(y >> 8);
tmnt 0:2d4605aef62f 254 spi.write(y);
tmnt 0:2d4605aef62f 255 cs = 1;
tmnt 0:2d4605aef62f 256 wr_cmd(0x2C); // send pixel
tmnt 0:2d4605aef62f 257 //#if defined TARGET_KL25Z // 8 Bit SPI
tmnt 0:2d4605aef62f 258 spi.write(color >> 8);
tmnt 0:2d4605aef62f 259 spi.write(color & 0xff);
tmnt 0:2d4605aef62f 260 /*#else
tmnt 0:2d4605aef62f 261 SPI::format(16,3); // switch to 16 bit Mode 3
tmnt 0:2d4605aef62f 262 SPI::write(color); // Write D0..D15
tmnt 0:2d4605aef62f 263 SPI::format(8,3);
tmnt 0:2d4605aef62f 264 #endif*/
tmnt 0:2d4605aef62f 265 cs = 1;
tmnt 0:2d4605aef62f 266 }
tmnt 0:2d4605aef62f 267 void ili9341_spi::vline(int x, int y0, int y1, int color)
tmnt 0:2d4605aef62f 268 {
tmnt 0:2d4605aef62f 269 int h;
tmnt 0:2d4605aef62f 270 h = y1 - y0 + 1;
tmnt 0:2d4605aef62f 271 window(x,y0,1,h);
tmnt 0:2d4605aef62f 272 wr_cmd(0x2C); // send pixel
tmnt 0:2d4605aef62f 273 //#if defined TARGET_KL25Z // 8 Bit SPI
tmnt 0:2d4605aef62f 274 for (int y=0; y<h; y++) {
tmnt 0:2d4605aef62f 275 spi.write(color >> 8);
tmnt 0:2d4605aef62f 276 spi.write(color & 0xff);
tmnt 0:2d4605aef62f 277 }
tmnt 0:2d4605aef62f 278 /* #else
tmnt 0:2d4605aef62f 279 SPI::format(16,3); // switch to 16 bit Mode 3
tmnt 0:2d4605aef62f 280 for (int y=0; y<h; y++) {
tmnt 0:2d4605aef62f 281 SPI::write(color);
tmnt 0:2d4605aef62f 282 }
tmnt 0:2d4605aef62f 283 SPI::format(8,3);*/
tmnt 0:2d4605aef62f 284 //#endif
tmnt 0:2d4605aef62f 285 cs = 1;
tmnt 0:2d4605aef62f 286 //WindowMax();
tmnt 0:2d4605aef62f 287 return;
tmnt 0:2d4605aef62f 288 }
tmnt 0:2d4605aef62f 289
tmnt 0:2d4605aef62f 290 void ili9341_spi::circle(int x0, int y0, int r, int color)
tmnt 0:2d4605aef62f 291 {
tmnt 0:2d4605aef62f 292
tmnt 0:2d4605aef62f 293 int x = -r, y = 0, err = 2-2*r, e2;
tmnt 0:2d4605aef62f 294 do {
tmnt 0:2d4605aef62f 295 pixel(x0-x, y0+y,color);
tmnt 0:2d4605aef62f 296 pixel(x0+x, y0+y,color);
tmnt 0:2d4605aef62f 297 pixel(x0+x, y0-y,color);
tmnt 0:2d4605aef62f 298 pixel(x0-x, y0-y,color);
tmnt 0:2d4605aef62f 299 e2 = err;
tmnt 0:2d4605aef62f 300 if (e2 <= y) {
tmnt 0:2d4605aef62f 301 err += ++y*2+1;
tmnt 0:2d4605aef62f 302 if (-x == y && e2 <= x) e2 = 0;
tmnt 0:2d4605aef62f 303 }
tmnt 0:2d4605aef62f 304 if (e2 > x) err += ++x*2+1;
tmnt 0:2d4605aef62f 305 } while (x <= 0);
tmnt 0:2d4605aef62f 306 }
tmnt 0:2d4605aef62f 307
tmnt 0:2d4605aef62f 308 void ili9341_spi::fillrect(int x0, int y0, int x1, int y1, int color)
tmnt 0:2d4605aef62f 309 {
tmnt 0:2d4605aef62f 310
tmnt 0:2d4605aef62f 311 int h = y1 - y0 + 1;
tmnt 0:2d4605aef62f 312 int w = x1 - x0 + 1;
tmnt 0:2d4605aef62f 313 int pixel = h * w;
tmnt 3:e56304370ff3 314 window(x0,y0,w,h);
tmnt 0:2d4605aef62f 315 wr_cmd(0x2C); // send pixel
tmnt 0:2d4605aef62f 316 //#if defined TARGET_KL25Z // 8 Bit SPI
tmnt 0:2d4605aef62f 317 for (int p=0; p<pixel; p++) {
tmnt 0:2d4605aef62f 318 spi.write(color >> 8);
tmnt 0:2d4605aef62f 319 spi.write(color & 0xff);
tmnt 0:2d4605aef62f 320 }
tmnt 0:2d4605aef62f 321 /*#else
tmnt 0:2d4605aef62f 322 SPI::format(16,3); // switch to 16 bit Mode 3
tmnt 0:2d4605aef62f 323 for (int p=0; p<pixel; p++) {
tmnt 0:2d4605aef62f 324 SPI::write(color);
tmnt 0:2d4605aef62f 325 }
tmnt 0:2d4605aef62f 326 SPI::format(8,3);
tmnt 0:2d4605aef62f 327 #endif*/
tmnt 0:2d4605aef62f 328 cs = 1;
tmnt 0:2d4605aef62f 329 //WindowMax();
tmnt 0:2d4605aef62f 330 return;
tmnt 0:2d4605aef62f 331 }
tmnt 3:e56304370ff3 332
tmnt 3:e56304370ff3 333 void ili9341_spi::draw_str(const char* str,uint8_t line)
tmnt 3:e56304370ff3 334 {
tmnt 3:e56304370ff3 335 uint8_t len = strlen(str);
tmnt 3:e56304370ff3 336
tmnt 3:e56304370ff3 337 for (int i = 0; i < len; i++)
tmnt 3:e56304370ff3 338 {
tmnt 3:e56304370ff3 339 if(i==0){draw_char(str[i],1,line);}
tmnt 3:e56304370ff3 340 else draw_char(str[i],0,line);
tmnt 3:e56304370ff3 341 }
tmnt 3:e56304370ff3 342 }
tmnt 3:e56304370ff3 343
tmnt 3:e56304370ff3 344 void ili9341_spi::draw_char(char ch,uint8_t rs,uint8_t line)
tmnt 3:e56304370ff3 345 {
tmnt 3:e56304370ff3 346 static ushort col=0,row=0;
tmnt 3:e56304370ff3 347 static ushort pos_x = LEFT_PADDING, pos_y = TOP_PADDING;
tmnt 3:e56304370ff3 348 // 画面の右側に達したら改行する
tmnt 3:e56304370ff3 349 if(rs){pos_x=2;}
tmnt 3:e56304370ff3 350 pos_y = line*(FONT_6x12_HEIGHT + 2);
tmnt 3:e56304370ff3 351 if(pos_y==0){pos_y=2;}
tmnt 3:e56304370ff3 352 if (/*(col > 240 - 1) ||*/ ch == 10)
tmnt 3:e56304370ff3 353 {
tmnt 3:e56304370ff3 354 col = 0; row++;
tmnt 3:e56304370ff3 355 pos_x = LEFT_PADDING; pos_y += FONT_6x12_HEIGHT + 2;
tmnt 3:e56304370ff3 356 }
tmnt 3:e56304370ff3 357 if (ch == 10) return;
tmnt 3:e56304370ff3 358 // 文字の出力範囲を設定
tmnt 3:e56304370ff3 359 window(pos_x,pos_y, FONT_6x12_WIDTH+1,FONT_6x12_HEIGHT+1);
tmnt 3:e56304370ff3 360 // 文字がASCII表にある位置を探す
tmnt 3:e56304370ff3 361 const byte* fc = fc_tab[(ushort)ch];
tmnt 3:e56304370ff3 362 if (fc != 0)
tmnt 3:e56304370ff3 363 {
tmnt 3:e56304370ff3 364 wr_cmd(0x2C);
tmnt 3:e56304370ff3 365
tmnt 3:e56304370ff3 366 for (int y = 0; y < FONT_6x12_HEIGHT; y++)
tmnt 3:e56304370ff3 367 {
tmnt 3:e56304370ff3 368 for (int x = 0; x <= FONT_6x12_WIDTH; x++)
tmnt 3:e56304370ff3 369 {
tmnt 3:e56304370ff3 370 ushort k = (*fc) & (1 << (FONT_6x12_WIDTH - x));
tmnt 3:e56304370ff3 371 // フォントのピクセルを出力する
tmnt 3:e56304370ff3 372 spi.write(k ? /*(fcolor >> 8)*/0xff : /*(bcolor >> 8)*/0xf8);
tmnt 3:e56304370ff3 373 spi.write(k ? /*fcolor*/0xff : /*bcolor*/0x00);
tmnt 3:e56304370ff3 374 }
tmnt 3:e56304370ff3 375 fc++;
tmnt 3:e56304370ff3 376 }
tmnt 3:e56304370ff3 377 }
tmnt 3:e56304370ff3 378 col++;
tmnt 3:e56304370ff3 379 pos_x += FONT_6x12_WIDTH + 2;
tmnt 3:e56304370ff3 380 }
tmnt 3:e56304370ff3 381
tmnt 0:2d4605aef62f 382 void ili9341_spi::select() {
tmnt 0:2d4605aef62f 383 //Set CS low to start transmission (interrupts conversion)
tmnt 3:e56304370ff3 384 cs = 0; spi.frequency(60000000);
tmnt 0:2d4605aef62f 385 }
tmnt 0:2d4605aef62f 386 void ili9341_spi::deselect() {
tmnt 0:2d4605aef62f 387 //Set CS high to stop transmission (restarts conversion)
tmnt 3:e56304370ff3 388 cs = 1; spi.frequency(20000000);
tmnt 0:2d4605aef62f 389 }