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:
Wed Dec 12 12:42:22 2012 +0000
Revision:
1:557df792279c
Parent:
0:ee7076d8260a
Child:
2:d0acbd263ec7
Replaced circle and fillcircle with draw_ellipse and fill_ellipse
; Modified rect and fillrect: use wirdth and height parameters instead of x1,y1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
frankvnk 0:ee7076d8260a 1 #include "stdio.h"
frankvnk 0:ee7076d8260a 2 #include "mbed.h"
frankvnk 0:ee7076d8260a 3 #include "SPI_TFT.h"
frankvnk 0:ee7076d8260a 4 #include "string"
frankvnk 0:ee7076d8260a 5 #include "Arial12x12.h"
frankvnk 0:ee7076d8260a 6 #include "Arial24x23.h"
frankvnk 0:ee7076d8260a 7 #include "Arial28x28.h"
frankvnk 0:ee7076d8260a 8 #include "font_big.h"
frankvnk 0:ee7076d8260a 9 #include "Touch.h"
frankvnk 0:ee7076d8260a 10
frankvnk 0:ee7076d8260a 11 extern unsigned char p1[]; // the mbed logo
frankvnk 0:ee7076d8260a 12 #define RGB565CONVERT(red, green, blue) (uint16_t)( (( red >> 3 ) << 11 ) | (( green >> 2 ) << 5 ) | ( blue >> 3 ))
frankvnk 0:ee7076d8260a 13
frankvnk 0:ee7076d8260a 14 // ADS7843 -> mosi, miso, sclk, cs, irq - TFT -> mosi, miso, sclk, cs, reset
frankvnk 0:ee7076d8260a 15 TouchScreenADS7843 TFT(p5 ,p6 ,p7 ,p8 ,P2_13 ,p11, p12, p13, p14, p15,"TFT");
frankvnk 0:ee7076d8260a 16
frankvnk 0:ee7076d8260a 17 // (To be modified) put these global vars back in Touch.cpp/Touch.h
frankvnk 0:ee7076d8260a 18 Matrix matrix;
frankvnk 0:ee7076d8260a 19 Coordinate display;
frankvnk 0:ee7076d8260a 20 Coordinate screen;
frankvnk 0:ee7076d8260a 21
frankvnk 0:ee7076d8260a 22 int main()
frankvnk 0:ee7076d8260a 23 {
frankvnk 0:ee7076d8260a 24 unsigned char Ads7846_status;
frankvnk 0:ee7076d8260a 25 unsigned short LCD_id;
frankvnk 0:ee7076d8260a 26 TFT.claim(stdout); // send stdout to the TFT display
frankvnk 0:ee7076d8260a 27 TFT.TP_Init();
frankvnk 0:ee7076d8260a 28
frankvnk 0:ee7076d8260a 29 TFT.background(Black); // set background to black
frankvnk 0:ee7076d8260a 30 TFT.foreground(White); // set chars to white
frankvnk 0:ee7076d8260a 31
frankvnk 0:ee7076d8260a 32
frankvnk 0:ee7076d8260a 33 // LCD demo
frankvnk 0:ee7076d8260a 34 // first show the 4 directions
frankvnk 0:ee7076d8260a 35 TFT.cls();
frankvnk 0:ee7076d8260a 36 TFT.set_font((unsigned char*) Arial12x12);
frankvnk 0:ee7076d8260a 37 TFT.set_orientation(0);
frankvnk 0:ee7076d8260a 38 TFT.locate(0,0);
frankvnk 0:ee7076d8260a 39 printf(" Hello Mbed 0");
frankvnk 0:ee7076d8260a 40 TFT.set_orientation(1);
frankvnk 0:ee7076d8260a 41 TFT.locate(0,0);
frankvnk 0:ee7076d8260a 42 printf(" Hello Mbed 1");
frankvnk 0:ee7076d8260a 43 TFT.set_orientation(2);
frankvnk 0:ee7076d8260a 44 TFT.locate(0,0);
frankvnk 0:ee7076d8260a 45 printf(" Hello Mbed 2");
frankvnk 0:ee7076d8260a 46 TFT.set_orientation(3);
frankvnk 0:ee7076d8260a 47 TFT.locate(0,0);
frankvnk 0:ee7076d8260a 48 printf(" Hello Mbed 3");
frankvnk 0:ee7076d8260a 49 TFT.set_orientation(1);
frankvnk 0:ee7076d8260a 50 TFT.set_font((unsigned char*) Arial24x23);
frankvnk 0:ee7076d8260a 51 TFT.locate(50,100);
frankvnk 0:ee7076d8260a 52 TFT.printf("TFT orientation");
frankvnk 0:ee7076d8260a 53
frankvnk 0:ee7076d8260a 54 wait(2);
frankvnk 0:ee7076d8260a 55
frankvnk 0:ee7076d8260a 56 // draw some graphics
frankvnk 0:ee7076d8260a 57 TFT.cls();
frankvnk 0:ee7076d8260a 58 TFT.set_orientation(1);
frankvnk 0:ee7076d8260a 59 TFT.set_font((unsigned char*) Arial24x23);
frankvnk 0:ee7076d8260a 60 TFT.locate(120,115);
frankvnk 0:ee7076d8260a 61 TFT.printf("Graphic");
frankvnk 0:ee7076d8260a 62 TFT.line(0,0,100,200,Green);
frankvnk 1:557df792279c 63 TFT.rect(100,50,50,50,Red);
frankvnk 1:557df792279c 64 TFT.fillrect(180,25,40,45,Blue);
frankvnk 1:557df792279c 65 TFT.draw_ellipse(80, 150, 33, 33, White);
frankvnk 1:557df792279c 66 TFT.fill_ellipse(80, 50, 33, 33, White);
frankvnk 0:ee7076d8260a 67
frankvnk 0:ee7076d8260a 68 wait(2);
frankvnk 0:ee7076d8260a 69
frankvnk 0:ee7076d8260a 70 // bigger text
frankvnk 0:ee7076d8260a 71 TFT.foreground(White);
frankvnk 0:ee7076d8260a 72 TFT.background(Blue);
frankvnk 0:ee7076d8260a 73 TFT.cls();
frankvnk 0:ee7076d8260a 74 TFT.set_font((unsigned char*) Arial24x23);
frankvnk 0:ee7076d8260a 75 TFT.locate(0,0);
frankvnk 0:ee7076d8260a 76 TFT.printf("Different Fonts :");
frankvnk 0:ee7076d8260a 77
frankvnk 0:ee7076d8260a 78 TFT.set_font((unsigned char*) Neu42x35);
frankvnk 0:ee7076d8260a 79 TFT.locate(0,50);
frankvnk 0:ee7076d8260a 80 TFT.printf("Hello");
frankvnk 0:ee7076d8260a 81 TFT.set_font((unsigned char*) Arial24x23);
frankvnk 0:ee7076d8260a 82 TFT.locate(50,100);
frankvnk 0:ee7076d8260a 83 TFT.printf("Hello");
frankvnk 0:ee7076d8260a 84 TFT.set_font((unsigned char*) Arial12x12);
frankvnk 0:ee7076d8260a 85 TFT.locate(55,150);
frankvnk 0:ee7076d8260a 86 TFT.printf("Hello");
frankvnk 0:ee7076d8260a 87
frankvnk 0:ee7076d8260a 88 TFT.set_orientation(2);
frankvnk 0:ee7076d8260a 89 TFT.set_font((unsigned char*) Arial24x23);
frankvnk 0:ee7076d8260a 90 TFT.locate(10,10);
frankvnk 0:ee7076d8260a 91 TFT.printf("Hi mbed");
frankvnk 0:ee7076d8260a 92 wait(2);
frankvnk 0:ee7076d8260a 93
frankvnk 0:ee7076d8260a 94 // mbed logo
frankvnk 0:ee7076d8260a 95 TFT.set_orientation(1);
frankvnk 0:ee7076d8260a 96 TFT.background(Black);
frankvnk 0:ee7076d8260a 97 TFT.cls();
frankvnk 0:ee7076d8260a 98 TFT.Bitmap(90,90,172,55,p1);
frankvnk 0:ee7076d8260a 99
frankvnk 0:ee7076d8260a 100 // Read LCD ID
frankvnk 0:ee7076d8260a 101 TFT.set_orientation(0);
frankvnk 0:ee7076d8260a 102 LCD_id = TFT.Read_ID();
frankvnk 0:ee7076d8260a 103 TFT.locate(10,10);
frankvnk 0:ee7076d8260a 104 TFT.printf("LCD: ILI%04X", LCD_id);
frankvnk 0:ee7076d8260a 105 wait(2);
frankvnk 0:ee7076d8260a 106
frankvnk 0:ee7076d8260a 107 // RGB color wheel demo (cycle through all colors)
frankvnk 0:ee7076d8260a 108 TFT.cls();
frankvnk 0:ee7076d8260a 109 TFT.foreground(Yellow); // set chars to yellow
frankvnk 0:ee7076d8260a 110 TFT.set_font((unsigned char*) Arial12x12);
frankvnk 0:ee7076d8260a 111 TFT.locate(10,10);
frankvnk 0:ee7076d8260a 112 TFT.printf("RGB color wheel (5x)");
frankvnk 0:ee7076d8260a 113
frankvnk 0:ee7076d8260a 114 uint8_t r = 255, g = 0, b = 0, step = 5, i;
frankvnk 0:ee7076d8260a 115 for (i=0;i<5;i++)
frankvnk 0:ee7076d8260a 116 {
frankvnk 1:557df792279c 117 for(;g<255;g+=step) {TFT.fillrect(70,110,100,100,RGB565CONVERT(r, g, b));} // Cycle from FF0000 to FFFF00 : red to yellow
frankvnk 1:557df792279c 118 for(;r>0;r-=step) {TFT.fillrect(70,110,100,100,RGB565CONVERT(r, g, b));} // Cycle from FFFF00 to 00FF00 : yellow to green
frankvnk 1:557df792279c 119 for(;b<255;b+=step) {TFT.fillrect(70,110,100,100,RGB565CONVERT(r, g, b));} // Cycle from 00FF00 to 00FFFF : green to cyan
frankvnk 1:557df792279c 120 for(;g>0;g-=step) {TFT.fillrect(70,110,100,100,RGB565CONVERT(r, g, b));} // Cycle from 00FFFF to 0000FF : cyan to blue
frankvnk 1:557df792279c 121 for(;r<255;r+=step) {TFT.fillrect(70,110,100,100,RGB565CONVERT(r, g, b));} // Cycle from 0000FF to FF00FF : blue to purple
frankvnk 1:557df792279c 122 for(;b>0;b-=step) {TFT.fillrect(70,110,100,100,RGB565CONVERT(r, g, b));} // Cycle from FF00FF to FF0000 : purple to red
frankvnk 0:ee7076d8260a 123 }
frankvnk 0:ee7076d8260a 124 wait(2);
frankvnk 0:ee7076d8260a 125
frankvnk 0:ee7076d8260a 126
frankvnk 0:ee7076d8260a 127 // Touchpanel demo
frankvnk 0:ee7076d8260a 128 TFT.TouchPanel_Calibrate(&matrix);
frankvnk 0:ee7076d8260a 129 TFT.set_font((unsigned char*) Arial12x12);
frankvnk 0:ee7076d8260a 130 TFT.set_orientation(0);
frankvnk 0:ee7076d8260a 131 TFT.cls();
frankvnk 0:ee7076d8260a 132 TFT.locate(0,0);
frankvnk 0:ee7076d8260a 133 TFT.printf(" X:");
frankvnk 0:ee7076d8260a 134 TFT.locate(70,0);
frankvnk 0:ee7076d8260a 135 TFT.printf(" Y:");
frankvnk 0:ee7076d8260a 136
frankvnk 0:ee7076d8260a 137 while (1)
frankvnk 0:ee7076d8260a 138 {
frankvnk 0:ee7076d8260a 139 if (!TFT._tp_irq)
frankvnk 0:ee7076d8260a 140 {
frankvnk 0:ee7076d8260a 141 Ads7846_status = TFT.Read_Ads7846(&screen);
frankvnk 0:ee7076d8260a 142 if (Ads7846_status)
frankvnk 0:ee7076d8260a 143 {
frankvnk 0:ee7076d8260a 144 TFT.getDisplayPoint(&display, &screen, &matrix ) ;
frankvnk 0:ee7076d8260a 145 TFT.TP_DrawPoint(display.x,display.y, Blue);
frankvnk 1:557df792279c 146 // TFT.rect(display.x,display.y,1,1,Red);
frankvnk 0:ee7076d8260a 147 TFT.locate(25,0);
frankvnk 0:ee7076d8260a 148 printf("%03d",display.x);
frankvnk 0:ee7076d8260a 149 TFT.locate(95,0);
frankvnk 0:ee7076d8260a 150 printf("%03d",display.y);
frankvnk 0:ee7076d8260a 151 // Touchscreen area is larger than LCD area.
frankvnk 0:ee7076d8260a 152 // We use the bottom area outside the LCD area to clear the screen (y value > 320).
frankvnk 0:ee7076d8260a 153 if (display.y > 320)
frankvnk 0:ee7076d8260a 154 {
frankvnk 0:ee7076d8260a 155 TFT.cls();
frankvnk 0:ee7076d8260a 156 TFT.locate(0,0);
frankvnk 0:ee7076d8260a 157 TFT.printf(" X:");
frankvnk 0:ee7076d8260a 158 TFT.locate(70,0);
frankvnk 0:ee7076d8260a 159 TFT.printf(" Y:");
frankvnk 0:ee7076d8260a 160
frankvnk 0:ee7076d8260a 161 }
frankvnk 0:ee7076d8260a 162 }
frankvnk 0:ee7076d8260a 163 }
frankvnk 0:ee7076d8260a 164 }
frankvnk 0:ee7076d8260a 165 }