LPC1768 Mini-DK board with 2.8" SPI TFT and SPI touch

Dependencies:   Mini-DK mbed SDFileSystem

WARNING: filetoflash (SD to CPU flash)

The SPI_TFT library called from Mini-DK.lib contains an option to copy an image from the SD card to the CPU flash memory. This allows you to use an image as background without speed loss when writing other text and graphics.

By default, this option is enabled.

It can be disabled by uncommenting the #define mentioned below in Mini_DK.h:

#define NO_FLASH_BUFFER

Since the flash memory has limited write endurance, DO NOT use this feature when you intend to read multiple images from the SD card (eg: when used as a photo frame).

Committer:
frankvnk
Date:
Thu Jan 10 08:58:47 2013 +0000
Revision:
13:a10300cac491
Parent:
10:d07f76421408
Child:
15:5059751d2fa2
FLASH_BUFFER comment update in main.cpp

Who changed what in which revision?

UserRevisionLine numberNew contents of line
frankvnk 10:d07f76421408 1 /*
frankvnk 10:d07f76421408 2 This file contains 3 examples:
frankvnk 10:d07f76421408 3
frankvnk 10:d07f76421408 4 ONE : Original example with paint demo.
frankvnk 10:d07f76421408 5 TWO : Example for displaying a bitmap read from SD card.
frankvnk 10:d07f76421408 6 Download the house.bmp bitmap file from http://mbed.org/media/uploads/frankvnk/house.bmp
frankvnk 10:d07f76421408 7 Copy this file to the root of an SD card, insert it into the Mini-DK.
frankvnk 10:d07f76421408 8 THREE : Example for copying a bitmap from SD to flash memory, use it as background and
frankvnk 10:d07f76421408 9 write text without disrupting the background image.
frankvnk 10:d07f76421408 10 Download the house.bmp bitmap file from http://mbed.org/media/uploads/frankvnk/house.bmp
frankvnk 10:d07f76421408 11 Copy this file to the root of an SD card, insert it into the Mini-DK.
frankvnk 10:d07f76421408 12
frankvnk 10:d07f76421408 13 IMPORTANT:
frankvnk 13:a10300cac491 14 If copy to flash option is not needed - enable //#define NO_FLASH_BUFFER in Mini_DK.h
frankvnk 13:a10300cac491 15
frankvnk 10:d07f76421408 16
frankvnk 10:d07f76421408 17 UNCOMMENT THE DESIRED CODE TO TEST.
frankvnk 10:d07f76421408 18
frankvnk 10:d07f76421408 19 */
frankvnk 10:d07f76421408 20
frankvnk 10:d07f76421408 21 // =========================================================================================================
frankvnk 10:d07f76421408 22 // ================================================== ONE ==================================================
frankvnk 10:d07f76421408 23 // =========================================================================================================
frankvnk 9:3e117b89c705 24 #include "stdio.h"
frankvnk 9:3e117b89c705 25 #include "mbed.h"
frankvnk 9:3e117b89c705 26 #include "Mini_DK.h"
frankvnk 9:3e117b89c705 27
frankvnk 9:3e117b89c705 28 extern unsigned char p1[]; // the mbed logo
frankvnk 9:3e117b89c705 29 #define RGB565CONVERT(red, green, blue) (uint16_t)( (( red >> 3 ) << 11 ) | (( green >> 2 ) << 5 ) | ( blue >> 3 ))
frankvnk 9:3e117b89c705 30
frankvnk 9:3e117b89c705 31 DigitalOut led(DK_LED1);
frankvnk 9:3e117b89c705 32 // TFT -> mosi, miso, sclk, cs
frankvnk 9:3e117b89c705 33 SPI_TFT TFT(LCD_SDI, LCD_SDO, LCD_SCK, LCD_CS,"TFT");
frankvnk 9:3e117b89c705 34 // ADS7843 -> mosi, miso, sclk, cs, irq, SPI_TFT
frankvnk 9:3e117b89c705 35 TouchScreenADS7843 TP(TP_SDI ,TP_SDO ,TP_SCK ,TP_CS ,TP_IRQ, &TFT);
frankvnk 9:3e117b89c705 36
frankvnk 9:3e117b89c705 37 int main()
frankvnk 9:3e117b89c705 38 {
frankvnk 9:3e117b89c705 39 unsigned short LCD_id;
frankvnk 9:3e117b89c705 40 TFT.claim(stdout); // send stdout to the TFT display
frankvnk 9:3e117b89c705 41
frankvnk 9:3e117b89c705 42 TFT.background(Black); // set background to black
frankvnk 9:3e117b89c705 43 TFT.foreground(White); // set chars to white
frankvnk 9:3e117b89c705 44
frankvnk 9:3e117b89c705 45
frankvnk 9:3e117b89c705 46 // LCD demo
frankvnk 9:3e117b89c705 47 // first show the 4 directions
frankvnk 9:3e117b89c705 48 TFT.cls();
frankvnk 9:3e117b89c705 49 TFT.set_font((unsigned char*) Arial12x12);
frankvnk 9:3e117b89c705 50 TFT.set_orientation(0);
frankvnk 9:3e117b89c705 51 TFT.locate(0,0);
frankvnk 10:d07f76421408 52 printf(" Hello Mbed 0");
frankvnk 9:3e117b89c705 53 TFT.set_orientation(1);
frankvnk 9:3e117b89c705 54 TFT.locate(0,0);
frankvnk 10:d07f76421408 55 printf(" Hello Mbed 1");
frankvnk 9:3e117b89c705 56 TFT.set_orientation(2);
frankvnk 9:3e117b89c705 57 TFT.locate(0,0);
frankvnk 10:d07f76421408 58 printf(" Hello Mbed 2");
frankvnk 9:3e117b89c705 59 TFT.set_orientation(3);
frankvnk 9:3e117b89c705 60 TFT.locate(0,0);
frankvnk 10:d07f76421408 61 printf(" Hello Mbed 3");
frankvnk 9:3e117b89c705 62 TFT.set_orientation(1);
frankvnk 9:3e117b89c705 63 TFT.set_font((unsigned char*) Arial24x23);
frankvnk 9:3e117b89c705 64 TFT.locate(50,100);
frankvnk 10:d07f76421408 65 printf("TFT orientation");
frankvnk 9:3e117b89c705 66
frankvnk 9:3e117b89c705 67 wait(2);
frankvnk 9:3e117b89c705 68
frankvnk 9:3e117b89c705 69 // draw some graphics
frankvnk 9:3e117b89c705 70 TFT.cls();
frankvnk 9:3e117b89c705 71 TFT.set_orientation(1);
frankvnk 9:3e117b89c705 72 TFT.set_font((unsigned char*) Arial24x23);
frankvnk 9:3e117b89c705 73 TFT.locate(120,115);
frankvnk 10:d07f76421408 74 printf("Graphic");
frankvnk 9:3e117b89c705 75 TFT.line(0,0,100,200,Green);
frankvnk 9:3e117b89c705 76 TFT.rect(100,50,50,50,Red);
frankvnk 9:3e117b89c705 77 TFT.fillrect(180,25,40,45,Blue);
frankvnk 9:3e117b89c705 78 TFT.draw_ellipse(80, 150, 33, 33, White);
frankvnk 9:3e117b89c705 79 TFT.fill_ellipse(80, 50, 33, 33, White);
frankvnk 9:3e117b89c705 80 wait(2);
frankvnk 9:3e117b89c705 81 TFT.cls();
frankvnk 9:3e117b89c705 82 TFT.draw_ellipse(160, 120, 100, 50, Yellow);
frankvnk 9:3e117b89c705 83 TFT.draw_ellipse(160, 120, 100, 100, Blue);
frankvnk 9:3e117b89c705 84 TFT.fill_ellipse(160, 120, 80, 40, Green);
frankvnk 9:3e117b89c705 85 wait(2);
frankvnk 9:3e117b89c705 86
frankvnk 9:3e117b89c705 87 // bigger text
frankvnk 9:3e117b89c705 88 TFT.foreground(White);
frankvnk 9:3e117b89c705 89 TFT.background(Blue);
frankvnk 9:3e117b89c705 90 TFT.cls();
frankvnk 9:3e117b89c705 91 TFT.set_font((unsigned char*) Arial24x23);
frankvnk 9:3e117b89c705 92 TFT.locate(0,0);
frankvnk 10:d07f76421408 93 printf("Different Fonts :");
frankvnk 9:3e117b89c705 94
frankvnk 9:3e117b89c705 95 TFT.set_font((unsigned char*) Neu42x35);
frankvnk 9:3e117b89c705 96 TFT.locate(0,50);
frankvnk 10:d07f76421408 97 printf("Hello");
frankvnk 9:3e117b89c705 98 TFT.set_font((unsigned char*) Arial24x23);
frankvnk 9:3e117b89c705 99 TFT.locate(50,100);
frankvnk 10:d07f76421408 100 printf("Hello");
frankvnk 9:3e117b89c705 101 TFT.set_font((unsigned char*) Arial12x12);
frankvnk 9:3e117b89c705 102 TFT.locate(55,150);
frankvnk 10:d07f76421408 103 printf("Hello");
frankvnk 9:3e117b89c705 104
frankvnk 9:3e117b89c705 105 TFT.set_orientation(2);
frankvnk 9:3e117b89c705 106 TFT.set_font((unsigned char*) Arial24x23);
frankvnk 9:3e117b89c705 107 TFT.locate(10,10);
frankvnk 10:d07f76421408 108 printf("Hi mbed");
frankvnk 9:3e117b89c705 109 wait(2);
frankvnk 9:3e117b89c705 110
frankvnk 9:3e117b89c705 111 // mbed logo
frankvnk 9:3e117b89c705 112 TFT.set_orientation(1);
frankvnk 9:3e117b89c705 113 TFT.background(Black);
frankvnk 9:3e117b89c705 114 TFT.cls();
frankvnk 9:3e117b89c705 115 TFT.Bitmap(90,90,172,55,p1);
frankvnk 9:3e117b89c705 116
frankvnk 9:3e117b89c705 117 // Read LCD ID
frankvnk 9:3e117b89c705 118 TFT.set_orientation(0);
frankvnk 9:3e117b89c705 119 LCD_id = TFT.Read_ID();
frankvnk 9:3e117b89c705 120 TFT.locate(10,10);
frankvnk 10:d07f76421408 121 printf("LCD: ILI%04X", LCD_id);
frankvnk 9:3e117b89c705 122 wait(2);
frankvnk 9:3e117b89c705 123
frankvnk 9:3e117b89c705 124 // RGB color wheel demo (cycle through all colors)
frankvnk 9:3e117b89c705 125 TFT.cls();
frankvnk 9:3e117b89c705 126 TFT.foreground(Yellow); // set chars to yellow
frankvnk 9:3e117b89c705 127 TFT.set_font((unsigned char*) Arial12x12);
frankvnk 9:3e117b89c705 128 TFT.locate(10,10);
frankvnk 10:d07f76421408 129 printf("RGB color wheel (2x)");
frankvnk 9:3e117b89c705 130
frankvnk 9:3e117b89c705 131 uint8_t r = 255, g = 0, b = 0, step = 1, i;
frankvnk 9:3e117b89c705 132 for (i=0;i<2;i++)
frankvnk 9:3e117b89c705 133 {
frankvnk 9:3e117b89c705 134 for(;g<255;g+=step) {TFT.fillrect(70,110,100,100,RGB565CONVERT(r, g, b));} // Cycle from FF0000 to FFFF00 : red to yellow
frankvnk 9:3e117b89c705 135 for(;r>0;r-=step) {TFT.fillrect(70,110,100,100,RGB565CONVERT(r, g, b));} // Cycle from FFFF00 to 00FF00 : yellow to green
frankvnk 9:3e117b89c705 136 for(;b<255;b+=step) {TFT.fillrect(70,110,100,100,RGB565CONVERT(r, g, b));} // Cycle from 00FF00 to 00FFFF : green to cyan
frankvnk 9:3e117b89c705 137 for(;g>0;g-=step) {TFT.fillrect(70,110,100,100,RGB565CONVERT(r, g, b));} // Cycle from 00FFFF to 0000FF : cyan to blue
frankvnk 9:3e117b89c705 138 for(;r<255;r+=step) {TFT.fillrect(70,110,100,100,RGB565CONVERT(r, g, b));} // Cycle from 0000FF to FF00FF : blue to purple
frankvnk 9:3e117b89c705 139 for(;b>0;b-=step) {TFT.fillrect(70,110,100,100,RGB565CONVERT(r, g, b));} // Cycle from FF00FF to FF0000 : purple to red
frankvnk 9:3e117b89c705 140 }
frankvnk 9:3e117b89c705 141 wait(2);
frankvnk 9:3e117b89c705 142
frankvnk 9:3e117b89c705 143 // Touchpanel demo
frankvnk 9:3e117b89c705 144 TP.TouchPanel_Calibrate();
frankvnk 9:3e117b89c705 145 TFT.set_font((unsigned char*) Arial12x12);
frankvnk 9:3e117b89c705 146 TFT.set_orientation(0);
frankvnk 9:3e117b89c705 147 TFT.locate(0,0);
frankvnk 10:d07f76421408 148 printf(" X:");
frankvnk 9:3e117b89c705 149 TFT.locate(70,0);
frankvnk 10:d07f76421408 150 printf(" Y:");
frankvnk 9:3e117b89c705 151 while (1)
frankvnk 9:3e117b89c705 152 {
frankvnk 9:3e117b89c705 153 if (!TP._tp_irq)
frankvnk 9:3e117b89c705 154 {
frankvnk 9:3e117b89c705 155 if (TP.Read_Ads7846())
frankvnk 9:3e117b89c705 156 {
frankvnk 9:3e117b89c705 157 TP.getDisplayPoint() ;
frankvnk 9:3e117b89c705 158 TP.TP_DrawPoint(TP.display.x,TP.display.y, Blue);
frankvnk 9:3e117b89c705 159 TFT.locate(25,0);
frankvnk 10:d07f76421408 160 printf("%03d",TP.display.x);
frankvnk 9:3e117b89c705 161 TFT.locate(95,0);
frankvnk 10:d07f76421408 162 printf("%03d",TP.display.y);
frankvnk 9:3e117b89c705 163 // Touchscreen area is larger than LCD area.
frankvnk 9:3e117b89c705 164 // We use the bottom area outside the LCD area to clear the screen (y value > 320).
frankvnk 9:3e117b89c705 165 if (TP.display.y > 320)
frankvnk 9:3e117b89c705 166 {
frankvnk 9:3e117b89c705 167 TFT.cls();
frankvnk 9:3e117b89c705 168 TFT.locate(0,0);
frankvnk 10:d07f76421408 169 printf(" X:");
frankvnk 9:3e117b89c705 170 TFT.locate(70,0);
frankvnk 10:d07f76421408 171 printf(" Y:");
frankvnk 9:3e117b89c705 172 }
frankvnk 9:3e117b89c705 173 }
frankvnk 9:3e117b89c705 174 }
frankvnk 9:3e117b89c705 175 }
frankvnk 9:3e117b89c705 176 }
frankvnk 10:d07f76421408 177
frankvnk 10:d07f76421408 178 /*
frankvnk 10:d07f76421408 179 // =========================================================================================================
frankvnk 10:d07f76421408 180 // ================================================== TWO ==================================================
frankvnk 10:d07f76421408 181 // =========================================================================================================
frankvnk 10:d07f76421408 182
frankvnk 10:d07f76421408 183 #include "stdio.h"
frankvnk 10:d07f76421408 184 #include "mbed.h"
frankvnk 10:d07f76421408 185 #include "SDFileSystem.h"
frankvnk 10:d07f76421408 186 #include "Mini_DK.h"
frankvnk 10:d07f76421408 187
frankvnk 10:d07f76421408 188 // SD card
frankvnk 10:d07f76421408 189 SDFileSystem sd(SD_SDI, SD_SDO, SD_SCK, SD_CS, "sd");
frankvnk 10:d07f76421408 190 // TFT -> mosi, miso, sclk, cs
frankvnk 10:d07f76421408 191 SPI_TFT TFT(LCD_SDI, LCD_SDO, LCD_SCK, LCD_CS,"TFT");
frankvnk 10:d07f76421408 192 // ADS7843 -> mosi, miso, sclk, cs, irq, SPI_TFT
frankvnk 10:d07f76421408 193 TouchScreenADS7843 TP(TP_SDI ,TP_SDO ,TP_SCK ,TP_CS ,TP_IRQ, &TFT);
frankvnk 10:d07f76421408 194
frankvnk 10:d07f76421408 195 int main()
frankvnk 10:d07f76421408 196 {
frankvnk 10:d07f76421408 197 TFT.background(Black); // set background to black
frankvnk 10:d07f76421408 198 TFT.foreground(White); // set chars to white
frankvnk 10:d07f76421408 199
frankvnk 10:d07f76421408 200 TFT.claim(stdout); // send stdout to the TFT display
frankvnk 10:d07f76421408 201 TFT.cls();
frankvnk 10:d07f76421408 202 TFT.set_font((unsigned char*) Arial12x12);
frankvnk 10:d07f76421408 203 TFT.set_orientation(1);
frankvnk 10:d07f76421408 204
frankvnk 10:d07f76421408 205 DISABLE_LCD_MISO;
frankvnk 10:d07f76421408 206 int dummy = TFT.Bitmap(0,0,"/sd/house.bmp");
frankvnk 10:d07f76421408 207 ENABLE_LCD_MISO;
frankvnk 10:d07f76421408 208 TFT.locate(0,0);
frankvnk 10:d07f76421408 209 printf("%02d",dummy);
frankvnk 10:d07f76421408 210 }
frankvnk 10:d07f76421408 211 */
frankvnk 10:d07f76421408 212
frankvnk 10:d07f76421408 213 /*
frankvnk 10:d07f76421408 214 // =========================================================================================================
frankvnk 10:d07f76421408 215 // ================================================= THREE =================================================
frankvnk 10:d07f76421408 216 // =========================================================================================================
frankvnk 10:d07f76421408 217
frankvnk 10:d07f76421408 218 #include "stdio.h"
frankvnk 10:d07f76421408 219 #include "mbed.h"
frankvnk 10:d07f76421408 220 #include "SDFileSystem.h"
frankvnk 10:d07f76421408 221 #include "Mini_DK.h"
frankvnk 10:d07f76421408 222
frankvnk 10:d07f76421408 223 // SD card
frankvnk 10:d07f76421408 224 SDFileSystem sd(SD_SDI, SD_SDO, SD_SCK, SD_CS, "sd");
frankvnk 10:d07f76421408 225 // TFT -> mosi, miso, sclk, cs
frankvnk 10:d07f76421408 226 SPI_TFT TFT(LCD_SDI, LCD_SDO, LCD_SCK, LCD_CS,"TFT");
frankvnk 10:d07f76421408 227 // ADS7843 -> mosi, miso, sclk, cs, irq, SPI_TFT
frankvnk 10:d07f76421408 228 TouchScreenADS7843 TP(TP_SDI ,TP_SDO ,TP_SCK ,TP_CS ,TP_IRQ, &TFT);
frankvnk 10:d07f76421408 229
frankvnk 10:d07f76421408 230
frankvnk 10:d07f76421408 231 Timer timer;
frankvnk 10:d07f76421408 232
frankvnk 10:d07f76421408 233 int main()
frankvnk 10:d07f76421408 234 {
frankvnk 10:d07f76421408 235 DISABLE_LCD_MISO;
frankvnk 10:d07f76421408 236 TFT.background(Black); // set background to black
frankvnk 10:d07f76421408 237 TFT.foreground(White); // set chars to white
frankvnk 10:d07f76421408 238
frankvnk 10:d07f76421408 239 TFT.claim(stdout); // send stdout to the TFT display
frankvnk 10:d07f76421408 240 TFT.cls();
frankvnk 10:d07f76421408 241 TFT.set_font((unsigned char*) Arial12x12);
frankvnk 10:d07f76421408 242 TFT.set_orientation(1);
frankvnk 10:d07f76421408 243
frankvnk 10:d07f76421408 244 TFT.locate(0,200);
frankvnk 10:d07f76421408 245 printf("Loading from SD...");
frankvnk 10:d07f76421408 246 TFT.Bitmap(0,0,"/sd/house.bmp");
frankvnk 10:d07f76421408 247
frankvnk 10:d07f76421408 248 TFT.locate(0,0);
frankvnk 10:d07f76421408 249 printf("Copying to flash...");
frankvnk 10:d07f76421408 250 TFT.fileToFlash("/sd/house.bmp");
frankvnk 10:d07f76421408 251 TFT.locate(0,40);
frankvnk 10:d07f76421408 252 printf("Done: CLS in 2 seconds");
frankvnk 10:d07f76421408 253 wait(2);
frankvnk 10:d07f76421408 254 TFT.backgroundImage(false);
frankvnk 10:d07f76421408 255 TFT.cls();
frankvnk 10:d07f76421408 256 wait(2);
frankvnk 10:d07f76421408 257 TFT.backgroundImage(true);
frankvnk 10:d07f76421408 258
frankvnk 10:d07f76421408 259
frankvnk 10:d07f76421408 260 timer.reset();
frankvnk 10:d07f76421408 261 timer.start();
frankvnk 10:d07f76421408 262 TFT.cls();
frankvnk 10:d07f76421408 263 timer.stop();
frankvnk 10:d07f76421408 264 TFT.foreground(Black);
frankvnk 10:d07f76421408 265 TFT.locate(0,200);
frankvnk 10:d07f76421408 266 printf("Wrote background in %d ms",timer.read_ms());
frankvnk 10:d07f76421408 267 TFT.foreground(Black);
frankvnk 10:d07f76421408 268
frankvnk 10:d07f76421408 269 TFT.set_orientation(3);
frankvnk 10:d07f76421408 270 TFT.locate(0,200);
frankvnk 10:d07f76421408 271 printf("Wrote background in %d ms",timer.read_ms());
frankvnk 10:d07f76421408 272
frankvnk 10:d07f76421408 273 wait(5);
frankvnk 10:d07f76421408 274 TFT.cls();
frankvnk 10:d07f76421408 275 TFT.set_font((unsigned char*) Neu42x35);
frankvnk 10:d07f76421408 276 TFT.locate(0,50);
frankvnk 10:d07f76421408 277 printf("Orient = 3");
frankvnk 10:d07f76421408 278 TFT.set_orientation(0);
frankvnk 10:d07f76421408 279 TFT.locate(0,50);
frankvnk 10:d07f76421408 280 printf("Orient = 0");
frankvnk 10:d07f76421408 281 wait(5);
frankvnk 10:d07f76421408 282
frankvnk 10:d07f76421408 283 TFT.set_orientation(0);
frankvnk 10:d07f76421408 284 TFT.cls();
frankvnk 10:d07f76421408 285 TFT.locate(0,50);
frankvnk 10:d07f76421408 286 printf("Orient = 0");
frankvnk 10:d07f76421408 287
frankvnk 10:d07f76421408 288 while(1);
frankvnk 10:d07f76421408 289 }
frankvnk 10:d07f76421408 290 */