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:
Fri Jan 04 09:52:16 2013 +0000
Revision:
7:ffdd4e75b366
Parent:
5:781a72d380a1
Code cleanup / comments added

Who changed what in which revision?

UserRevisionLine numberNew contents of line
frankvnk 7:ffdd4e75b366 1 /**************************************************************************************************
frankvnk 7:ffdd4e75b366 2 ***** *****
frankvnk 7:ffdd4e75b366 3 ***** Name: Touch.cpp *****
frankvnk 7:ffdd4e75b366 4 ***** Ver.: 1.0 *****
frankvnk 7:ffdd4e75b366 5 ***** Date: 04/01/2013 *****
frankvnk 7:ffdd4e75b366 6 ***** Auth: Frank Vannieuwkerke *****
frankvnk 7:ffdd4e75b366 7 ***** Erik Olieman *****
frankvnk 7:ffdd4e75b366 8 ***** Func: Touch driver for use with ADS7843 *****
frankvnk 7:ffdd4e75b366 9 ***** *****
frankvnk 7:ffdd4e75b366 10 ***** Code based on Carlos E. Vidales tutorial : *****
frankvnk 7:ffdd4e75b366 11 ***** How To Calibrate Touch Screens *****
frankvnk 7:ffdd4e75b366 12 ***** www.embedded.com/design/configurable-systems/4023968/How-To-Calibrate-Touch-Screens *****
frankvnk 7:ffdd4e75b366 13 ***** *****
frankvnk 7:ffdd4e75b366 14 **************************************************************************************************/
frankvnk 2:d0acbd263ec7 15
frankvnk 2:d0acbd263ec7 16 #include "Touch.h"
frankvnk 2:d0acbd263ec7 17 #include "mbed.h"
frankvnk 2:d0acbd263ec7 18 #include "Arial12x12.h"
frankvnk 2:d0acbd263ec7 19
frankvnk 2:d0acbd263ec7 20 /*Coordinate ScreenSample[3] = {
frankvnk 2:d0acbd263ec7 21 { 45, 45 },
frankvnk 2:d0acbd263ec7 22 { 45, 270},
frankvnk 2:d0acbd263ec7 23 { 190,190}
frankvnk 2:d0acbd263ec7 24 } ;*/
frankvnk 2:d0acbd263ec7 25 /*Coordinate DisplaySample[3] = {
frankvnk 2:d0acbd263ec7 26 { 45, 45 },
frankvnk 2:d0acbd263ec7 27 { 45, 270},
frankvnk 2:d0acbd263ec7 28 { 190,190}
frankvnk 2:d0acbd263ec7 29 } ;*/
frankvnk 2:d0acbd263ec7 30
frankvnk 2:d0acbd263ec7 31 #define THRESHOLD 2
frankvnk 2:d0acbd263ec7 32
frankvnk 3:fb4d62b5ffb3 33 TouchScreenADS7843::TouchScreenADS7843(PinName tp_mosi, PinName tp_miso, PinName tp_sclk, PinName tp_cs, PinName tp_irq, SPI_TFT *_LCD)
Sissors 5:781a72d380a1 34 : LCD(_LCD), _tp_spi(tp_mosi, tp_miso, tp_sclk), _tp_cs(tp_cs), _tp_irq(tp_irq)
frankvnk 2:d0acbd263ec7 35 {
frankvnk 2:d0acbd263ec7 36 DisplaySample[0].x=45;
frankvnk 2:d0acbd263ec7 37 DisplaySample[0].y=45;
frankvnk 2:d0acbd263ec7 38 DisplaySample[1].x=45;
frankvnk 2:d0acbd263ec7 39 DisplaySample[1].y=270;
frankvnk 2:d0acbd263ec7 40 DisplaySample[2].x=190;
frankvnk 2:d0acbd263ec7 41 DisplaySample[2].y=190;
frankvnk 2:d0acbd263ec7 42 ScreenSample[0].x=45;
frankvnk 2:d0acbd263ec7 43 ScreenSample[0].y=45;
frankvnk 2:d0acbd263ec7 44 ScreenSample[1].x=45;
frankvnk 2:d0acbd263ec7 45 ScreenSample[1].y=270;
frankvnk 2:d0acbd263ec7 46 ScreenSample[2].x=190;
frankvnk 2:d0acbd263ec7 47 ScreenSample[2].y=190;
frankvnk 2:d0acbd263ec7 48 _tp_cs=1;
frankvnk 2:d0acbd263ec7 49 _tp_spi.frequency(500000);
frankvnk 2:d0acbd263ec7 50 _tp_spi.format(8,0); // 8 bit spi mode 0
frankvnk 2:d0acbd263ec7 51 }
frankvnk 2:d0acbd263ec7 52
frankvnk 2:d0acbd263ec7 53 int TouchScreenADS7843::Read_XY(unsigned char XY)
frankvnk 2:d0acbd263ec7 54 {
frankvnk 2:d0acbd263ec7 55 unsigned char msb, lsb;
frankvnk 2:d0acbd263ec7 56 unsigned int Temp;
frankvnk 2:d0acbd263ec7 57
frankvnk 2:d0acbd263ec7 58 Temp=0;
frankvnk 2:d0acbd263ec7 59 _tp_cs=0;
frankvnk 2:d0acbd263ec7 60 wait_us(SPI_RD_DELAY);
frankvnk 2:d0acbd263ec7 61 _tp_spi.write(XY);
frankvnk 2:d0acbd263ec7 62 wait_us(SPI_RD_DELAY);
frankvnk 2:d0acbd263ec7 63 msb = _tp_spi.write(0x00); // msb
frankvnk 2:d0acbd263ec7 64 wait_us(SPI_RD_DELAY);
frankvnk 2:d0acbd263ec7 65 lsb = _tp_spi.write(0x00); // lsb
frankvnk 2:d0acbd263ec7 66 _tp_cs=1;
frankvnk 2:d0acbd263ec7 67 Temp = ((msb << 8 ) | lsb);
frankvnk 2:d0acbd263ec7 68 Temp >>= 3;
frankvnk 2:d0acbd263ec7 69 Temp &= 0xfff;
frankvnk 2:d0acbd263ec7 70 Temp /= 4; // Scaling : return value range must be between 0 and 1024
frankvnk 2:d0acbd263ec7 71 return(Temp);
frankvnk 2:d0acbd263ec7 72 }
frankvnk 2:d0acbd263ec7 73
frankvnk 2:d0acbd263ec7 74
frankvnk 2:d0acbd263ec7 75 void TouchScreenADS7843::TP_GetAdXY(int *x,int *y)
frankvnk 2:d0acbd263ec7 76 {
frankvnk 2:d0acbd263ec7 77 int adx,ady;
frankvnk 2:d0acbd263ec7 78 adx = Read_XY(CHX);
frankvnk 2:d0acbd263ec7 79 wait_us(1);
frankvnk 2:d0acbd263ec7 80 ady = Read_XY(CHY);
frankvnk 2:d0acbd263ec7 81 *x = adx;
frankvnk 2:d0acbd263ec7 82 *y = ady;
frankvnk 2:d0acbd263ec7 83 }
frankvnk 2:d0acbd263ec7 84
frankvnk 2:d0acbd263ec7 85 void TouchScreenADS7843::TP_DrawPoint(unsigned int Xpos,unsigned int Ypos, unsigned int color)
frankvnk 2:d0acbd263ec7 86 {
frankvnk 3:fb4d62b5ffb3 87 LCD->wr_reg(0x03, 0x1030);
frankvnk 2:d0acbd263ec7 88 LCD->WindowMax();
frankvnk 2:d0acbd263ec7 89 LCD->pixel(Xpos,Ypos,color);
frankvnk 2:d0acbd263ec7 90 LCD->pixel(Xpos+1,Ypos,color);
frankvnk 2:d0acbd263ec7 91 LCD->pixel(Xpos,Ypos+1,color);
frankvnk 3:fb4d62b5ffb3 92 LCD->pixel(Xpos+1,Ypos+1,color);
frankvnk 2:d0acbd263ec7 93 }
frankvnk 2:d0acbd263ec7 94
frankvnk 2:d0acbd263ec7 95 void TouchScreenADS7843::DrawCross(unsigned int Xpos,unsigned int Ypos)
frankvnk 2:d0acbd263ec7 96 {
frankvnk 3:fb4d62b5ffb3 97 LCD->line(Xpos-15,Ypos,Xpos-2,Ypos,White);
frankvnk 2:d0acbd263ec7 98 LCD->line(Xpos+2,Ypos,Xpos+15,Ypos,White);
frankvnk 2:d0acbd263ec7 99 LCD->line(Xpos,Ypos-15,Xpos,Ypos-2,White);
frankvnk 2:d0acbd263ec7 100 LCD->line(Xpos,Ypos+2,Xpos,Ypos+15,White);
frankvnk 2:d0acbd263ec7 101
frankvnk 2:d0acbd263ec7 102 LCD->line(Xpos-15,Ypos+15,Xpos-7,Ypos+15,DarkGrey);
frankvnk 2:d0acbd263ec7 103 LCD->line(Xpos-15,Ypos+7,Xpos-15,Ypos+15,DarkGrey);
frankvnk 2:d0acbd263ec7 104
frankvnk 2:d0acbd263ec7 105 LCD->line(Xpos-15,Ypos-15,Xpos-7,Ypos-15,DarkGrey);
frankvnk 2:d0acbd263ec7 106 LCD->line(Xpos-15,Ypos-7,Xpos-15,Ypos-15,DarkGrey);
frankvnk 2:d0acbd263ec7 107
frankvnk 2:d0acbd263ec7 108 LCD->line(Xpos+7,Ypos+15,Xpos+15,Ypos+15,DarkGrey);
frankvnk 2:d0acbd263ec7 109 LCD->line(Xpos+15,Ypos+7,Xpos+15,Ypos+15,DarkGrey);
frankvnk 2:d0acbd263ec7 110
frankvnk 2:d0acbd263ec7 111 LCD->line(Xpos+7,Ypos-15,Xpos+15,Ypos-15,DarkGrey);
frankvnk 3:fb4d62b5ffb3 112 LCD->line(Xpos+15,Ypos-15,Xpos+15,Ypos-7,DarkGrey);
frankvnk 2:d0acbd263ec7 113 }
frankvnk 2:d0acbd263ec7 114
frankvnk 2:d0acbd263ec7 115 unsigned char TouchScreenADS7843::Read_Ads7846(Coordinate * screenPtr)
frankvnk 2:d0acbd263ec7 116 {
frankvnk 2:d0acbd263ec7 117 int m0,m1,m2,TP_X[1],TP_Y[1],temp[3];
frankvnk 2:d0acbd263ec7 118 uint8_t count=0;
frankvnk 2:d0acbd263ec7 119 int buffer[2][9]={{0},{0}};
frankvnk 3:fb4d62b5ffb3 120 if (screenPtr == NULL) screenPtr = &screen;
frankvnk 2:d0acbd263ec7 121 do
frankvnk 2:d0acbd263ec7 122 {
frankvnk 2:d0acbd263ec7 123 TP_GetAdXY(TP_X,TP_Y);
frankvnk 2:d0acbd263ec7 124 buffer[0][count]=TP_X[0];
frankvnk 2:d0acbd263ec7 125 buffer[1][count]=TP_Y[0];
frankvnk 2:d0acbd263ec7 126 count++;
frankvnk 2:d0acbd263ec7 127 }
frankvnk 2:d0acbd263ec7 128 while(!_tp_irq && (count < 9));
frankvnk 2:d0acbd263ec7 129 if(count==9)
frankvnk 2:d0acbd263ec7 130 {
frankvnk 2:d0acbd263ec7 131 temp[0]=(buffer[0][0]+buffer[0][1]+buffer[0][2])/3;
frankvnk 2:d0acbd263ec7 132 temp[1]=(buffer[0][3]+buffer[0][4]+buffer[0][5])/3;
frankvnk 2:d0acbd263ec7 133 temp[2]=(buffer[0][6]+buffer[0][7]+buffer[0][8])/3;
frankvnk 2:d0acbd263ec7 134 m0=temp[0]-temp[1];
frankvnk 2:d0acbd263ec7 135 m1=temp[1]-temp[2];
frankvnk 2:d0acbd263ec7 136 m2=temp[2]-temp[0];
frankvnk 2:d0acbd263ec7 137 m0=m0>0?m0:(-m0);
frankvnk 2:d0acbd263ec7 138 m1=m1>0?m1:(-m1);
frankvnk 2:d0acbd263ec7 139 m2=m2>0?m2:(-m2);
frankvnk 2:d0acbd263ec7 140 if( (m0>THRESHOLD) && (m1>THRESHOLD) && (m2>THRESHOLD) ) return 0;
frankvnk 2:d0acbd263ec7 141 if(m0<m1)
frankvnk 2:d0acbd263ec7 142 {
frankvnk 2:d0acbd263ec7 143 if(m2<m0)
frankvnk 2:d0acbd263ec7 144 screenPtr->x=(temp[0]+temp[2])/2;
frankvnk 2:d0acbd263ec7 145 else
frankvnk 2:d0acbd263ec7 146 screenPtr->x=(temp[0]+temp[1])/2;
frankvnk 2:d0acbd263ec7 147 }
frankvnk 2:d0acbd263ec7 148 else if(m2<m1)
frankvnk 2:d0acbd263ec7 149 screenPtr->x=(temp[0]+temp[2])/2;
frankvnk 2:d0acbd263ec7 150 else
frankvnk 2:d0acbd263ec7 151 screenPtr->x=(temp[1]+temp[2])/2;
frankvnk 2:d0acbd263ec7 152
frankvnk 2:d0acbd263ec7 153 temp[0]=(buffer[1][0]+buffer[1][1]+buffer[1][2])/3;
frankvnk 2:d0acbd263ec7 154 temp[1]=(buffer[1][3]+buffer[1][4]+buffer[1][5])/3;
frankvnk 2:d0acbd263ec7 155 temp[2]=(buffer[1][6]+buffer[1][7]+buffer[1][8])/3;
frankvnk 2:d0acbd263ec7 156 m0=temp[0]-temp[1];
frankvnk 2:d0acbd263ec7 157 m1=temp[1]-temp[2];
frankvnk 2:d0acbd263ec7 158 m2=temp[2]-temp[0];
frankvnk 2:d0acbd263ec7 159 m0=m0>0?m0:(-m0);
frankvnk 2:d0acbd263ec7 160 m1=m1>0?m1:(-m1);
frankvnk 2:d0acbd263ec7 161 m2=m2>0?m2:(-m2);
frankvnk 2:d0acbd263ec7 162 if( (m0>THRESHOLD) && (m1>THRESHOLD) && (m2>THRESHOLD) ) return 0;
frankvnk 2:d0acbd263ec7 163
frankvnk 2:d0acbd263ec7 164 if(m0<m1)
frankvnk 2:d0acbd263ec7 165 {
frankvnk 2:d0acbd263ec7 166 if(m2<m0)
frankvnk 2:d0acbd263ec7 167 screenPtr->y=(temp[0]+temp[2])/2;
frankvnk 2:d0acbd263ec7 168 else
frankvnk 2:d0acbd263ec7 169 screenPtr->y=(temp[0]+temp[1])/2;
frankvnk 2:d0acbd263ec7 170 }
frankvnk 2:d0acbd263ec7 171 else if(m2<m1)
frankvnk 2:d0acbd263ec7 172 screenPtr->y=(temp[0]+temp[2])/2;
frankvnk 2:d0acbd263ec7 173 else
frankvnk 2:d0acbd263ec7 174 screenPtr->y=(temp[1]+temp[2])/2;
frankvnk 2:d0acbd263ec7 175 return 1;
frankvnk 2:d0acbd263ec7 176 }
frankvnk 2:d0acbd263ec7 177 return 0;
frankvnk 2:d0acbd263ec7 178 }
frankvnk 2:d0acbd263ec7 179
frankvnk 2:d0acbd263ec7 180 uint8_t TouchScreenADS7843::setCalibrationMatrix( Coordinate * displayPtr,
frankvnk 2:d0acbd263ec7 181 Coordinate * screenPtr,
frankvnk 2:d0acbd263ec7 182 Matrix * matrixPtr)
frankvnk 2:d0acbd263ec7 183 {
frankvnk 2:d0acbd263ec7 184 uint8_t retTHRESHOLD = 0 ;
frankvnk 2:d0acbd263ec7 185 // K = (Xs0 - Xs2)*(Ys1 - Ys2) - (Xs1 - Xs2)*(Ys0 - Ys2)
frankvnk 2:d0acbd263ec7 186 matrixPtr->Divider = ((screenPtr[0].x - screenPtr[2].x) * (screenPtr[1].y - screenPtr[2].y)) -
frankvnk 2:d0acbd263ec7 187 ((screenPtr[1].x - screenPtr[2].x) * (screenPtr[0].y - screenPtr[2].y)) ;
frankvnk 2:d0acbd263ec7 188 if( matrixPtr->Divider == 0 )
frankvnk 2:d0acbd263ec7 189 {
frankvnk 2:d0acbd263ec7 190 retTHRESHOLD = 1;
frankvnk 2:d0acbd263ec7 191 }
frankvnk 2:d0acbd263ec7 192 else
frankvnk 2:d0acbd263ec7 193 {
frankvnk 2:d0acbd263ec7 194 // (Xd0 - Xd2)*(Ys1 - Ys2) - (Xd1 - Xd2)*(Ys0 - Ys2)
frankvnk 2:d0acbd263ec7 195 // A = ---------------------------------------------------
frankvnk 2:d0acbd263ec7 196 // K
frankvnk 2:d0acbd263ec7 197 matrixPtr->An = ((displayPtr[0].x - displayPtr[2].x) * (screenPtr[1].y - screenPtr[2].y)) -
frankvnk 2:d0acbd263ec7 198 ((displayPtr[1].x - displayPtr[2].x) * (screenPtr[0].y - screenPtr[2].y)) ;
frankvnk 2:d0acbd263ec7 199 // (Xs0 - Xs2)*(Xd1 - Xd2) - (Xd0 - Xd2)*(Xs1 - Xs2)
frankvnk 2:d0acbd263ec7 200 // B = ---------------------------------------------------
frankvnk 2:d0acbd263ec7 201 // K
frankvnk 2:d0acbd263ec7 202 matrixPtr->Bn = ((screenPtr[0].x - screenPtr[2].x) * (displayPtr[1].x - displayPtr[2].x)) -
frankvnk 2:d0acbd263ec7 203 ((displayPtr[0].x - displayPtr[2].x) * (screenPtr[1].x - screenPtr[2].x)) ;
frankvnk 2:d0acbd263ec7 204 // Ys0*(Xs2*Xd1 - Xs1*Xd2) + Ys1*(Xs0*Xd2 - Xs2*Xd0) + Ys2*(Xs1*Xd0 - Xs0*Xd1)
frankvnk 2:d0acbd263ec7 205 // C = ----------------------------------------------------------------------------
frankvnk 2:d0acbd263ec7 206 // K
frankvnk 2:d0acbd263ec7 207 matrixPtr->Cn = (screenPtr[2].x * displayPtr[1].x - screenPtr[1].x * displayPtr[2].x) * screenPtr[0].y +
frankvnk 2:d0acbd263ec7 208 (screenPtr[0].x * displayPtr[2].x - screenPtr[2].x * displayPtr[0].x) * screenPtr[1].y +
frankvnk 2:d0acbd263ec7 209 (screenPtr[1].x * displayPtr[0].x - screenPtr[0].x * displayPtr[1].x) * screenPtr[2].y ;
frankvnk 2:d0acbd263ec7 210 // (Yd0 - Yd2)*(Ys1 - Ys2) - (Yd1 - Yd2)*(Ys0 - Ys2)
frankvnk 2:d0acbd263ec7 211 // D = ---------------------------------------------------
frankvnk 2:d0acbd263ec7 212 // K
frankvnk 2:d0acbd263ec7 213 matrixPtr->Dn = ((displayPtr[0].y - displayPtr[2].y) * (screenPtr[1].y - screenPtr[2].y)) -
frankvnk 2:d0acbd263ec7 214 ((displayPtr[1].y - displayPtr[2].y) * (screenPtr[0].y - screenPtr[2].y)) ;
frankvnk 2:d0acbd263ec7 215 // (Xs0 - Xs2)*(Yd1 - Yd2) - (Yd0 - Yd2)*(Xs1 - Xs2)
frankvnk 2:d0acbd263ec7 216 // E = ---------------------------------------------------
frankvnk 2:d0acbd263ec7 217 // K
frankvnk 2:d0acbd263ec7 218 matrixPtr->En = ((screenPtr[0].x - screenPtr[2].x) * (displayPtr[1].y - displayPtr[2].y)) -
frankvnk 2:d0acbd263ec7 219 ((displayPtr[0].y - displayPtr[2].y) * (screenPtr[1].x - screenPtr[2].x)) ;
frankvnk 2:d0acbd263ec7 220 // Ys0*(Xs2*Yd1 - Xs1*Yd2) + Ys1*(Xs0*Yd2 - Xs2*Yd0) + Ys2*(Xs1*Yd0 - Xs0*Yd1)
frankvnk 2:d0acbd263ec7 221 // F = ----------------------------------------------------------------------------
frankvnk 2:d0acbd263ec7 222 // K
frankvnk 2:d0acbd263ec7 223 matrixPtr->Fn = (screenPtr[2].x * displayPtr[1].y - screenPtr[1].x * displayPtr[2].y) * screenPtr[0].y +
frankvnk 2:d0acbd263ec7 224 (screenPtr[0].x * displayPtr[2].y - screenPtr[2].x * displayPtr[0].y) * screenPtr[1].y +
frankvnk 2:d0acbd263ec7 225 (screenPtr[1].x * displayPtr[0].y - screenPtr[0].x * displayPtr[1].y) * screenPtr[2].y ;
frankvnk 2:d0acbd263ec7 226 }
frankvnk 2:d0acbd263ec7 227 return( retTHRESHOLD ) ;
frankvnk 2:d0acbd263ec7 228 }
frankvnk 2:d0acbd263ec7 229
frankvnk 2:d0acbd263ec7 230 uint8_t TouchScreenADS7843::getDisplayPoint(void)
frankvnk 2:d0acbd263ec7 231 {
frankvnk 2:d0acbd263ec7 232 uint8_t retTHRESHOLD = 0 ;
frankvnk 2:d0acbd263ec7 233
frankvnk 2:d0acbd263ec7 234 if( matrix.Divider != 0 )
frankvnk 2:d0acbd263ec7 235 {
frankvnk 2:d0acbd263ec7 236 // XD = AX+BY+C
frankvnk 2:d0acbd263ec7 237 display.x = ( (matrix.An * screen.x) +
frankvnk 2:d0acbd263ec7 238 (matrix.Bn * screen.y) +
frankvnk 2:d0acbd263ec7 239 matrix.Cn
frankvnk 2:d0acbd263ec7 240 ) / matrix.Divider ;
frankvnk 2:d0acbd263ec7 241 // YD = DX+EY+F
frankvnk 2:d0acbd263ec7 242 display.y = ( (matrix.Dn * screen.x) +
frankvnk 2:d0acbd263ec7 243 (matrix.En * screen.y) +
frankvnk 2:d0acbd263ec7 244 matrix.Fn
frankvnk 2:d0acbd263ec7 245 ) / matrix.Divider ;
frankvnk 2:d0acbd263ec7 246 }
frankvnk 2:d0acbd263ec7 247 else
frankvnk 2:d0acbd263ec7 248 {
frankvnk 2:d0acbd263ec7 249 retTHRESHOLD = 1;
frankvnk 2:d0acbd263ec7 250 }
frankvnk 2:d0acbd263ec7 251 return(retTHRESHOLD);
frankvnk 2:d0acbd263ec7 252 }
frankvnk 2:d0acbd263ec7 253
frankvnk 2:d0acbd263ec7 254 void TouchScreenADS7843::TouchPanel_Calibrate(void)
frankvnk 2:d0acbd263ec7 255 {
frankvnk 2:d0acbd263ec7 256 uint8_t i;
frankvnk 2:d0acbd263ec7 257 Coordinate screen_cal;
frankvnk 2:d0acbd263ec7 258 setCalibrationMatrix( &DisplaySample[0],&ScreenSample[0],&matrix) ;
frankvnk 3:fb4d62b5ffb3 259 LCD->set_font((unsigned char*) Arial12x12);
frankvnk 2:d0acbd263ec7 260 for(i=0;i<3;i++)
frankvnk 2:d0acbd263ec7 261 {
frankvnk 3:fb4d62b5ffb3 262 LCD->cls();
frankvnk 3:fb4d62b5ffb3 263 LCD->locate(10,10);
frankvnk 3:fb4d62b5ffb3 264 LCD->printf("Touch crosshair to calibrate");
frankvnk 2:d0acbd263ec7 265 wait_ms(500);
frankvnk 2:d0acbd263ec7 266 DrawCross(DisplaySample[i].x,DisplaySample[i].y);
frankvnk 2:d0acbd263ec7 267 do {} while (!Read_Ads7846(&screen_cal));
frankvnk 2:d0acbd263ec7 268 ScreenSample[i].x= screen_cal.x;ScreenSample[i].y= screen_cal.y;
frankvnk 2:d0acbd263ec7 269 }
frankvnk 2:d0acbd263ec7 270 setCalibrationMatrix( &DisplaySample[0],&ScreenSample[0],&matrix) ;
frankvnk 3:fb4d62b5ffb3 271 LCD->cls();
frankvnk 2:d0acbd263ec7 272 }
frankvnk 2:d0acbd263ec7 273