programme à analyser pendant le cours théorique

Dependencies:   X_NUCLEO_6180XA1 mbed

Fork of 247-436-M1-S2-LAB-F302R8 by Yves Roy

Committer:
YROY2004
Date:
Fri Jan 26 13:56:42 2018 +0000
Revision:
0:37eb67c8ebd0
Child:
1:90cc91745ff7
Version originale

Who changed what in which revision?

UserRevisionLine numberNew contents of line
YROY2004 0:37eb67c8ebd0 1 #include "mbed.h"
YROY2004 0:37eb67c8ebd0 2 //options de compilation
YROY2004 0:37eb67c8ebd0 3 //#define TEST
YROY2004 0:37eb67c8ebd0 4
YROY2004 0:37eb67c8ebd0 5
YROY2004 0:37eb67c8ebd0 6 #define TFT_SPDF5408
YROY2004 0:37eb67c8ebd0 7
YROY2004 0:37eb67c8ebd0 8 //intégration
YROY2004 0:37eb67c8ebd0 9 // représentation
YROY2004 0:37eb67c8ebd0 10 // G: gauche, D: droit, H: haut, B: bas
YROY2004 0:37eb67c8ebd0 11 // E: écran, T: touch
YROY2004 0:37eb67c8ebd0 12 // Ecran:
YROY2004 0:37eb67c8ebd0 13 // (XE_G,YE_H) ___ (XE_D,YE_H)
YROY2004 0:37eb67c8ebd0 14 // | |
YROY2004 0:37eb67c8ebd0 15 // | |
YROY2004 0:37eb67c8ebd0 16 // (XE_G,YE_B) |___| (XE_G,YE_B)
YROY2004 0:37eb67c8ebd0 17 //
YROY2004 0:37eb67c8ebd0 18 // représentation du touch
YROY2004 0:37eb67c8ebd0 19 // (XT_G,YT_H) ___ (XT_D,YT_H)
YROY2004 0:37eb67c8ebd0 20 // | |
YROY2004 0:37eb67c8ebd0 21 // | |
YROY2004 0:37eb67c8ebd0 22 // (XT_G,YT_B) |___| (XT_G,YT_B)
YROY2004 0:37eb67c8ebd0 23
YROY2004 0:37eb67c8ebd0 24 // équations pour conversion
YROY2004 0:37eb67c8ebd0 25 // XT: x touch lu, YT: y touch lu, XE: x ecran, YE: y ecran
YROY2004 0:37eb67c8ebd0 26 // XE = (XE_D - XE_G)/(XT_D - XT_G)*(XT - XT_G) + XE_G
YROY2004 0:37eb67c8ebd0 27 // YE = (YE_H - YE_B)/(YT_H - YT_B)*(YT - YT_G) + YE_G
YROY2004 0:37eb67c8ebd0 28
YROY2004 0:37eb67c8ebd0 29 // l'application présente 3 boutons et une surface de dessin
YROY2004 0:37eb67c8ebd0 30 // bouton noir: effacer
YROY2004 0:37eb67c8ebd0 31 // bouton rouge: dessiner en rouge
YROY2004 0:37eb67c8ebd0 32 // bouton blanc: dessiner en blanc
YROY2004 0:37eb67c8ebd0 33
YROY2004 0:37eb67c8ebd0 34 //touchscreen
YROY2004 0:37eb67c8ebd0 35 #define IDLE 1
YROY2004 0:37eb67c8ebd0 36 #define ACTIVE 0
YROY2004 0:37eb67c8ebd0 37 #define COMMAND 0
YROY2004 0:37eb67c8ebd0 38 #define DATA 1
YROY2004 0:37eb67c8ebd0 39
YROY2004 0:37eb67c8ebd0 40 #ifdef TFT_SPDF5408
YROY2004 0:37eb67c8ebd0 41 #define YP A3
YROY2004 0:37eb67c8ebd0 42 #define XM A2
YROY2004 0:37eb67c8ebd0 43 #define YM D9
YROY2004 0:37eb67c8ebd0 44 #define XP D8
YROY2004 0:37eb67c8ebd0 45 #endif
YROY2004 0:37eb67c8ebd0 46
YROY2004 0:37eb67c8ebd0 47 #ifdef MON_TFT
YROY2004 0:37eb67c8ebd0 48 #define YP A1 // must be an analog pin, use "An" notation!
YROY2004 0:37eb67c8ebd0 49 #define YM D7 // can be a digital pin
YROY2004 0:37eb67c8ebd0 50 #define XP D6 // can be a digital pin
YROY2004 0:37eb67c8ebd0 51 #define XM A2 // must be an analog pin, use "An" notation!
YROY2004 0:37eb67c8ebd0 52 #endif
YROY2004 0:37eb67c8ebd0 53
YROY2004 0:37eb67c8ebd0 54 #define TOUCH_SEUIL_HAUT 3000
YROY2004 0:37eb67c8ebd0 55 #define TOUCH_SEUIL_BAS 16
YROY2004 0:37eb67c8ebd0 56
YROY2004 0:37eb67c8ebd0 57
YROY2004 0:37eb67c8ebd0 58 //tftspfd5408
YROY2004 0:37eb67c8ebd0 59 #define TFTWIDTH 240
YROY2004 0:37eb67c8ebd0 60 #define TFTHEIGHT 320
YROY2004 0:37eb67c8ebd0 61
YROY2004 0:37eb67c8ebd0 62 #define LCD_CS A3
YROY2004 0:37eb67c8ebd0 63 #define LCD_CD A2
YROY2004 0:37eb67c8ebd0 64 #define LCD_WR A1
YROY2004 0:37eb67c8ebd0 65 #define LCD_RD A0
YROY2004 0:37eb67c8ebd0 66 #define LCD_RESET A4
YROY2004 0:37eb67c8ebd0 67
YROY2004 0:37eb67c8ebd0 68 #define TFT_NORTH SPFD5408_MADCTL_MY | SPFD5408_MADCTL_BGR
YROY2004 0:37eb67c8ebd0 69
YROY2004 0:37eb67c8ebd0 70 #if 0
YROY2004 0:37eb67c8ebd0 71 #define TFT_EAST {SPFD5408_MADCTL_MX | SPFD5408_MADCTL_MY | SPFD5408_MADCTL_MV | SPFD5408_MADCTL_BGR}
YROY2004 0:37eb67c8ebd0 72 #define TFT_SOUTH {SPFD5408_MADCTL_MX | SPFD5408_MADCTL_BGR}
YROY2004 0:37eb67c8ebd0 73 #define TFT_WEST {SPFD5408_MADCTL_MV | SPFD5408_MADCTL_BGR}
YROY2004 0:37eb67c8ebd0 74 #endif
YROY2004 0:37eb67c8ebd0 75
YROY2004 0:37eb67c8ebd0 76 #define BLACK 0x0000
YROY2004 0:37eb67c8ebd0 77 #define BLUE 0x001F
YROY2004 0:37eb67c8ebd0 78 #define RED 0xF800
YROY2004 0:37eb67c8ebd0 79 #define GREEN 0x07E0
YROY2004 0:37eb67c8ebd0 80 #define CYAN 0x07FF
YROY2004 0:37eb67c8ebd0 81 #define MAGENTA 0xF81F
YROY2004 0:37eb67c8ebd0 82 #define YELLOW 0xFFE0
YROY2004 0:37eb67c8ebd0 83 #define WHITE 0xFFFF
YROY2004 0:37eb67c8ebd0 84
YROY2004 0:37eb67c8ebd0 85 #define SPFD5408_SOFTRESET 0x01
YROY2004 0:37eb67c8ebd0 86 #define SPFD5408_SLEEPOUT 0x11
YROY2004 0:37eb67c8ebd0 87
YROY2004 0:37eb67c8ebd0 88 #if 0
YROY2004 0:37eb67c8ebd0 89 #define SPFD5408_SLEEPIN 0x10
YROY2004 0:37eb67c8ebd0 90 #define SPFD5408_NORMALDISP 0x13
YROY2004 0:37eb67c8ebd0 91 #define SPFD5408_INVERTOFF 0x20
YROY2004 0:37eb67c8ebd0 92 #define SPFD5408_INVERTON 0x21
YROY2004 0:37eb67c8ebd0 93 #define SPFD5408_GAMMASET 0x26
YROY2004 0:37eb67c8ebd0 94 #define SPFD5408_DISPLAYOFF 0x28
YROY2004 0:37eb67c8ebd0 95 #endif
YROY2004 0:37eb67c8ebd0 96
YROY2004 0:37eb67c8ebd0 97 #define SPFD5408_DISPLAYON 0x29
YROY2004 0:37eb67c8ebd0 98 #define SPFD5408_COLADDRSET 0x2A
YROY2004 0:37eb67c8ebd0 99 #define SPFD5408_PAGEADDRSET 0x2B
YROY2004 0:37eb67c8ebd0 100 #define SPFD5408_MEMORYWRITE 0x2C
YROY2004 0:37eb67c8ebd0 101 #define SPFD5408_PIXELFORMAT 0x3A
YROY2004 0:37eb67c8ebd0 102 #define SPFD5408_FRAMECONTROL 0xB1
YROY2004 0:37eb67c8ebd0 103 #if 0
YROY2004 0:37eb67c8ebd0 104 #define SPFD5408_DISPLAYFUNC 0xB6
YROY2004 0:37eb67c8ebd0 105 #define SPFD5408_ENTRYMODE 0xB7
YROY2004 0:37eb67c8ebd0 106 #define SPFD5408_POWERCONTROL1 0xC0
YROY2004 0:37eb67c8ebd0 107 #define SPFD5408_POWERCONTROL2 0xC1
YROY2004 0:37eb67c8ebd0 108 #define SPFD5408_VCOMCONTROL1 0xC5
YROY2004 0:37eb67c8ebd0 109 #define SPFD5408_VCOMCONTROL2 0xC7
YROY2004 0:37eb67c8ebd0 110
YROY2004 0:37eb67c8ebd0 111 #define SPFD5408_MADCTL 0x36
YROY2004 0:37eb67c8ebd0 112 #define SPFD5408_MADCTL_MX 0x40
YROY2004 0:37eb67c8ebd0 113 #define SPFD5408_MADCTL_MV 0x20
YROY2004 0:37eb67c8ebd0 114 #define SPFD5408_MADCTL_ML 0x10
YROY2004 0:37eb67c8ebd0 115 #define SPFD5408_MADCTL_RGB 0x00
YROY2004 0:37eb67c8ebd0 116 #endif
YROY2004 0:37eb67c8ebd0 117 #define SPFD5408_MEMCONTROL 0x36
YROY2004 0:37eb67c8ebd0 118 #define SPFD5408_MADCTL_MY 0x80
YROY2004 0:37eb67c8ebd0 119 #define SPFD5408_MADCTL_BGR 0x08
YROY2004 0:37eb67c8ebd0 120 #if 0
YROY2004 0:37eb67c8ebd0 121 #define SPFD5408_MADCTL_MH 0x04
YROY2004 0:37eb67c8ebd0 122 #endif
YROY2004 0:37eb67c8ebd0 123
YROY2004 0:37eb67c8ebd0 124 #define IDLE 1
YROY2004 0:37eb67c8ebd0 125 #define ACTIVE 0
YROY2004 0:37eb67c8ebd0 126 #define COMMAND 0
YROY2004 0:37eb67c8ebd0 127 #define DATA 1
YROY2004 0:37eb67c8ebd0 128
YROY2004 0:37eb67c8ebd0 129 #define TEMPS 40
YROY2004 0:37eb67c8ebd0 130
YROY2004 0:37eb67c8ebd0 131
YROY2004 0:37eb67c8ebd0 132 //integration
YROY2004 0:37eb67c8ebd0 133
YROY2004 0:37eb67c8ebd0 134 #define XE_G 0
YROY2004 0:37eb67c8ebd0 135 #define XE_D 240
YROY2004 0:37eb67c8ebd0 136 #define YE_H 0
YROY2004 0:37eb67c8ebd0 137 #define YE_B 320
YROY2004 0:37eb67c8ebd0 138 #define XT_G 3700
YROY2004 0:37eb67c8ebd0 139 #define XT_D 600
YROY2004 0:37eb67c8ebd0 140 #define YT_H 600
YROY2004 0:37eb67c8ebd0 141 #define YT_B 3700
YROY2004 0:37eb67c8ebd0 142
YROY2004 0:37eb67c8ebd0 143 //definitions de variables
YROY2004 0:37eb67c8ebd0 144 //touchscreen
YROY2004 0:37eb67c8ebd0 145 uint16_t x;
YROY2004 0:37eb67c8ebd0 146 uint16_t y;
YROY2004 0:37eb67c8ebd0 147 uint16_t z;
YROY2004 0:37eb67c8ebd0 148
YROY2004 0:37eb67c8ebd0 149 //tftspfd5408
YROY2004 0:37eb67c8ebd0 150 DigitalOut pinRD(LCD_RD); //PA_0;
YROY2004 0:37eb67c8ebd0 151 DigitalOut pinWR(LCD_WR); //PA_1;
YROY2004 0:37eb67c8ebd0 152 DigitalOut pinCD(LCD_CD); //PA_4;
YROY2004 0:37eb67c8ebd0 153 DigitalOut pinCS(LCD_CS); //PB_0;
YROY2004 0:37eb67c8ebd0 154 DigitalOut pinReset(LCD_RESET); //PC_1;
YROY2004 0:37eb67c8ebd0 155
YROY2004 0:37eb67c8ebd0 156 //integration
YROY2004 0:37eb67c8ebd0 157 Serial pc(SERIAL_TX, SERIAL_RX, 9600);
YROY2004 0:37eb67c8ebd0 158 DigitalOut myled(LED1);
YROY2004 0:37eb67c8ebd0 159 uint16_t couleurVariable;
YROY2004 0:37eb67c8ebd0 160 uint16_t tableDeCouleur[]=
YROY2004 0:37eb67c8ebd0 161 {
YROY2004 0:37eb67c8ebd0 162 WHITE, YELLOW, GREEN, BLUE, CYAN, MAGENTA, RED
YROY2004 0:37eb67c8ebd0 163 };
YROY2004 0:37eb67c8ebd0 164
YROY2004 0:37eb67c8ebd0 165
YROY2004 0:37eb67c8ebd0 166 //declarations de fonctions
YROY2004 0:37eb67c8ebd0 167 //touchscreen
YROY2004 0:37eb67c8ebd0 168 void restoreXY(void);
YROY2004 0:37eb67c8ebd0 169 uint16_t readTouchX(void);
YROY2004 0:37eb67c8ebd0 170 uint16_t readTouchY(void);
YROY2004 0:37eb67c8ebd0 171 uint16_t detectTouch(void);
YROY2004 0:37eb67c8ebd0 172
YROY2004 0:37eb67c8ebd0 173 //tftspfd5408
YROY2004 0:37eb67c8ebd0 174 void WriteCommand(uint8_t c);
YROY2004 0:37eb67c8ebd0 175 void WriteData(uint8_t d);
YROY2004 0:37eb67c8ebd0 176 void begin(void);
YROY2004 0:37eb67c8ebd0 177 void setAddrWindow(int x1, int y1, int x2, int y2);
YROY2004 0:37eb67c8ebd0 178 void fillRect(uint16_t x1, uint16_t y1, uint16_t w, uint16_t h, uint16_t fillcolor);
YROY2004 0:37eb67c8ebd0 179
YROY2004 0:37eb67c8ebd0 180 //definitions de fonctions
YROY2004 0:37eb67c8ebd0 181 //touchscreen
YROY2004 0:37eb67c8ebd0 182 void restoreXY(void)
YROY2004 0:37eb67c8ebd0 183 {
YROY2004 0:37eb67c8ebd0 184 DigitalOut pinXP(XP);
YROY2004 0:37eb67c8ebd0 185 DigitalOut pinXM(XM);
YROY2004 0:37eb67c8ebd0 186 DigitalOut pinYP(YP);
YROY2004 0:37eb67c8ebd0 187 DigitalOut pinYM(YM);
YROY2004 0:37eb67c8ebd0 188
YROY2004 0:37eb67c8ebd0 189 pinXP = 1;
YROY2004 0:37eb67c8ebd0 190 pinXM = 1;
YROY2004 0:37eb67c8ebd0 191 pinYP = 1;
YROY2004 0:37eb67c8ebd0 192 pinYM = 1;
YROY2004 0:37eb67c8ebd0 193 wait_ms(1);
YROY2004 0:37eb67c8ebd0 194 }
YROY2004 0:37eb67c8ebd0 195
YROY2004 0:37eb67c8ebd0 196 uint16_t readTouchX(void)
YROY2004 0:37eb67c8ebd0 197 {
YROY2004 0:37eb67c8ebd0 198 uint16_t value;
YROY2004 0:37eb67c8ebd0 199 DigitalOut pinXP(XP);
YROY2004 0:37eb67c8ebd0 200 DigitalOut pinXM(XM);
YROY2004 0:37eb67c8ebd0 201 AnalogIn pinYP(YP);
YROY2004 0:37eb67c8ebd0 202 DigitalIn pinYM(YM);
YROY2004 0:37eb67c8ebd0 203
YROY2004 0:37eb67c8ebd0 204 pinXP = 0;
YROY2004 0:37eb67c8ebd0 205 pinXM = 1;
YROY2004 0:37eb67c8ebd0 206 pinYM.mode(OpenDrain);
YROY2004 0:37eb67c8ebd0 207 value = pinYP.read_u16() >> 4;
YROY2004 0:37eb67c8ebd0 208 restoreXY();
YROY2004 0:37eb67c8ebd0 209 return value;
YROY2004 0:37eb67c8ebd0 210 }
YROY2004 0:37eb67c8ebd0 211
YROY2004 0:37eb67c8ebd0 212 uint16_t readTouchY(void)
YROY2004 0:37eb67c8ebd0 213 {
YROY2004 0:37eb67c8ebd0 214 uint16_t value;
YROY2004 0:37eb67c8ebd0 215 DigitalIn pinXP(XP);
YROY2004 0:37eb67c8ebd0 216 AnalogIn pinXM(XM);
YROY2004 0:37eb67c8ebd0 217 DigitalOut pinYP(YP);
YROY2004 0:37eb67c8ebd0 218 DigitalOut pinYM(YM);
YROY2004 0:37eb67c8ebd0 219
YROY2004 0:37eb67c8ebd0 220 pinYP = 1;
YROY2004 0:37eb67c8ebd0 221 pinYM = 0;
YROY2004 0:37eb67c8ebd0 222 pinXP.mode(OpenDrain);
YROY2004 0:37eb67c8ebd0 223 value = pinXM.read_u16() >> 4;
YROY2004 0:37eb67c8ebd0 224 restoreXY();
YROY2004 0:37eb67c8ebd0 225 return value;
YROY2004 0:37eb67c8ebd0 226 }
YROY2004 0:37eb67c8ebd0 227
YROY2004 0:37eb67c8ebd0 228 uint16_t detectTouch(void)
YROY2004 0:37eb67c8ebd0 229 {
YROY2004 0:37eb67c8ebd0 230 uint16_t firstValue;
YROY2004 0:37eb67c8ebd0 231 uint16_t secondValue;
YROY2004 0:37eb67c8ebd0 232 DigitalOut pinXP(XP);
YROY2004 0:37eb67c8ebd0 233 DigitalOut pinXM(XM);
YROY2004 0:37eb67c8ebd0 234 AnalogIn pinYP(YP);
YROY2004 0:37eb67c8ebd0 235 DigitalIn pinYM(YM);
YROY2004 0:37eb67c8ebd0 236
YROY2004 0:37eb67c8ebd0 237 pinYM.mode(OpenDrain);
YROY2004 0:37eb67c8ebd0 238 pinXP = 1;
YROY2004 0:37eb67c8ebd0 239 pinXM = 0;
YROY2004 0:37eb67c8ebd0 240 firstValue = pinYP.read_u16() >> 4;
YROY2004 0:37eb67c8ebd0 241
YROY2004 0:37eb67c8ebd0 242 pinXP = 0;
YROY2004 0:37eb67c8ebd0 243 pinXM = 1;
YROY2004 0:37eb67c8ebd0 244 secondValue = pinYP.read_u16() >> 4;
YROY2004 0:37eb67c8ebd0 245
YROY2004 0:37eb67c8ebd0 246 restoreXY();
YROY2004 0:37eb67c8ebd0 247
YROY2004 0:37eb67c8ebd0 248 if (secondValue > firstValue)
YROY2004 0:37eb67c8ebd0 249 {
YROY2004 0:37eb67c8ebd0 250 return firstValue;
YROY2004 0:37eb67c8ebd0 251 }
YROY2004 0:37eb67c8ebd0 252 return secondValue;
YROY2004 0:37eb67c8ebd0 253 }
YROY2004 0:37eb67c8ebd0 254
YROY2004 0:37eb67c8ebd0 255 //tftspfd5408
YROY2004 0:37eb67c8ebd0 256 void WriteCommand(uint8_t c)
YROY2004 0:37eb67c8ebd0 257 {
YROY2004 0:37eb67c8ebd0 258 BusInOut portTFT(D8, D9, D2, D3, D4, D5, D6, D7);
YROY2004 0:37eb67c8ebd0 259 portTFT.output();
YROY2004 0:37eb67c8ebd0 260 pinCD = COMMAND;
YROY2004 0:37eb67c8ebd0 261 pinWR = ACTIVE;
YROY2004 0:37eb67c8ebd0 262 portTFT = c;
YROY2004 0:37eb67c8ebd0 263 pinWR = IDLE;
YROY2004 0:37eb67c8ebd0 264 }
YROY2004 0:37eb67c8ebd0 265
YROY2004 0:37eb67c8ebd0 266 void WriteData(uint8_t d)
YROY2004 0:37eb67c8ebd0 267 {
YROY2004 0:37eb67c8ebd0 268 BusInOut portTFT(D8, D9, D2, D3, D4, D5, D6, D7);
YROY2004 0:37eb67c8ebd0 269 portTFT.output();
YROY2004 0:37eb67c8ebd0 270 pinCD = DATA;
YROY2004 0:37eb67c8ebd0 271 pinWR = ACTIVE;
YROY2004 0:37eb67c8ebd0 272 portTFT = d;
YROY2004 0:37eb67c8ebd0 273 pinWR = IDLE;
YROY2004 0:37eb67c8ebd0 274 }
YROY2004 0:37eb67c8ebd0 275
YROY2004 0:37eb67c8ebd0 276 void begin(void)
YROY2004 0:37eb67c8ebd0 277 {
YROY2004 0:37eb67c8ebd0 278 pinCS = IDLE;
YROY2004 0:37eb67c8ebd0 279 pinCD = DATA;
YROY2004 0:37eb67c8ebd0 280 pinWR = IDLE;
YROY2004 0:37eb67c8ebd0 281 pinRD = IDLE;
YROY2004 0:37eb67c8ebd0 282
YROY2004 0:37eb67c8ebd0 283 pinReset = ACTIVE;
YROY2004 0:37eb67c8ebd0 284 wait_ms(100);
YROY2004 0:37eb67c8ebd0 285 pinReset = IDLE;
YROY2004 0:37eb67c8ebd0 286 wait_ms(100);
YROY2004 0:37eb67c8ebd0 287 pinCS = ACTIVE;
YROY2004 0:37eb67c8ebd0 288
YROY2004 0:37eb67c8ebd0 289 WriteCommand(SPFD5408_SOFTRESET);
YROY2004 0:37eb67c8ebd0 290 WriteData(0);
YROY2004 0:37eb67c8ebd0 291 wait_ms(50);
YROY2004 0:37eb67c8ebd0 292
YROY2004 0:37eb67c8ebd0 293 WriteCommand(SPFD5408_MEMCONTROL);
YROY2004 0:37eb67c8ebd0 294 WriteData(TFT_NORTH); //(SPFD5408_MADCTL_MY | SPFD5408_MADCTL_BGR);
YROY2004 0:37eb67c8ebd0 295
YROY2004 0:37eb67c8ebd0 296 WriteCommand(SPFD5408_PIXELFORMAT);
YROY2004 0:37eb67c8ebd0 297 WriteData(0x55);
YROY2004 0:37eb67c8ebd0 298
YROY2004 0:37eb67c8ebd0 299 WriteCommand(SPFD5408_FRAMECONTROL);
YROY2004 0:37eb67c8ebd0 300 WriteData(0x00);
YROY2004 0:37eb67c8ebd0 301 WriteData(0x1B);
YROY2004 0:37eb67c8ebd0 302
YROY2004 0:37eb67c8ebd0 303 WriteCommand(SPFD5408_SLEEPOUT);
YROY2004 0:37eb67c8ebd0 304 WriteData(0);
YROY2004 0:37eb67c8ebd0 305
YROY2004 0:37eb67c8ebd0 306 WriteCommand(SPFD5408_DISPLAYON);
YROY2004 0:37eb67c8ebd0 307 WriteData(0);
YROY2004 0:37eb67c8ebd0 308 }
YROY2004 0:37eb67c8ebd0 309
YROY2004 0:37eb67c8ebd0 310 void setAddrWindow(int x1, int y1, int x2, int y2) {
YROY2004 0:37eb67c8ebd0 311 pinCS = ACTIVE;
YROY2004 0:37eb67c8ebd0 312 wait_us(TEMPS);
YROY2004 0:37eb67c8ebd0 313 WriteCommand(SPFD5408_COLADDRSET);
YROY2004 0:37eb67c8ebd0 314 WriteData(x1 >> 8);
YROY2004 0:37eb67c8ebd0 315 WriteData(x1);
YROY2004 0:37eb67c8ebd0 316 WriteData(x2 >> 8);
YROY2004 0:37eb67c8ebd0 317 WriteData(x2);
YROY2004 0:37eb67c8ebd0 318 wait_us(TEMPS);
YROY2004 0:37eb67c8ebd0 319 pinCS = IDLE;
YROY2004 0:37eb67c8ebd0 320
YROY2004 0:37eb67c8ebd0 321 pinCS = ACTIVE;
YROY2004 0:37eb67c8ebd0 322 wait_us(TEMPS);
YROY2004 0:37eb67c8ebd0 323 WriteCommand(SPFD5408_PAGEADDRSET);
YROY2004 0:37eb67c8ebd0 324 WriteData(y1 >> 8);
YROY2004 0:37eb67c8ebd0 325 WriteData(y1);
YROY2004 0:37eb67c8ebd0 326 WriteData(y2 >> 8);
YROY2004 0:37eb67c8ebd0 327 WriteData(y2);
YROY2004 0:37eb67c8ebd0 328 pinCS = IDLE;
YROY2004 0:37eb67c8ebd0 329 }
YROY2004 0:37eb67c8ebd0 330
YROY2004 0:37eb67c8ebd0 331 void fillRect(uint16_t x1, uint16_t y1, uint16_t w, uint16_t h, uint16_t fillcolor)
YROY2004 0:37eb67c8ebd0 332 {
YROY2004 0:37eb67c8ebd0 333 BusInOut portTFT(D8, D9, D2, D3, D4, D5, D6, D7);
YROY2004 0:37eb67c8ebd0 334 uint8_t hi, lo;
YROY2004 0:37eb67c8ebd0 335 uint16_t x2, y2;
YROY2004 0:37eb67c8ebd0 336 uint16_t i, j;
YROY2004 0:37eb67c8ebd0 337
YROY2004 0:37eb67c8ebd0 338 portTFT.output();
YROY2004 0:37eb67c8ebd0 339
YROY2004 0:37eb67c8ebd0 340 x2 = x1 + w - 1;
YROY2004 0:37eb67c8ebd0 341 y2 = y1 + h - 1;
YROY2004 0:37eb67c8ebd0 342 setAddrWindow(x1, y1, x2, y2);
YROY2004 0:37eb67c8ebd0 343
YROY2004 0:37eb67c8ebd0 344 hi = fillcolor >> 8;
YROY2004 0:37eb67c8ebd0 345 lo = fillcolor;
YROY2004 0:37eb67c8ebd0 346
YROY2004 0:37eb67c8ebd0 347 pinCS = ACTIVE;
YROY2004 0:37eb67c8ebd0 348
YROY2004 0:37eb67c8ebd0 349 WriteCommand(SPFD5408_MEMORYWRITE);
YROY2004 0:37eb67c8ebd0 350 pinCD = DATA;
YROY2004 0:37eb67c8ebd0 351 for (i = h; i > 0; i--)
YROY2004 0:37eb67c8ebd0 352 {
YROY2004 0:37eb67c8ebd0 353 for (j = w; j > 0; j--)
YROY2004 0:37eb67c8ebd0 354
YROY2004 0:37eb67c8ebd0 355 {
YROY2004 0:37eb67c8ebd0 356 pinWR = ACTIVE;
YROY2004 0:37eb67c8ebd0 357 portTFT = hi;
YROY2004 0:37eb67c8ebd0 358 pinWR = IDLE;
YROY2004 0:37eb67c8ebd0 359 pinWR = ACTIVE;
YROY2004 0:37eb67c8ebd0 360 portTFT = lo;
YROY2004 0:37eb67c8ebd0 361 pinWR = IDLE;
YROY2004 0:37eb67c8ebd0 362 }
YROY2004 0:37eb67c8ebd0 363 }
YROY2004 0:37eb67c8ebd0 364 pinCS = IDLE;
YROY2004 0:37eb67c8ebd0 365 }
YROY2004 0:37eb67c8ebd0 366
YROY2004 0:37eb67c8ebd0 367 //intégration
YROY2004 0:37eb67c8ebd0 368
YROY2004 0:37eb67c8ebd0 369 int32_t conversion(int32_t x, int32_t x0, int32_t y0, int32_t x1, int32_t y1)
YROY2004 0:37eb67c8ebd0 370 {
YROY2004 0:37eb67c8ebd0 371 int32_t retour;
YROY2004 0:37eb67c8ebd0 372 int32_t limiteInferieure;
YROY2004 0:37eb67c8ebd0 373 int32_t limiteSuperieure;
YROY2004 0:37eb67c8ebd0 374 if (y0 < y1)
YROY2004 0:37eb67c8ebd0 375 {
YROY2004 0:37eb67c8ebd0 376 limiteInferieure = y0;
YROY2004 0:37eb67c8ebd0 377 limiteSuperieure = y1;
YROY2004 0:37eb67c8ebd0 378 }
YROY2004 0:37eb67c8ebd0 379 else
YROY2004 0:37eb67c8ebd0 380 {
YROY2004 0:37eb67c8ebd0 381 limiteInferieure = y1;
YROY2004 0:37eb67c8ebd0 382 limiteSuperieure = y0;
YROY2004 0:37eb67c8ebd0 383 }
YROY2004 0:37eb67c8ebd0 384 retour = (x - x0) * (y1 -y0) / (x1 -x0) + y0;
YROY2004 0:37eb67c8ebd0 385
YROY2004 0:37eb67c8ebd0 386 if (retour < limiteInferieure)
YROY2004 0:37eb67c8ebd0 387 {
YROY2004 0:37eb67c8ebd0 388 return limiteInferieure;
YROY2004 0:37eb67c8ebd0 389 }
YROY2004 0:37eb67c8ebd0 390 if (retour > limiteSuperieure)
YROY2004 0:37eb67c8ebd0 391 {
YROY2004 0:37eb67c8ebd0 392 return limiteSuperieure;
YROY2004 0:37eb67c8ebd0 393 }
YROY2004 0:37eb67c8ebd0 394 return retour;
YROY2004 0:37eb67c8ebd0 395 };
YROY2004 0:37eb67c8ebd0 396
YROY2004 0:37eb67c8ebd0 397 uint16_t determineLaCouleur(void)
YROY2004 0:37eb67c8ebd0 398 {
YROY2004 0:37eb67c8ebd0 399 return tableDeCouleur[3];
YROY2004 0:37eb67c8ebd0 400 }
YROY2004 0:37eb67c8ebd0 401
YROY2004 0:37eb67c8ebd0 402 int main()
YROY2004 0:37eb67c8ebd0 403 {
YROY2004 0:37eb67c8ebd0 404 uint16_t couleur;
YROY2004 0:37eb67c8ebd0 405 //initialisation du touchscreen
YROY2004 0:37eb67c8ebd0 406 restoreXY();
YROY2004 0:37eb67c8ebd0 407
YROY2004 0:37eb67c8ebd0 408 //initialisation du tftspfd5408
YROY2004 0:37eb67c8ebd0 409 begin();
YROY2004 0:37eb67c8ebd0 410
YROY2004 0:37eb67c8ebd0 411 //intégration
YROY2004 0:37eb67c8ebd0 412 couleur = RED;
YROY2004 0:37eb67c8ebd0 413 couleurVariable = BLUE;
YROY2004 0:37eb67c8ebd0 414 fillRect(0, 0, 240, 280, BLACK); //surface de dessin
YROY2004 0:37eb67c8ebd0 415 //bouton noir
YROY2004 0:37eb67c8ebd0 416 fillRect(0, 280, 80, 2, WHITE); // ligne horizontale haut
YROY2004 0:37eb67c8ebd0 417 fillRect(0, 282, 2, 38, WHITE); // ligne verticale gauche
YROY2004 0:37eb67c8ebd0 418 fillRect(79, 282, 1, 38, WHITE); // ligne verticale droite
YROY2004 0:37eb67c8ebd0 419 fillRect(2, 318, 77, 2, WHITE); //ligne horizontale bas
YROY2004 0:37eb67c8ebd0 420 fillRect(2, 282, 77, 36, BLACK); // centre noir
YROY2004 0:37eb67c8ebd0 421 //bouton rouge
YROY2004 0:37eb67c8ebd0 422 fillRect(80, 280, 80, 40, WHITE); // moins d'instructions mais plus long
YROY2004 0:37eb67c8ebd0 423 fillRect(81, 282, 78, 36, RED); // bouton rouge
YROY2004 0:37eb67c8ebd0 424 //bouton cyan
YROY2004 0:37eb67c8ebd0 425 fillRect(160, 280, 80, 40, WHITE); // moins d'instructions mais plus long
YROY2004 0:37eb67c8ebd0 426 fillRect(161, 282, 77, 36, BLUE); //bouton bleu
YROY2004 0:37eb67c8ebd0 427 //indicateur
YROY2004 0:37eb67c8ebd0 428 fillRect(81, 282, 10, 10, GREEN); //couleur rouge par défaut
YROY2004 0:37eb67c8ebd0 429
YROY2004 0:37eb67c8ebd0 430 while(1) {
YROY2004 0:37eb67c8ebd0 431
YROY2004 0:37eb67c8ebd0 432 //tâches du touchscreen
YROY2004 0:37eb67c8ebd0 433 myled = !myled;
YROY2004 0:37eb67c8ebd0 434
YROY2004 0:37eb67c8ebd0 435 x = readTouchX();
YROY2004 0:37eb67c8ebd0 436 y = readTouchY();
YROY2004 0:37eb67c8ebd0 437 z = detectTouch();
YROY2004 0:37eb67c8ebd0 438 //tâches du tftspfd5408
YROY2004 0:37eb67c8ebd0 439
YROY2004 0:37eb67c8ebd0 440
YROY2004 0:37eb67c8ebd0 441 //tâches d'intégration
YROY2004 0:37eb67c8ebd0 442 couleurVariable = determineLaCouleur();
YROY2004 0:37eb67c8ebd0 443 fillRect(228, 282, 10, 10, couleurVariable); //indicateur de couleur
YROY2004 0:37eb67c8ebd0 444
YROY2004 0:37eb67c8ebd0 445 if ((z > TOUCH_SEUIL_BAS)&&(z < TOUCH_SEUIL_HAUT))
YROY2004 0:37eb67c8ebd0 446 {
YROY2004 0:37eb67c8ebd0 447 #ifdef TEST
YROY2004 0:37eb67c8ebd0 448 pc.printf("x lu %u\t ", x);
YROY2004 0:37eb67c8ebd0 449 pc.printf("y lu %u\t ", y);
YROY2004 0:37eb67c8ebd0 450 pc.printf("z lu %u\t ", z);
YROY2004 0:37eb67c8ebd0 451 #endif
YROY2004 0:37eb67c8ebd0 452 float u = conversion((float)x, XT_G, XE_G, XT_D, XE_D);
YROY2004 0:37eb67c8ebd0 453 float v = conversion((float)y, YT_B, YE_B, YT_H, YE_H);
YROY2004 0:37eb67c8ebd0 454
YROY2004 0:37eb67c8ebd0 455 #ifdef TEST
YROY2004 0:37eb67c8ebd0 456 pc.printf("x ecran %f\t ", u);
YROY2004 0:37eb67c8ebd0 457 pc.printf("y ecran %f\r\n", v);
YROY2004 0:37eb67c8ebd0 458 #endif
YROY2004 0:37eb67c8ebd0 459 if (v < 280)
YROY2004 0:37eb67c8ebd0 460 {
YROY2004 0:37eb67c8ebd0 461 fillRect(u, v, 1, 1, couleur);
YROY2004 0:37eb67c8ebd0 462 }
YROY2004 0:37eb67c8ebd0 463 else
YROY2004 0:37eb67c8ebd0 464 {
YROY2004 0:37eb67c8ebd0 465 if (u < 80)
YROY2004 0:37eb67c8ebd0 466 {
YROY2004 0:37eb67c8ebd0 467 fillRect(0, 0, 240, 280, BLACK);
YROY2004 0:37eb67c8ebd0 468 }
YROY2004 0:37eb67c8ebd0 469 else
YROY2004 0:37eb67c8ebd0 470 {
YROY2004 0:37eb67c8ebd0 471 if (u < 160)
YROY2004 0:37eb67c8ebd0 472 {
YROY2004 0:37eb67c8ebd0 473 //indicateur RED
YROY2004 0:37eb67c8ebd0 474 fillRect(81, 282, 10, 10, GREEN); //couleur rouge par défaut
YROY2004 0:37eb67c8ebd0 475 fillRect(161,282, 10, 10, couleurVariable);
YROY2004 0:37eb67c8ebd0 476
YROY2004 0:37eb67c8ebd0 477 couleur = RED;
YROY2004 0:37eb67c8ebd0 478 pc.printf("couleur: rouge\n\r");
YROY2004 0:37eb67c8ebd0 479 }
YROY2004 0:37eb67c8ebd0 480 else
YROY2004 0:37eb67c8ebd0 481 {
YROY2004 0:37eb67c8ebd0 482 //indicateur AUTRE
YROY2004 0:37eb67c8ebd0 483 fillRect(161, 282, 77, 36, couleurVariable);
YROY2004 0:37eb67c8ebd0 484 fillRect(161, 282, 10, 10, GREEN); //bouton bleu pale
YROY2004 0:37eb67c8ebd0 485 fillRect(81, 282, 10, 10, RED);
YROY2004 0:37eb67c8ebd0 486 couleur = couleurVariable;
YROY2004 0:37eb67c8ebd0 487 pc.printf("couleur variable\n\r");
YROY2004 0:37eb67c8ebd0 488 }
YROY2004 0:37eb67c8ebd0 489 }
YROY2004 0:37eb67c8ebd0 490 }
YROY2004 0:37eb67c8ebd0 491 }
YROY2004 0:37eb67c8ebd0 492 }
YROY2004 0:37eb67c8ebd0 493 }