Unigraphic Testprogramm for ST7920-controller

Dependencies:   UniGraphic mbed

Committer:
charly
Date:
Sun May 21 20:55:31 2017 +0000
Revision:
2:ec8380e9a255
Parent:
1:5ebf4110eee0
UniGraphic-Testprogramm for ST7920-LCD-Controller; For LCD 128x64 with SPI

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