Sample TFT to KL25Z program.

Dependencies:   SPI_STMPE610 TFT_fonts UniGraphic mbed

Fork of TFT_test_frdm-kl25z by Motoo Tanaka

Committer:
Sustainable
Date:
Tue Feb 13 20:21:30 2018 +0000
Revision:
5:449dc35a29bd
Parent:
3:34d8706e1614
Basic TFT to KL25Z board. Shows how to use colors and circles to create buttons. Also displays the x,y data after each touch.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Sustainable 5:449dc35a29bd 1 /*******************************************************************
Sustainable 5:449dc35a29bd 2 * TFT Sample program for STEM project
Sustainable 5:449dc35a29bd 3 * By Henry Foley, Feb 2017
Rhyme 0:6b8a2d4c88b3 4 *
Sustainable 5:449dc35a29bd 5 * Hardware: Freedom KL25Z uC development board with a TFT 2.8"
Sustainable 5:449dc35a29bd 6 * resistive touch display shield from Adafruit (1651).
Sustainable 5:449dc35a29bd 7 *
Rhyme 0:6b8a2d4c88b3 8 */
Rhyme 0:6b8a2d4c88b3 9
Rhyme 0:6b8a2d4c88b3 10 #include "mbed.h"
Rhyme 3:34d8706e1614 11 #include "ILI9341.h"
Rhyme 0:6b8a2d4c88b3 12 #include "SPI_STMPE610.h"
Rhyme 0:6b8a2d4c88b3 13 #include "Arial12x12.h"
Rhyme 0:6b8a2d4c88b3 14 #include "Arial24x23.h"
Rhyme 0:6b8a2d4c88b3 15 #include "Arial28x28.h"
Sustainable 5:449dc35a29bd 16 #include "Verdana22x21-16.h"
Rhyme 0:6b8a2d4c88b3 17
Rhyme 0:6b8a2d4c88b3 18 #define PIN_XP PTB3
Rhyme 0:6b8a2d4c88b3 19 #define PIN_XM PTB1
Rhyme 0:6b8a2d4c88b3 20 #define PIN_YP PTB2
Rhyme 0:6b8a2d4c88b3 21 #define PIN_YM PTB0
Rhyme 0:6b8a2d4c88b3 22 #define PIN_MOSI PTD2
Sustainable 5:449dc35a29bd 23 #define PIN_MISO PTD3
Sustainable 5:449dc35a29bd 24 #define PIN_SCLK PTD1
Sustainable 5:449dc35a29bd 25 #define PIN_CS_TFT PTD0
Sustainable 5:449dc35a29bd 26 #define PIN_DC_TFT PTD5
Sustainable 5:449dc35a29bd 27 #define PIN_BL_TFT PTC9
Sustainable 5:449dc35a29bd 28 #define PIN_CS_SD PTA4
Rhyme 0:6b8a2d4c88b3 29 #define PIN_CS_TSC PTA13
Sustainable 5:449dc35a29bd 30 #define PIN_RESET_TFT PTB10
Rhyme 0:6b8a2d4c88b3 31
Sustainable 5:449dc35a29bd 32
Rhyme 0:6b8a2d4c88b3 33
Rhyme 3:34d8706e1614 34 DigitalOut backlight(PTA12) ;
Sustainable 5:449dc35a29bd 35
Rhyme 0:6b8a2d4c88b3 36 SPI_STMPE610 TSC(PIN_MOSI, PIN_MISO, PIN_SCLK, PIN_CS_TSC) ;
Rhyme 0:6b8a2d4c88b3 37
Sustainable 5:449dc35a29bd 38 ILI9341 TFT(SPI_8, 10000000,
Sustainable 5:449dc35a29bd 39 PIN_MOSI, PIN_MISO, PIN_SCLK,
Sustainable 5:449dc35a29bd 40 PIN_CS_TFT, PIN_RESET_TFT, PIN_DC_TFT, "Adafruit2.8") ;
Sustainable 5:449dc35a29bd 41
Sustainable 5:449dc35a29bd 42 void initTFT(void);
Sustainable 5:449dc35a29bd 43 void drawScreen(void);
Sustainable 5:449dc35a29bd 44 uint16_t map(uint16_t, uint16_t, uint16_t, uint16_t, uint16_t);
Sustainable 5:449dc35a29bd 45 void display_xy(void);
Sustainable 5:449dc35a29bd 46
Sustainable 5:449dc35a29bd 47 int main()
Sustainable 5:449dc35a29bd 48 {
Sustainable 5:449dc35a29bd 49 static uint16_t x, y, z ;
Sustainable 5:449dc35a29bd 50 uint16_t temp_x;
Sustainable 5:449dc35a29bd 51 int touched = 0;
Sustainable 5:449dc35a29bd 52
Sustainable 5:449dc35a29bd 53 initTFT() ;
Rhyme 0:6b8a2d4c88b3 54
Sustainable 5:449dc35a29bd 55 drawScreen();
Sustainable 5:449dc35a29bd 56
Sustainable 5:449dc35a29bd 57 while(true)
Sustainable 5:449dc35a29bd 58 {
Sustainable 5:449dc35a29bd 59 touched = TSC.getRAWPoint(&x, &y, &z);
Sustainable 5:449dc35a29bd 60
Sustainable 5:449dc35a29bd 61 if(touched) // any touch
Sustainable 5:449dc35a29bd 62 {
Sustainable 5:449dc35a29bd 63
Sustainable 5:449dc35a29bd 64 // scale the raw values to match the screen orentation and 320(x = horiz) 240(y = vert) size, 0,0 = upper left corner
Sustainable 5:449dc35a29bd 65 temp_x = x;
Sustainable 5:449dc35a29bd 66 x = map(y,180, 3800,0,320);
Sustainable 5:449dc35a29bd 67 y = map(temp_x,3800,280,0,240);
Sustainable 5:449dc35a29bd 68 if( (x > 0 && x < 320) && ( y > 0 && y < 240 )) // if valid values
Sustainable 5:449dc35a29bd 69 {
Sustainable 5:449dc35a29bd 70 drawScreen();
Sustainable 5:449dc35a29bd 71
Sustainable 5:449dc35a29bd 72 TFT.BusEnable(true) ;
Sustainable 5:449dc35a29bd 73 TFT.background(Blue);
Sustainable 5:449dc35a29bd 74 wait(0.2);
Sustainable 5:449dc35a29bd 75 TFT.foreground(White);
Sustainable 5:449dc35a29bd 76 TFT.locate(120, 160);
Sustainable 5:449dc35a29bd 77 TFT.printf("x%3d", x);
Sustainable 5:449dc35a29bd 78 TFT.locate(120, 190);
Sustainable 5:449dc35a29bd 79 TFT.printf("y%3d", y);
Sustainable 5:449dc35a29bd 80 TFT.BusEnable(false) ;
Sustainable 5:449dc35a29bd 81 wait(0.5); // to reduce mutiple hits from one touch
Sustainable 5:449dc35a29bd 82 }
Sustainable 5:449dc35a29bd 83
Sustainable 5:449dc35a29bd 84 }
Sustainable 5:449dc35a29bd 85 }
Sustainable 5:449dc35a29bd 86 } // end of main()
Rhyme 0:6b8a2d4c88b3 87
Rhyme 0:6b8a2d4c88b3 88 void initTFT(void)
Rhyme 0:6b8a2d4c88b3 89 {
Rhyme 0:6b8a2d4c88b3 90 //Configure the display driver
Rhyme 3:34d8706e1614 91 TFT.BusEnable(true) ;
Sustainable 5:449dc35a29bd 92 TFT.set_orientation(1);
Sustainable 5:449dc35a29bd 93 backlight = 1 ;
Sustainable 5:449dc35a29bd 94 TFT.background(Blue);
Sustainable 5:449dc35a29bd 95 wait(0.2);
Rhyme 0:6b8a2d4c88b3 96 TFT.foreground(White);
Sustainable 5:449dc35a29bd 97 wait(0.2);
Rhyme 0:6b8a2d4c88b3 98 TFT.cls();
Sustainable 5:449dc35a29bd 99 wait(0.2);
Sustainable 5:449dc35a29bd 100 TFT.set_font((unsigned char*) Arial28x28);
Sustainable 5:449dc35a29bd 101 wait(0.2);
Sustainable 5:449dc35a29bd 102 TFT.locate(15, 10);
Sustainable 5:449dc35a29bd 103 TFT.printf(" TFT Test ");
Sustainable 5:449dc35a29bd 104 TFT.locate(15, 100);
Sustainable 5:449dc35a29bd 105 TFT.BusEnable(false);
Sustainable 5:449dc35a29bd 106 wait(5);
Sustainable 5:449dc35a29bd 107 }
Sustainable 5:449dc35a29bd 108
Sustainable 5:449dc35a29bd 109
Sustainable 5:449dc35a29bd 110 void drawScreen(void)
Sustainable 5:449dc35a29bd 111 {
Sustainable 5:449dc35a29bd 112 TFT.BusEnable(true);
Sustainable 5:449dc35a29bd 113 TFT.foreground(White); // Set default text colors
Sustainable 5:449dc35a29bd 114 TFT.background(Blue);
Sustainable 5:449dc35a29bd 115 TFT.cls(); // wipe the screen clean and set bg colors
Sustainable 5:449dc35a29bd 116 wait(0.1);
Sustainable 5:449dc35a29bd 117
Sustainable 5:449dc35a29bd 118 TFT.foreground(Black);
Sustainable 5:449dc35a29bd 119 TFT.set_font((unsigned char*) Arial24x23);
Sustainable 5:449dc35a29bd 120 TFT.fillcircle( 60, 175, 50, Yellow);
Sustainable 5:449dc35a29bd 121 TFT.background(Yellow) ;
Sustainable 5:449dc35a29bd 122 TFT.locate(25, 160);
Sustainable 5:449dc35a29bd 123 TFT.printf(" A ");
Sustainable 5:449dc35a29bd 124
Sustainable 5:449dc35a29bd 125 TFT.fillcircle( 160, 105, 50, Cyan);
Sustainable 5:449dc35a29bd 126 TFT.background(Cyan) ;
Sustainable 5:449dc35a29bd 127 TFT.locate(127, 92);
Sustainable 5:449dc35a29bd 128 TFT.printf(" B ");
Sustainable 5:449dc35a29bd 129
Sustainable 5:449dc35a29bd 130 TFT.fillcircle( 260, 175, 50, Green);
Sustainable 5:449dc35a29bd 131 TFT.background(Green) ;
Sustainable 5:449dc35a29bd 132 TFT.locate(222, 160);
Sustainable 5:449dc35a29bd 133 TFT.printf(" C ");
Sustainable 5:449dc35a29bd 134
Sustainable 5:449dc35a29bd 135 TFT.fillcircle( 60, 60, 50, Orange);
Sustainable 5:449dc35a29bd 136 TFT.background(Orange) ;
Sustainable 5:449dc35a29bd 137 TFT.locate(15, 50);
Sustainable 5:449dc35a29bd 138 TFT.printf(" D ");
Sustainable 5:449dc35a29bd 139
Sustainable 5:449dc35a29bd 140 TFT.fillcircle( 260, 60, 50, GreenYellow);
Sustainable 5:449dc35a29bd 141 TFT.background(GreenYellow) ;
Sustainable 5:449dc35a29bd 142 TFT.locate(225, 50);
Sustainable 5:449dc35a29bd 143 TFT.printf(" E ");
Sustainable 5:449dc35a29bd 144
Rhyme 3:34d8706e1614 145 TFT.BusEnable(false) ;
Rhyme 0:6b8a2d4c88b3 146 }
Rhyme 0:6b8a2d4c88b3 147
Sustainable 5:449dc35a29bd 148 // mapping function to change the orentation of the screen to horizontal
Sustainable 5:449dc35a29bd 149 uint16_t map(uint16_t x, uint16_t in_min, uint16_t in_max, uint16_t out_min, uint16_t out_max)
Rhyme 0:6b8a2d4c88b3 150 {
Sustainable 5:449dc35a29bd 151 return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
Rhyme 0:6b8a2d4c88b3 152 }
Rhyme 0:6b8a2d4c88b3 153
Sustainable 5:449dc35a29bd 154 // Code used to debug screen orentation and touch pad
Sustainable 5:449dc35a29bd 155 void display_xy(void)
Rhyme 0:6b8a2d4c88b3 156 {
Sustainable 5:449dc35a29bd 157 static uint16_t x, y, z ;
Sustainable 5:449dc35a29bd 158 uint16_t temp_x;
Sustainable 5:449dc35a29bd 159 int touched = 0;
Sustainable 5:449dc35a29bd 160
Sustainable 5:449dc35a29bd 161 while(true) {
Sustainable 5:449dc35a29bd 162 touched = TSC.getRAWPoint(&x, &y, &z);
Rhyme 0:6b8a2d4c88b3 163
Sustainable 5:449dc35a29bd 164 x = x & 0x7f;
Sustainable 5:449dc35a29bd 165 y = y & 0x7f;
Sustainable 5:449dc35a29bd 166
Sustainable 5:449dc35a29bd 167 if(x) { // any touch
Sustainable 5:449dc35a29bd 168 wait(0.5);
Sustainable 5:449dc35a29bd 169 TFT.BusEnable(true);
Sustainable 5:449dc35a29bd 170 TFT.locate(5, 40);
Sustainable 5:449dc35a29bd 171 TFT.printf("x= %5d x=%4X", x, x);
Sustainable 5:449dc35a29bd 172 TFT.locate(5, 80);
Sustainable 5:449dc35a29bd 173 TFT.printf("y= %5d y=%4X", y, y);
Sustainable 5:449dc35a29bd 174 // TFT.locate(5, 120);
Sustainable 5:449dc35a29bd 175 // TFT.printf("raw z%6d z%4X", z, z);
Sustainable 5:449dc35a29bd 176
Sustainable 5:449dc35a29bd 177 // scale the raw values to match the screen orentation and 320(x = horiz) 240(y = vert) size
Sustainable 5:449dc35a29bd 178 // 0,0 = upper left corner
Sustainable 5:449dc35a29bd 179 temp_x = x;
Sustainable 5:449dc35a29bd 180 x = map(y,180, 3800,0,320); // TFT.set_orientation(1);
Sustainable 5:449dc35a29bd 181 y = map(temp_x,3800,280,0,240);
Sustainable 5:449dc35a29bd 182
Sustainable 5:449dc35a29bd 183 // x = map(y,3800, 180,0,320); // TFT.set_orientation(3);
Sustainable 5:449dc35a29bd 184 // y = map(temp_x,280,3800,0,240);
Sustainable 5:449dc35a29bd 185
Sustainable 5:449dc35a29bd 186 TFT.locate(5, 120);
Sustainable 5:449dc35a29bd 187 TFT.printf("map x%5d y%5d", x, y);
Rhyme 0:6b8a2d4c88b3 188
Sustainable 5:449dc35a29bd 189 TFT.BusEnable(false);
Sustainable 5:449dc35a29bd 190 wait(0.5);
Sustainable 5:449dc35a29bd 191 }
Rhyme 0:6b8a2d4c88b3 192 }
Rhyme 0:6b8a2d4c88b3 193 }
Sustainable 5:449dc35a29bd 194