Juan Loreto / Mbed 2 deprecated Nucleo-F411RE-LGDP4535_TFT_Demo

Dependencies:   mbed

Committer:
jloreto
Date:
Sun Aug 23 15:50:19 2015 +0000
Revision:
0:e67bf8f398ee
This program is to test MCU Friend shield based on LGDP4535 in Nucleo-F411RE board.; Libraries modified from Unigraphic Library

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jloreto 0:e67bf8f398ee 1 /* This demonstration file was copied from Unigraphic _demo for mbed
jloreto 0:e67bf8f398ee 2 */
jloreto 0:e67bf8f398ee 3
jloreto 0:e67bf8f398ee 4
jloreto 0:e67bf8f398ee 5 #include "stdio.h"
jloreto 0:e67bf8f398ee 6 #include "mbed.h"
jloreto 0:e67bf8f398ee 7 #include "string"
jloreto 0:e67bf8f398ee 8 #include "Arial12x12.h"
jloreto 0:e67bf8f398ee 9 #include "Arial24x23.h"
jloreto 0:e67bf8f398ee 10 #include "Arial43x48_numb.h"
jloreto 0:e67bf8f398ee 11 #include "pict.h"
jloreto 0:e67bf8f398ee 12 #include "pavement_48x34.h"
jloreto 0:e67bf8f398ee 13 #include "LGDP4535.h"
jloreto 0:e67bf8f398ee 14
jloreto 0:e67bf8f398ee 15
jloreto 0:e67bf8f398ee 16 Serial pc(USBTX, USBRX);
jloreto 0:e67bf8f398ee 17
jloreto 0:e67bf8f398ee 18 PinName pinSet[8] = {D8,D9,D2,D3,D4,D5,D6,D7};
jloreto 0:e67bf8f398ee 19
jloreto 0:e67bf8f398ee 20 LGDP4535 myLCD(BUS_8, pinSet, A3, A4, A2, A1, A0, "myLCD");
jloreto 0:e67bf8f398ee 21
jloreto 0:e67bf8f398ee 22
jloreto 0:e67bf8f398ee 23 Timer t;
jloreto 0:e67bf8f398ee 24
jloreto 0:e67bf8f398ee 25 unsigned short backgroundcolor=White;
jloreto 0:e67bf8f398ee 26 unsigned short foregroundcolor=Black;
jloreto 0:e67bf8f398ee 27 //unsigned short backgroundcolor=Black;
jloreto 0:e67bf8f398ee 28 //unsigned short foregroundcolor=White;
jloreto 0:e67bf8f398ee 29
jloreto 0:e67bf8f398ee 30 char orient=1;
jloreto 0:e67bf8f398ee 31 int main()
jloreto 0:e67bf8f398ee 32 {
jloreto 0:e67bf8f398ee 33 // myLCD.set_contrast(26);//for uc1608
jloreto 0:e67bf8f398ee 34 // myLCD.set_contrast(46);//for ist3020
jloreto 0:e67bf8f398ee 35 myLCD.set_orientation(orient);
jloreto 0:e67bf8f398ee 36 int time, time2;
jloreto 0:e67bf8f398ee 37 pc.baud (115200);
jloreto 0:e67bf8f398ee 38 pc.printf("\n\nSystem Core Clock = %.3f MHZ\r\n",(float)SystemCoreClock/1000000);
jloreto 0:e67bf8f398ee 39 t.start();
jloreto 0:e67bf8f398ee 40 // myLCD.set_font((unsigned char*) Terminal6x8);
jloreto 0:e67bf8f398ee 41 // myLCD.claim(stdout); // send stdout to the LCD display
jloreto 0:e67bf8f398ee 42 //myLCD.claim(stderr); // send stderr to the LCD display
jloreto 0:e67bf8f398ee 43 myLCD.background(backgroundcolor); // set background to black
jloreto 0:e67bf8f398ee 44 myLCD.foreground(foregroundcolor); // set chars to white
jloreto 0:e67bf8f398ee 45
jloreto 0:e67bf8f398ee 46 while(1)
jloreto 0:e67bf8f398ee 47 {
jloreto 0:e67bf8f398ee 48 myLCD.set_orientation((orient++)%4);
jloreto 0:e67bf8f398ee 49 // myLCD.set_orientation(2);
jloreto 0:e67bf8f398ee 50 myLCD.cls(); // clear the screen
jloreto 0:e67bf8f398ee 51 myLCD.locate(0,30);
jloreto 0:e67bf8f398ee 52 myLCD.printf("Display ID: %.8X\r\n", myLCD.tftID);
jloreto 0:e67bf8f398ee 53 pc.printf("Display ID: %.8X\r\n", myLCD.tftID);
jloreto 0:e67bf8f398ee 54 // mem write/read test
jloreto 0:e67bf8f398ee 55 unsigned short readback;
jloreto 0:e67bf8f398ee 56 unsigned short colorstep = (0x10000/myLCD.width());
jloreto 0:e67bf8f398ee 57 for(unsigned short i=0; i<myLCD.width(); i++)
jloreto 0:e67bf8f398ee 58 {
jloreto 0:e67bf8f398ee 59 myLCD.pixel(i,0,i*colorstep); // write line
jloreto 0:e67bf8f398ee 60 }
jloreto 0:e67bf8f398ee 61 bool readerror=false;
jloreto 0:e67bf8f398ee 62 for(unsigned short i=0; i<myLCD.width(); i++) // verify line
jloreto 0:e67bf8f398ee 63 {
jloreto 0:e67bf8f398ee 64 readback = myLCD.pixelread(i,0);
jloreto 0:e67bf8f398ee 65 if(readback!=i*colorstep)
jloreto 0:e67bf8f398ee 66 {
jloreto 0:e67bf8f398ee 67 readerror=true;
jloreto 0:e67bf8f398ee 68 pc.printf("pix %.4X readback %.4X\r\n", i*colorstep, readback);
jloreto 0:e67bf8f398ee 69 }
jloreto 0:e67bf8f398ee 70 }
jloreto 0:e67bf8f398ee 71 myLCD.locate(0,10);
jloreto 0:e67bf8f398ee 72 myLCD.printf("pixelread test %s\r\n", readerror ? "FAIL":"PASS");
jloreto 0:e67bf8f398ee 73 wait(2);
jloreto 0:e67bf8f398ee 74
jloreto 0:e67bf8f398ee 75 myLCD.cls();
jloreto 0:e67bf8f398ee 76 myLCD.set_font((unsigned char*) Terminal6x8,32,127,false); //variable width disabled
jloreto 0:e67bf8f398ee 77 myLCD.locate(0,0);
jloreto 0:e67bf8f398ee 78 myLCD.printf("Display Test\r\nSome text just to see if auto carriage return works correctly");
jloreto 0:e67bf8f398ee 79 myLCD.set_font((unsigned char*) Terminal6x8);
jloreto 0:e67bf8f398ee 80 // myLCD.locate(0,0);
jloreto 0:e67bf8f398ee 81 myLCD.printf("\r\nDisplay Test\r\nSome text just to see if auto carriage return works correctly");
jloreto 0:e67bf8f398ee 82 pc.printf(" Display Test \r\n");
jloreto 0:e67bf8f398ee 83 wait(3);
jloreto 0:e67bf8f398ee 84 t.reset();
jloreto 0:e67bf8f398ee 85 myLCD.cls();
jloreto 0:e67bf8f398ee 86 time=t.read_us();
jloreto 0:e67bf8f398ee 87 myLCD.locate(2,55);
jloreto 0:e67bf8f398ee 88 myLCD.printf("cls: %.3fms", (float)time/1000);
jloreto 0:e67bf8f398ee 89 pc.printf("cls: %.3fms\r\n", (float)time/1000);
jloreto 0:e67bf8f398ee 90 wait(3);
jloreto 0:e67bf8f398ee 91
jloreto 0:e67bf8f398ee 92 myLCD.cls();
jloreto 0:e67bf8f398ee 93 t.reset();
jloreto 0:e67bf8f398ee 94 // draw some graphics
jloreto 0:e67bf8f398ee 95 //myLCD.cls();
jloreto 0:e67bf8f398ee 96 myLCD.set_font((unsigned char*) Arial24x23);
jloreto 0:e67bf8f398ee 97 myLCD.locate(10,10);
jloreto 0:e67bf8f398ee 98 myLCD.printf("Test");
jloreto 0:e67bf8f398ee 99
jloreto 0:e67bf8f398ee 100 myLCD.line(0,0,myLCD.width()-1,0,foregroundcolor);
jloreto 0:e67bf8f398ee 101 myLCD.line(0,0,0,myLCD.height()-1,foregroundcolor);
jloreto 0:e67bf8f398ee 102 myLCD.line(0,0,myLCD.width()-1,myLCD.height()-1,foregroundcolor);
jloreto 0:e67bf8f398ee 103
jloreto 0:e67bf8f398ee 104 myLCD.rect(10,30,50,40,foregroundcolor);
jloreto 0:e67bf8f398ee 105 myLCD.fillrect(60,30,100,40,foregroundcolor);
jloreto 0:e67bf8f398ee 106
jloreto 0:e67bf8f398ee 107 myLCD.circle(150,32,30,foregroundcolor);
jloreto 0:e67bf8f398ee 108 myLCD.fillcircle(140,20,10,foregroundcolor);
jloreto 0:e67bf8f398ee 109
jloreto 0:e67bf8f398ee 110 double s;
jloreto 0:e67bf8f398ee 111
jloreto 0:e67bf8f398ee 112 for (unsigned short i=0; i<myLCD.width(); i++)
jloreto 0:e67bf8f398ee 113 {
jloreto 0:e67bf8f398ee 114 s =10 * sin((long double) i / 10 );
jloreto 0:e67bf8f398ee 115 myLCD.pixel(i,40 + (int)s ,foregroundcolor);
jloreto 0:e67bf8f398ee 116 }
jloreto 0:e67bf8f398ee 117
jloreto 0:e67bf8f398ee 118
jloreto 0:e67bf8f398ee 119 time=t.read_us();
jloreto 0:e67bf8f398ee 120 myLCD.locate(2,55);
jloreto 0:e67bf8f398ee 121 myLCD.set_font((unsigned char*) Terminal6x8);
jloreto 0:e67bf8f398ee 122 myLCD.printf("plot: %.3fms", (float)time/1000);
jloreto 0:e67bf8f398ee 123 pc.printf("plot: %.3fms\r\n", (float)time/1000);
jloreto 0:e67bf8f398ee 124 wait(3);
jloreto 0:e67bf8f398ee 125 myLCD.cls();
jloreto 0:e67bf8f398ee 126 t.reset();
jloreto 0:e67bf8f398ee 127 Bitmap_s pic = {
jloreto 0:e67bf8f398ee 128 64, // XSize
jloreto 0:e67bf8f398ee 129 64, // YSize
jloreto 0:e67bf8f398ee 130 8, // Bytes in Line
jloreto 0:e67bf8f398ee 131 burp, // Pointer to picture data
jloreto 0:e67bf8f398ee 132 };
jloreto 0:e67bf8f398ee 133 myLCD.Bitmap_BW(pic,myLCD.width()-64,0);
jloreto 0:e67bf8f398ee 134 time=t.read_us();
jloreto 0:e67bf8f398ee 135 myLCD.locate(2,55);
jloreto 0:e67bf8f398ee 136 myLCD.printf("bmp: %.3fms", (float)time/1000);
jloreto 0:e67bf8f398ee 137 pc.printf("bmp: %.3fms\r\n", (float)time/1000);
jloreto 0:e67bf8f398ee 138 wait(3);
jloreto 0:e67bf8f398ee 139 myLCD.cls();
jloreto 0:e67bf8f398ee 140 myLCD.set_font((unsigned char*) Arial43x48_numb, 46, 58, false); //only numbers, variable-width disabled
jloreto 0:e67bf8f398ee 141 t.reset();
jloreto 0:e67bf8f398ee 142 myLCD.locate(0,0);
jloreto 0:e67bf8f398ee 143 myLCD.printf("%d", 12345);
jloreto 0:e67bf8f398ee 144 time=t.read_us();
jloreto 0:e67bf8f398ee 145 myLCD.locate(2,55);
jloreto 0:e67bf8f398ee 146 myLCD.set_font((unsigned char*) Terminal6x8);
jloreto 0:e67bf8f398ee 147 myLCD.printf("Big Font: %.3fms", (float)time/1000);
jloreto 0:e67bf8f398ee 148 pc.printf("Big Font: %.3fms\r\n", (float)time/1000);
jloreto 0:e67bf8f398ee 149 wait(3);
jloreto 0:e67bf8f398ee 150 // sparse pixels test
jloreto 0:e67bf8f398ee 151 myLCD.cls();
jloreto 0:e67bf8f398ee 152 myLCD.FastWindow(true);
jloreto 0:e67bf8f398ee 153 t.reset();
jloreto 0:e67bf8f398ee 154 for(unsigned int i=0; i<20000; i++)
jloreto 0:e67bf8f398ee 155 {
jloreto 0:e67bf8f398ee 156 myLCD.pixel((i+(i*89)%myLCD.width()), (i+(i*61)%myLCD.height()), Red);
jloreto 0:e67bf8f398ee 157 }
jloreto 0:e67bf8f398ee 158 myLCD.copy_to_lcd();
jloreto 0:e67bf8f398ee 159 time=t.read_us();
jloreto 0:e67bf8f398ee 160 myLCD.cls();
jloreto 0:e67bf8f398ee 161 myLCD.FastWindow(false);
jloreto 0:e67bf8f398ee 162 t.reset();
jloreto 0:e67bf8f398ee 163 for(unsigned int i=0; i<20000; i++)
jloreto 0:e67bf8f398ee 164 {
jloreto 0:e67bf8f398ee 165 myLCD.pixel((i+(i*89)%myLCD.width()), (i+(i*61)%myLCD.height()), Blue);
jloreto 0:e67bf8f398ee 166 }
jloreto 0:e67bf8f398ee 167 myLCD.copy_to_lcd();
jloreto 0:e67bf8f398ee 168 time2=t.read_us();
jloreto 0:e67bf8f398ee 169 myLCD.locate(2,55);
jloreto 0:e67bf8f398ee 170 myLCD.printf("std:%.3fms fastw:%.3fms", (float)time2/1000, (float)time/1000);
jloreto 0:e67bf8f398ee 171 pc.printf("std: %.3fms fastw: %.3fms\r\n", (float)time2/1000, (float)time/1000);
jloreto 0:e67bf8f398ee 172 wait(3);
jloreto 0:e67bf8f398ee 173 // scroll test, only for TFT
jloreto 0:e67bf8f398ee 174 myLCD.cls();
jloreto 0:e67bf8f398ee 175 myLCD.set_font((unsigned char*) Arial24x23);
jloreto 0:e67bf8f398ee 176 myLCD.locate(2,10);
jloreto 0:e67bf8f398ee 177 myLCD.printf("Scrolling");
jloreto 0:e67bf8f398ee 178 myLCD.rect(0,0,myLCD.width()-1,myLCD.height()-1,White);
jloreto 0:e67bf8f398ee 179 myLCD.rect(1,1,myLCD.width()-2,myLCD.height()-2,Blue);
jloreto 0:e67bf8f398ee 180 myLCD.setscrollarea(0,myLCD.sizeY());
jloreto 0:e67bf8f398ee 181 wait(1);
jloreto 0:e67bf8f398ee 182 myLCD.scroll(1); //up 1
jloreto 0:e67bf8f398ee 183 wait(1);
jloreto 0:e67bf8f398ee 184 myLCD.scroll(0); //center
jloreto 0:e67bf8f398ee 185 wait(1);
jloreto 0:e67bf8f398ee 186 myLCD.scroll(myLCD.sizeY()-1); //down 1
jloreto 0:e67bf8f398ee 187 wait(1);
jloreto 0:e67bf8f398ee 188 myLCD.scroll(myLCD.sizeY()); // same as 0, center
jloreto 0:e67bf8f398ee 189 wait(1);
jloreto 0:e67bf8f398ee 190 myLCD.scroll(myLCD.sizeY()>>1); // half screen
jloreto 0:e67bf8f398ee 191 wait(1);
jloreto 0:e67bf8f398ee 192 myLCD.scrollreset(); // center
jloreto 0:e67bf8f398ee 193 wait(1);
jloreto 0:e67bf8f398ee 194 for(unsigned short i=1; i<=myLCD.sizeY(); i++)
jloreto 0:e67bf8f398ee 195 {
jloreto 0:e67bf8f398ee 196 myLCD.scroll(i);
jloreto 0:e67bf8f398ee 197 wait_ms(2);
jloreto 0:e67bf8f398ee 198 }
jloreto 0:e67bf8f398ee 199 wait(2);
jloreto 0:e67bf8f398ee 200 // color inversion
jloreto 0:e67bf8f398ee 201 for(unsigned short i=0; i<=8; i++)
jloreto 0:e67bf8f398ee 202 {
jloreto 0:e67bf8f398ee 203 myLCD.invert(i&1);
jloreto 0:e67bf8f398ee 204 wait_ms(200);
jloreto 0:e67bf8f398ee 205 }
jloreto 0:e67bf8f398ee 206 wait(2);
jloreto 0:e67bf8f398ee 207 // bmp 16bit test
jloreto 0:e67bf8f398ee 208 myLCD.cls();
jloreto 0:e67bf8f398ee 209 t.reset();
jloreto 0:e67bf8f398ee 210 for(int y=0; y<myLCD.height(); y+=34)
jloreto 0:e67bf8f398ee 211 {
jloreto 0:e67bf8f398ee 212 for(int x=0; x<myLCD.width(); x+=48) myLCD.Bitmap(x,y,48,34,(unsigned char *)pavement_48x34);
jloreto 0:e67bf8f398ee 213 }
jloreto 0:e67bf8f398ee 214 time=t.read_us();
jloreto 0:e67bf8f398ee 215 myLCD.locate(2,55);
jloreto 0:e67bf8f398ee 216 myLCD.set_font((unsigned char*) Terminal6x8);
jloreto 0:e67bf8f398ee 217 myLCD.printf("Bmp speed: %.3fms", (float)time/1000);
jloreto 0:e67bf8f398ee 218 pc.printf("Bmp speed: %.3fms\r\n", (float)time/1000);
jloreto 0:e67bf8f398ee 219 wait(2);
jloreto 0:e67bf8f398ee 220 }
jloreto 0:e67bf8f398ee 221 }