Geremia G
/
UniGraphic_demo
UniGraphic demo for TFT and LCD, par or spi
main.cpp
- Committer:
- Geremia
- Date:
- 2022-01-25
- Revision:
- 6:851dbb62def7
- Parent:
- 5:c69049e461b7
File content as of revision 6:851dbb62def7:
//#include "stdio.h" #include "mbed.h" //#include "string" #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" BufferedSerial serial_port(USBTX, USBRX, 115200); FileHandle *mbed::mbed_override_console(int fd) { return &serial_port; } //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 Timer t; //unsigned short backgroundcolor=White; //unsigned short foregroundcolor=Black; unsigned short backgroundcolor=Black; unsigned short foregroundcolor=White; char orient=1; int main() { // myLCD.set_contrast(26);//for uc1608 // myLCD.set_contrast(46);//for ist3020 myLCD.set_orientation(orient); int time, time2; // serial_port.set_baud (115200); 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.cls(); // clear the screen myLCD.locate(0,30); myLCD.printf("Display ID: %.8X\r\n", myLCD.tftID); 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; printf("pix %.4X readback %.4X\r\n", i*colorstep, readback); } } myLCD.locate(0,10); myLCD.printf("pixelread test %s\r\n", readerror ? "FAIL":"PASS"); thread_sleep_for(2000); 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"); printf(" Display Test \r\n"); thread_sleep_for(3000); t.reset(); myLCD.cls(); time=t.read_us(); // time=t.elapsed_time().count(); myLCD.locate(2,55); myLCD.printf("cls: %.3fms", (float)time/1000); printf("cls: %.3fms\r\n", (float)time/1000); thread_sleep_for(3000); 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++) { s =10 * sin((long double) i / 10 ); myLCD.pixel(i,40 + (int)s ,foregroundcolor); } time=t.read_us(); myLCD.locate(2,55); myLCD.set_font((unsigned char*) Terminal6x8); myLCD.printf("plot: %.3fms", (float)time/1000); printf("plot: %.3fms\r\n", (float)time/1000); thread_sleep_for(3000); 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); printf("bmp: %.3fms\r\n", (float)time/1000); thread_sleep_for(3000); 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); printf("Big Font: %.3fms\r\n", (float)time/1000); thread_sleep_for(3000); // 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); printf("std: %.3fms fastw: %.3fms\r\n", (float)time2/1000, (float)time/1000); thread_sleep_for(3000); // scroll test, only for TFT myLCD.cls(); myLCD.set_font((unsigned char*) Arial24x23); myLCD.locate(2,10); myLCD.printf("Scrolling"); myLCD.rect(0,0,myLCD.width()-1,myLCD.height()-1,White); myLCD.rect(1,1,myLCD.width()-2,myLCD.height()-2,Blue); myLCD.setscrollarea(0,myLCD.sizeY()); thread_sleep_for(1000); myLCD.scroll(1); //up 1 thread_sleep_for(1000); myLCD.scroll(0); //center thread_sleep_for(1000); myLCD.scroll(myLCD.sizeY()-1); //down 1 thread_sleep_for(1000); myLCD.scroll(myLCD.sizeY()); // same as 0, center thread_sleep_for(1000); myLCD.scroll(myLCD.sizeY()>>1); // half screen thread_sleep_for(1000); myLCD.scrollreset(); // center thread_sleep_for(1000); for(unsigned short i=1; i<=myLCD.sizeY(); i++) { myLCD.scroll(i); thread_sleep_for(2); } thread_sleep_for(2000); // color inversion for(unsigned short i=0; i<=8; i++) { myLCD.invert(i&1); thread_sleep_for(200); } thread_sleep_for(2000); // bmp 16bit test myLCD.cls(); t.reset(); for(int y=0; y<myLCD.height(); y+=34) { 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); printf("Bmp speed: %.3fms\r\n", (float)time/1000); thread_sleep_for(2000); } }