2.8インチ液晶モジュール(8ビット) [M028C8347D8]

Dependencies:   SDFileSystem mbed

Fork of Aitendo_HX8347D_HelloWorld by k og

HX8347D

reference

connection

HX8347DArduino PinLPC1768
Nucleo/Arch Pro
DB0D2p8
DB1D3p26
DB2D4p25
DB3D5p24
DB4D6p23
DB5D7p10
DB6D8p9
DB7D9p22
RDA0p15
WRA1p16
RSA2p17
CSA3p18
RESETA4p19
LED_A3V33V3
SD_CSD10p21SPI_CS
SD_DIND11p5SPI_MOSI
SD_SCKD13p7SPI_SCK
SD_DOUTD12p6SPI_MISO

comment

wait_ms/wait_us

F103の挙動がおかしい。1ms未満は、動作しないので、外した。 とりあえず、遅延が無くて、手元にあるボードでは動作した。

Committer:
og
Date:
Fri Sep 02 12:28:00 2016 +0000
Revision:
3:df365619b475
Parent:
2:037b6c0182ce
release

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