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

Dependencies:   Mini-DK SDFileSystem mbed

Fork of LPC1768_Mini-DK by Frank Vannieuwkerke

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 }