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:
Thu Jan 03 10:54:09 2013 +0000
Revision:
2:d0acbd263ec7
Child:
3:fb4d62b5ffb3
ONLY FOR TEST

Who changed what in which revision?

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