Dependencies:   UniGraphic

Committer:
amouroug
Date:
Tue Oct 06 05:16:43 2020 +0000
Revision:
0:deb3a37d60f8
Child:
1:f27de729d8f8
An App implementation for testing ILI9341 for mbed os 6.3

Who changed what in which revision?

UserRevisionLine numberNew contents of line
amouroug 0:deb3a37d60f8 1 #include "stdio.h"
amouroug 0:deb3a37d60f8 2 #include "mbed.h"
amouroug 0:deb3a37d60f8 3 #include "string"
amouroug 0:deb3a37d60f8 4 #include "Arial12x12.h"
amouroug 0:deb3a37d60f8 5 #include "Arial24x23.h"
amouroug 0:deb3a37d60f8 6 #include "Arial43x48_numb.h"
amouroug 0:deb3a37d60f8 7 #include <ILI9341.h>
amouroug 0:deb3a37d60f8 8
amouroug 0:deb3a37d60f8 9
amouroug 0:deb3a37d60f8 10
amouroug 0:deb3a37d60f8 11 Serial pc(USBTX, USBRX);
amouroug 0:deb3a37d60f8 12
amouroug 0:deb3a37d60f8 13
amouroug 0:deb3a37d60f8 14 ILI9341 myLCD(SPI_16, 12000000, PB_5,PB_4, PB_3, PA_10, PA_8, PB_10,"myLCD"); // Spi 16bit, 12MHz, mosi, miso, sclk, cs, reset, dc
amouroug 0:deb3a37d60f8 15
amouroug 0:deb3a37d60f8 16 Timer t;
amouroug 0:deb3a37d60f8 17
amouroug 0:deb3a37d60f8 18 //unsigned short backgroundcolor=White;
amouroug 0:deb3a37d60f8 19 //unsigned short foregroundcolor=Black;
amouroug 0:deb3a37d60f8 20 unsigned short backgroundcolor=Black;
amouroug 0:deb3a37d60f8 21 unsigned short foregroundcolor=White;
amouroug 0:deb3a37d60f8 22
amouroug 0:deb3a37d60f8 23 char orient=1;
amouroug 0:deb3a37d60f8 24 int main()
amouroug 0:deb3a37d60f8 25 {
amouroug 0:deb3a37d60f8 26 // myLCD.set_contrast(26);//for uc1608
amouroug 0:deb3a37d60f8 27 // myLCD.set_contrast(46);//for ist3020
amouroug 0:deb3a37d60f8 28 myLCD.set_orientation(orient);
amouroug 0:deb3a37d60f8 29 int time, time2;
amouroug 0:deb3a37d60f8 30 pc.baud (115200);
amouroug 0:deb3a37d60f8 31 pc.printf("\n\nSystem Core Clock = %.3f MHZ\r\n",(float)SystemCoreClock/1000000);
amouroug 0:deb3a37d60f8 32 t.start();
amouroug 0:deb3a37d60f8 33 // myLCD.set_font((unsigned char*) Terminal6x8);
amouroug 0:deb3a37d60f8 34 // myLCD.claim(stdout); // send stdout to the LCD display
amouroug 0:deb3a37d60f8 35 //myLCD.claim(stderr); // send stderr to the LCD display
amouroug 0:deb3a37d60f8 36 myLCD.background(backgroundcolor); // set background to black
amouroug 0:deb3a37d60f8 37 myLCD.foreground(foregroundcolor); // set chars to white
amouroug 0:deb3a37d60f8 38
amouroug 0:deb3a37d60f8 39 while(1) {
amouroug 0:deb3a37d60f8 40 myLCD.set_orientation((orient++)%4);
amouroug 0:deb3a37d60f8 41 myLCD.cls(); // clear the screen
amouroug 0:deb3a37d60f8 42 myLCD.locate(0,30);
amouroug 0:deb3a37d60f8 43 myLCD.printf("Display ID: %.8X\r\n", myLCD.tftID);
amouroug 0:deb3a37d60f8 44 pc.printf("Display ID: %.8X\r\n", myLCD.tftID);
amouroug 0:deb3a37d60f8 45 // mem write/read test
amouroug 0:deb3a37d60f8 46 unsigned short readback;
amouroug 0:deb3a37d60f8 47 unsigned short colorstep = (0x10000/myLCD.width());
amouroug 0:deb3a37d60f8 48 for(unsigned short i=0; i<myLCD.width(); i++) {
amouroug 0:deb3a37d60f8 49 myLCD.pixel(i,0,i*colorstep); // write line
amouroug 0:deb3a37d60f8 50 }
amouroug 0:deb3a37d60f8 51 bool readerror=false;
amouroug 0:deb3a37d60f8 52 for(unsigned short i=0; i<myLCD.width(); i++) { // verify line
amouroug 0:deb3a37d60f8 53 readback = myLCD.pixelread(i,0);
amouroug 0:deb3a37d60f8 54 if(readback!=i*colorstep) {
amouroug 0:deb3a37d60f8 55 readerror=true;
amouroug 0:deb3a37d60f8 56 pc.printf("pix %.4X readback %.4X\r\n", i*colorstep, readback);
amouroug 0:deb3a37d60f8 57 }
amouroug 0:deb3a37d60f8 58 }
amouroug 0:deb3a37d60f8 59 myLCD.locate(0,10);
amouroug 0:deb3a37d60f8 60 myLCD.printf("pixelread test %s\r\n", readerror ? "FAIL":"PASS");
amouroug 0:deb3a37d60f8 61 ThisThread::sleep_for(2000);
amouroug 0:deb3a37d60f8 62
amouroug 0:deb3a37d60f8 63 myLCD.cls();
amouroug 0:deb3a37d60f8 64 myLCD.set_font((unsigned char*) Terminal6x8,32,127,false); //variable width disabled
amouroug 0:deb3a37d60f8 65 myLCD.locate(0,0);
amouroug 0:deb3a37d60f8 66 myLCD.printf("Display Test\r\nSome text just to see if auto carriage return works correctly");
amouroug 0:deb3a37d60f8 67 myLCD.set_font((unsigned char*) Terminal6x8);
amouroug 0:deb3a37d60f8 68 myLCD.printf("\r\nDisplay Test\r\nSome text just to see if auto carriage return works correctly");
amouroug 0:deb3a37d60f8 69 pc.printf(" Display Test \r\n");
amouroug 0:deb3a37d60f8 70 ThisThread::sleep_for(3000);
amouroug 0:deb3a37d60f8 71 t.reset();
amouroug 0:deb3a37d60f8 72 myLCD.cls();
amouroug 0:deb3a37d60f8 73 time=t.read_us();
amouroug 0:deb3a37d60f8 74 myLCD.locate(2,55);
amouroug 0:deb3a37d60f8 75 myLCD.printf("cls: %.3fms", (float)time/1000);
amouroug 0:deb3a37d60f8 76 pc.printf("cls: %.3fms\r\n", (float)time/1000);
amouroug 0:deb3a37d60f8 77 ThisThread::sleep_for(3000);
amouroug 0:deb3a37d60f8 78
amouroug 0:deb3a37d60f8 79 myLCD.cls();
amouroug 0:deb3a37d60f8 80 t.reset();
amouroug 0:deb3a37d60f8 81 // draw some graphics
amouroug 0:deb3a37d60f8 82 //myLCD.cls();
amouroug 0:deb3a37d60f8 83 myLCD.set_font((unsigned char*) Arial24x23);
amouroug 0:deb3a37d60f8 84 myLCD.locate(10,10);
amouroug 0:deb3a37d60f8 85 myLCD.printf("Test");
amouroug 0:deb3a37d60f8 86
amouroug 0:deb3a37d60f8 87 myLCD.line(0,0,myLCD.width()-1,0,foregroundcolor);
amouroug 0:deb3a37d60f8 88 myLCD.line(0,0,0,myLCD.height()-1,foregroundcolor);
amouroug 0:deb3a37d60f8 89 myLCD.line(0,0,myLCD.width()-1,myLCD.height()-1,foregroundcolor);
amouroug 0:deb3a37d60f8 90
amouroug 0:deb3a37d60f8 91 myLCD.rect(10,30,50,40,foregroundcolor);
amouroug 0:deb3a37d60f8 92 myLCD.fillrect(60,30,100,40,foregroundcolor);
amouroug 0:deb3a37d60f8 93
amouroug 0:deb3a37d60f8 94 myLCD.circle(150,32,30,foregroundcolor);
amouroug 0:deb3a37d60f8 95 myLCD.fillcircle(140,20,10,foregroundcolor);
amouroug 0:deb3a37d60f8 96
amouroug 0:deb3a37d60f8 97 double s;
amouroug 0:deb3a37d60f8 98
amouroug 0:deb3a37d60f8 99 for (unsigned short i=0; i<myLCD.width(); i++) {
amouroug 0:deb3a37d60f8 100 s =10 * sin((long double) i / 10 );
amouroug 0:deb3a37d60f8 101 myLCD.pixel(i,40 + (int)s,foregroundcolor);
amouroug 0:deb3a37d60f8 102 }
amouroug 0:deb3a37d60f8 103
amouroug 0:deb3a37d60f8 104
amouroug 0:deb3a37d60f8 105 time=t.read_us();
amouroug 0:deb3a37d60f8 106 myLCD.locate(2,55);
amouroug 0:deb3a37d60f8 107 myLCD.set_font((unsigned char*) Terminal6x8);
amouroug 0:deb3a37d60f8 108 myLCD.printf("plot: %.3fms", (float)time/1000);
amouroug 0:deb3a37d60f8 109 pc.printf("plot: %.3fms\r\n", (float)time/1000);
amouroug 0:deb3a37d60f8 110 ThisThread::sleep_for(3000);
amouroug 0:deb3a37d60f8 111 myLCD.cls();
amouroug 0:deb3a37d60f8 112 t.reset();
amouroug 0:deb3a37d60f8 113 myLCD.set_font((unsigned char*) Arial43x48_numb, 46, 58, false); //only numbers, variable-width disabled
amouroug 0:deb3a37d60f8 114 t.reset();
amouroug 0:deb3a37d60f8 115 myLCD.locate(0,0);
amouroug 0:deb3a37d60f8 116 myLCD.printf("%d", 12345);
amouroug 0:deb3a37d60f8 117 time=t.read_us();
amouroug 0:deb3a37d60f8 118 myLCD.locate(2,55);
amouroug 0:deb3a37d60f8 119 myLCD.set_font((unsigned char*) Terminal6x8);
amouroug 0:deb3a37d60f8 120 myLCD.printf("Big Font: %.3fms", (float)time/1000);
amouroug 0:deb3a37d60f8 121 pc.printf("Big Font: %.3fms\r\n", (float)time/1000);
amouroug 0:deb3a37d60f8 122 ThisThread::sleep_for(3000);
amouroug 0:deb3a37d60f8 123 // sparse pixels test
amouroug 0:deb3a37d60f8 124 myLCD.cls();
amouroug 0:deb3a37d60f8 125 myLCD.FastWindow(true);
amouroug 0:deb3a37d60f8 126 t.reset();
amouroug 0:deb3a37d60f8 127 for(unsigned int i=0; i<20000; i++) {
amouroug 0:deb3a37d60f8 128 myLCD.pixel((i+(i*89)%myLCD.width()), (i+(i*61)%myLCD.height()), White);
amouroug 0:deb3a37d60f8 129 }
amouroug 0:deb3a37d60f8 130 myLCD.copy_to_lcd();
amouroug 0:deb3a37d60f8 131 time=t.read_us();
amouroug 0:deb3a37d60f8 132 myLCD.cls();
amouroug 0:deb3a37d60f8 133 myLCD.FastWindow(false);
amouroug 0:deb3a37d60f8 134 t.reset();
amouroug 0:deb3a37d60f8 135 for(unsigned int i=0; i<20000; i++) {
amouroug 0:deb3a37d60f8 136 myLCD.pixel((i+(i*89)%myLCD.width()), (i+(i*61)%myLCD.height()), White);
amouroug 0:deb3a37d60f8 137 }
amouroug 0:deb3a37d60f8 138 myLCD.copy_to_lcd();
amouroug 0:deb3a37d60f8 139 time2=t.read_us();
amouroug 0:deb3a37d60f8 140 myLCD.locate(2,55);
amouroug 0:deb3a37d60f8 141 myLCD.printf("std:%.3fms fastw:%.3fms", (float)time2/1000, (float)time/1000);
amouroug 0:deb3a37d60f8 142 pc.printf("std: %.3fms fastw: %.3fms\r\n", (float)time2/1000, (float)time/1000);
amouroug 0:deb3a37d60f8 143 ThisThread::sleep_for(3000);
amouroug 0:deb3a37d60f8 144
amouroug 0:deb3a37d60f8 145 // scroll test, only for TFT
amouroug 0:deb3a37d60f8 146 myLCD.cls();
amouroug 0:deb3a37d60f8 147 myLCD.set_font((unsigned char*) Arial24x23);
amouroug 0:deb3a37d60f8 148 myLCD.locate(2,10);
amouroug 0:deb3a37d60f8 149 myLCD.printf("Scrolling");
amouroug 0:deb3a37d60f8 150 myLCD.rect(0,0,myLCD.width()-1,myLCD.height()-1,White);
amouroug 0:deb3a37d60f8 151 myLCD.rect(1,1,myLCD.width()-2,myLCD.height()-2,Blue);
amouroug 0:deb3a37d60f8 152 myLCD.setscrollarea(0,myLCD.sizeY());
amouroug 0:deb3a37d60f8 153 ThisThread::sleep_for(1000);
amouroug 0:deb3a37d60f8 154 myLCD.scroll(1); //up 1
amouroug 0:deb3a37d60f8 155 ThisThread::sleep_for(1000);
amouroug 0:deb3a37d60f8 156 myLCD.scroll(0); //center
amouroug 0:deb3a37d60f8 157 ThisThread::sleep_for(1000);
amouroug 0:deb3a37d60f8 158 myLCD.scroll(myLCD.sizeY()-1); //down 1
amouroug 0:deb3a37d60f8 159 ThisThread::sleep_for(1000);
amouroug 0:deb3a37d60f8 160 myLCD.scroll(myLCD.sizeY()); // same as 0, center
amouroug 0:deb3a37d60f8 161 ThisThread::sleep_for(1000);
amouroug 0:deb3a37d60f8 162 myLCD.scroll(myLCD.sizeY()>>1); // half screen
amouroug 0:deb3a37d60f8 163 ThisThread::sleep_for(1000);
amouroug 0:deb3a37d60f8 164 myLCD.scrollreset(); // center
amouroug 0:deb3a37d60f8 165 ThisThread::sleep_for(1000);
amouroug 0:deb3a37d60f8 166 for(unsigned short i=1; i<=myLCD.sizeY(); i++) {
amouroug 0:deb3a37d60f8 167 myLCD.scroll(i);
amouroug 0:deb3a37d60f8 168 ThisThread::sleep_for(2);
amouroug 0:deb3a37d60f8 169 }
amouroug 0:deb3a37d60f8 170 ThisThread::sleep_for(2000);
amouroug 0:deb3a37d60f8 171 // color inversion
amouroug 0:deb3a37d60f8 172 for(unsigned short i=0; i<=8; i++) {
amouroug 0:deb3a37d60f8 173 myLCD.invert(i&1);
amouroug 0:deb3a37d60f8 174 ThisThread::sleep_for(200);
amouroug 0:deb3a37d60f8 175 }
amouroug 0:deb3a37d60f8 176 ThisThread::sleep_for(2000);
amouroug 0:deb3a37d60f8 177 }
amouroug 0:deb3a37d60f8 178 }