KL25Z driving an ILI9320 LCD board with touch panel (HY28A-LCDB SPI)

Dependencies:   SPI_TFT_ILI9320 mbed

Committer:
frankvnk
Date:
Tue Mar 18 19:36:05 2014 +0000
Revision:
0:ff976ad09b2f
Child:
1:76f92f6b3737
Initial release

Who changed what in which revision?

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