k og / Mbed 2 deprecated Aitendo_HX8347D_HelloWorld

Dependencies:   SDFileSystem mbed

Fork of Aitendo_HX8347D_HelloWorld by k og

Committer:
og
Date:
Mon Aug 29 05:45:10 2016 +0000
Revision:
0:eabefd4ea69c
Child:
1:8d7394e5f8de
bmp???

Who changed what in which revision?

UserRevisionLine numberNew contents of line
og 0:eabefd4ea69c 1 /**
og 0:eabefd4ea69c 2 ** http://www.aitendo.com/product/10942
og 0:eabefd4ea69c 3 ** HX8347D
og 0:eabefd4ea69c 4 **/
og 0:eabefd4ea69c 5 #include "mbed.h"
og 0:eabefd4ea69c 6 #include "mbed_debug.h"
og 0:eabefd4ea69c 7 #include "SDFileSystem.h"
og 0:eabefd4ea69c 8 #include "HX8347D.h"
og 0:eabefd4ea69c 9 //#define ROW 320
og 0:eabefd4ea69c 10 //#define COL 240
og 0:eabefd4ea69c 11
og 0:eabefd4ea69c 12 #define BLACK 0x0000
og 0:eabefd4ea69c 13 #define BLUE 0x001F
og 0:eabefd4ea69c 14 #define RED 0xF800
og 0:eabefd4ea69c 15 #define GREEN 0x07E0
og 0:eabefd4ea69c 16 #define CYAN 0x07FF
og 0:eabefd4ea69c 17 #define MAGENTA 0xF81F
og 0:eabefd4ea69c 18 #define YELLOW 0xFFE0
og 0:eabefd4ea69c 19 #define WHITE 0xFFFF
og 0:eabefd4ea69c 20
og 0:eabefd4ea69c 21
og 0:eabefd4ea69c 22 #if defined(TARGET_ARCH_PRO)
og 0:eabefd4ea69c 23 // ist worked
og 0:eabefd4ea69c 24 /*
og 0:eabefd4ea69c 25 DigitalOut RD0(A0);
og 0:eabefd4ea69c 26 DigitalOut WR0(A1);
og 0:eabefd4ea69c 27 DigitalOut RS(A2);
og 0:eabefd4ea69c 28 DigitalOut CS0(A3);
og 0:eabefd4ea69c 29 //BusOut DBH(D0, D1, D2, D3, D4, D5, D6, D7);
og 0:eabefd4ea69c 30 BusOut DBH(D2, D3, D4, D5, D6, D7, D8, D9);
og 0:eabefd4ea69c 31 */
og 0:eabefd4ea69c 32 HX8347D tft(A0, A1, A2, A3, A4, D2, D3, D4, D5, D6, D7, D8, D9);
og 0:eabefd4ea69c 33 SDFileSystem sd(D11, D12, D13, D10, "sd"); // mosi miso sclk cs
og 0:eabefd4ea69c 34 Serial pc(USBTX, USBRX);
og 0:eabefd4ea69c 35 #elif defined TARGET_NUCLEO_F446RE
og 0:eabefd4ea69c 36 /* D0, D1 short SB62,SB63*/
og 0:eabefd4ea69c 37 DigitalOut RD0(A0);
og 0:eabefd4ea69c 38 DigitalOut WR0(A1);
og 0:eabefd4ea69c 39 DigitalOut RS(A2);
og 0:eabefd4ea69c 40 DigitalOut CS0(A3);
og 0:eabefd4ea69c 41 //BusOut DBH(D8, D9, D10, D11, D12, D13, D14, D15);
og 0:eabefd4ea69c 42 BusOut DBH(D2, D3, D4, D5, D6, D7, D8, D9);
og 0:eabefd4ea69c 43
og 0:eabefd4ea69c 44 SDFileSystem sd(SPI_MOSI, SPI_MISO, SPI_SCK, SPI_CS, "sd");
og 0:eabefd4ea69c 45 Serial pc(USBTX, USBRX);
og 0:eabefd4ea69c 46
og 0:eabefd4ea69c 47 #elif defined TARGET_NUCLEO_F103RB
og 0:eabefd4ea69c 48 /* D0, D1 short SB62,SB63*/
og 0:eabefd4ea69c 49 DigitalOut RD0(A0);
og 0:eabefd4ea69c 50 DigitalOut WR0(A1);
og 0:eabefd4ea69c 51 DigitalOut RS(A2);
og 0:eabefd4ea69c 52 DigitalOut CS0(A3);
og 0:eabefd4ea69c 53 BusOut DBH(D2, D3, D4, D5, D6, D7, D8, D9);
og 0:eabefd4ea69c 54 // SPI_MOSI D11
og 0:eabefd4ea69c 55 // SPI_MISO D12
og 0:eabefd4ea69c 56 // SPI_SCK D13
og 0:eabefd4ea69c 57 // SPI_CS D10
og 0:eabefd4ea69c 58 SDFileSystem sd(SPI_MOSI, SPI_MISO, SPI_SCK, SPI_CS, "sd")
og 0:eabefd4ea69c 59 Serial pc(USBTX, USBRX);
og 0:eabefd4ea69c 60 #endif
og 0:eabefd4ea69c 61
og 0:eabefd4ea69c 62 char str[128];
og 0:eabefd4ea69c 63
og 0:eabefd4ea69c 64 void rotateTest() {
og 0:eabefd4ea69c 65 tft.setRotation(1);
og 0:eabefd4ea69c 66 for (uint16_t y=0; y < tft.height(); y+=5) {
og 0:eabefd4ea69c 67 tft.drawHorizontalLine(0, y, tft.width(), RED);
og 0:eabefd4ea69c 68 }
og 0:eabefd4ea69c 69 wait_ms(500);
og 0:eabefd4ea69c 70 for (uint16_t x=0; x < tft.width(); x+=5) {
og 0:eabefd4ea69c 71 tft.drawVerticalLine(x, 0, 239, GREEN);
og 0:eabefd4ea69c 72 pc.printf("x=%d %d\n", x, tft.height());
og 0:eabefd4ea69c 73 }
og 0:eabefd4ea69c 74 wait_ms(500);
og 0:eabefd4ea69c 75
og 0:eabefd4ea69c 76 }
og 0:eabefd4ea69c 77 void rotateText() {
og 0:eabefd4ea69c 78 for (uint8_t i=0; i<4; i++) {
og 0:eabefd4ea69c 79 tft.fillScreen(BLACK);
og 0:eabefd4ea69c 80 pc.printf("%d" , tft.getRotation());
og 0:eabefd4ea69c 81
og 0:eabefd4ea69c 82 tft.setCursor(0, 30);
og 0:eabefd4ea69c 83 tft.setTextColor(RED);
og 0:eabefd4ea69c 84 tft.setTextSize(1);
og 0:eabefd4ea69c 85 tft.println("Hello World!\n");
og 0:eabefd4ea69c 86 wait_ms(500);
og 0:eabefd4ea69c 87 tft.setTextColor(YELLOW);
og 0:eabefd4ea69c 88 tft.setTextSize(2);
og 0:eabefd4ea69c 89 tft.println("Hello World!\n");
og 0:eabefd4ea69c 90 wait_ms(500);
og 0:eabefd4ea69c 91 tft.setTextColor(GREEN);
og 0:eabefd4ea69c 92 tft.setTextSize(3);
og 0:eabefd4ea69c 93 tft.println("Hello World!\n");
og 0:eabefd4ea69c 94 wait_ms(500);
og 0:eabefd4ea69c 95 tft.setTextColor(CYAN);
og 0:eabefd4ea69c 96 tft.setTextSize(3);
og 0:eabefd4ea69c 97 tft.println("Hello World!\n");
og 0:eabefd4ea69c 98 wait_ms(500);
og 0:eabefd4ea69c 99 tft.setTextColor(MAGENTA);
og 0:eabefd4ea69c 100 tft.setTextSize(2);
og 0:eabefd4ea69c 101 tft.println("Hello World!\n");
og 0:eabefd4ea69c 102 wait_ms(500);
og 0:eabefd4ea69c 103 tft.setTextColor(WHITE);
og 0:eabefd4ea69c 104 tft.setTextSize(1);
og 0:eabefd4ea69c 105 tft.println("Hello World!\n");
og 0:eabefd4ea69c 106 wait_ms(500);
og 0:eabefd4ea69c 107 tft.setTextColor(BLUE);
og 0:eabefd4ea69c 108 tft.setTextSize(1);
og 0:eabefd4ea69c 109 tft.println("1234.567\n");
og 0:eabefd4ea69c 110 wait_ms(500);
og 0:eabefd4ea69c 111
og 0:eabefd4ea69c 112 tft.setRotation(tft.getRotation()+1);
og 0:eabefd4ea69c 113 }
og 0:eabefd4ea69c 114 }
og 0:eabefd4ea69c 115
og 0:eabefd4ea69c 116
og 0:eabefd4ea69c 117 void testtext(uint16_t color) {
og 0:eabefd4ea69c 118 tft.fillScreen(BLACK);
og 0:eabefd4ea69c 119 tft.setCursor(0, 0);
og 0:eabefd4ea69c 120 tft.setTextColor(color);
og 0:eabefd4ea69c 121 tft.setTextSize(1);
og 0:eabefd4ea69c 122 tft.drawString(0, 20, "Hello aitendo!", color);
og 0:eabefd4ea69c 123 wait_ms(500);
og 0:eabefd4ea69c 124 tft.drawChar(0, 50, '1', YELLOW, 1);
og 0:eabefd4ea69c 125 tft.write('A');
og 0:eabefd4ea69c 126 //wait_ms(500);
og 0:eabefd4ea69c 127 tft.setCursor(0, 100);
og 0:eabefd4ea69c 128 tft.println("Hello aitendo!\n");
og 0:eabefd4ea69c 129 //wait_ms(500);
og 0:eabefd4ea69c 130 tft.setCursor(0, 150);
og 0:eabefd4ea69c 131 tft.setTextSize(3);
og 0:eabefd4ea69c 132 tft.println("1234.56");
og 0:eabefd4ea69c 133 //wait_ms(500);
og 0:eabefd4ea69c 134 tft.setCursor(0, 200);
og 0:eabefd4ea69c 135 tft.setTextSize(3);
og 0:eabefd4ea69c 136 sprintf(str, "%X", 0xDEADBEEF);
og 0:eabefd4ea69c 137 tft.println(str);
og 0:eabefd4ea69c 138 wait_ms(500);
og 0:eabefd4ea69c 139 }
og 0:eabefd4ea69c 140
og 0:eabefd4ea69c 141 void testFillRoundRect() {
og 0:eabefd4ea69c 142 tft.fillScreen(RED);
og 0:eabefd4ea69c 143
og 0:eabefd4ea69c 144 for (uint16_t x=tft.width(); x > 20 ; x-=6) {
og 0:eabefd4ea69c 145 tft.fillRoundRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, x/8, tft.Color565(0, x, 0));
og 0:eabefd4ea69c 146 }
og 0:eabefd4ea69c 147 }
og 0:eabefd4ea69c 148
og 0:eabefd4ea69c 149 void testtriangles() {
og 0:eabefd4ea69c 150 tft.fillScreen(BLACK);
og 0:eabefd4ea69c 151 for (uint16_t i=0; i<tft.width()/2; i+=5) {
og 0:eabefd4ea69c 152 tft.drawTriangle(tft.width()/2, tft.height()/2-i,
og 0:eabefd4ea69c 153 tft.width()/2-i, tft.height()/2+i,
og 0:eabefd4ea69c 154 tft.width()/2+i, tft.height()/2+i, tft.Color565(0, 0, i));
og 0:eabefd4ea69c 155 }
og 0:eabefd4ea69c 156 tft.fillScreen(BLACK);
og 0:eabefd4ea69c 157 for (uint16_t i=0; i<tft.width()/2; i+=5) {
og 0:eabefd4ea69c 158 tft.drawTriangle(tft.width()/2, tft.height()/2-i,
og 0:eabefd4ea69c 159 tft.width()/2-i, tft.height()/2+i,
og 0:eabefd4ea69c 160 tft.width()/2+i, tft.height()/2+i, tft.Color565(0, i, 0));
og 0:eabefd4ea69c 161 }
og 0:eabefd4ea69c 162 tft.fillScreen(BLACK);
og 0:eabefd4ea69c 163 for (uint16_t i=0; i<tft.width()/2; i+=5) {
og 0:eabefd4ea69c 164 tft.drawTriangle(tft.width()/2, tft.height()/2-i,
og 0:eabefd4ea69c 165 tft.width()/2-i, tft.height()/2+i,
og 0:eabefd4ea69c 166 tft.width()/2+i, tft.height()/2+i, tft.Color565(i, 0, 0));
og 0:eabefd4ea69c 167 }
og 0:eabefd4ea69c 168 }
og 0:eabefd4ea69c 169
og 0:eabefd4ea69c 170 void testfilltriangles() {
og 0:eabefd4ea69c 171 tft.fillScreen(BLACK);
og 0:eabefd4ea69c 172
og 0:eabefd4ea69c 173 for (uint16_t i=tft.width()/2; i>10; i-=5) {
og 0:eabefd4ea69c 174 tft.fillTriangle(tft.width()/2, tft.height()/2-i,
og 0:eabefd4ea69c 175 tft.width()/2-i, tft.height()/2+i,
og 0:eabefd4ea69c 176 tft.width()/2+i, tft.height()/2+i,
og 0:eabefd4ea69c 177 tft.Color565(0, i, i));
og 0:eabefd4ea69c 178 tft.drawTriangle(tft.width()/2, tft.height()/2-i,
og 0:eabefd4ea69c 179 tft.width()/2-i, tft.height()/2+i,
og 0:eabefd4ea69c 180 tft.width()/2+i, tft.height()/2+i, tft.Color565(i, i, 0));
og 0:eabefd4ea69c 181 }
og 0:eabefd4ea69c 182 }
og 0:eabefd4ea69c 183 void testfillcircles(uint8_t radius, uint16_t color) {
og 0:eabefd4ea69c 184 for (uint16_t x=radius; x < tft.width(); x+=radius*2) {
og 0:eabefd4ea69c 185 for (uint16_t y=radius; y < tft.height(); y+=radius*2) {
og 0:eabefd4ea69c 186 tft.fillCircle(x, y, radius, color);
og 0:eabefd4ea69c 187 }
og 0:eabefd4ea69c 188 }
og 0:eabefd4ea69c 189 }
og 0:eabefd4ea69c 190
og 0:eabefd4ea69c 191 void testdrawcircles(uint8_t radius, uint16_t color) {
og 0:eabefd4ea69c 192 for (uint16_t x=0; x < tft.width()+radius; x+=radius*2) {
og 0:eabefd4ea69c 193 for (uint16_t y=0; y < tft.height()+radius; y+=radius*2) {
og 0:eabefd4ea69c 194 tft.drawCircle(x, y, radius, color);
og 0:eabefd4ea69c 195 }
og 0:eabefd4ea69c 196 }
og 0:eabefd4ea69c 197 }
og 0:eabefd4ea69c 198
og 0:eabefd4ea69c 199 void testfillrects(uint16_t color1, uint16_t color2) {
og 0:eabefd4ea69c 200 tft.fillScreen(BLACK);
og 0:eabefd4ea69c 201 for (uint16_t x=tft.width()-1; x > 6; x-=6) {
og 0:eabefd4ea69c 202 //Serial.println(x, DEC);
og 0:eabefd4ea69c 203 tft.fillRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color1);
og 0:eabefd4ea69c 204 tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color2);
og 0:eabefd4ea69c 205 }
og 0:eabefd4ea69c 206 }
og 0:eabefd4ea69c 207
og 0:eabefd4ea69c 208 void testdrawrects(uint16_t color) {
og 0:eabefd4ea69c 209 tft.fillScreen(BLACK);
og 0:eabefd4ea69c 210 for (uint16_t x=0; x < tft.width(); x+=6) {
og 0:eabefd4ea69c 211 //pc.printf("%d\r\n", x);
og 0:eabefd4ea69c 212 tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, color);
og 0:eabefd4ea69c 213 }
og 0:eabefd4ea69c 214 }
og 0:eabefd4ea69c 215
og 0:eabefd4ea69c 216 void testfastlines(uint16_t color1, uint16_t color2) {
og 0:eabefd4ea69c 217 tft.fillScreen(BLACK);
og 0:eabefd4ea69c 218 for (uint16_t y=0; y < tft.height(); y+=5) {
og 0:eabefd4ea69c 219 // pc.printf("%d\r\n", y);
og 0:eabefd4ea69c 220 tft.drawHorizontalLine(0, y, tft.width(), color1);
og 0:eabefd4ea69c 221 }
og 0:eabefd4ea69c 222 for (uint16_t x=0; x < tft.width(); x+=5) {
og 0:eabefd4ea69c 223 // pc.printf("%d\r\n", x);
og 0:eabefd4ea69c 224 tft.drawVerticalLine(x, 0, tft.height(), color2);
og 0:eabefd4ea69c 225 }
og 0:eabefd4ea69c 226
og 0:eabefd4ea69c 227 }
og 0:eabefd4ea69c 228
og 0:eabefd4ea69c 229
og 0:eabefd4ea69c 230 void testlinerotate() {
og 0:eabefd4ea69c 231 uint16_t color1;
og 0:eabefd4ea69c 232 uint16_t color2;
og 0:eabefd4ea69c 233 uint8_t n;
og 0:eabefd4ea69c 234 for (uint8_t i=0; i<4; i++) {
og 0:eabefd4ea69c 235 tft.fillScreen(BLACK);
og 0:eabefd4ea69c 236 n = 3+i*4;
og 0:eabefd4ea69c 237 tft.setCursor(0, 10);
og 0:eabefd4ea69c 238 tft.setTextSize(1);
og 0:eabefd4ea69c 239 color1 = tft.Color565(n, 0, 0);
og 0:eabefd4ea69c 240 color2 = tft.Color565(0, 0, n);
og 0:eabefd4ea69c 241 color1 = BLUE;
og 0:eabefd4ea69c 242 color2 = RED;
og 0:eabefd4ea69c 243 sprintf(str, "%X\n", color1);
og 0:eabefd4ea69c 244 tft.println(str);
og 0:eabefd4ea69c 245 sprintf(str, "%X\n", color2);
og 0:eabefd4ea69c 246 tft.println(str);
og 0:eabefd4ea69c 247 for (uint16_t y=0; y < tft.height(); y+=5) {
og 0:eabefd4ea69c 248 tft.drawHorizontalLine(0, y, tft.width(), color1);
og 0:eabefd4ea69c 249 //pc.printf("y=%d %d\n", y, tft.height());
og 0:eabefd4ea69c 250 }
og 0:eabefd4ea69c 251 //wait_ms(500);
og 0:eabefd4ea69c 252 for (uint16_t x=0; x < tft.width(); x+=5) {
og 0:eabefd4ea69c 253 tft.drawVerticalLine(x, 0, tft.height(), color2);
og 0:eabefd4ea69c 254 //pc.printf("x=%d %d\n", x, tft.height());
og 0:eabefd4ea69c 255 }
og 0:eabefd4ea69c 256 tft.setRotation(tft.getRotation()+1);
og 0:eabefd4ea69c 257 //wait_ms(500);
og 0:eabefd4ea69c 258 }
og 0:eabefd4ea69c 259 }
og 0:eabefd4ea69c 260
og 0:eabefd4ea69c 261 void testlines(uint16_t color) {
og 0:eabefd4ea69c 262 tft.fillScreen(BLACK);
og 0:eabefd4ea69c 263 for (uint16_t x=0; x < tft.width(); x+=6) {
og 0:eabefd4ea69c 264 tft.drawLine(0, 0, x, tft.height()-1, color);
og 0:eabefd4ea69c 265 }
og 0:eabefd4ea69c 266 for (uint16_t y=0; y < tft.height(); y+=6) {
og 0:eabefd4ea69c 267 tft.drawLine(0, 0, tft.width()-1, y, color);
og 0:eabefd4ea69c 268 }
og 0:eabefd4ea69c 269
og 0:eabefd4ea69c 270 tft.fillScreen(BLACK);
og 0:eabefd4ea69c 271 for (uint16_t x=0; x < tft.width(); x+=6) {
og 0:eabefd4ea69c 272 tft.drawLine(tft.width()-1, 0, x, tft.height()-1, color);
og 0:eabefd4ea69c 273 }
og 0:eabefd4ea69c 274 for (uint16_t y=0; y < tft.height(); y+=6) {
og 0:eabefd4ea69c 275 tft.drawLine(tft.width()-1, 0, 0, y, color);
og 0:eabefd4ea69c 276 }
og 0:eabefd4ea69c 277
og 0:eabefd4ea69c 278 tft.fillScreen(BLACK);
og 0:eabefd4ea69c 279 for (uint16_t x=0; x < tft.width(); x+=6) {
og 0:eabefd4ea69c 280 tft.drawLine(0, tft.height()-1, x, 0, color);
og 0:eabefd4ea69c 281 }
og 0:eabefd4ea69c 282 for (uint16_t y=0; y < tft.height(); y+=6) {
og 0:eabefd4ea69c 283 tft.drawLine(0, tft.height()-1, tft.width()-1, y, color);
og 0:eabefd4ea69c 284 }
og 0:eabefd4ea69c 285
og 0:eabefd4ea69c 286 tft.fillScreen(BLACK);
og 0:eabefd4ea69c 287 for (uint16_t x=0; x < tft.width(); x+=6) {
og 0:eabefd4ea69c 288 tft.drawLine(tft.width()-1, tft.height()-1, x, 0, color);
og 0:eabefd4ea69c 289 }
og 0:eabefd4ea69c 290 for (uint16_t y=0; y < tft.height(); y+=6) {
og 0:eabefd4ea69c 291 tft.drawLine(tft.width()-1, tft.height()-1, 0, y, color);
og 0:eabefd4ea69c 292 }
og 0:eabefd4ea69c 293 }
og 0:eabefd4ea69c 294
og 0:eabefd4ea69c 295 void testBars() {
og 0:eabefd4ea69c 296 tft.goHome();
og 0:eabefd4ea69c 297
og 0:eabefd4ea69c 298 uint16_t i,j;
og 0:eabefd4ea69c 299 for(i=0; i < tft.height(); i++)
og 0:eabefd4ea69c 300 {
og 0:eabefd4ea69c 301 for(j=tft.width()/2; j <tft.width(); j++)
og 0:eabefd4ea69c 302 {
og 0:eabefd4ea69c 303 if(i>279) tft.writeData(WHITE);
og 0:eabefd4ea69c 304 else if(i>239) tft.writeData(BLUE);
og 0:eabefd4ea69c 305 else if(i>199) tft.writeData(GREEN);
og 0:eabefd4ea69c 306 else if(i>159) tft.writeData(CYAN);
og 0:eabefd4ea69c 307 else if(i>119) tft.writeData(RED);
og 0:eabefd4ea69c 308 else if(i>79) tft.writeData(MAGENTA);
og 0:eabefd4ea69c 309 else if(i>39) tft.writeData(YELLOW);
og 0:eabefd4ea69c 310 else tft.writeData(BLACK);
og 0:eabefd4ea69c 311 //wait_ms(5);
og 0:eabefd4ea69c 312 }
og 0:eabefd4ea69c 313 for(j=0; j < tft.width()/2; j++)
og 0:eabefd4ea69c 314 {
og 0:eabefd4ea69c 315 if(i>159) tft.writeData(BLACK);
og 0:eabefd4ea69c 316 //else if(i>239) tft.writeData(YELLOW);
og 0:eabefd4ea69c 317 //else if(i>199) tft.writeData(MAGENTA);
og 0:eabefd4ea69c 318 //else if(i>159) tft.writeData(RED);
og 0:eabefd4ea69c 319 //else if(i>119) tft.writeData(CYAN);
og 0:eabefd4ea69c 320 //else if(i>79) tft.writeData(GREEN);
og 0:eabefd4ea69c 321 //else if(i>39) tft.writeData(BLUE);
og 0:eabefd4ea69c 322 else tft.writeData(WHITE);
og 0:eabefd4ea69c 323 //wait_ms(1);
og 0:eabefd4ea69c 324 }
og 0:eabefd4ea69c 325 }
og 0:eabefd4ea69c 326 }
og 0:eabefd4ea69c 327
og 0:eabefd4ea69c 328 /**
og 0:eabefd4ea69c 329
og 0:eabefd4ea69c 330
og 0:eabefd4ea69c 331 **/
og 0:eabefd4ea69c 332
og 0:eabefd4ea69c 333 // information we extract about the bitmap file
og 0:eabefd4ea69c 334 int bmpWidth, bmpHeight;
og 0:eabefd4ea69c 335 uint8_t bmpDepth, bmpImageoffset;
og 0:eabefd4ea69c 336
og 0:eabefd4ea69c 337 #define ROTATION 3
og 0:eabefd4ea69c 338 #define BUFFPIXEL 60
og 0:eabefd4ea69c 339 #define BYTES_PER_PIXEL 3
og 0:eabefd4ea69c 340
og 0:eabefd4ea69c 341 uint8_t picBuffer[BYTES_PER_PIXEL * BUFFPIXEL]; // 3 * pixels to buffer
og 0:eabefd4ea69c 342 int bufferIndex = BYTES_PER_PIXEL * BUFFPIXEL;
og 0:eabefd4ea69c 343
og 0:eabefd4ea69c 344 char path[80];
og 0:eabefd4ea69c 345
og 0:eabefd4ea69c 346 // These read data from the SD card file and convert them to big endian
og 0:eabefd4ea69c 347 // (the data is stored in little endian format!)
og 0:eabefd4ea69c 348
og 0:eabefd4ea69c 349
og 0:eabefd4ea69c 350 // LITTLE ENDIAN!
og 0:eabefd4ea69c 351
og 0:eabefd4ea69c 352 uint16_t read16(FILE *f) {
og 0:eabefd4ea69c 353 uint16_t d;
og 0:eabefd4ea69c 354 uint8_t b;
og 0:eabefd4ea69c 355 fread(&b, sizeof(uint8_t), 1, f);
og 0:eabefd4ea69c 356 fread(&d, sizeof(uint8_t), 1, f);
og 0:eabefd4ea69c 357 d <<= 8;
og 0:eabefd4ea69c 358 d |= b;
og 0:eabefd4ea69c 359 return d;
og 0:eabefd4ea69c 360 }
og 0:eabefd4ea69c 361
og 0:eabefd4ea69c 362
og 0:eabefd4ea69c 363 // LITTLE ENDIAN!
og 0:eabefd4ea69c 364 uint32_t read32(FILE *f) {
og 0:eabefd4ea69c 365 uint32_t d;
og 0:eabefd4ea69c 366 uint16_t b;
og 0:eabefd4ea69c 367
og 0:eabefd4ea69c 368 b = read16(f);
og 0:eabefd4ea69c 369 d = read16(f);
og 0:eabefd4ea69c 370 d <<= 16;
og 0:eabefd4ea69c 371 d |= b;
og 0:eabefd4ea69c 372 return d;
og 0:eabefd4ea69c 373 }
og 0:eabefd4ea69c 374
og 0:eabefd4ea69c 375 /*
og 0:eabefd4ea69c 376 From example code. Reads bitmap header. Uses global variables.
og 0:eabefd4ea69c 377
og 0:eabefd4ea69c 378 */
og 0:eabefd4ea69c 379 bool bmpReadHeader(FILE *f) {
og 0:eabefd4ea69c 380 // read header
og 0:eabefd4ea69c 381 uint32_t tmp;
og 0:eabefd4ea69c 382
og 0:eabefd4ea69c 383 if (read16(f) != 0x4D42) {
og 0:eabefd4ea69c 384 // magic bytes missing
og 0:eabefd4ea69c 385 return false;
og 0:eabefd4ea69c 386 }
og 0:eabefd4ea69c 387
og 0:eabefd4ea69c 388 // read file size
og 0:eabefd4ea69c 389 tmp = read32(f);
og 0:eabefd4ea69c 390 pc.printf("size 0x %X\n", tmp);
og 0:eabefd4ea69c 391
og 0:eabefd4ea69c 392 // read and ignore creator bytes
og 0:eabefd4ea69c 393 read32(f);
og 0:eabefd4ea69c 394
og 0:eabefd4ea69c 395 bmpImageoffset = read32(f);
og 0:eabefd4ea69c 396 pc.printf("offset %d\n", bmpImageoffset);
og 0:eabefd4ea69c 397
og 0:eabefd4ea69c 398 // read DIB header
og 0:eabefd4ea69c 399 tmp = read32(f);
og 0:eabefd4ea69c 400 pc.printf("header size %d\n", tmp);
og 0:eabefd4ea69c 401 bmpWidth = read32(f);
og 0:eabefd4ea69c 402 bmpHeight = read32(f);
og 0:eabefd4ea69c 403
og 0:eabefd4ea69c 404
og 0:eabefd4ea69c 405 if (read16(f) != 1)
og 0:eabefd4ea69c 406 return false;
og 0:eabefd4ea69c 407
og 0:eabefd4ea69c 408 bmpDepth = read16(f);
og 0:eabefd4ea69c 409 pc.printf("bitdepth %d\n", bmpDepth);
og 0:eabefd4ea69c 410
og 0:eabefd4ea69c 411
og 0:eabefd4ea69c 412 pc.printf("compression %d\n", tmp);
og 0:eabefd4ea69c 413
og 0:eabefd4ea69c 414 return true;
og 0:eabefd4ea69c 415 }
og 0:eabefd4ea69c 416
og 0:eabefd4ea69c 417 /*
og 0:eabefd4ea69c 418 Slightly modified routine for drawing bitmaps (From original samples).
og 0:eabefd4ea69c 419
og 0:eabefd4ea69c 420 Watch out, as this one uses some global variables
og 0:eabefd4ea69c 421 */
og 0:eabefd4ea69c 422 void bmpdraw(FILE *f, int x, int y) {
og 0:eabefd4ea69c 423 fseek(f, bmpImageoffset, SEEK_SET);
og 0:eabefd4ea69c 424
og 0:eabefd4ea69c 425 uint16_t p;
og 0:eabefd4ea69c 426 int i, j;
og 0:eabefd4ea69c 427
og 0:eabefd4ea69c 428 pc.printf("rotation = %d\n", tft.getRotation());
og 0:eabefd4ea69c 429
og 0:eabefd4ea69c 430 tft.goTo(0,0);
og 0:eabefd4ea69c 431 for (i=0; i< bmpHeight; i++) {
og 0:eabefd4ea69c 432 // bitmaps are stored with the BOTTOM line first so we have to move 'up'
og 0:eabefd4ea69c 433 tft.goTo(0, bmpHeight - i - 1);
og 0:eabefd4ea69c 434
og 0:eabefd4ea69c 435 for (j=0; j<bmpWidth; j++) {
og 0:eabefd4ea69c 436 // read more pixels
og 0:eabefd4ea69c 437
og 0:eabefd4ea69c 438 if (bufferIndex >= BYTES_PER_PIXEL * BUFFPIXEL) {
og 0:eabefd4ea69c 439 fread(&picBuffer, sizeof(uint8_t), BYTES_PER_PIXEL * BUFFPIXEL, f);
og 0:eabefd4ea69c 440 bufferIndex= 0;
og 0:eabefd4ea69c 441 }
og 0:eabefd4ea69c 442
og 0:eabefd4ea69c 443 p = tft.Color565( picBuffer[bufferIndex+2], picBuffer[bufferIndex+1], picBuffer[bufferIndex]);
og 0:eabefd4ea69c 444 bufferIndex += 3;
og 0:eabefd4ea69c 445
og 0:eabefd4ea69c 446 tft.writeData(p);
og 0:eabefd4ea69c 447 }
og 0:eabefd4ea69c 448 }
og 0:eabefd4ea69c 449 }
og 0:eabefd4ea69c 450
og 0:eabefd4ea69c 451
og 0:eabefd4ea69c 452 FILE *fp;
og 0:eabefd4ea69c 453
og 0:eabefd4ea69c 454 void testbmp() {
og 0:eabefd4ea69c 455 tft.setRotation(0);
og 0:eabefd4ea69c 456 tft.fillScreen(0);
og 0:eabefd4ea69c 457 bmpdraw(fp, 50, 50);
og 0:eabefd4ea69c 458 wait(1);
og 0:eabefd4ea69c 459
og 0:eabefd4ea69c 460 tft.setRotation(1);
og 0:eabefd4ea69c 461 tft.fillScreen(0);
og 0:eabefd4ea69c 462 bmpdraw(fp, 50, 50);
og 0:eabefd4ea69c 463 wait(1);
og 0:eabefd4ea69c 464
og 0:eabefd4ea69c 465 tft.setRotation(2);
og 0:eabefd4ea69c 466 tft.fillScreen(0);
og 0:eabefd4ea69c 467 bmpdraw(fp, 50, 50);
og 0:eabefd4ea69c 468 wait(1);
og 0:eabefd4ea69c 469
og 0:eabefd4ea69c 470 tft.setRotation(3);
og 0:eabefd4ea69c 471 tft.fillScreen(0);
og 0:eabefd4ea69c 472 bmpdraw(fp, 50, 50);
og 0:eabefd4ea69c 473 wait(1);
og 0:eabefd4ea69c 474 }
og 0:eabefd4ea69c 475
og 0:eabefd4ea69c 476
og 0:eabefd4ea69c 477 main()
og 0:eabefd4ea69c 478 {
og 0:eabefd4ea69c 479 //char bmpFile[80];
og 0:eabefd4ea69c 480 DIR *dir;
og 0:eabefd4ea69c 481
og 0:eabefd4ea69c 482 tft.reset();
og 0:eabefd4ea69c 483 wait(1);
og 0:eabefd4ea69c 484
og 0:eabefd4ea69c 485 // find the TFT display
og 0:eabefd4ea69c 486 uint16_t identifier = tft.readRegister(0x0);
og 0:eabefd4ea69c 487 if (identifier == 0x4747) {
og 0:eabefd4ea69c 488 pc.printf("Found HX8347D\n");
og 0:eabefd4ea69c 489 } else {
og 0:eabefd4ea69c 490 pc.printf("Unknown driver chip %X\n",identifier);
og 0:eabefd4ea69c 491 while (1);
og 0:eabefd4ea69c 492 }
og 0:eabefd4ea69c 493
og 0:eabefd4ea69c 494 tft.initDisplay();
og 0:eabefd4ea69c 495
og 0:eabefd4ea69c 496 pc.printf("Initializing SD card...\n");
og 0:eabefd4ea69c 497
og 0:eabefd4ea69c 498 dir = opendir("/sd");
og 0:eabefd4ea69c 499 if ( dir == NULL ) {
og 0:eabefd4ea69c 500 pc.printf("failed!\n");
og 0:eabefd4ea69c 501 while(1);
og 0:eabefd4ea69c 502 }
og 0:eabefd4ea69c 503 closedir(dir);
og 0:eabefd4ea69c 504 pc.printf("SD OK!\n");
og 0:eabefd4ea69c 505
og 0:eabefd4ea69c 506 fp = fopen("/sd/woof.bmp", "r");
og 0:eabefd4ea69c 507 if (fp==NULL) {
og 0:eabefd4ea69c 508 pc.printf("didnt find image\n");
og 0:eabefd4ea69c 509 while (1);
og 0:eabefd4ea69c 510 }
og 0:eabefd4ea69c 511
og 0:eabefd4ea69c 512 if (! bmpReadHeader(fp)) {
og 0:eabefd4ea69c 513 pc.printf("bad bmp\n");
og 0:eabefd4ea69c 514 while(1);
og 0:eabefd4ea69c 515 }
og 0:eabefd4ea69c 516
og 0:eabefd4ea69c 517 pc.printf("image size %d, %d\n", bmpWidth, bmpHeight);
og 0:eabefd4ea69c 518
og 0:eabefd4ea69c 519 bmpdraw(fp, 0, 0);
og 0:eabefd4ea69c 520 wait(1);
og 0:eabefd4ea69c 521 fclose(fp);
og 0:eabefd4ea69c 522
og 0:eabefd4ea69c 523
og 0:eabefd4ea69c 524
og 0:eabefd4ea69c 525
og 0:eabefd4ea69c 526
og 0:eabefd4ea69c 527 //LCD_Init();
og 0:eabefd4ea69c 528 tft.initDisplay();
og 0:eabefd4ea69c 529 tft.fillScreen(BLACK);
og 0:eabefd4ea69c 530 wait_ms(1);
og 0:eabefd4ea69c 531 while(1)
og 0:eabefd4ea69c 532 {
og 0:eabefd4ea69c 533 tft.fillScreen(0);
og 0:eabefd4ea69c 534 tft.setRotation(0);
og 0:eabefd4ea69c 535 bmpdraw(fp, 0, 0);
og 0:eabefd4ea69c 536 wait(1);
og 0:eabefd4ea69c 537
og 0:eabefd4ea69c 538 tft.fillScreen(0);
og 0:eabefd4ea69c 539 tft.setRotation(1);
og 0:eabefd4ea69c 540 bmpdraw(fp, 0, 0);
og 0:eabefd4ea69c 541 wait(1);
og 0:eabefd4ea69c 542
og 0:eabefd4ea69c 543 tft.fillScreen(0);
og 0:eabefd4ea69c 544 tft.setRotation(2);
og 0:eabefd4ea69c 545 bmpdraw(fp, 0, 0);
og 0:eabefd4ea69c 546 wait(1);
og 0:eabefd4ea69c 547
og 0:eabefd4ea69c 548 tft.fillScreen(0);
og 0:eabefd4ea69c 549 tft.setRotation(3);
og 0:eabefd4ea69c 550 bmpdraw(fp, 0, 0);
og 0:eabefd4ea69c 551 wait(1);
og 0:eabefd4ea69c 552
og 0:eabefd4ea69c 553 testbmp();
og 0:eabefd4ea69c 554 rotateText();
og 0:eabefd4ea69c 555 //rotateTest();
og 0:eabefd4ea69c 556
og 0:eabefd4ea69c 557 testlinerotate();
og 0:eabefd4ea69c 558
og 0:eabefd4ea69c 559 testtext(WHITE);
og 0:eabefd4ea69c 560
og 0:eabefd4ea69c 561
og 0:eabefd4ea69c 562 testBars();
og 0:eabefd4ea69c 563 testfastlines(CYAN, MAGENTA);
og 0:eabefd4ea69c 564 testtriangles();
og 0:eabefd4ea69c 565 testfilltriangles();
og 0:eabefd4ea69c 566 testfillcircles(50, RED);
og 0:eabefd4ea69c 567 tft.fillScreen(BLACK);
og 0:eabefd4ea69c 568 testdrawcircles(10, YELLOW);
og 0:eabefd4ea69c 569 testdrawrects(GREEN);
og 0:eabefd4ea69c 570 testlines(BLUE);
og 0:eabefd4ea69c 571 testfillrects(RED, WHITE);
og 0:eabefd4ea69c 572 testFillRoundRect();
og 0:eabefd4ea69c 573
og 0:eabefd4ea69c 574 testdrawrects(GREEN);
og 0:eabefd4ea69c 575
og 0:eabefd4ea69c 576 tft.DispColor(RED); //RED
og 0:eabefd4ea69c 577 wait_us(10);
og 0:eabefd4ea69c 578
og 0:eabefd4ea69c 579 tft.DispColor(GREEN); //GREEN
og 0:eabefd4ea69c 580 wait_us(10);
og 0:eabefd4ea69c 581
og 0:eabefd4ea69c 582 tft.DispColor(BLUE);//BLUE
og 0:eabefd4ea69c 583 wait_us(10);
og 0:eabefd4ea69c 584
og 0:eabefd4ea69c 585 tft.DispColor(WHITE); //WHITE
og 0:eabefd4ea69c 586 //MYMXMV++;
og 0:eabefd4ea69c 587
og 0:eabefd4ea69c 588 }
og 0:eabefd4ea69c 589 }