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
main.cpp@6:6b6e93790b4c, 2016-01-12 (annotated)
- 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?
User | Revision | Line number | New 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 | } |