Program to demonstrate the features of the DisplayModule DM-TFT24-104 display using the UniGraphics library.
Dependencies: DmTouch_UniGraphic UniGraphic mbed
Fork of DisplayModule24_demo by
Diff: main.cpp
- Revision:
- 6:6b6e93790b4c
- Parent:
- 5:c69049e461b7
- Child:
- 7:1dbfaba27e99
--- a/main.cpp Mon Mar 23 16:02:02 2015 +0000 +++ b/main.cpp Tue Jan 12 07:37:55 2016 +0000 @@ -1,187 +1,132 @@ #include "stdio.h" #include "mbed.h" #include "string" +#include "ILI9341.h" + #include "Arial12x12.h" #include "Arial24x23.h" -//#include "Terminal6x8.h" -#include "Arial43x48_numb.h" -#include "pict.h" #include "pavement_48x34.h" -//#include "IST3020.h" -//#include "UC1608.h" -//#include "ST7565.h" -#include "ILI932x.h" -//#include "ILI9341.h" -//#include "ILI9486.h" -//#include "TFT_MIPI.h" -//#include "SSD1306.h" - Serial pc(USBTX, USBRX); -//IST3020 myLCD(PAR_8, PortC, PC_8, PC_9, PA_0, PA_1, PA_4,"myLCD", 192, 64); // Parallel 8bit, Port, CS, reset, A0, WR, RD for F302 -//UC1608 myLCD(SPI_16, 10000000, D11, D12, D13, D10, D9, D8,"myLCD", 240, 120); // Spi 16bit, 10MHz, mosi, miso, sclk, cs, reset, dc -//ST7565 myLCD(PAR_8, PortC, PC_8, PC_9, PA_0, PA_1, PA_4,"myLCD", 128, 64); // Parallel 8bit, Port, CS, reset, A0, WR, RD -ILI932x myLCD(PAR_8, PortC, PH_0, PH_1, PA_0, PA_1, PA_4,"myLCD"); // Parallel 8bit, Port, CS, reset, RS, WR, RD for F401 -//ILI932x myLCD(SPI_16, 10000000, D11, D12, D13, D10, D9,"myLCD"); // Spi 16bit, 12MHz, mosi, miso, sclk, cs, reset -//ILI9341 myLCD(SPI_16, 12000000, D11, D12, D13, D10, D9, D8,"myLCD"); // Spi 16bit, 12MHz, mosi, miso, sclk, cs, reset, dc -//ILI9341 myLCD(PAR_16, PortC, PH_0, PH_1, PA_0, PA_1, PA_4,"myLCD"); // Parallel 16bit, Port, CS, reset, DC, WR, RD for F401 -//ILI9486 myLCD(PAR_16, PortC, PH_0, PH_1, PA_0, PA_1, PA_4,"myLCD"); // Parallel 16bit, Port, CS, reset, DC, WR, RD for F401 -//TFT_MIPI myLCD(PAR_16, PortC, PH_0, PH_1, PA_0, PA_1, PA_4,"myLCD"); // Parallel 16bit, Port, CS, reset, DC, WR, RD for F401 -//SSD1306 myLCD(SPI_16, 10000000, D11, D12, D13, D10, D9, D8,"myLCD", 240, 120); // Spi 16bit, 10MHz, mosi, miso, sclk, cs, reset, dc -//ILI9486 myLCD(SPI_8, 12000000, PA_7, PA_6, PA_5, PB_6, PA_8, PA_9,"myLCD"); // Spi 16bit, 12MHz, mosi, miso, sclk, cs, reset, dc for minimaple -//ILI9341 myLCD(SPI_8, 12000000, PA_7, PA_6, PA_5, PB_6, PA_8, PA_9,"myLCD"); // Spi 16bit, 12MHz, mosi, miso, sclk, cs, reset, dc for minimaple +/* Configure the Adafruit ILI9341 2.4" display for 8-bit bus communication + + mbed pin display pin + -------- ----------- + p5 CS (3) + p6 RST (7) + p7 C/D (4) + p8 WR (5) + p9 RD (6) + + p23 d0 (13) + p24 d1 (14) + p25 d2 (15) + p26 d3 (16) + p27 d4 (17) + p28 d5 (18) + p29 d6 (19) + p30 d7 (20) + + p1 GND (1) + p40 Vin (2) +*/ +PinName dataBus[]= {p23, p24, p25, p26, p27, p28, p29, p30}; +ILI9341 myLCD(BUS_8, dataBus, p5, p6, p7, p8, p9, "myLCD", 240, 320); // Bus 8 bit, bus pin array, CS, RST, DC, WR, RD, name, xpixels, ypixels + +/* Configure the Adafruit ILI9341 2.4" display for SPI communication + + mbed pin display pin + -------- ----------- + p5 mosi + p6 miso + p7 sck + p8 cs + p9 reset + NC dc NC = a defined name for no connection (not required for this mode but included for consistency) +*/ +//ILI9341 myLCD(SPI_16, 12000000, p5, p6, p7, p8, p9, NC, "myLCD", 240, 320); // SPI 16bit, 12 MHz, mosi, miso, sck, cs, reset, dc Timer t; -//unsigned short backgroundcolor=White; -//unsigned short foregroundcolor=Black; unsigned short backgroundcolor=Black; unsigned short foregroundcolor=White; -char orient=1; +char orient=3; int main() { -// myLCD.set_contrast(26);//for uc1608 - // myLCD.set_contrast(46);//for ist3020 myLCD.set_orientation(orient); - int time, time2; - pc.baud (115200); - pc.printf("\n\nSystem Core Clock = %.3f MHZ\r\n",(float)SystemCoreClock/1000000); t.start(); - // myLCD.set_font((unsigned char*) Terminal6x8); - // myLCD.claim(stdout); // send stdout to the LCD display - //myLCD.claim(stderr); // send stderr to the LCD display - myLCD.background(backgroundcolor); // set background to black - myLCD.foreground(foregroundcolor); // set chars to white - - while(1) - { - myLCD.set_orientation((orient++)%4); -// myLCD.set_orientation(2); + myLCD.set_font((unsigned char*) Arial24x23); + myLCD.background(Blue); // set background to red + myLCD.foreground(White); // set chars to black myLCD.cls(); // clear the screen - myLCD.locate(0,30); - myLCD.printf("Display ID: %.8X\r\n", myLCD.tftID); - pc.printf("Display ID: %.8X\r\n", myLCD.tftID); - // mem write/read test - unsigned short readback; - unsigned short colorstep = (0x10000/myLCD.width()); - for(unsigned short i=0; i<myLCD.width(); i++) - { - myLCD.pixel(i,0,i*colorstep); // write line - } - bool readerror=false; - for(unsigned short i=0; i<myLCD.width(); i++) // verify line - { - readback = myLCD.pixelread(i,0); - if(readback!=i*colorstep) - { - readerror=true; - pc.printf("pix %.4X readback %.4X\r\n", i*colorstep, readback); - } - } - myLCD.locate(0,10); - myLCD.printf("pixelread test %s\r\n", readerror ? "FAIL":"PASS"); + myLCD.locate(10,30); + myLCD.printf("UniGraphics Demo\r\n"); wait(2); - myLCD.cls(); - myLCD.set_font((unsigned char*) Terminal6x8,32,127,false); //variable width disabled - myLCD.locate(0,0); - myLCD.printf("Display Test\r\nSome text just to see if auto carriage return works correctly"); - myLCD.set_font((unsigned char*) Terminal6x8); - // myLCD.locate(0,0); - myLCD.printf("\r\nDisplay Test\r\nSome text just to see if auto carriage return works correctly"); - pc.printf(" Display Test \r\n"); - wait(3); - t.reset(); - myLCD.cls(); - time=t.read_us(); - myLCD.locate(2,55); - myLCD.printf("cls: %.3fms", (float)time/1000); - pc.printf("cls: %.3fms\r\n", (float)time/1000); - wait(3); - - myLCD.cls(); - t.reset(); - // draw some graphics - //myLCD.cls(); - myLCD.set_font((unsigned char*) Arial24x23); - myLCD.locate(10,10); - myLCD.printf("Test"); - - myLCD.line(0,0,myLCD.width()-1,0,foregroundcolor); - myLCD.line(0,0,0,myLCD.height()-1,foregroundcolor); - myLCD.line(0,0,myLCD.width()-1,myLCD.height()-1,foregroundcolor); - - myLCD.rect(10,30,50,40,foregroundcolor); - myLCD.fillrect(60,30,100,40,foregroundcolor); - - myLCD.circle(150,32,30,foregroundcolor); - myLCD.fillcircle(140,20,10,foregroundcolor); - - double s; - - for (unsigned short i=0; i<myLCD.width(); i++) + while(1) + { + myLCD.cls(); // clear the screen + myLCD.set_font((unsigned char*) Arial24x23); + myLCD.locate(0,30); + myLCD.printf("Orientation mode: %x\r\n", orient%4); + wait(2); + myLCD.printf("Font is\r\n"); + myLCD.printf("Arial24x23\r\n"); + wait(2); + + myLCD.background(Black); + myLCD.foreground(White); + myLCD.cls(); // clear the screen + myLCD.set_font((unsigned char*) Arial12x12); + myLCD.locate(0,10); + myLCD.printf("Font changed to Arial12x12\r\n"); + myLCD.printf("Background and foreground color also changed.\n\r\n\r"); + wait(2); + myLCD.printf("Notice that if some text is too long to fit the width of the screen that it is automatically wrapped to the next line.\r\n\r\n"); + wait(2); + myLCD.set_font((unsigned char*) Terminal6x8); + myLCD.printf("Font changed to Terminal6x8\r\n"); + myLCD.printf("This is pretty small!\r\n"); + wait(2); + + myLCD.cls(); + myLCD.set_font((unsigned char*) Arial24x23); + myLCD.locate(10,10); + myLCD.printf("Draw lines\n\r"); + myLCD.line(0,50,myLCD.width()-1,50,Yellow); + myLCD.line(myLCD.width()-50,51,myLCD.width()-50,myLCD.height()-1,Green); + wait(2); + + myLCD.cls(); + myLCD.locate(10,10); + myLCD.printf("Draw rectangles"); + myLCD.rect(10,50,50,80,Red); + myLCD.rect(15,55,45,75,Red); + myLCD.rect(20,60,40,70,Red); + myLCD.fillrect(160,130,200,240,Blue); + wait(2); + + myLCD.cls(); + myLCD.locate(10,10); + myLCD.printf("Draw circles"); + myLCD.circle(150,132,30,Yellow); + myLCD.fillcircle(140,70,25,Cyan); + wait(2); + + myLCD.cls(); + myLCD.set_font((unsigned char*) Arial12x12); + myLCD.locate(10,10); + myLCD.printf("Draw function with pixels"); + double s; + for (unsigned short i=0; i<myLCD.width(); i++) { s =10 * sin((long double) i / 10 ); - myLCD.pixel(i,40 + (int)s ,foregroundcolor); + myLCD.pixel(i,80 + (int)s ,White); } - - - time=t.read_us(); - myLCD.locate(2,55); - myLCD.set_font((unsigned char*) Terminal6x8); - myLCD.printf("plot: %.3fms", (float)time/1000); - pc.printf("plot: %.3fms\r\n", (float)time/1000); - wait(3); - myLCD.cls(); - t.reset(); - Bitmap_s pic = { - 64, // XSize - 64, // YSize - 8, // Bytes in Line - burp, // Pointer to picture data - }; - myLCD.Bitmap_BW(pic,myLCD.width()-64,0); - time=t.read_us(); - myLCD.locate(2,55); - myLCD.printf("bmp: %.3fms", (float)time/1000); - pc.printf("bmp: %.3fms\r\n", (float)time/1000); - wait(3); - myLCD.cls(); - myLCD.set_font((unsigned char*) Arial43x48_numb, 46, 58, false); //only numbers, variable-width disabled - t.reset(); - myLCD.locate(0,0); - myLCD.printf("%d", 12345); - time=t.read_us(); - myLCD.locate(2,55); - myLCD.set_font((unsigned char*) Terminal6x8); - myLCD.printf("Big Font: %.3fms", (float)time/1000); - pc.printf("Big Font: %.3fms\r\n", (float)time/1000); - wait(3); - // sparse pixels test - myLCD.cls(); - myLCD.FastWindow(true); - t.reset(); - for(unsigned int i=0; i<20000; i++) - { - myLCD.pixel((i+(i*89)%myLCD.width()), (i+(i*61)%myLCD.height()), White); - } - myLCD.copy_to_lcd(); - time=t.read_us(); - myLCD.cls(); - myLCD.FastWindow(false); - t.reset(); - for(unsigned int i=0; i<20000; i++) - { - myLCD.pixel((i+(i*89)%myLCD.width()), (i+(i*61)%myLCD.height()), White); - } - myLCD.copy_to_lcd(); - time2=t.read_us(); - myLCD.locate(2,55); - myLCD.printf("std:%.3fms fastw:%.3fms", (float)time2/1000, (float)time/1000); - pc.printf("std: %.3fms fastw: %.3fms\r\n", (float)time2/1000, (float)time/1000); - wait(3); + wait(3); + // scroll test, only for TFT myLCD.cls(); myLCD.set_font((unsigned char*) Arial24x23); @@ -223,11 +168,7 @@ { for(int x=0; x<myLCD.width(); x+=48) myLCD.Bitmap(x,y,48,34,(unsigned char *)pavement_48x34); } - time=t.read_us(); - myLCD.locate(2,55); - myLCD.set_font((unsigned char*) Terminal6x8); - myLCD.printf("Bmp speed: %.3fms", (float)time/1000); - pc.printf("Bmp speed: %.3fms\r\n", (float)time/1000); wait(2); + myLCD.set_orientation((++orient)%4); } } \ No newline at end of file