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:
Thu Feb 11 06:40:23 2016 +0000
Revision:
14:490477341db7
Parent:
10:ca16a309a737
Child:
16:165507dc36fa
Undo Chase Lake changes to demo program and add warning comment.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JLarkin 14:490477341db7 1 /* Do not publish changes to this program back to the remote repository. Fork your own copy */
Geremia 0:2ccd65a72ab8 2 #include "stdio.h"
Geremia 0:2ccd65a72ab8 3 #include "mbed.h"
Geremia 0:2ccd65a72ab8 4 #include "string"
JLarkin 7:1dbfaba27e99 5 #include "ILI932x.h"
JLarkin 9:8917e707fe8e 6 #include "DmTouch.h"
JLarkin 9:8917e707fe8e 7
JLarkin 6:6b6e93790b4c 8
Geremia 0:2ccd65a72ab8 9 #include "Arial12x12.h"
Geremia 0:2ccd65a72ab8 10 #include "Arial24x23.h"
Geremia 4:818956c30cae 11 #include "pavement_48x34.h"
Geremia 0:2ccd65a72ab8 12
Geremia 0:2ccd65a72ab8 13 Serial pc(USBTX, USBRX);
Geremia 0:2ccd65a72ab8 14
JLarkin 7:1dbfaba27e99 15 /* Configure the DisplayModule ILI9325 2.4" display for 8-bit bus communication
JLarkin 6:6b6e93790b4c 16
JLarkin 6:6b6e93790b4c 17 mbed pin display pin
JLarkin 6:6b6e93790b4c 18 -------- -----------
JLarkin 7:1dbfaba27e99 19 p15 CS (L15)
JLarkin 7:1dbfaba27e99 20 p17 RST (L17)
JLarkin 7:1dbfaba27e99 21 p16 RS (L4)
JLarkin 7:1dbfaba27e99 22 p14 WR (L5)
JLarkin 7:1dbfaba27e99 23 p20 RD (L6)
JLarkin 6:6b6e93790b4c 24
JLarkin 7:1dbfaba27e99 25 p30 DB8 (L7)
JLarkin 7:1dbfaba27e99 26 p29 DB9 (L8)
JLarkin 7:1dbfaba27e99 27 p28 DB10 (L9)
JLarkin 7:1dbfaba27e99 28 p27 DB11 (L10)
JLarkin 7:1dbfaba27e99 29 p26 DB12 (L11)
JLarkin 7:1dbfaba27e99 30 p25 DB13 (L12)
JLarkin 7:1dbfaba27e99 31 p24 DB14 (L13)
JLarkin 7:1dbfaba27e99 32 p23 DB15 (L14)
JLarkin 6:6b6e93790b4c 33
JLarkin 7:1dbfaba27e99 34 p1 GND (L1)
JLarkin 7:1dbfaba27e99 35 p40 Vin (L2)
JLarkin 9:8917e707fe8e 36 p40 LED Backlight (L19)
JLarkin 6:6b6e93790b4c 37 */
JLarkin 7:1dbfaba27e99 38 PinName dataBus[]= {p30, p29, p28, p27, p26, p25, p24, p23};
JLarkin 7:1dbfaba27e99 39 ILI932x myLCD(BUS_8, dataBus, p15, p17, p16, p14, p20, "myLCD", 240, 320); // Bus 8 bit, bus pin array, CS, RST, DC, WR, RD, name, xpixels, ypixels
Geremia 0:2ccd65a72ab8 40
JLarkin 9:8917e707fe8e 41 /* Additional connections to add touch response
JLarkin 9:8917e707fe8e 42
JLarkin 9:8917e707fe8e 43 mbed pin display pin
JLarkin 9:8917e707fe8e 44 -------- -----------
JLarkin 9:8917e707fe8e 45 p5 T_MOSI (R11)
JLarkin 9:8917e707fe8e 46 p6 T_MISO (R13)
JLarkin 9:8917e707fe8e 47 p7 T_CLK (R9)
JLarkin 9:8917e707fe8e 48 p8 T_CS (R10)
JLarkin 9:8917e707fe8e 49 p9 T_IRQ (R14)
JLarkin 9:8917e707fe8e 50 */
JLarkin 9:8917e707fe8e 51 DmTouch touch(DmTouch::DM_TFT24_104, p5, p6, p7, p8, p9);
JLarkin 9:8917e707fe8e 52
JLarkin 10:ca16a309a737 53 char orient=3;
JLarkin 7:1dbfaba27e99 54 int x,y;
JLarkin 9:8917e707fe8e 55 uint16_t tx, ty;
JLarkin 9:8917e707fe8e 56 Timer t;
JLarkin 7:1dbfaba27e99 57
Geremia 0:2ccd65a72ab8 58 int main()
Geremia 0:2ccd65a72ab8 59 {
JLarkin 9:8917e707fe8e 60 bool down, lastDown;
JLarkin 9:8917e707fe8e 61 touch.init();
JLarkin 9:8917e707fe8e 62 t.start();
Geremia 4:818956c30cae 63 myLCD.set_orientation(orient);
JLarkin 6:6b6e93790b4c 64 myLCD.set_font((unsigned char*) Arial24x23);
JLarkin 9:8917e707fe8e 65 myLCD.background(Blue); // set background to Blue
JLarkin 9:8917e707fe8e 66 myLCD.foreground(White); // set chars to White
Geremia 4:818956c30cae 67 myLCD.cls(); // clear the screen
JLarkin 6:6b6e93790b4c 68 myLCD.locate(10,30);
JLarkin 6:6b6e93790b4c 69 myLCD.printf("UniGraphics Demo\r\n");
Geremia 1:083257298075 70 wait(2);
Geremia 0:2ccd65a72ab8 71
JLarkin 6:6b6e93790b4c 72 while(1)
JLarkin 6:6b6e93790b4c 73 {
JLarkin 6:6b6e93790b4c 74 myLCD.cls(); // clear the screen
JLarkin 6:6b6e93790b4c 75 myLCD.set_font((unsigned char*) Arial24x23);
JLarkin 6:6b6e93790b4c 76 myLCD.locate(0,30);
JLarkin 6:6b6e93790b4c 77 myLCD.printf("Orientation mode: %x\r\n", orient%4);
JLarkin 6:6b6e93790b4c 78 wait(2);
JLarkin 6:6b6e93790b4c 79 myLCD.printf("Font is\r\n");
JLarkin 6:6b6e93790b4c 80 myLCD.printf("Arial24x23\r\n");
JLarkin 6:6b6e93790b4c 81 wait(2);
JLarkin 6:6b6e93790b4c 82
JLarkin 6:6b6e93790b4c 83 myLCD.background(Black);
JLarkin 6:6b6e93790b4c 84 myLCD.foreground(White);
JLarkin 6:6b6e93790b4c 85 myLCD.cls(); // clear the screen
JLarkin 6:6b6e93790b4c 86 myLCD.set_font((unsigned char*) Arial12x12);
JLarkin 6:6b6e93790b4c 87 myLCD.locate(0,10);
JLarkin 6:6b6e93790b4c 88 myLCD.printf("Font changed to Arial12x12\r\n");
JLarkin 6:6b6e93790b4c 89 myLCD.printf("Background and foreground color also changed.\n\r\n\r");
JLarkin 6:6b6e93790b4c 90 wait(2);
JLarkin 6:6b6e93790b4c 91 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 92 wait(2);
JLarkin 6:6b6e93790b4c 93 myLCD.set_font((unsigned char*) Terminal6x8);
JLarkin 6:6b6e93790b4c 94 myLCD.printf("Font changed to Terminal6x8\r\n");
JLarkin 6:6b6e93790b4c 95 myLCD.printf("This is pretty small!\r\n");
JLarkin 6:6b6e93790b4c 96 wait(2);
JLarkin 6:6b6e93790b4c 97
JLarkin 6:6b6e93790b4c 98 myLCD.cls();
JLarkin 6:6b6e93790b4c 99 myLCD.set_font((unsigned char*) Arial24x23);
JLarkin 6:6b6e93790b4c 100 myLCD.locate(10,10);
JLarkin 6:6b6e93790b4c 101 myLCD.printf("Draw lines\n\r");
JLarkin 6:6b6e93790b4c 102 myLCD.line(0,50,myLCD.width()-1,50,Yellow);
JLarkin 6:6b6e93790b4c 103 myLCD.line(myLCD.width()-50,51,myLCD.width()-50,myLCD.height()-1,Green);
JLarkin 6:6b6e93790b4c 104 wait(2);
JLarkin 6:6b6e93790b4c 105
JLarkin 6:6b6e93790b4c 106 myLCD.cls();
JLarkin 6:6b6e93790b4c 107 myLCD.locate(10,10);
JLarkin 6:6b6e93790b4c 108 myLCD.printf("Draw rectangles");
JLarkin 6:6b6e93790b4c 109 myLCD.rect(10,50,50,80,Red);
JLarkin 6:6b6e93790b4c 110 myLCD.rect(15,55,45,75,Red);
JLarkin 6:6b6e93790b4c 111 myLCD.rect(20,60,40,70,Red);
JLarkin 6:6b6e93790b4c 112 myLCD.fillrect(160,130,200,240,Blue);
JLarkin 6:6b6e93790b4c 113 wait(2);
JLarkin 6:6b6e93790b4c 114
JLarkin 6:6b6e93790b4c 115 myLCD.cls();
JLarkin 6:6b6e93790b4c 116 myLCD.locate(10,10);
JLarkin 6:6b6e93790b4c 117 myLCD.printf("Draw circles");
JLarkin 6:6b6e93790b4c 118 myLCD.circle(150,132,30,Yellow);
JLarkin 6:6b6e93790b4c 119 myLCD.fillcircle(140,70,25,Cyan);
JLarkin 6:6b6e93790b4c 120 wait(2);
JLarkin 6:6b6e93790b4c 121
JLarkin 6:6b6e93790b4c 122 myLCD.cls();
JLarkin 6:6b6e93790b4c 123 myLCD.set_font((unsigned char*) Arial12x12);
JLarkin 6:6b6e93790b4c 124 myLCD.locate(10,10);
JLarkin 6:6b6e93790b4c 125 myLCD.printf("Draw function with pixels");
JLarkin 6:6b6e93790b4c 126 double s;
JLarkin 6:6b6e93790b4c 127 for (unsigned short i=0; i<myLCD.width(); i++)
Geremia 0:2ccd65a72ab8 128 {
Geremia 0:2ccd65a72ab8 129 s =10 * sin((long double) i / 10 );
JLarkin 6:6b6e93790b4c 130 myLCD.pixel(i,80 + (int)s ,White);
Geremia 0:2ccd65a72ab8 131 }
JLarkin 6:6b6e93790b4c 132 wait(3);
JLarkin 6:6b6e93790b4c 133
JLarkin 9:8917e707fe8e 134 // Touch screen demo
JLarkin 9:8917e707fe8e 135 myLCD.background(Blue); // set background to Blue
JLarkin 9:8917e707fe8e 136 myLCD.foreground(White); // set chars to White
JLarkin 9:8917e707fe8e 137 myLCD.cls(); // clear the screen
JLarkin 9:8917e707fe8e 138 myLCD.locate(10,30);
JLarkin 9:8917e707fe8e 139 myLCD.set_font((unsigned char*) Arial24x23);
JLarkin 9:8917e707fe8e 140 myLCD.printf("DmTouch Demo\r\n");
JLarkin 9:8917e707fe8e 141 myLCD.set_font((unsigned char*) Arial12x12);
JLarkin 9:8917e707fe8e 142 myLCD.locate(10,70);
JLarkin 9:8917e707fe8e 143 myLCD.printf("Coming soon...\r\nTouch screen and coordinates will display\r\n");
JLarkin 9:8917e707fe8e 144 myLCD.printf("Moves to next portion of demo after 30 seconds\r\n");
JLarkin 9:8917e707fe8e 145 wait(2);
JLarkin 9:8917e707fe8e 146 myLCD.background(Black); // set background to Black
JLarkin 9:8917e707fe8e 147 myLCD.foreground(White); // set chars to White
JLarkin 9:8917e707fe8e 148 myLCD.cls(); // clear the screen
JLarkin 9:8917e707fe8e 149
JLarkin 9:8917e707fe8e 150 touch.setOrientation(orient);
JLarkin 9:8917e707fe8e 151 down = false;
JLarkin 9:8917e707fe8e 152 lastDown = false;
JLarkin 9:8917e707fe8e 153 tx = (uint16_t)0;
JLarkin 9:8917e707fe8e 154 ty = (uint16_t)0;
JLarkin 9:8917e707fe8e 155 myLCD.locate(20,20);
JLarkin 9:8917e707fe8e 156 myLCD.printf("x:");
JLarkin 9:8917e707fe8e 157 myLCD.locate(100, 20);
JLarkin 9:8917e707fe8e 158 myLCD.printf("y:");
JLarkin 9:8917e707fe8e 159
JLarkin 9:8917e707fe8e 160 t.reset();
JLarkin 9:8917e707fe8e 161 while (t.read()<30) {
JLarkin 9:8917e707fe8e 162 touch.readTouchData(tx, ty, down);
JLarkin 9:8917e707fe8e 163 if (down) {
JLarkin 9:8917e707fe8e 164 myLCD.locate(40, 20);
JLarkin 9:8917e707fe8e 165 myLCD.printf("%5i", tx);
JLarkin 9:8917e707fe8e 166 myLCD.locate(120, 20);
JLarkin 9:8917e707fe8e 167 myLCD.printf("%5i", ty);
JLarkin 9:8917e707fe8e 168 myLCD.fillcircle(tx, ty, 2, Red);
JLarkin 9:8917e707fe8e 169 } else if (lastDown) {
JLarkin 9:8917e707fe8e 170 // no longer pressed, clean text
JLarkin 9:8917e707fe8e 171 myLCD.locate(40, 20);
JLarkin 9:8917e707fe8e 172 myLCD.printf(" ", tx);
JLarkin 9:8917e707fe8e 173 myLCD.locate(120, 20);
JLarkin 9:8917e707fe8e 174 myLCD.printf(" ", ty);
JLarkin 9:8917e707fe8e 175 }
JLarkin 9:8917e707fe8e 176 wait(0.040);
JLarkin 9:8917e707fe8e 177 lastDown = down;
JLarkin 9:8917e707fe8e 178 }
JLarkin 9:8917e707fe8e 179
JLarkin 9:8917e707fe8e 180
Geremia 2:2b781c215ac0 181 // scroll test, only for TFT
Geremia 4:818956c30cae 182 myLCD.cls();
Geremia 4:818956c30cae 183 myLCD.set_font((unsigned char*) Arial24x23);
Geremia 5:c69049e461b7 184 myLCD.locate(2,10);
Geremia 4:818956c30cae 185 myLCD.printf("Scrolling");
Geremia 4:818956c30cae 186 myLCD.rect(0,0,myLCD.width()-1,myLCD.height()-1,White);
Geremia 4:818956c30cae 187 myLCD.rect(1,1,myLCD.width()-2,myLCD.height()-2,Blue);
Geremia 4:818956c30cae 188 myLCD.setscrollarea(0,myLCD.sizeY());
Geremia 2:2b781c215ac0 189 wait(1);
Geremia 4:818956c30cae 190 myLCD.scroll(1); //up 1
Geremia 2:2b781c215ac0 191 wait(1);
Geremia 4:818956c30cae 192 myLCD.scroll(0); //center
Geremia 2:2b781c215ac0 193 wait(1);
Geremia 4:818956c30cae 194 myLCD.scroll(myLCD.sizeY()-1); //down 1
Geremia 2:2b781c215ac0 195 wait(1);
Geremia 4:818956c30cae 196 myLCD.scroll(myLCD.sizeY()); // same as 0, center
Geremia 2:2b781c215ac0 197 wait(1);
Geremia 4:818956c30cae 198 myLCD.scroll(myLCD.sizeY()>>1); // half screen
Geremia 2:2b781c215ac0 199 wait(1);
Geremia 4:818956c30cae 200 myLCD.scrollreset(); // center
Geremia 2:2b781c215ac0 201 wait(1);
Geremia 4:818956c30cae 202 for(unsigned short i=1; i<=myLCD.sizeY(); i++)
Geremia 2:2b781c215ac0 203 {
Geremia 4:818956c30cae 204 myLCD.scroll(i);
Geremia 2:2b781c215ac0 205 wait_ms(2);
Geremia 2:2b781c215ac0 206 }
Geremia 2:2b781c215ac0 207 wait(2);
Geremia 2:2b781c215ac0 208 // color inversion
Geremia 2:2b781c215ac0 209 for(unsigned short i=0; i<=8; i++)
Geremia 2:2b781c215ac0 210 {
Geremia 4:818956c30cae 211 myLCD.invert(i&1);
Geremia 2:2b781c215ac0 212 wait_ms(200);
Geremia 2:2b781c215ac0 213 }
Geremia 2:2b781c215ac0 214 wait(2);
Geremia 4:818956c30cae 215 // bmp 16bit test
Geremia 4:818956c30cae 216 myLCD.cls();
Geremia 4:818956c30cae 217 for(int y=0; y<myLCD.height(); y+=34)
Geremia 4:818956c30cae 218 {
Geremia 4:818956c30cae 219 for(int x=0; x<myLCD.width(); x+=48) myLCD.Bitmap(x,y,48,34,(unsigned char *)pavement_48x34);
Geremia 4:818956c30cae 220 }
Geremia 4:818956c30cae 221 wait(2);
JLarkin 6:6b6e93790b4c 222 myLCD.set_orientation((++orient)%4);
Geremia 0:2ccd65a72ab8 223 }
Geremia 0:2ccd65a72ab8 224 }