Cegep Limoilou: 247-636

Dependencies:   mbed

Committer:
YROY2004
Date:
Fri Sep 10 10:49:37 2021 +0000
Revision:
0:e2e3599e7dba
Draws colored rectangles on a low cost TFT touchscreen that connects to Arduino compatible headers.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
YROY2004 0:e2e3599e7dba 1 #include "mbed.h"
YROY2004 0:e2e3599e7dba 2
YROY2004 0:e2e3599e7dba 3 #define TFTWIDTH 240
YROY2004 0:e2e3599e7dba 4 #define TFTHEIGHT 320
YROY2004 0:e2e3599e7dba 5
YROY2004 0:e2e3599e7dba 6 #define TFT_NORTH {SPFD5408_MADCTL_MY | SPFD5408_MADCTL_BGR}
YROY2004 0:e2e3599e7dba 7 #define TFT_EAST {SPFD5408_MADCTL_MX | SPFD5408_MADCTL_MY | SPFD5408_MADCTL_MV | SPFD5408_MADCTL_BGR}
YROY2004 0:e2e3599e7dba 8 #define TFT_SOUTH {SPFD5408_MADCTL_MX | SPFD5408_MADCTL_BGR}
YROY2004 0:e2e3599e7dba 9 #define TFT_WEST {SPFD5408_MADCTL_MV | SPFD5408_MADCTL_BGR}
YROY2004 0:e2e3599e7dba 10
YROY2004 0:e2e3599e7dba 11 #define BLACK 0x0000
YROY2004 0:e2e3599e7dba 12 #define BLUE 0x001F
YROY2004 0:e2e3599e7dba 13 #define RED 0xF800
YROY2004 0:e2e3599e7dba 14 #define GREEN 0x07E0
YROY2004 0:e2e3599e7dba 15 #define CYAN 0x07FF
YROY2004 0:e2e3599e7dba 16 #define MAGENTA 0xF81F
YROY2004 0:e2e3599e7dba 17 #define YELLOW 0xFFE0
YROY2004 0:e2e3599e7dba 18 #define WHITE 0xFFFF
YROY2004 0:e2e3599e7dba 19
YROY2004 0:e2e3599e7dba 20 #define SPFD5408_SOFTRESET 0x01
YROY2004 0:e2e3599e7dba 21 #define SPFD5408_SLEEPIN 0x10
YROY2004 0:e2e3599e7dba 22 #define SPFD5408_SLEEPOUT 0x11
YROY2004 0:e2e3599e7dba 23 #define SPFD5408_NORMALDISP 0x13
YROY2004 0:e2e3599e7dba 24 #define SPFD5408_INVERTOFF 0x20
YROY2004 0:e2e3599e7dba 25 #define SPFD5408_INVERTON 0x21
YROY2004 0:e2e3599e7dba 26 #define SPFD5408_GAMMASET 0x26
YROY2004 0:e2e3599e7dba 27 #define SPFD5408_DISPLAYOFF 0x28
YROY2004 0:e2e3599e7dba 28 #define SPFD5408_DISPLAYON 0x29
YROY2004 0:e2e3599e7dba 29 #define SPFD5408_COLADDRSET 0x2A
YROY2004 0:e2e3599e7dba 30 #define SPFD5408_PAGEADDRSET 0x2B
YROY2004 0:e2e3599e7dba 31 #define SPFD5408_MEMORYWRITE 0x2C
YROY2004 0:e2e3599e7dba 32 #define SPFD5408_PIXELFORMAT 0x3A
YROY2004 0:e2e3599e7dba 33 #define SPFD5408_FRAMECONTROL 0xB1
YROY2004 0:e2e3599e7dba 34 #define SPFD5408_DISPLAYFUNC 0xB6
YROY2004 0:e2e3599e7dba 35 #define SPFD5408_ENTRYMODE 0xB7
YROY2004 0:e2e3599e7dba 36 #define SPFD5408_POWERCONTROL1 0xC0
YROY2004 0:e2e3599e7dba 37 #define SPFD5408_POWERCONTROL2 0xC1
YROY2004 0:e2e3599e7dba 38 #define SPFD5408_VCOMCONTROL1 0xC5
YROY2004 0:e2e3599e7dba 39 #define SPFD5408_VCOMCONTROL2 0xC7
YROY2004 0:e2e3599e7dba 40 #define SPFD5408_MEMCONTROL 0x36
YROY2004 0:e2e3599e7dba 41 #define SPFD5408_MADCTL 0x36
YROY2004 0:e2e3599e7dba 42 #define SPFD5408_MADCTL_MY 0x80
YROY2004 0:e2e3599e7dba 43 #define SPFD5408_MADCTL_MX 0x40
YROY2004 0:e2e3599e7dba 44 #define SPFD5408_MADCTL_MV 0x20
YROY2004 0:e2e3599e7dba 45 #define SPFD5408_MADCTL_ML 0x10
YROY2004 0:e2e3599e7dba 46 #define SPFD5408_MADCTL_RGB 0x00
YROY2004 0:e2e3599e7dba 47 #define SPFD5408_MADCTL_BGR 0x08
YROY2004 0:e2e3599e7dba 48 #define SPFD5408_MADCTL_MH 0x04
YROY2004 0:e2e3599e7dba 49
YROY2004 0:e2e3599e7dba 50 #define IDLE 1
YROY2004 0:e2e3599e7dba 51 #define ACTIVE 0
YROY2004 0:e2e3599e7dba 52 #define COMMAND 0
YROY2004 0:e2e3599e7dba 53 #define DATA 1
YROY2004 0:e2e3599e7dba 54
YROY2004 0:e2e3599e7dba 55 #define TEMPS 40
YROY2004 0:e2e3599e7dba 56
YROY2004 0:e2e3599e7dba 57 #define LCD_CS A3
YROY2004 0:e2e3599e7dba 58 #define LCD_CD A2
YROY2004 0:e2e3599e7dba 59 #define LCD_WR A1
YROY2004 0:e2e3599e7dba 60 #define LCD_RD A0
YROY2004 0:e2e3599e7dba 61 #define LCD_RESET A4
YROY2004 0:e2e3599e7dba 62
YROY2004 0:e2e3599e7dba 63 DigitalOut pinRD(LCD_RD); //PA_0;
YROY2004 0:e2e3599e7dba 64 DigitalOut pinWR(LCD_WR); //PA_1;
YROY2004 0:e2e3599e7dba 65 DigitalOut pinCD(LCD_CD); //PA_4;
YROY2004 0:e2e3599e7dba 66 DigitalOut pinCS(LCD_CS); //PB_0;
YROY2004 0:e2e3599e7dba 67 DigitalOut pinReset(LCD_RESET);//PC_1;
YROY2004 0:e2e3599e7dba 68
YROY2004 0:e2e3599e7dba 69
YROY2004 0:e2e3599e7dba 70 BusInOut portTFT(D8, D9, D2, D3, D4, D5, D6, D7);
YROY2004 0:e2e3599e7dba 71
YROY2004 0:e2e3599e7dba 72 void WriteCommand(uint8_t c)
YROY2004 0:e2e3599e7dba 73 {
YROY2004 0:e2e3599e7dba 74 pinCD = COMMAND;
YROY2004 0:e2e3599e7dba 75 pinWR = ACTIVE;
YROY2004 0:e2e3599e7dba 76 portTFT = c;
YROY2004 0:e2e3599e7dba 77 pinWR = IDLE;
YROY2004 0:e2e3599e7dba 78 }
YROY2004 0:e2e3599e7dba 79
YROY2004 0:e2e3599e7dba 80 void WriteData(uint8_t d)
YROY2004 0:e2e3599e7dba 81 {
YROY2004 0:e2e3599e7dba 82 pinCD = DATA;
YROY2004 0:e2e3599e7dba 83 wait_ms(1);
YROY2004 0:e2e3599e7dba 84 wait_ms(1);
YROY2004 0:e2e3599e7dba 85 pinWR = ACTIVE;
YROY2004 0:e2e3599e7dba 86 wait_ms(1);
YROY2004 0:e2e3599e7dba 87 portTFT = d;
YROY2004 0:e2e3599e7dba 88 wait_ms(1);
YROY2004 0:e2e3599e7dba 89 pinWR = IDLE;
YROY2004 0:e2e3599e7dba 90 wait_ms(1);
YROY2004 0:e2e3599e7dba 91 }
YROY2004 0:e2e3599e7dba 92
YROY2004 0:e2e3599e7dba 93 Serial pc(SERIAL_TX, SERIAL_RX);
YROY2004 0:e2e3599e7dba 94
YROY2004 0:e2e3599e7dba 95 DigitalOut myled(LED1);
YROY2004 0:e2e3599e7dba 96
YROY2004 0:e2e3599e7dba 97
YROY2004 0:e2e3599e7dba 98
YROY2004 0:e2e3599e7dba 99 void begin(void) {
YROY2004 0:e2e3599e7dba 100
YROY2004 0:e2e3599e7dba 101 pinCS = IDLE;
YROY2004 0:e2e3599e7dba 102 pinCD = DATA;
YROY2004 0:e2e3599e7dba 103 pinWR = IDLE;
YROY2004 0:e2e3599e7dba 104 pinRD = IDLE;
YROY2004 0:e2e3599e7dba 105 portTFT.output();
YROY2004 0:e2e3599e7dba 106
YROY2004 0:e2e3599e7dba 107 pinReset = ACTIVE;
YROY2004 0:e2e3599e7dba 108 wait_ms(100);
YROY2004 0:e2e3599e7dba 109 pinReset = IDLE;
YROY2004 0:e2e3599e7dba 110 wait_ms(100);
YROY2004 0:e2e3599e7dba 111 pinCS = ACTIVE;
YROY2004 0:e2e3599e7dba 112
YROY2004 0:e2e3599e7dba 113 WriteCommand(SPFD5408_SOFTRESET);
YROY2004 0:e2e3599e7dba 114 WriteData(0);
YROY2004 0:e2e3599e7dba 115 wait_ms(50);
YROY2004 0:e2e3599e7dba 116
YROY2004 0:e2e3599e7dba 117 WriteCommand(SPFD5408_MEMCONTROL);
YROY2004 0:e2e3599e7dba 118 WriteData(SPFD5408_MADCTL_MY | SPFD5408_MADCTL_BGR);
YROY2004 0:e2e3599e7dba 119
YROY2004 0:e2e3599e7dba 120 WriteCommand(SPFD5408_PIXELFORMAT);
YROY2004 0:e2e3599e7dba 121 WriteData(0x55);
YROY2004 0:e2e3599e7dba 122
YROY2004 0:e2e3599e7dba 123 WriteCommand(SPFD5408_FRAMECONTROL);
YROY2004 0:e2e3599e7dba 124 WriteData(0x00);
YROY2004 0:e2e3599e7dba 125 WriteData(0x1B);
YROY2004 0:e2e3599e7dba 126
YROY2004 0:e2e3599e7dba 127 WriteCommand(SPFD5408_SLEEPOUT);
YROY2004 0:e2e3599e7dba 128 WriteData(0);
YROY2004 0:e2e3599e7dba 129
YROY2004 0:e2e3599e7dba 130 WriteCommand(SPFD5408_DISPLAYON);
YROY2004 0:e2e3599e7dba 131 WriteData(0);
YROY2004 0:e2e3599e7dba 132 }
YROY2004 0:e2e3599e7dba 133
YROY2004 0:e2e3599e7dba 134 void setAddrWindow(int x1, int y1, int x2, int y2) {
YROY2004 0:e2e3599e7dba 135 pinCS = ACTIVE;
YROY2004 0:e2e3599e7dba 136 wait_us(TEMPS);
YROY2004 0:e2e3599e7dba 137 WriteCommand(SPFD5408_COLADDRSET);
YROY2004 0:e2e3599e7dba 138 WriteData(x1 >> 8);
YROY2004 0:e2e3599e7dba 139 WriteData(x1);
YROY2004 0:e2e3599e7dba 140 WriteData(x2 >> 8);
YROY2004 0:e2e3599e7dba 141 WriteData(x2);
YROY2004 0:e2e3599e7dba 142 wait_us(TEMPS);
YROY2004 0:e2e3599e7dba 143 pinCS = IDLE;
YROY2004 0:e2e3599e7dba 144
YROY2004 0:e2e3599e7dba 145 pinCS = ACTIVE;
YROY2004 0:e2e3599e7dba 146 wait_us(TEMPS);
YROY2004 0:e2e3599e7dba 147 WriteCommand(SPFD5408_PAGEADDRSET);
YROY2004 0:e2e3599e7dba 148 WriteData(y1 >> 8);
YROY2004 0:e2e3599e7dba 149 WriteData(y1);
YROY2004 0:e2e3599e7dba 150 WriteData(y2 >> 8);
YROY2004 0:e2e3599e7dba 151 WriteData(y2);
YROY2004 0:e2e3599e7dba 152 wait_us(TEMPS);
YROY2004 0:e2e3599e7dba 153 pinCS = IDLE;
YROY2004 0:e2e3599e7dba 154 }
YROY2004 0:e2e3599e7dba 155
YROY2004 0:e2e3599e7dba 156
YROY2004 0:e2e3599e7dba 157 void fillRect(uint16_t x1, uint16_t y1, uint16_t w, uint16_t h, uint16_t fillcolor) {
YROY2004 0:e2e3599e7dba 158 uint8_t hi, lo;
YROY2004 0:e2e3599e7dba 159 uint16_t x2, y2;
YROY2004 0:e2e3599e7dba 160 uint16_t i, j;
YROY2004 0:e2e3599e7dba 161
YROY2004 0:e2e3599e7dba 162 x2 = x1 + w - 1;
YROY2004 0:e2e3599e7dba 163 y2 = y1 + h - 1;
YROY2004 0:e2e3599e7dba 164 setAddrWindow(x1, y1, x2, y2);
YROY2004 0:e2e3599e7dba 165
YROY2004 0:e2e3599e7dba 166 hi = fillcolor >> 8;
YROY2004 0:e2e3599e7dba 167 lo = fillcolor;
YROY2004 0:e2e3599e7dba 168
YROY2004 0:e2e3599e7dba 169 pinCS = ACTIVE;
YROY2004 0:e2e3599e7dba 170
YROY2004 0:e2e3599e7dba 171 WriteCommand(SPFD5408_MEMORYWRITE);
YROY2004 0:e2e3599e7dba 172 pinCD = DATA;
YROY2004 0:e2e3599e7dba 173 for (i = h; i > 0; i--)
YROY2004 0:e2e3599e7dba 174 {
YROY2004 0:e2e3599e7dba 175 for (j = w; j > 0; j--)
YROY2004 0:e2e3599e7dba 176
YROY2004 0:e2e3599e7dba 177 {
YROY2004 0:e2e3599e7dba 178 pinWR = ACTIVE;
YROY2004 0:e2e3599e7dba 179 portTFT = hi;
YROY2004 0:e2e3599e7dba 180 pinWR = IDLE;
YROY2004 0:e2e3599e7dba 181 pinWR = ACTIVE;
YROY2004 0:e2e3599e7dba 182 portTFT = lo;
YROY2004 0:e2e3599e7dba 183 pinWR = IDLE;
YROY2004 0:e2e3599e7dba 184 }
YROY2004 0:e2e3599e7dba 185 }
YROY2004 0:e2e3599e7dba 186 pinCS = IDLE;
YROY2004 0:e2e3599e7dba 187 }
YROY2004 0:e2e3599e7dba 188
YROY2004 0:e2e3599e7dba 189
YROY2004 0:e2e3599e7dba 190 int main()
YROY2004 0:e2e3599e7dba 191 {
YROY2004 0:e2e3599e7dba 192 begin();
YROY2004 0:e2e3599e7dba 193 fillRect(0, 0, 240, 320, BLACK);
YROY2004 0:e2e3599e7dba 194 fillRect(75, 100, 100, 150, RED);
YROY2004 0:e2e3599e7dba 195 fillRect(80, 105, 90, 140, YELLOW);
YROY2004 0:e2e3599e7dba 196
YROY2004 0:e2e3599e7dba 197 while(1)
YROY2004 0:e2e3599e7dba 198 {
YROY2004 0:e2e3599e7dba 199 }
YROY2004 0:e2e3599e7dba 200 }
YROY2004 0:e2e3599e7dba 201
YROY2004 0:e2e3599e7dba 202