Program to demonstrate the features of the DisplayModule DM-TFT24-104 display using the UniGraphics library.

Dependencies:   DmTouch_UniGraphic UniGraphic mbed

Fork of DisplayModule24_demo by Whitworth-EN173-2016

Committer:
JLarkin
Date:
Tue Jan 12 07:37:55 2016 +0000
Revision:
6:6b6e93790b4c
Parent:
5:c69049e461b7
Child:
7:1dbfaba27e99
Ready for your learning

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Geremia 0:2ccd65a72ab8 1 #include "stdio.h"
Geremia 0:2ccd65a72ab8 2 #include "mbed.h"
Geremia 0:2ccd65a72ab8 3 #include "string"
JLarkin 6:6b6e93790b4c 4 #include "ILI9341.h"
JLarkin 6:6b6e93790b4c 5
Geremia 0:2ccd65a72ab8 6 #include "Arial12x12.h"
Geremia 0:2ccd65a72ab8 7 #include "Arial24x23.h"
Geremia 4:818956c30cae 8 #include "pavement_48x34.h"
Geremia 0:2ccd65a72ab8 9
Geremia 0:2ccd65a72ab8 10 Serial pc(USBTX, USBRX);
Geremia 0:2ccd65a72ab8 11
JLarkin 6:6b6e93790b4c 12 /* Configure the Adafruit ILI9341 2.4" display for 8-bit bus communication
JLarkin 6:6b6e93790b4c 13
JLarkin 6:6b6e93790b4c 14 mbed pin display pin
JLarkin 6:6b6e93790b4c 15 -------- -----------
JLarkin 6:6b6e93790b4c 16 p5 CS (3)
JLarkin 6:6b6e93790b4c 17 p6 RST (7)
JLarkin 6:6b6e93790b4c 18 p7 C/D (4)
JLarkin 6:6b6e93790b4c 19 p8 WR (5)
JLarkin 6:6b6e93790b4c 20 p9 RD (6)
JLarkin 6:6b6e93790b4c 21
JLarkin 6:6b6e93790b4c 22 p23 d0 (13)
JLarkin 6:6b6e93790b4c 23 p24 d1 (14)
JLarkin 6:6b6e93790b4c 24 p25 d2 (15)
JLarkin 6:6b6e93790b4c 25 p26 d3 (16)
JLarkin 6:6b6e93790b4c 26 p27 d4 (17)
JLarkin 6:6b6e93790b4c 27 p28 d5 (18)
JLarkin 6:6b6e93790b4c 28 p29 d6 (19)
JLarkin 6:6b6e93790b4c 29 p30 d7 (20)
JLarkin 6:6b6e93790b4c 30
JLarkin 6:6b6e93790b4c 31 p1 GND (1)
JLarkin 6:6b6e93790b4c 32 p40 Vin (2)
JLarkin 6:6b6e93790b4c 33 */
JLarkin 6:6b6e93790b4c 34 PinName dataBus[]= {p23, p24, p25, p26, p27, p28, p29, p30};
JLarkin 6:6b6e93790b4c 35 ILI9341 myLCD(BUS_8, dataBus, p5, p6, p7, p8, p9, "myLCD", 240, 320); // Bus 8 bit, bus pin array, CS, RST, DC, WR, RD, name, xpixels, ypixels
JLarkin 6:6b6e93790b4c 36
JLarkin 6:6b6e93790b4c 37 /* Configure the Adafruit ILI9341 2.4" display for SPI communication
JLarkin 6:6b6e93790b4c 38
JLarkin 6:6b6e93790b4c 39 mbed pin display pin
JLarkin 6:6b6e93790b4c 40 -------- -----------
JLarkin 6:6b6e93790b4c 41 p5 mosi
JLarkin 6:6b6e93790b4c 42 p6 miso
JLarkin 6:6b6e93790b4c 43 p7 sck
JLarkin 6:6b6e93790b4c 44 p8 cs
JLarkin 6:6b6e93790b4c 45 p9 reset
JLarkin 6:6b6e93790b4c 46 NC dc NC = a defined name for no connection (not required for this mode but included for consistency)
JLarkin 6:6b6e93790b4c 47 */
JLarkin 6:6b6e93790b4c 48 //ILI9341 myLCD(SPI_16, 12000000, p5, p6, p7, p8, p9, NC, "myLCD", 240, 320); // SPI 16bit, 12 MHz, mosi, miso, sck, cs, reset, dc
Geremia 0:2ccd65a72ab8 49
Geremia 0:2ccd65a72ab8 50 Timer t;
Geremia 0:2ccd65a72ab8 51
Geremia 0:2ccd65a72ab8 52 unsigned short backgroundcolor=Black;
Geremia 0:2ccd65a72ab8 53 unsigned short foregroundcolor=White;
Geremia 0:2ccd65a72ab8 54
JLarkin 6:6b6e93790b4c 55 char orient=3;
Geremia 0:2ccd65a72ab8 56 int main()
Geremia 0:2ccd65a72ab8 57 {
Geremia 4:818956c30cae 58 myLCD.set_orientation(orient);
Geremia 0:2ccd65a72ab8 59 t.start();
JLarkin 6:6b6e93790b4c 60 myLCD.set_font((unsigned char*) Arial24x23);
JLarkin 6:6b6e93790b4c 61 myLCD.background(Blue); // set background to red
JLarkin 6:6b6e93790b4c 62 myLCD.foreground(White); // set chars to black
Geremia 4:818956c30cae 63 myLCD.cls(); // clear the screen
JLarkin 6:6b6e93790b4c 64 myLCD.locate(10,30);
JLarkin 6:6b6e93790b4c 65 myLCD.printf("UniGraphics Demo\r\n");
Geremia 1:083257298075 66 wait(2);
Geremia 0:2ccd65a72ab8 67
JLarkin 6:6b6e93790b4c 68 while(1)
JLarkin 6:6b6e93790b4c 69 {
JLarkin 6:6b6e93790b4c 70 myLCD.cls(); // clear the screen
JLarkin 6:6b6e93790b4c 71 myLCD.set_font((unsigned char*) Arial24x23);
JLarkin 6:6b6e93790b4c 72 myLCD.locate(0,30);
JLarkin 6:6b6e93790b4c 73 myLCD.printf("Orientation mode: %x\r\n", orient%4);
JLarkin 6:6b6e93790b4c 74 wait(2);
JLarkin 6:6b6e93790b4c 75 myLCD.printf("Font is\r\n");
JLarkin 6:6b6e93790b4c 76 myLCD.printf("Arial24x23\r\n");
JLarkin 6:6b6e93790b4c 77 wait(2);
JLarkin 6:6b6e93790b4c 78
JLarkin 6:6b6e93790b4c 79 myLCD.background(Black);
JLarkin 6:6b6e93790b4c 80 myLCD.foreground(White);
JLarkin 6:6b6e93790b4c 81 myLCD.cls(); // clear the screen
JLarkin 6:6b6e93790b4c 82 myLCD.set_font((unsigned char*) Arial12x12);
JLarkin 6:6b6e93790b4c 83 myLCD.locate(0,10);
JLarkin 6:6b6e93790b4c 84 myLCD.printf("Font changed to Arial12x12\r\n");
JLarkin 6:6b6e93790b4c 85 myLCD.printf("Background and foreground color also changed.\n\r\n\r");
JLarkin 6:6b6e93790b4c 86 wait(2);
JLarkin 6:6b6e93790b4c 87 myLCD.printf("Notice that if some text is too long to fit the width of the screen that it is automatically wrapped to the next line.\r\n\r\n");
JLarkin 6:6b6e93790b4c 88 wait(2);
JLarkin 6:6b6e93790b4c 89 myLCD.set_font((unsigned char*) Terminal6x8);
JLarkin 6:6b6e93790b4c 90 myLCD.printf("Font changed to Terminal6x8\r\n");
JLarkin 6:6b6e93790b4c 91 myLCD.printf("This is pretty small!\r\n");
JLarkin 6:6b6e93790b4c 92 wait(2);
JLarkin 6:6b6e93790b4c 93
JLarkin 6:6b6e93790b4c 94 myLCD.cls();
JLarkin 6:6b6e93790b4c 95 myLCD.set_font((unsigned char*) Arial24x23);
JLarkin 6:6b6e93790b4c 96 myLCD.locate(10,10);
JLarkin 6:6b6e93790b4c 97 myLCD.printf("Draw lines\n\r");
JLarkin 6:6b6e93790b4c 98 myLCD.line(0,50,myLCD.width()-1,50,Yellow);
JLarkin 6:6b6e93790b4c 99 myLCD.line(myLCD.width()-50,51,myLCD.width()-50,myLCD.height()-1,Green);
JLarkin 6:6b6e93790b4c 100 wait(2);
JLarkin 6:6b6e93790b4c 101
JLarkin 6:6b6e93790b4c 102 myLCD.cls();
JLarkin 6:6b6e93790b4c 103 myLCD.locate(10,10);
JLarkin 6:6b6e93790b4c 104 myLCD.printf("Draw rectangles");
JLarkin 6:6b6e93790b4c 105 myLCD.rect(10,50,50,80,Red);
JLarkin 6:6b6e93790b4c 106 myLCD.rect(15,55,45,75,Red);
JLarkin 6:6b6e93790b4c 107 myLCD.rect(20,60,40,70,Red);
JLarkin 6:6b6e93790b4c 108 myLCD.fillrect(160,130,200,240,Blue);
JLarkin 6:6b6e93790b4c 109 wait(2);
JLarkin 6:6b6e93790b4c 110
JLarkin 6:6b6e93790b4c 111 myLCD.cls();
JLarkin 6:6b6e93790b4c 112 myLCD.locate(10,10);
JLarkin 6:6b6e93790b4c 113 myLCD.printf("Draw circles");
JLarkin 6:6b6e93790b4c 114 myLCD.circle(150,132,30,Yellow);
JLarkin 6:6b6e93790b4c 115 myLCD.fillcircle(140,70,25,Cyan);
JLarkin 6:6b6e93790b4c 116 wait(2);
JLarkin 6:6b6e93790b4c 117
JLarkin 6:6b6e93790b4c 118 myLCD.cls();
JLarkin 6:6b6e93790b4c 119 myLCD.set_font((unsigned char*) Arial12x12);
JLarkin 6:6b6e93790b4c 120 myLCD.locate(10,10);
JLarkin 6:6b6e93790b4c 121 myLCD.printf("Draw function with pixels");
JLarkin 6:6b6e93790b4c 122 double s;
JLarkin 6:6b6e93790b4c 123 for (unsigned short i=0; i<myLCD.width(); i++)
Geremia 0:2ccd65a72ab8 124 {
Geremia 0:2ccd65a72ab8 125 s =10 * sin((long double) i / 10 );
JLarkin 6:6b6e93790b4c 126 myLCD.pixel(i,80 + (int)s ,White);
Geremia 0:2ccd65a72ab8 127 }
JLarkin 6:6b6e93790b4c 128 wait(3);
JLarkin 6:6b6e93790b4c 129
Geremia 2:2b781c215ac0 130 // scroll test, only for TFT
Geremia 4:818956c30cae 131 myLCD.cls();
Geremia 4:818956c30cae 132 myLCD.set_font((unsigned char*) Arial24x23);
Geremia 5:c69049e461b7 133 myLCD.locate(2,10);
Geremia 4:818956c30cae 134 myLCD.printf("Scrolling");
Geremia 4:818956c30cae 135 myLCD.rect(0,0,myLCD.width()-1,myLCD.height()-1,White);
Geremia 4:818956c30cae 136 myLCD.rect(1,1,myLCD.width()-2,myLCD.height()-2,Blue);
Geremia 4:818956c30cae 137 myLCD.setscrollarea(0,myLCD.sizeY());
Geremia 2:2b781c215ac0 138 wait(1);
Geremia 4:818956c30cae 139 myLCD.scroll(1); //up 1
Geremia 2:2b781c215ac0 140 wait(1);
Geremia 4:818956c30cae 141 myLCD.scroll(0); //center
Geremia 2:2b781c215ac0 142 wait(1);
Geremia 4:818956c30cae 143 myLCD.scroll(myLCD.sizeY()-1); //down 1
Geremia 2:2b781c215ac0 144 wait(1);
Geremia 4:818956c30cae 145 myLCD.scroll(myLCD.sizeY()); // same as 0, center
Geremia 2:2b781c215ac0 146 wait(1);
Geremia 4:818956c30cae 147 myLCD.scroll(myLCD.sizeY()>>1); // half screen
Geremia 2:2b781c215ac0 148 wait(1);
Geremia 4:818956c30cae 149 myLCD.scrollreset(); // center
Geremia 2:2b781c215ac0 150 wait(1);
Geremia 4:818956c30cae 151 for(unsigned short i=1; i<=myLCD.sizeY(); i++)
Geremia 2:2b781c215ac0 152 {
Geremia 4:818956c30cae 153 myLCD.scroll(i);
Geremia 2:2b781c215ac0 154 wait_ms(2);
Geremia 2:2b781c215ac0 155 }
Geremia 2:2b781c215ac0 156 wait(2);
Geremia 2:2b781c215ac0 157 // color inversion
Geremia 2:2b781c215ac0 158 for(unsigned short i=0; i<=8; i++)
Geremia 2:2b781c215ac0 159 {
Geremia 4:818956c30cae 160 myLCD.invert(i&1);
Geremia 2:2b781c215ac0 161 wait_ms(200);
Geremia 2:2b781c215ac0 162 }
Geremia 2:2b781c215ac0 163 wait(2);
Geremia 4:818956c30cae 164 // bmp 16bit test
Geremia 4:818956c30cae 165 myLCD.cls();
Geremia 4:818956c30cae 166 t.reset();
Geremia 4:818956c30cae 167 for(int y=0; y<myLCD.height(); y+=34)
Geremia 4:818956c30cae 168 {
Geremia 4:818956c30cae 169 for(int x=0; x<myLCD.width(); x+=48) myLCD.Bitmap(x,y,48,34,(unsigned char *)pavement_48x34);
Geremia 4:818956c30cae 170 }
Geremia 4:818956c30cae 171 wait(2);
JLarkin 6:6b6e93790b4c 172 myLCD.set_orientation((++orient)%4);
Geremia 0:2ccd65a72ab8 173 }
Geremia 0:2ccd65a72ab8 174 }