POUR NUCLEO-F302R8
Dependencies: X_NUCLEO_6180XA1 mbed
Fork of 247-436-M1-S2-LAB-A by
main.cpp@0:37eb67c8ebd0, 2018-01-26 (annotated)
- 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?
User | Revision | Line number | New 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 | } |