LPC1768 Mini-DK board with 2.8" SPI TFT and SPI touch

Dependencies:   Mini-DK SDFileSystem mbed

Fork of LPC1768_Mini-DK by Frank Vannieuwkerke

main.cpp

Committer:
frankvnk
Date:
2012-12-11
Revision:
0:ee7076d8260a
Child:
1:557df792279c

File content as of revision 0:ee7076d8260a:

#include "stdio.h"
#include "mbed.h"
#include "SPI_TFT.h"
#include "string"
#include "Arial12x12.h"
#include "Arial24x23.h"
#include "Arial28x28.h"
#include "font_big.h"
#include "Touch.h"

extern unsigned char p1[];  // the mbed logo
#define RGB565CONVERT(red, green, blue) (uint16_t)( (( red   >> 3 ) << 11 ) | (( green >> 2 ) << 5  ) | ( blue  >> 3 ))

// ADS7843 -> mosi, miso, sclk, cs, irq  -  TFT -> mosi, miso, sclk, cs, reset
TouchScreenADS7843 TFT(p5 ,p6 ,p7 ,p8 ,P2_13 ,p11, p12, p13, p14, p15,"TFT");

// (To be modified) put these global vars back in Touch.cpp/Touch.h 
Matrix      matrix;
Coordinate  display;
Coordinate  screen;

int main()
{
    unsigned char Ads7846_status;
    unsigned short LCD_id;
    TFT.claim(stdout);        // send stdout to the TFT display
    TFT.TP_Init();

    TFT.background(Black);    // set background to black
    TFT.foreground(White);    // set chars to white


    // LCD demo
    // first show the 4 directions
    TFT.cls();
    TFT.set_font((unsigned char*) Arial12x12);
    TFT.set_orientation(0);
    TFT.locate(0,0);
    printf("  Hello Mbed 0");
    TFT.set_orientation(1);
    TFT.locate(0,0);
    printf("  Hello Mbed 1");
    TFT.set_orientation(2);
    TFT.locate(0,0);
    printf("  Hello Mbed 2");
    TFT.set_orientation(3);
    TFT.locate(0,0);
    printf("  Hello Mbed 3");
    TFT.set_orientation(1);
    TFT.set_font((unsigned char*) Arial24x23);
    TFT.locate(50,100);
    TFT.printf("TFT orientation");

    wait(2);

    // draw some graphics
    TFT.cls();
    TFT.set_orientation(1);
    TFT.set_font((unsigned char*) Arial24x23);
    TFT.locate(120,115);
    TFT.printf("Graphic");
    TFT.line(0,0,100,200,Green);
    TFT.rect(100,50,150,100,Red);
    TFT.fillrect(180,25,220,70,Blue);
    TFT.circle(80,150,33,White);
    TFT.fillcircle(80,50,33,White);

    wait(2);

    // bigger text
    TFT.foreground(White);
    TFT.background(Blue);
    TFT.cls();
    TFT.set_font((unsigned char*) Arial24x23);
    TFT.locate(0,0);
    TFT.printf("Different Fonts :");

    TFT.set_font((unsigned char*) Neu42x35);
    TFT.locate(0,50);
    TFT.printf("Hello");
    TFT.set_font((unsigned char*) Arial24x23);
    TFT.locate(50,100);
    TFT.printf("Hello");
    TFT.set_font((unsigned char*) Arial12x12);
    TFT.locate(55,150);
    TFT.printf("Hello");

    TFT.set_orientation(2);
    TFT.set_font((unsigned char*) Arial24x23);
    TFT.locate(10,10);
    TFT.printf("Hi mbed");
    wait(2);

    // mbed logo
    TFT.set_orientation(1);
    TFT.background(Black);
    TFT.cls();
    TFT.Bitmap(90,90,172,55,p1);

    // Read LCD ID
    TFT.set_orientation(0);
    LCD_id = TFT.Read_ID();
    TFT.locate(10,10);
    TFT.printf("LCD: ILI%04X", LCD_id);
    wait(2);

    // RGB color wheel demo (cycle through all colors)
    TFT.cls();
    TFT.foreground(Yellow);    // set chars to yellow
    TFT.set_font((unsigned char*) Arial12x12);
    TFT.locate(10,10);
    TFT.printf("RGB color wheel (5x)");

    uint8_t r = 255, g = 0,  b = 0, step = 5, i;
    for (i=0;i<5;i++)
    {
        for(;g<255;g+=step) {TFT.fillrect(70,110,170,210,RGB565CONVERT(r, g, b));}      // Cycle from FF0000 to FFFF00 : red to yellow
        for(;r>0;r-=step)   {TFT.fillrect(70,110,170,210,RGB565CONVERT(r, g, b));}      // Cycle from FFFF00 to 00FF00 : yellow to green
        for(;b<255;b+=step) {TFT.fillrect(70,110,170,210,RGB565CONVERT(r, g, b));}      // Cycle from 00FF00 to 00FFFF : green to cyan
        for(;g>0;g-=step)   {TFT.fillrect(70,110,170,210,RGB565CONVERT(r, g, b));}      // Cycle from 00FFFF to 0000FF : cyan to blue
        for(;r<255;r+=step) {TFT.fillrect(70,110,170,210,RGB565CONVERT(r, g, b));}      // Cycle from 0000FF to FF00FF : blue to purple
        for(;b>0;b-=step)   {TFT.fillrect(70,110,170,210,RGB565CONVERT(r, g, b));}      // Cycle from FF00FF to FF0000 : purple to red
    }
    wait(2);


    // Touchpanel demo
    TFT.TouchPanel_Calibrate(&matrix);
    TFT.set_font((unsigned char*) Arial12x12);
    TFT.set_orientation(0);
    TFT.cls();
    TFT.locate(0,0);
    TFT.printf(" X:");
    TFT.locate(70,0);
    TFT.printf(" Y:");

    while (1)
    {
        if (!TFT._tp_irq)
        {
            Ads7846_status = TFT.Read_Ads7846(&screen);
            if (Ads7846_status)
            {
                TFT.getDisplayPoint(&display, &screen, &matrix ) ;
                TFT.TP_DrawPoint(display.x,display.y, Blue);
//                TFT.rect(display.x,display.y,display.x+1,display.y+1,Red);
                TFT.locate(25,0);
                printf("%03d",display.x);
                TFT.locate(95,0);
                printf("%03d",display.y);
                // Touchscreen area is larger than LCD area.
                // We use the bottom area outside the LCD area to clear the screen (y value > 320).
                if (display.y > 320)
                {
                    TFT.cls();
                    TFT.locate(0,0);
                    TFT.printf(" X:");
                    TFT.locate(70,0);
                    TFT.printf(" Y:");

                }
            }
        }
    }
}