Unigraphic Testprogramm for ST7920-controller

Dependencies:   UniGraphic mbed

Committer:
charly
Date:
Sat May 20 21:12:25 2017 +0000
Revision:
0:51143e132729
Child:
1:5ebf4110eee0
First working version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
charly 0:51143e132729 1 //#include "stdio.h"
charly 0:51143e132729 2 #include "mbed.h"
charly 0:51143e132729 3 //#include "string"
charly 0:51143e132729 4 #include "Arial12x12.h"
charly 0:51143e132729 5 #include "Arial24x23.h"
charly 0:51143e132729 6 //#include "Terminal6x8.h"
charly 0:51143e132729 7 #include "Arial43x48_numb.h"
charly 0:51143e132729 8 #include "pict.h"
charly 0:51143e132729 9 #include "pavement_48x34.h"
charly 0:51143e132729 10
charly 0:51143e132729 11 //#include "IST3020.h"
charly 0:51143e132729 12 //#include "UC1608.h"
charly 0:51143e132729 13 //#include "ST7565.h"
charly 0:51143e132729 14 #include "ST7920.h"
charly 0:51143e132729 15 //#include "ILI932x.h"
charly 0:51143e132729 16 //#include "ILI9341.h"
charly 0:51143e132729 17 //#include "ILI9486.h"
charly 0:51143e132729 18 //#include "TFT_MIPI.h"
charly 0:51143e132729 19 //#include "SSD1306.h"
charly 0:51143e132729 20
charly 0:51143e132729 21 Serial pc(USBTX, USBRX);
charly 0:51143e132729 22 DigitalOut led1(LED1);
charly 0:51143e132729 23 DigitalOut led2(LED2);
charly 0:51143e132729 24
charly 0:51143e132729 25
charly 0:51143e132729 26 //IST3020 myLCD(PAR_8, Port2, p23, p24, p25, p26, p27,"myLCD", 192, 64); // Parallel 8bit, Port, CS, reset, A0, WR, RD for F302
charly 0:51143e132729 27 //zeigt Schrott an
charly 0:51143e132729 28 //UC1608 myLCD(SPI_16, 10000000, p11, p12, p13, NC, NC, p16,"myLCD", 132, 64); // Spi 16bit, 10MHz, mosi, miso, sclk, cs, reset, dc
charly 0:51143e132729 29
charly 0:51143e132729 30 //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
charly 0:51143e132729 31 //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
charly 0:51143e132729 32 //ILI932x myLCD(SPI_16, 10000000, p11, p12, p13, p14, p15,"myLCD"); // Spi 16bit, 12MHz, mosi, miso, sclk, cs, reset
charly 0:51143e132729 33 //ILI9341 myLCD(SPI_16, 12000000, D11, D12, D13, D10, D9, D8,"myLCD"); // Spi 16bit, 12MHz, mosi, miso, sclk, cs, reset, dc
charly 0:51143e132729 34 //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
charly 0:51143e132729 35 //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
charly 0:51143e132729 36 //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
charly 0:51143e132729 37 //SSD1306 myLCD(SPI_16, 10000000, D11, D12, D13, D10, D9, D8,"myLCD", 240, 120); // Spi 16bit, 10MHz, mosi, miso, sclk, cs, reset, dc
charly 0:51143e132729 38 //zeigt Schrott an
charly 0:51143e132729 39 //ILI9486 myLCD(SPI_8, 12000000, p11, p12, p13, p14, p15, p16,"myLCD"); // Spi 16bit, 12MHz, mosi, miso, sclk, cs, reset, dc for minimaple
charly 0:51143e132729 40 //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
charly 0:51143e132729 41
charly 0:51143e132729 42 // cs, reset,dc must not be NC!
charly 0:51143e132729 43 ST7920 myLCD(SPI_8, 1000000, p11, p12, p13, p15, p14, p16, "128x64-ST7920", 128, 64); //Spi 8bit, 1MHz, mosi, miso, sclk, cs, reset, dc
charly 0:51143e132729 44
charly 0:51143e132729 45 Timer t;
charly 0:51143e132729 46
charly 0:51143e132729 47 unsigned short backgroundcolor=White;
charly 0:51143e132729 48 unsigned short foregroundcolor=Black;
charly 0:51143e132729 49 //unsigned short backgroundcolor=Black;
charly 0:51143e132729 50 //unsigned short foregroundcolor=White;
charly 0:51143e132729 51
charly 0:51143e132729 52 char orient=1;
charly 0:51143e132729 53 int main()
charly 0:51143e132729 54 {
charly 0:51143e132729 55 // myLCD.set_contrast(26);//for uc1608
charly 0:51143e132729 56 // myLCD.set_contrast(46);//for ist3020
charly 0:51143e132729 57 led1=1;
charly 0:51143e132729 58 pc.baud(115200);
charly 0:51143e132729 59 pc.printf("\n\r\n\r\n\r");
charly 0:51143e132729 60 pc.printf("\n\rConnected to mbed\n\r");
charly 0:51143e132729 61 pc.printf("\n\nSystem Core Clock = %.3f MHZ\r\n",(float)SystemCoreClock/1000000);
charly 0:51143e132729 62
charly 0:51143e132729 63 //myLCD.set_orientation(orient);
charly 0:51143e132729 64 int time, time2;
charly 0:51143e132729 65 t.start();
charly 0:51143e132729 66 // myLCD.set_font((unsigned char*) Terminal6x8);
charly 0:51143e132729 67 // myLCD.claim(stdout); // send stdout to the LCD display
charly 0:51143e132729 68 //myLCD.claim(stderr); // send stderr to the LCD display
charly 0:51143e132729 69 myLCD.background(backgroundcolor); // set background to black
charly 0:51143e132729 70 myLCD.foreground(foregroundcolor); // set chars to white
charly 0:51143e132729 71 led1=1;
charly 0:51143e132729 72 while(1)
charly 0:51143e132729 73 {
charly 0:51143e132729 74 pc.printf("Orientation: %d\r\n",orient%4);
charly 0:51143e132729 75 myLCD.set_orientation((orient++)%4);
charly 0:51143e132729 76
charly 0:51143e132729 77
charly 0:51143e132729 78 pc.printf("cls() ...\r\n");
charly 0:51143e132729 79 myLCD.cls();
charly 0:51143e132729 80 wait(5);
charly 0:51143e132729 81
charly 0:51143e132729 82 pc.printf("fillrect(0, 0, 127 , 63, black) ...\r\n");
charly 0:51143e132729 83 myLCD.fillrect(0, 0, 127 , 63, Black);
charly 0:51143e132729 84 wait(10);
charly 0:51143e132729 85
charly 0:51143e132729 86 pc.printf("Pixels at corners...\n\r");
charly 0:51143e132729 87 myLCD.cls();
charly 0:51143e132729 88 myLCD.pixel(1,1,Black);
charly 0:51143e132729 89 myLCD.pixel(126,62,Black);
charly 0:51143e132729 90 myLCD.pixel(1,62,Black);
charly 0:51143e132729 91 myLCD.pixel(126,1,Black);
charly 0:51143e132729 92 myLCD.copy_to_lcd();
charly 0:51143e132729 93 wait(10);
charly 0:51143e132729 94
charly 0:51143e132729 95 myLCD.cls(); // clear the screen
charly 0:51143e132729 96 myLCD.locate(0,30);
charly 0:51143e132729 97 myLCD.printf("Display ID: %.8X\r\n", myLCD.tftID);
charly 0:51143e132729 98 pc.printf("Display ID: %.8X\r\n", myLCD.tftID);
charly 0:51143e132729 99 // mem write/read test
charly 0:51143e132729 100 unsigned short readback;
charly 0:51143e132729 101 unsigned short colorstep = (0x10000/myLCD.width());
charly 0:51143e132729 102 for(unsigned short i=0; i<myLCD.width(); i++)
charly 0:51143e132729 103 {
charly 0:51143e132729 104 myLCD.pixel(i,0,i*colorstep); // write line
charly 0:51143e132729 105 }
charly 0:51143e132729 106 bool readerror=false;
charly 0:51143e132729 107 for(unsigned short i=0; i<myLCD.width(); i++) // verify line
charly 0:51143e132729 108 {
charly 0:51143e132729 109 readback = myLCD.pixelread(i,0);
charly 0:51143e132729 110 if(readback!=i*colorstep)
charly 0:51143e132729 111 {
charly 0:51143e132729 112 readerror=true;
charly 0:51143e132729 113 pc.printf("pix %.4X readback %.4X\r\n", i*colorstep, readback);
charly 0:51143e132729 114 }
charly 0:51143e132729 115 }
charly 0:51143e132729 116 myLCD.locate(0,10);
charly 0:51143e132729 117 myLCD.printf("pixelread test %s\r\n", readerror ? "FAIL":"PASS");
charly 0:51143e132729 118 wait(2);
charly 0:51143e132729 119 led2=1;
charly 0:51143e132729 120 myLCD.cls();
charly 0:51143e132729 121 myLCD.set_font((unsigned char*) Terminal6x8,32,127,false); //variable width disabled
charly 0:51143e132729 122 myLCD.locate(0,0);
charly 0:51143e132729 123 myLCD.printf("Display Test\r\nSome text just to see if auto carriage return works correctly");
charly 0:51143e132729 124 myLCD.set_font((unsigned char*) Terminal6x8);
charly 0:51143e132729 125 // myLCD.locate(0,0);
charly 0:51143e132729 126 myLCD.printf("\r\nDisplay Test\r\nSome text just to see if auto carriage return works correctly");
charly 0:51143e132729 127 pc.printf(" Display Test \r\n");
charly 0:51143e132729 128 wait(3);
charly 0:51143e132729 129 led1=0;
charly 0:51143e132729 130 t.reset();
charly 0:51143e132729 131 myLCD.cls();
charly 0:51143e132729 132 time=t.read_us();
charly 0:51143e132729 133 myLCD.locate(2,55);
charly 0:51143e132729 134 myLCD.printf("cls: %.3fms", (float)time/1000);
charly 0:51143e132729 135 pc.printf("cls: %.3fms\r\n", (float)time/1000);
charly 0:51143e132729 136 wait(3);
charly 0:51143e132729 137
charly 0:51143e132729 138 myLCD.cls();
charly 0:51143e132729 139 t.reset();
charly 0:51143e132729 140 // draw some graphics
charly 0:51143e132729 141 //myLCD.cls();
charly 0:51143e132729 142 myLCD.set_font((unsigned char*) Arial24x23);
charly 0:51143e132729 143 myLCD.locate(10,10);
charly 0:51143e132729 144 myLCD.printf("Test");
charly 0:51143e132729 145
charly 0:51143e132729 146 myLCD.line(0,0,myLCD.width()-1,0,foregroundcolor);
charly 0:51143e132729 147 myLCD.line(0,0,0,myLCD.height()-1,foregroundcolor);
charly 0:51143e132729 148 myLCD.line(0,0,myLCD.width()-1,myLCD.height()-1,foregroundcolor);
charly 0:51143e132729 149
charly 0:51143e132729 150 myLCD.rect(10,30,50,40,foregroundcolor);
charly 0:51143e132729 151 myLCD.fillrect(60,30,100,40,foregroundcolor);
charly 0:51143e132729 152
charly 0:51143e132729 153 myLCD.circle(150,32,30,foregroundcolor);
charly 0:51143e132729 154 myLCD.fillcircle(140,20,10,foregroundcolor);
charly 0:51143e132729 155
charly 0:51143e132729 156 double s;
charly 0:51143e132729 157
charly 0:51143e132729 158 for (unsigned short i=0; i<myLCD.width(); i++)
charly 0:51143e132729 159 {
charly 0:51143e132729 160 s =10 * sin((long double) i / 10 );
charly 0:51143e132729 161 myLCD.pixel(i,40 + (int)s ,foregroundcolor);
charly 0:51143e132729 162 }
charly 0:51143e132729 163
charly 0:51143e132729 164
charly 0:51143e132729 165 time=t.read_us();
charly 0:51143e132729 166 myLCD.locate(2,55);
charly 0:51143e132729 167 myLCD.set_font((unsigned char*) Terminal6x8);
charly 0:51143e132729 168 myLCD.printf("plot: %.3fms", (float)time/1000);
charly 0:51143e132729 169 pc.printf("plot: %.3fms\r\n", (float)time/1000);
charly 0:51143e132729 170 wait(3);
charly 0:51143e132729 171 myLCD.cls();
charly 0:51143e132729 172 t.reset();
charly 0:51143e132729 173 Bitmap_s pic = {
charly 0:51143e132729 174 64, // XSize
charly 0:51143e132729 175 64, // YSize
charly 0:51143e132729 176 8, // Bytes in Line
charly 0:51143e132729 177 burp, // Pointer to picture data
charly 0:51143e132729 178 };
charly 0:51143e132729 179 myLCD.Bitmap_BW(pic,myLCD.width()-64,0);
charly 0:51143e132729 180 time=t.read_us();
charly 0:51143e132729 181 myLCD.locate(2,55);
charly 0:51143e132729 182 myLCD.printf("bmp: %.3fms", (float)time/1000);
charly 0:51143e132729 183 pc.printf("bmp: %.3fms\r\n", (float)time/1000);
charly 0:51143e132729 184 wait(3);
charly 0:51143e132729 185 myLCD.cls();
charly 0:51143e132729 186 myLCD.set_font((unsigned char*) Arial43x48_numb, 46, 58, false); //only numbers, variable-width disabled
charly 0:51143e132729 187 t.reset();
charly 0:51143e132729 188 myLCD.locate(0,0);
charly 0:51143e132729 189 myLCD.printf("%d", 12345);
charly 0:51143e132729 190 time=t.read_us();
charly 0:51143e132729 191 myLCD.locate(2,55);
charly 0:51143e132729 192 myLCD.set_font((unsigned char*) Terminal6x8);
charly 0:51143e132729 193 myLCD.printf("Big Font: %.3fms", (float)time/1000);
charly 0:51143e132729 194 pc.printf("Big Font: %.3fms\r\n", (float)time/1000);
charly 0:51143e132729 195 wait(3);
charly 0:51143e132729 196 // sparse pixels test
charly 0:51143e132729 197 myLCD.cls();
charly 0:51143e132729 198 myLCD.FastWindow(true);
charly 0:51143e132729 199 t.reset();
charly 0:51143e132729 200 for(unsigned int i=0; i<20000; i++)
charly 0:51143e132729 201 {
charly 0:51143e132729 202 myLCD.pixel((i+(i*89)%myLCD.width()), (i+(i*61)%myLCD.height()), White);
charly 0:51143e132729 203 }
charly 0:51143e132729 204 myLCD.copy_to_lcd();
charly 0:51143e132729 205 time=t.read_us();
charly 0:51143e132729 206 myLCD.cls();
charly 0:51143e132729 207 myLCD.FastWindow(false);
charly 0:51143e132729 208 t.reset();
charly 0:51143e132729 209 for(unsigned int i=0; i<20000; i++)
charly 0:51143e132729 210 {
charly 0:51143e132729 211 myLCD.pixel((i+(i*89)%myLCD.width()), (i+(i*61)%myLCD.height()), White);
charly 0:51143e132729 212 }
charly 0:51143e132729 213 myLCD.copy_to_lcd();
charly 0:51143e132729 214 time2=t.read_us();
charly 0:51143e132729 215 myLCD.locate(2,55);
charly 0:51143e132729 216 myLCD.printf("std:%.3fms fastw:%.3fms", (float)time2/1000, (float)time/1000);
charly 0:51143e132729 217 pc.printf("std: %.3fms fastw: %.3fms\r\n", (float)time2/1000, (float)time/1000);
charly 0:51143e132729 218 wait(3);
charly 0:51143e132729 219 // scroll test, only for TFT
charly 0:51143e132729 220 myLCD.cls();
charly 0:51143e132729 221 myLCD.set_font((unsigned char*) Arial24x23);
charly 0:51143e132729 222 myLCD.locate(2,10);
charly 0:51143e132729 223 myLCD.printf("Scrolling");
charly 0:51143e132729 224 myLCD.rect(0,0,myLCD.width()-1,myLCD.height()-1,White);
charly 0:51143e132729 225 myLCD.rect(1,1,myLCD.width()-2,myLCD.height()-2,Blue);
charly 0:51143e132729 226 myLCD.setscrollarea(0,myLCD.sizeY());
charly 0:51143e132729 227 wait(1);
charly 0:51143e132729 228 myLCD.scroll(1); //up 1
charly 0:51143e132729 229 wait(1);
charly 0:51143e132729 230 myLCD.scroll(0); //center
charly 0:51143e132729 231 wait(1);
charly 0:51143e132729 232 myLCD.scroll(myLCD.sizeY()-1); //down 1
charly 0:51143e132729 233 wait(1);
charly 0:51143e132729 234 myLCD.scroll(myLCD.sizeY()); // same as 0, center
charly 0:51143e132729 235 wait(1);
charly 0:51143e132729 236 myLCD.scroll(myLCD.sizeY()>>1); // half screen
charly 0:51143e132729 237 wait(1);
charly 0:51143e132729 238 myLCD.scrollreset(); // center
charly 0:51143e132729 239 wait(1);
charly 0:51143e132729 240 for(unsigned short i=1; i<=myLCD.sizeY(); i++)
charly 0:51143e132729 241 {
charly 0:51143e132729 242 myLCD.scroll(i);
charly 0:51143e132729 243 wait_ms(2);
charly 0:51143e132729 244 }
charly 0:51143e132729 245 wait(2);
charly 0:51143e132729 246 // color inversion
charly 0:51143e132729 247 for(unsigned short i=0; i<=8; i++)
charly 0:51143e132729 248 {
charly 0:51143e132729 249 myLCD.invert(i&1);
charly 0:51143e132729 250 wait_ms(200);
charly 0:51143e132729 251 }
charly 0:51143e132729 252 wait(2);
charly 0:51143e132729 253 // bmp 16bit test
charly 0:51143e132729 254 myLCD.cls();
charly 0:51143e132729 255 t.reset();
charly 0:51143e132729 256 for(int y=0; y<myLCD.height(); y+=34)
charly 0:51143e132729 257 {
charly 0:51143e132729 258 for(int x=0; x<myLCD.width(); x+=48) myLCD.Bitmap(x,y,48,34,(unsigned char *)pavement_48x34);
charly 0:51143e132729 259 }
charly 0:51143e132729 260 time=t.read_us();
charly 0:51143e132729 261 myLCD.locate(2,55);
charly 0:51143e132729 262 myLCD.set_font((unsigned char*) Terminal6x8);
charly 0:51143e132729 263 myLCD.printf("Bmp speed: %.3fms", (float)time/1000);
charly 0:51143e132729 264 pc.printf("Bmp speed: %.3fms\r\n", (float)time/1000);
charly 0:51143e132729 265 wait(2);
charly 0:51143e132729 266 }
charly 0:51143e132729 267 }