Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@0:e67bf8f398ee, 2015-08-23 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |