Test program for STMF103RB and LCD display supplied with an ADF4351

Dependencies:   UniGraphic mbed

main.cpp

Committer:
jluu
Date:
2016-11-23
Revision:
2:167ceea448d2
Parent:
1:3f7462251f77

File content as of revision 2:167ceea448d2:

#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"
 
Serial pc(PA_9, PA_10);
 
//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
/* test jose
8 bit parallel interface

Port data |D7 |D6 |D5 |D4 |D3 |D2 |D1 |D0 |
Pin stm32 |PA7|PA6|PA5|PA4|PA3|PA2|PA1|PA0|

Control Pins

Control pins |RD |WR |RS |CS |RST|
Pin stm32 |PB4|PB5|PB6|PB7|PB8|
*/
//#define JOSE_TEST 1
#if JOSE_TEST
ILI9341 myLCD(PAR_8, PortA, PB_7, PB_8, PB_6, PB_5, PB_4,"myLCD",240U,320U); // Parallel 8bit, Port, CS, reset, RS, WR, RD for F401
#else
// real sweeper
ILI932x myLCD(PAR_8, PortA, PC_8, PC_6, PC_12, PC_11, PC_10,"myLCD",240U,320U); // Parallel 8bit, Port, CS, reset, RS, WR, RD for F401
#endif
//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;
    pc.baud (115200);
    pc.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);
    pc.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;
            pc.printf("pix %.4X readback %.4X\r\n", i*colorstep, readback);
        }
    }
    myLCD.locate(0,10);
    myLCD.printf("pixelread test %s\r\n", readerror ? "FAIL":"PASS");
    wait(2);
    
    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");
    pc.printf("  Display Test \r\n");
    wait(3);
    t.reset();
    myLCD.cls();
    time=t.read_us();
    myLCD.locate(2,55);
    myLCD.printf("cls: %.3fms", (float)time/1000);
    pc.printf("cls: %.3fms\r\n", (float)time/1000);
    wait(3);
 
    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);
    pc.printf("plot: %.3fms\r\n", (float)time/1000);
    wait(3);
    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);
    pc.printf("bmp: %.3fms\r\n", (float)time/1000);
    wait(3);
    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);
    pc.printf("Big Font: %.3fms\r\n", (float)time/1000);
    wait(3);
    // 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);
    pc.printf("std: %.3fms fastw: %.3fms\r\n", (float)time2/1000, (float)time/1000);
    wait(3);
    // 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());
    wait(1);
    myLCD.scroll(1); //up 1
    wait(1);
    myLCD.scroll(0); //center
    wait(1);
    myLCD.scroll(myLCD.sizeY()-1); //down 1
    wait(1);
    myLCD.scroll(myLCD.sizeY()); // same as 0, center
    wait(1);
    myLCD.scroll(myLCD.sizeY()>>1); // half screen
    wait(1);
    myLCD.scrollreset(); // center
    wait(1);
    for(unsigned short i=1; i<=myLCD.sizeY(); i++)
    {
        myLCD.scroll(i);
        wait_ms(2);
    }
    wait(2);
    // color inversion
    for(unsigned short i=0; i<=8; i++)
    {
        myLCD.invert(i&1);
        wait_ms(200);
    }
    wait(2);
    // 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);
    pc.printf("Bmp speed: %.3fms\r\n", (float)time/1000);
    wait(2);
    }
}