Sample TFT to KL25Z program.

Dependencies:   SPI_STMPE610 TFT_fonts UniGraphic mbed

Fork of TFT_test_frdm-kl25z by Motoo Tanaka

Files at this revision

API Documentation at this revision

Comitter:
Rhyme
Date:
Fri Oct 31 01:16:01 2014 +0000
Child:
1:39218b891bf3
Commit message:
First sample/test to be published

Changed in this revision

MMA8451Q.lib Show annotated file Show diff for this revision Revisions of this file
SPI_STMPE610.cpp Show annotated file Show diff for this revision Revisions of this file
SPI_STMPE610.h Show annotated file Show diff for this revision Revisions of this file
SPI_TFT_ILI9341.lib Show annotated file Show diff for this revision Revisions of this file
TFT_fonts.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MMA8451Q.lib	Fri Oct 31 01:16:01 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/emilmont/code/MMA8451Q/#c4d879a39775
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SPI_STMPE610.cpp	Fri Oct 31 01:16:01 2014 +0000
@@ -0,0 +1,223 @@
+/* mbed SPI_STMPE610.cpp to test adafruit 2.8" TFT LCD shiled w Touchscreen
+ * Copyright (c) 2014 Motoo Tanaka @ Design Methodology Lab
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+ /*
+  * Note: Since the interrupt siganl of the shield was not connected
+  * to an interrupt pin on my frdm-kl25z, I just used polling mode.
+  */
+  
+#include "SPI_STMPE610.h"
+
+/* some definitions here */
+#define REG_CHIP_ID       0x00
+#define REG_CHIP_ID_MSB   0x00
+#define REG_CHIP_ID_LSB   0x01
+
+#define REG_ID_VER        0x02
+#define REG_SYS_CTRL1     0x03
+#define REG_SYS_CTRL1_RESET 0x02
+
+#define REG_SYS_CTRL2     0x04
+#define REG_SPI_CFG       0x08
+#define REG_INT_CTRL      0x09
+#define REG_INT_CTRL_POL_HIGH 0x04
+#define REG_INT_CTRL_POL_LOW  0x00
+#define REG_INT_CTRL_EDGE     0x02
+#define REG_INT_CTRL_LEVEL    0x00
+#define REG_INT_CTRL_ENABLE   0x01
+#define REG_INT_CTRL_DISABLE  0x00
+
+#define REG_INT_EN        0x0A
+#define REG_INT_EN_TOUCHDET  0x01
+#define REG_INT_EN_FIFOTH    0x02
+#define REG_INT_EN_FIFOOF    0x04
+#define REG_INT_EN_FIFOFULL  0x08
+#define REG_INT_EN_FIFOEMPTY 0x10
+#define REG_INT_EN_ADC       0x40
+
+#define REG_INT_STA       0x0B
+#define REG_INT_STA_TOUCHDET 0x01
+
+#define REG_GPIO_EN       0x0C
+#define REG_GPIO_INT_STA  0x0D
+#define REG_ADC_INT_EN    0x0E
+#define REG_ADC_INT_STA   0x0F
+#define REG_GPIO_SET_PIN  0x10
+#define REG_GPIO_CLR_PIN  0x11
+#define REG_GPIO_MP_STA   0x12
+#define REG_GPIO_DIR      0x13
+#define REG_GPIO_ED       0x14
+#define REG_GPIO_RE       0x15
+#define REG_GPIO_FE       0x16
+#define REG_GPIO_AF       0x17
+#define REG_ADC_CTRL1     0x20
+#define REG_ADC_CTRL1_12BIT 0x08
+#define REG_ADC_CTRL1_10BIT 0x00
+
+#define REG_ADC_CTRL2     0x21
+#define REG_ADC_CTRL2_1_625MHZ 0x00
+#define REG_ADC_CTRL2_3_25MHZ  0x01
+#define REG_ADC_CTRL2_6_5MHZ   0x02
+
+#define REG_ADC_CAPT      0x22
+#define REG_ADC_DATA_CH0  0x30
+#define REG_ADC_DATA_CH1  0x32
+#define REG_ADC_DATA_CH4  0x38
+#define REG_ADC_DATA_CH5  0x3A
+#define REG_ADC_DATA_CH6  0x3C
+#define REG_ADC_DATA_CH7  0x3E
+#define REG_TSC_CTRL      0x40
+#define REG_TSC_CTRL_EN     0x01
+#define REG_TSC_CTRL_XYZ    0x00
+#define REG_TSC_CTRL_XY     0x02
+
+#define REG_TSC_CFG       0x41
+#define REG_TSC_CFG_1SAMPLE      0x00
+#define REG_TSC_CFG_2SAMPLE      0x40
+#define REG_TSC_CFG_4SAMPLE      0x80
+#define REG_TSC_CFG_8SAMPLE      0xC0
+#define REG_TSC_CFG_DELAY_10US   0x00
+#define REG_TSC_CFG_DELAY_50US   0x08
+#define REG_TSC_CFG_DELAY_100US  0x10
+#define REG_TSC_CFG_DELAY_500US  0x18
+#define REG_TSC_CFG_DELAY_1MS    0x20
+#define REG_TSC_CFG_DELAY_5MS    0x28
+#define REG_TSC_CFG_DELAY_10MS   0x30
+#define REG_TSC_CFG_DELAY_50MS   0x38
+#define REG_TSC_CFG_SETTLE_10US  0x00
+#define REG_TSC_CFG_SETTLE_100US 0x01
+#define REG_TSC_CFG_SETTLE_500US 0x02
+#define REG_TSC_CFG_SETTLE_1MS   0x03
+#define REG_TSC_CFG_SETTLE_5MS   0x04
+#define REG_TSC_CFG_SETTLE_10MS  0x05
+#define REG_TSC_CFG_SETTLE_50MS  0x06
+#define REG_TSC_CFG_SETTLE_100MS 0x07
+
+#define REG_WDW_TR_X      0x42
+#define REG_WDW_TR_Y      0x44
+#define REG_WDW_BL_X      0x46
+#define REG_WDW_BL_Y      0x48
+#define REG_FIFO_TH       0x4A
+#define REG_FIFO_STA      0x4B
+#define REG_FIFO_SIZE     0x4C
+#define REG_TSC_DATA_X    0x4D
+#define REG_TSC_DATA_Y    0x4F
+#define REG_TSC_DATA_Z    0x51
+#define REG_TSC_DATA_XYZ  0x52
+#define REG_TSC_FRACT_XYZ 0x56
+#define REG_TSC_DATA      0x57
+#define REG_TSC_I_DRIVE   0x58
+#define REG_TSC_SHIELD    0x59
+
+SPI_STMPE610::SPI_STMPE610(PinName mosi, PinName miso, PinName sclk, PinName cs) :
+        m_spi(mosi, miso, sclk), m_cs(cs) {
+    // activate the peripheral
+    m_cs = 0 ;
+    _mode = 0 ;
+    m_spi.frequency(1000000) ;
+    m_spi.format(8, 0) ;
+    write8(REG_SYS_CTRL1, REG_SYS_CTRL1_RESET) ;
+    wait(0.1) ;
+    write8(REG_SYS_CTRL2, 0x00) ; // turn on clocks
+    write8(REG_TSC_CFG,
+          REG_TSC_CFG_4SAMPLE 
+        | REG_TSC_CFG_DELAY_100US
+        | REG_TSC_CFG_SETTLE_1MS ) ;
+        
+    write8(REG_TSC_CTRL, REG_TSC_CTRL_XYZ | REG_TSC_CTRL_EN) ;   
+    m_cs = 1 ;
+}
+
+SPI_STMPE610::~SPI_STMPE610() { }
+
+void SPI_STMPE610::readRegs(int addr, uint8_t * data, int len) {
+    m_cs = 0 ;
+
+    for (int i = 0 ; i < len ; i++ ) {    
+       m_spi.write((addr+i)|0x80) ;  // spacify address to read
+       data[i] = m_spi.write((addr+i)|0x80) ; 
+    } 
+    m_spi.write(0x00) ; // to terminate read mode
+    m_cs = 1 ;
+}
+
+void SPI_STMPE610::writeRegs(uint8_t * data, int len) {
+   m_cs = 0 ;
+   for (int i = 0 ; i < len ; i++ ) {
+      m_spi.write(data[i]) ;
+   }
+   m_cs = 1 ;
+}
+
+void SPI_STMPE610::write8(int addr, uint8_t data8)
+{
+    uint8_t data[2] ;
+    data[0] = addr ;
+    data[1] = data8 ;
+    writeRegs(data, 2) ;
+}
+
+uint8_t SPI_STMPE610::read8(int addr)
+{
+    uint8_t data[1] ;    
+    readRegs(addr, data, 1) ;
+    return( data[0] ) ;
+}
+
+void SPI_STMPE610::write16(int addr, uint16_t data16)
+{
+    uint8_t data[3] ;
+    data[0] = addr ;
+    data[1] = (data16 >> 8) & 0xFF ;
+    data[2] = data16 & 0xFF ;
+    writeRegs(data, 3) ;
+}
+
+uint16_t SPI_STMPE610::read16(int addr)
+{
+    uint8_t data[2] ;
+    uint16_t value = 0 ;
+    readRegs(addr, data, 2) ;
+    value = (data[0] << 8) | data[1] ;
+    return( value ) ;
+}
+
+int SPI_STMPE610::getRAWPoint(uint16_t *x, uint16_t *y, uint16_t *z)
+{
+    uint8_t data[8], touched = 0 ;
+    data[0] = REG_TSC_CTRL ;
+    data[1] = REG_TSC_CTRL_EN  ; 
+    writeRegs(data, 2) ;
+    wait(0.01) ;
+     
+    readRegs(REG_TSC_CTRL, data, 1) ;
+    touched = data[0] & 0x80 ;
+    if (touched) { //Touch Detected
+       readRegs(REG_TSC_DATA_X, data,5) ;
+        *x = (data[0] << 8) | data[1] ;
+        *y = (data[2] << 8) | data[3] ;
+        *z = data[4] ;
+    } else {
+        *x = 0 ;
+        *y = 0 ;
+        *z = 0 ;
+    }
+    
+    data[0] = 0x4B ;
+    data[1] = 0x01 ;
+    writeRegs(data, 2)  ; // clear FIFO
+ 
+    data[0] = REG_TSC_CTRL ;
+    data[1] = 0x00 ; // disable TSC 
+    writeRegs(data, 2) ;
+    
+    return( touched & (*x || *y || *z)) ;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SPI_STMPE610.h	Fri Oct 31 01:16:01 2014 +0000
@@ -0,0 +1,58 @@
+/* mbed SPI_STMPE610.h to test adafruit 2.8" TFT LCD shiled w Touchscreen
+ * Copyright (c) 2014 Motoo Tanaka @ Design Methodology Lab
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#ifndef SPI_STMPE610_H
+#define SPI_STMPE610_H
+
+#include "mbed.h"
+
+/**
+ * STMPE610 Touch Sensor
+ * 
+ *
+ */
+
+class SPI_STMPE610 
+{
+public:
+ /**
+ * STMPE610 constructor
+ *
+ * @param mosi SPI_MOSI pin
+ * @param miso SPI_MISO pin
+ * @param sclk SPI_CLK pin
+ * @param cs   SPI_CS  pin
+ */
+ SPI_STMPE610(PinName mosi, PinName miso, PinName sclk, PinName cs) ;
+ 
+ ~SPI_STMPE610() ;
+
+ /*
+  * some member functions here (yet to be written)
+  */
+
+ SPI m_spi;
+ DigitalOut m_cs ;
+ int _mode ;
+ 
+  void readRegs(int addr, uint8_t *data, int len) ;
+  void writeRegs(uint8_t *data, int len) ;
+  uint8_t read8(int addr) ;
+  void write8(int addr, uint8_t data) ;
+  uint16_t read16(int addr) ;
+  void write16(int addr, uint16_t data) ;
+  
+  int getRAWPoint(uint16_t *x, uint16_t *y, uint16_t *z) ;
+  
+  private:
+} ;
+#endif /* SPI_STMPE610_H */
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SPI_TFT_ILI9341.lib	Fri Oct 31 01:16:01 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/teams/components/code/SPI_TFT_ILI9341/#61fa73a34834
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/TFT_fonts.lib	Fri Oct 31 01:16:01 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/dreschpe/code/TFT_fonts/#76774250fcec
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Fri Oct 31 01:16:01 2014 +0000
@@ -0,0 +1,297 @@
+/* mbed main.cpp to test adafruit 2.8" TFT LCD shiled w Touchscreen
+ * Copyright (c) 2014 Motoo Tanaka @ Design Methodology Lab
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+#include "mbed.h"
+#include "MMA8451Q.h"
+#include <math.h>
+#include "SPI_TFT_ILI9341.h"
+#include "SPI_STMPE610.h"
+#include "Arial12x12.h"
+#include "Arial24x23.h"
+#include "Arial28x28.h"
+#include "font_big.h"
+
+
+#define PIN_XP          PTB3
+#define PIN_XM          PTB1
+#define PIN_YP          PTB2
+#define PIN_YM          PTB0
+#define PIN_MOSI        PTD2
+#define PIN_MISO        PTD3 
+#define PIN_SCLK        PTD1 
+#define PIN_CS_TFT      PTD0 
+#define PIN_DC_TFT      PTD5 
+#define PIN_BL_TFT      PTC9 
+#define PIN_CS_SD       PTA4 
+#define PIN_CS_TSC      PTA13
+#define PIN_TSC_INTR    PTC9
+
+#define MMA8451_I2C_ADDRESS (0x1d<<1)
+MMA8451Q *acc = 0 ;
+
+//  SPI_TFT_ILI9341(PinName mosi, PinName miso, PinName sclk, PinName cs, PinName reset, PinName dc, const char* name ="TFT");
+SPI_TFT_ILI9341 TFT(PIN_MOSI, PIN_MISO, PIN_SCLK, PIN_CS_TFT, PIN_BL_TFT, PIN_DC_TFT) ;
+SPI_STMPE610 TSC(PIN_MOSI, PIN_MISO, PIN_SCLK, PIN_CS_TSC) ;
+
+DigitalOut backlight(PTA12) ;
+DigitalIn pinD7(PTC9) ;
+
+int page = 0 ;
+int numPage = 3 ;
+
+void initTFT(void)
+{
+    //Configure the display driver
+    TFT.background(Black);
+    TFT.foreground(White);
+    wait(0.01) ;
+    TFT.cls();
+}
+
+void screen1(void) // Welcome Screen
+{
+    backlight = 0 ;
+    TFT.background(White) ;
+    TFT.cls() ;
+
+    wait(0.1) ;
+    TFT.set_font((unsigned char*) Arial24x23);
+    TFT.foreground(Red) ;
+    TFT.locate(80, 40) ;
+    TFT.printf("MBED") ;
+    TFT.foreground(Blue);
+    TFT.locate(60, 80) ;
+    TFT.printf("2.8\"TFT") ; 
+    TFT.locate(40, 120) ;
+    TFT.printf("with touch") ;
+    TFT.foreground(Black);
+    TFT.set_font((unsigned char*) Arial12x12);
+    TFT.foreground(Blue) ;
+    TFT.locate(10, 180) ;
+    TFT.printf("This program is running on") ;
+    TFT.locate(10, 200) ;
+    TFT.printf("freescale FRDM-KL25Z with") ;
+    TFT.locate(10, 220) ;
+    TFT.printf("a program developed on mbed") ;
+    TFT.foreground(Green) ;
+    TFT.locate(10, 260) ;
+    TFT.printf("To advance demo page, touch") ;
+    TFT.locate(10, 280) ;
+    TFT.printf("and hold right side of screen") ;
+    TFT.locate(10, 300) ;
+    TFT.printf("until the next screen starts") ;
+    backlight = 1 ;
+}
+
+void screen2(void) // Graphics
+{
+    //Draw some graphics
+    int i, x[2], y[2] ;
+    backlight = 0 ;
+
+    TFT.background(Black);
+    TFT.foreground(White);
+    TFT.cls() ;
+    TFT.set_font((unsigned char*) Arial12x12);
+    TFT.locate(90,0);
+    TFT.printf("Graphics");
+    
+    x[0] = 25 ; x[1] = 224 ;
+    y[0] = 20 ; y[1] = 219 ;
+    for (i = 20 ; i < 220 ; i += 10) {
+        TFT.line(i+5, y[0], i+5, y[1], Blue) ;
+        TFT.line(x[0], i, x[1], i, Blue) ;
+    }
+    TFT.line(125, y[0], 125, y[1], Green) ;
+    TFT.line(x[0], 120, x[1], 120, Green) ;
+    TFT.rect(x[0],y[0], x[1], y[1], Green) ;
+    TFT.locate(10, 20) ;
+    TFT.printf("V") ;
+    TFT.locate(0, 115) ;
+    TFT.printf("0.0") ;
+    TFT.locate(115, 225) ;
+    TFT.printf("0.0") ;
+    TFT.locate(215, 225) ;
+    TFT.printf("T") ;
+
+    double s;
+    for (int i = x[0]; i < 225; i++) {
+        s = 40 * sin((long double)i / 20);
+        TFT.pixel(i, 120 + (int)s, White);
+    }
+    
+    TFT.fillrect(10, 240, 229, 309, White) ;
+    TFT.rect(10, 240, 229, 309, Red) ;
+    TFT.rect(11, 241, 228, 308, Red) ;
+    
+    TFT.background(White) ;
+    TFT.foreground(Black) ;
+    TFT.locate(20, 250) ;
+    TFT.printf("With QVGA resolution") ;
+    TFT.locate(20, 270) ;
+    TFT.printf("simple graphics drawing") ;
+    TFT.locate(20, 290) ;
+    TFT.printf("capability is provided") ;
+    backlight = 1 ;
+}    
+
+double clip(double src)
+{
+    double value ;
+    value = src ;
+    if (value < 0.0) {
+        value = 0.0 ;
+    } else if (value > 2.0) {
+        value = 2.0 ;
+    }
+    return( value ) ;
+}
+
+void screen3(void)
+{
+    int t = 0 ;
+    int pt = 0 ; // previous t 
+    int i, x, y ;
+    unsigned int data[3] ; // for x, y, z 
+    unsigned int prev[3] ;
+    unsigned short signalHeight = 39 ;
+    unsigned short xoffset = 30 ;
+    unsigned short yoffset = 120 ;
+    unsigned short zoffset = 210 ;
+    unsigned short paneX[2] = {20, 235} ;
+    unsigned short paneH = 81 ;
+ 
+    backlight = 0 ;
+    TFT.background(Black) ;
+    TFT.foreground(White) ;
+//    TFT.cls() ;
+
+ 
+    TFT.fillrect(paneX[0], xoffset, paneX[1], xoffset+paneH, Black) ;
+    TFT.fillrect(paneX[0], yoffset, paneX[1], yoffset+paneH, Black) ;
+    TFT.fillrect(paneX[0], zoffset, paneX[1], zoffset+paneH, Black) ;
+    TFT.fillrect(paneX[0], xoffset, paneX[1], xoffset+paneH, Black) ;
+    for (i = 0 ; i < 10 ; i++ ) {
+        y = i * 8 ;
+        TFT.line(paneX[0], xoffset + y, paneX[1], xoffset + y, Blue) ;
+        TFT.line(paneX[0], yoffset + y, paneX[1], yoffset + y, Blue) ;
+        TFT.line(paneX[0], zoffset + y, paneX[1], zoffset + y, Blue) ;
+    }
+    for (x = 30 ; x < paneX[1] ; x += 10 ) {
+        TFT.line(x, xoffset, x, xoffset+paneH, Blue) ;
+        TFT.line(x, yoffset, x, yoffset+paneH, Blue) ;
+        TFT.line(x, zoffset, x, zoffset+paneH, Blue) ;
+    } 
+    TFT.rect(paneX[0], xoffset, paneX[1], xoffset+paneH, White) ;
+    TFT.rect(paneX[0], yoffset, paneX[1], yoffset+paneH, White) ;
+    TFT.rect(paneX[0], zoffset, paneX[1], zoffset+paneH, White) ;
+    TFT.set_font((unsigned char*) Arial12x12);
+    TFT.locate(5, xoffset+30) ;
+    TFT.printf("X") ;
+    TFT.locate(5, yoffset+30) ;
+    TFT.printf("Y") ;
+    TFT.locate(5, zoffset+30) ;
+    TFT.printf("Z") ;
+    TFT.locate(50, 10) ;
+    TFT.printf("Xtrinsic Accelerometer") ;
+    TFT.locate(90, 300) ;
+    TFT.printf("MMA8451Q") ;
+    
+    prev[0] = xoffset + (signalHeight * clip((1.0 + acc->getAccX()))) ;
+    prev[1] = yoffset + (signalHeight * clip((1.0 + acc->getAccY()))) ;
+    prev[2] = zoffset + (signalHeight * clip((1.0 + acc->getAccZ()))) ;
+    pt = paneX[0] ;
+    backlight = 1 ;
+    for(t = 21 ; t < paneX[1] ; t++) {
+        data[0] = xoffset + (signalHeight * clip((1.0 + acc->getAccX()))) ;
+        data[1] = yoffset + (signalHeight * clip((1.0 + acc->getAccY()))) ;
+        data[2] = zoffset + (signalHeight * clip((1.0 + acc->getAccZ()))) ;
+        TFT.line(pt, prev[0], t, data[0], Red) ;
+        TFT.line(pt, prev[1], t, data[1], Green) ;
+        TFT.line(pt, prev[2], t, data[2], Yellow) ;
+        prev[0] = data[0] ;
+        prev[1] = data[1] ;
+        prev[2] = data[2] ;
+        pt = t ;
+        wait(0.01) ;
+    }
+}
+
+void incPage(void)
+{
+    page++ ;
+    if (page >= numPage) {
+        page = 0 ;
+    }
+}
+
+void decPage(void) 
+{
+    page-- ;
+    if (page < 0) {
+        page = numPage - 1 ;
+    }
+}
+    
+int main()
+{
+    uint16_t x, y, z ;
+    int prevPage = 0 ;
+    
+    acc = new MMA8451Q(PTE25, PTE24, MMA8451_I2C_ADDRESS) ;
+    
+    initTFT() ;
+    
+    screen1() ;
+        
+    printf("Program Started!\n\r") ;
+    
+    for(;;) {
+//        printf("TFT width = %d, height = %d\n\r", TFT.width(), TFT.height()) ;
+        switch(page) {
+        case 0:
+            if (prevPage != page) {
+                screen1() ;
+            }
+            break ;
+        case 1:
+            if (prevPage != page) {
+                screen2() ; 
+            }
+            break ;
+        case 2:
+            if (prevPage != page) {
+                TFT.background(Black) ;
+                TFT.foreground(White) ;
+                TFT.cls() ;
+            }
+            screen3() ; 
+            wait(2) ;
+            break ;
+        default:
+            page = 0 ; 
+            break ;
+        }
+        prevPage = page ;
+        printf("Screen Printed\n\r") ;
+
+        TSC.getRAWPoint(&x, &y, &z) ;
+        if ((x != 0)||(y != 0) || (z != 0)) {
+            if (x < 1000) { // left
+                decPage() ;
+            } else if (x > 3000) { // right
+                incPage() ;
+            }
+        }
+//        wait(1) ;
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Fri Oct 31 01:16:01 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/031413cf7a89
\ No newline at end of file