sainsmart

Fork of ST7735_TFT by Jonne Valola

www.sainsmart.com ST7735 1.8"TFT LCD 128x160 Pixel setting chenge

Committer:
mihanada
Date:
Fri Jun 20 09:25:28 2014 +0000
Revision:
2:7a251cc3d679
Parent:
1:967235e6fd48
www.sainsmart.com ST7735 1.8"TFT LCD 128x160 Pixel; setting chenge

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mihanada 2:7a251cc3d679 1
mihanada 2:7a251cc3d679 2 /* mbed library for 128*160 pixel display TFT based on ST7735 LCD Controller
smultron1977 0:246f2fb5be59 3 * ST7735 specific routines (initialization, window addressing, pixel output)
smultron1977 0:246f2fb5be59 4 * Copyright (c) 2011 Jonne Valola
smultron1977 0:246f2fb5be59 5 *
smultron1977 0:246f2fb5be59 6 * WARNING !! WORK IN PROGRESS !!!
smultron1977 0:246f2fb5be59 7 *
smultron1977 0:246f2fb5be59 8 * Graphics routines and SPI routines derived work used with permission from:
smultron1977 0:246f2fb5be59 9 * mbed library for 240*320 pixel display TFT based on HX8347D LCD Controller
smultron1977 0:246f2fb5be59 10 * Copyright (c) 2011 Peter Drescher - DC2PD
smultron1977 0:246f2fb5be59 11 *
smultron1977 0:246f2fb5be59 12 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
smultron1977 0:246f2fb5be59 13 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
smultron1977 0:246f2fb5be59 14 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
smultron1977 0:246f2fb5be59 15 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
smultron1977 0:246f2fb5be59 16 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
smultron1977 0:246f2fb5be59 17 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
smultron1977 0:246f2fb5be59 18 * THE SOFTWARE.
smultron1977 0:246f2fb5be59 19 */
smultron1977 0:246f2fb5be59 20
smultron1977 0:246f2fb5be59 21
smultron1977 0:246f2fb5be59 22 #include "ST7735_TFT.h"
smultron1977 0:246f2fb5be59 23 #include "mbed.h"
smultron1977 0:246f2fb5be59 24
smultron1977 0:246f2fb5be59 25 #define BPP 16 // Bits per pixel
smultron1977 0:246f2fb5be59 26
smultron1977 0:246f2fb5be59 27 ST7735_TFT::ST7735_TFT(PinName mosi, PinName miso, PinName sclk, PinName cs, PinName rs, PinName reset, const char *name)
smultron1977 0:246f2fb5be59 28 : _spi(mosi, miso, sclk), _cs(cs), _rs(rs), _reset(reset),GraphicsDisplay(name) {
smultron1977 0:246f2fb5be59 29 tft_reset();
smultron1977 0:246f2fb5be59 30 orientation = 2;
smultron1977 0:246f2fb5be59 31 char_x = 0;
smultron1977 0:246f2fb5be59 32 }
smultron1977 0:246f2fb5be59 33
smultron1977 0:246f2fb5be59 34
smultron1977 0:246f2fb5be59 35 int ST7735_TFT::width() {
smultron1977 0:246f2fb5be59 36 if (orientation == 0 || orientation == 2) return 128;
smultron1977 0:246f2fb5be59 37 else return 160;
smultron1977 0:246f2fb5be59 38 }
smultron1977 0:246f2fb5be59 39
smultron1977 0:246f2fb5be59 40
smultron1977 0:246f2fb5be59 41 int ST7735_TFT::height() {
smultron1977 0:246f2fb5be59 42 if (orientation == 0 || orientation == 2) return 160;
smultron1977 0:246f2fb5be59 43 else return 128;
smultron1977 0:246f2fb5be59 44 }
smultron1977 0:246f2fb5be59 45
smultron1977 0:246f2fb5be59 46
smultron1977 0:246f2fb5be59 47 void ST7735_TFT::set_orientation(unsigned int o) {
smultron1977 0:246f2fb5be59 48 orientation = o;
smultron1977 0:246f2fb5be59 49 switch (orientation) {
smultron1977 0:246f2fb5be59 50 case 0:
mihanada 2:7a251cc3d679 51 // wr_reg(ST7735_MADCTL, 0x0008);
mihanada 2:7a251cc3d679 52 wr_reg(ST7735_MADCTL, 0x0000);
smultron1977 0:246f2fb5be59 53 break;
smultron1977 0:246f2fb5be59 54 case 1:
mihanada 2:7a251cc3d679 55 // wr_reg(ST7735_MADCTL, 0x0068);
mihanada 2:7a251cc3d679 56 wr_reg(ST7735_MADCTL, 0x0060);
smultron1977 0:246f2fb5be59 57 break;
smultron1977 0:246f2fb5be59 58 case 2:
mihanada 2:7a251cc3d679 59 // wr_reg(ST7735_MADCTL, 0x00C8);
mihanada 2:7a251cc3d679 60 wr_reg(ST7735_MADCTL, 0x00C0);
smultron1977 0:246f2fb5be59 61 break;
smultron1977 0:246f2fb5be59 62 case 3:
mihanada 2:7a251cc3d679 63 // wr_reg(ST7735_MADCTL, 0x00A8);
mihanada 2:7a251cc3d679 64 wr_reg(ST7735_MADCTL, 0x00A0);
smultron1977 0:246f2fb5be59 65 break;
smultron1977 0:246f2fb5be59 66 }
smultron1977 0:246f2fb5be59 67 }
smultron1977 0:246f2fb5be59 68
smultron1977 0:246f2fb5be59 69
smultron1977 0:246f2fb5be59 70
smultron1977 0:246f2fb5be59 71 void ST7735_TFT::wr_cmd(int cmd) {
smultron1977 0:246f2fb5be59 72 _rs = 0; // rs low, cs low for transmitting command
smultron1977 0:246f2fb5be59 73 _cs = 0;
smultron1977 0:246f2fb5be59 74 _spi.write(cmd);
smultron1977 0:246f2fb5be59 75 _cs = 1;
smultron1977 0:246f2fb5be59 76 }
smultron1977 0:246f2fb5be59 77
smultron1977 0:246f2fb5be59 78
smultron1977 0:246f2fb5be59 79
smultron1977 0:246f2fb5be59 80 void ST7735_TFT::wr_dat(int dat) {
smultron1977 0:246f2fb5be59 81 _rs = 1; // rs high, cs low for transmitting data
smultron1977 0:246f2fb5be59 82 _cs = 0;
smultron1977 0:246f2fb5be59 83 _spi.write(dat);
smultron1977 0:246f2fb5be59 84 _cs = 1;
smultron1977 0:246f2fb5be59 85 }
smultron1977 0:246f2fb5be59 86
smultron1977 0:246f2fb5be59 87
smultron1977 0:246f2fb5be59 88
smultron1977 0:246f2fb5be59 89 void ST7735_TFT::wr_dat_start(void) {
smultron1977 0:246f2fb5be59 90 _rs = 1; // rs high, cs low for transmitting data
smultron1977 0:246f2fb5be59 91 _cs = 0;
smultron1977 0:246f2fb5be59 92 }
smultron1977 0:246f2fb5be59 93
smultron1977 0:246f2fb5be59 94
smultron1977 0:246f2fb5be59 95
smultron1977 0:246f2fb5be59 96 void ST7735_TFT::wr_dat_stop (void) {
smultron1977 0:246f2fb5be59 97 _cs = 1;
smultron1977 0:246f2fb5be59 98 }
smultron1977 0:246f2fb5be59 99
smultron1977 0:246f2fb5be59 100
smultron1977 0:246f2fb5be59 101
smultron1977 0:246f2fb5be59 102 void ST7735_TFT::wr_dat_only (unsigned short dat) {
smultron1977 0:246f2fb5be59 103 _spi.write(dat);
smultron1977 0:246f2fb5be59 104 }
smultron1977 0:246f2fb5be59 105
smultron1977 0:246f2fb5be59 106
smultron1977 0:246f2fb5be59 107 unsigned short ST7735_TFT::rd_dat (void) {
smultron1977 0:246f2fb5be59 108 unsigned short val = 0;
smultron1977 0:246f2fb5be59 109 _cs = 0;
smultron1977 0:246f2fb5be59 110 _spi.write(0); /* Dummy read 1 */
smultron1977 0:246f2fb5be59 111 val = _spi.write(0); /* Read D8..D15 */
smultron1977 0:246f2fb5be59 112 val <<= 8;
smultron1977 0:246f2fb5be59 113 val |= _spi.write(0); /* Read D0..D7 */
smultron1977 0:246f2fb5be59 114 _cs = 1;
smultron1977 0:246f2fb5be59 115 return (val);
smultron1977 0:246f2fb5be59 116 }
smultron1977 0:246f2fb5be59 117
smultron1977 0:246f2fb5be59 118 void ST7735_TFT::wr_reg (unsigned char reg, unsigned short val) {
smultron1977 0:246f2fb5be59 119
smultron1977 0:246f2fb5be59 120 wr_cmd(reg);
smultron1977 0:246f2fb5be59 121 wr_dat(val);
smultron1977 0:246f2fb5be59 122 }
smultron1977 0:246f2fb5be59 123
smultron1977 0:246f2fb5be59 124
smultron1977 0:246f2fb5be59 125 unsigned short ST7735_TFT::rd_reg (unsigned char reg) {
smultron1977 0:246f2fb5be59 126
smultron1977 0:246f2fb5be59 127 wr_cmd(reg);
smultron1977 0:246f2fb5be59 128 return(rd_dat());
smultron1977 0:246f2fb5be59 129 }
smultron1977 0:246f2fb5be59 130
smultron1977 0:246f2fb5be59 131 void ST7735_TFT::read_area(unsigned int x, unsigned int y, unsigned int w, unsigned int h,unsigned char *buffer) {
smultron1977 0:246f2fb5be59 132 // BEWARE !
smultron1977 0:246f2fb5be59 133 // DOES NOT WORK CORRECTLY YET !!!
smultron1977 0:246f2fb5be59 134 int val;
smultron1977 0:246f2fb5be59 135 window(x,y,w,h);
smultron1977 0:246f2fb5be59 136 wr_cmd(ST7735_RAMRD); // write to RAM
smultron1977 0:246f2fb5be59 137 _cs = 0;
smultron1977 0:246f2fb5be59 138 _rs = 1;
smultron1977 0:246f2fb5be59 139 _spi.write(0); /* Dummy read 1 */
smultron1977 0:246f2fb5be59 140
smultron1977 0:246f2fb5be59 141 val = _spi.write(0); /* Read D8..D15 */
smultron1977 0:246f2fb5be59 142 val <<= 8;
smultron1977 0:246f2fb5be59 143 val |= _spi.write(0); /* Read D0..D7 */
smultron1977 0:246f2fb5be59 144 _cs = 1;
smultron1977 0:246f2fb5be59 145 }
smultron1977 0:246f2fb5be59 146
smultron1977 0:246f2fb5be59 147 int ST7735_TFT::getpixel(unsigned int x, unsigned int y) {
smultron1977 0:246f2fb5be59 148 // BEWARE !
smultron1977 0:246f2fb5be59 149 // DOES NOT WORK CORRECTLY YET !!!
smultron1977 0:246f2fb5be59 150 int val;
smultron1977 0:246f2fb5be59 151 _spi.format(8,3);
smultron1977 0:246f2fb5be59 152 wr_cmd(ST7735_CASET); // column addr set
smultron1977 0:246f2fb5be59 153 wr_dat(0x00);
smultron1977 0:246f2fb5be59 154 wr_dat(x+2); // XSTART
smultron1977 0:246f2fb5be59 155 wr_dat(0x00);
smultron1977 0:246f2fb5be59 156 wr_dat(x+2+2); // XEND
smultron1977 0:246f2fb5be59 157
smultron1977 0:246f2fb5be59 158 wr_cmd(ST7735_RASET); // row addr set
smultron1977 0:246f2fb5be59 159 wr_dat(0x00);
smultron1977 0:246f2fb5be59 160 wr_dat(y+1); // YSTART
smultron1977 0:246f2fb5be59 161 wr_dat(0x00);
smultron1977 0:246f2fb5be59 162 wr_dat(y+1+1); // YEND
smultron1977 0:246f2fb5be59 163
smultron1977 0:246f2fb5be59 164 _rs = 0; // rs low, cs low for transmitting command
smultron1977 0:246f2fb5be59 165 _cs = 0;
smultron1977 0:246f2fb5be59 166 _spi.write(0x2E);
smultron1977 0:246f2fb5be59 167 _rs = 1;
smultron1977 0:246f2fb5be59 168 _spi.write(0x00); /* Dummy read 1 */
smultron1977 0:246f2fb5be59 169
smultron1977 0:246f2fb5be59 170 val = _spi.write(0x00); /* Read D8..D15 */
smultron1977 0:246f2fb5be59 171 val <<= 8;
smultron1977 0:246f2fb5be59 172 val |= _spi.write(0x00); /* Read D0..D7 */
smultron1977 0:246f2fb5be59 173
smultron1977 0:246f2fb5be59 174 _cs = 1;
smultron1977 0:246f2fb5be59 175 return val;
smultron1977 0:246f2fb5be59 176 }
smultron1977 0:246f2fb5be59 177
smultron1977 0:246f2fb5be59 178
smultron1977 0:246f2fb5be59 179 void ST7735_TFT::tft_reset() {
smultron1977 0:246f2fb5be59 180 static unsigned short driverCode;
smultron1977 0:246f2fb5be59 181
smultron1977 0:246f2fb5be59 182 // init SPI
smultron1977 0:246f2fb5be59 183 _spi.format(8,3); // 8 bit spi mode 3
smultron1977 1:967235e6fd48 184 _spi.frequency(16000000); // 16Mhz SPI clock ... 15Mhz is maximum for display, but it seems to work
smultron1977 0:246f2fb5be59 185
smultron1977 0:246f2fb5be59 186 // reset exactly like in Arduino version
smultron1977 0:246f2fb5be59 187 _cs = 0;
smultron1977 0:246f2fb5be59 188 _reset = 1; // reset
smultron1977 0:246f2fb5be59 189 wait_ms(500);
smultron1977 0:246f2fb5be59 190 _reset = 0; // reset
smultron1977 0:246f2fb5be59 191 wait_ms(500);
smultron1977 0:246f2fb5be59 192 _reset = 1; // reset
smultron1977 0:246f2fb5be59 193 wait_ms(500);
smultron1977 0:246f2fb5be59 194
smultron1977 0:246f2fb5be59 195 /* Start Initial Sequence ----------------------------------------------------*/
smultron1977 0:246f2fb5be59 196 wr_cmd(ST7735_SWRESET); /* SW Reset */
smultron1977 0:246f2fb5be59 197 wait_ms(150);
smultron1977 0:246f2fb5be59 198 wr_cmd(ST7735_SLPOUT); /* Out of sleepmode */
smultron1977 0:246f2fb5be59 199 wait_ms(500);
smultron1977 0:246f2fb5be59 200
smultron1977 0:246f2fb5be59 201 wr_cmd(ST7735_FRMCTR1); /* Frame rate in normal mode */
smultron1977 0:246f2fb5be59 202 wr_dat(0x01);
smultron1977 0:246f2fb5be59 203 wr_dat(0x2C);
smultron1977 0:246f2fb5be59 204 wr_dat(0x2D);
smultron1977 0:246f2fb5be59 205
smultron1977 0:246f2fb5be59 206 wr_cmd(ST7735_FRMCTR2); /* Frame rate in idle mode */
smultron1977 0:246f2fb5be59 207 wr_dat(0x01);
smultron1977 0:246f2fb5be59 208 wr_dat(0x2C);
smultron1977 0:246f2fb5be59 209 wr_dat(0x2D);
smultron1977 0:246f2fb5be59 210
smultron1977 0:246f2fb5be59 211 wr_cmd(ST7735_FRMCTR3); /* Frame rate in partial mode */
smultron1977 0:246f2fb5be59 212 wr_dat(0x01);
smultron1977 0:246f2fb5be59 213 wr_dat(0x2C);
smultron1977 0:246f2fb5be59 214 wr_dat(0x2D);
smultron1977 0:246f2fb5be59 215 wr_dat(0x01); // inversion mode settings
smultron1977 0:246f2fb5be59 216 wr_dat(0x2C);
smultron1977 0:246f2fb5be59 217 wr_dat(0x2D);
smultron1977 0:246f2fb5be59 218
smultron1977 0:246f2fb5be59 219 wr_cmd(ST7735_INVCTR); // Inverted mode off
smultron1977 0:246f2fb5be59 220 wr_dat(0x07);
smultron1977 0:246f2fb5be59 221
smultron1977 0:246f2fb5be59 222 wr_cmd(ST7735_PWCTR1); // POWER CONTROL 1
smultron1977 0:246f2fb5be59 223 wr_dat(0xA2);
smultron1977 0:246f2fb5be59 224 wr_dat(0x02); // -4.6V
smultron1977 0:246f2fb5be59 225 wr_dat(0x84); // AUTO mode
smultron1977 0:246f2fb5be59 226
smultron1977 0:246f2fb5be59 227 wr_cmd(ST7735_PWCTR2); // POWER CONTROL 2
smultron1977 0:246f2fb5be59 228 wr_dat(0xC5); // VGH25 = 2.4C VGSEL =-10 VGH = 3*AVDD
smultron1977 0:246f2fb5be59 229
smultron1977 0:246f2fb5be59 230 wr_cmd(ST7735_PWCTR3); // POWER CONTROL 3
smultron1977 0:246f2fb5be59 231 wr_dat(0x0A); // Opamp current small
smultron1977 0:246f2fb5be59 232 wr_dat(0x00); // Boost freq
smultron1977 0:246f2fb5be59 233
smultron1977 0:246f2fb5be59 234 wr_cmd(ST7735_PWCTR4); // POWER CONTROL 4
smultron1977 0:246f2fb5be59 235 wr_dat(0x8A); // BCLK/2, Opamp current small / medium low
smultron1977 0:246f2fb5be59 236 wr_dat(0x2A); //
smultron1977 0:246f2fb5be59 237
smultron1977 0:246f2fb5be59 238 wr_cmd(ST7735_PWCTR5); // POWER CONTROL 5
smultron1977 0:246f2fb5be59 239 wr_dat(0x8A); // BCLK/2, Opamp current small / medium low
smultron1977 0:246f2fb5be59 240 wr_dat(0xEE); //
smultron1977 0:246f2fb5be59 241
smultron1977 0:246f2fb5be59 242 wr_cmd(ST7735_VMCTR1); // POWER CONTROL 6
smultron1977 0:246f2fb5be59 243 wr_dat(0x0E); //
smultron1977 0:246f2fb5be59 244
smultron1977 0:246f2fb5be59 245 wr_cmd(ST7735_INVOFF); // INVOFF
smultron1977 0:246f2fb5be59 246
smultron1977 0:246f2fb5be59 247 wr_cmd(ST7735_MADCTL); // ORIENTATION
smultron1977 0:246f2fb5be59 248 wr_dat(0xC8); //
smultron1977 0:246f2fb5be59 249
smultron1977 0:246f2fb5be59 250 wr_cmd(ST7735_COLMOD); // COLOR MODE
smultron1977 0:246f2fb5be59 251 wr_dat(0x05); //
smultron1977 0:246f2fb5be59 252
smultron1977 0:246f2fb5be59 253 wr_cmd(ST7735_CASET); // COLUMN ADDR SET
smultron1977 0:246f2fb5be59 254 wr_dat(0x00); //
smultron1977 0:246f2fb5be59 255 wr_dat(0x00); // xstart = 0
smultron1977 0:246f2fb5be59 256 wr_dat(0x00); //
smultron1977 0:246f2fb5be59 257 wr_dat(0x7F); // xend = 127
smultron1977 0:246f2fb5be59 258
smultron1977 0:246f2fb5be59 259 wr_cmd(ST7735_RASET); // ROW ADDR SET
smultron1977 0:246f2fb5be59 260 wr_dat(0x00); //
smultron1977 0:246f2fb5be59 261 wr_dat(0x00); // ystart = 0
smultron1977 0:246f2fb5be59 262 wr_dat(0x00); //
smultron1977 0:246f2fb5be59 263 wr_dat(0x9F); // yend = 159
smultron1977 0:246f2fb5be59 264
smultron1977 0:246f2fb5be59 265 /* Gamma settings -----------------------------------------------------------*/
smultron1977 0:246f2fb5be59 266
mihanada 2:7a251cc3d679 267 wr_cmd(0xE0); // GMCTRP1
mihanada 2:7a251cc3d679 268 wr_dat(0x0f);
mihanada 2:7a251cc3d679 269 wr_dat(0x1a);
mihanada 2:7a251cc3d679 270 wr_dat(0x0f);
mihanada 2:7a251cc3d679 271 wr_dat(0x18);
mihanada 2:7a251cc3d679 272 wr_dat(0x2f);
mihanada 2:7a251cc3d679 273 wr_dat(0x28);
mihanada 2:7a251cc3d679 274 wr_dat(0x20);
mihanada 2:7a251cc3d679 275 wr_dat(0x22);
mihanada 2:7a251cc3d679 276 wr_dat(0x1f);
mihanada 2:7a251cc3d679 277 wr_dat(0x1b);
mihanada 2:7a251cc3d679 278 wr_dat(0x23);
mihanada 2:7a251cc3d679 279 wr_dat(0x37);
mihanada 2:7a251cc3d679 280 wr_dat(0x00);
mihanada 2:7a251cc3d679 281 wr_dat(0x07);
mihanada 2:7a251cc3d679 282 wr_dat(0x02);
mihanada 2:7a251cc3d679 283 wr_dat(0x10);
mihanada 2:7a251cc3d679 284 wr_cmd(0xE1); // GMCTRN1
mihanada 2:7a251cc3d679 285 wr_dat(0x0f);
mihanada 2:7a251cc3d679 286 wr_dat(0x1b);
mihanada 2:7a251cc3d679 287 wr_dat(0x0f);
mihanada 2:7a251cc3d679 288 wr_dat(0x17);
mihanada 2:7a251cc3d679 289 wr_dat(0x33);
mihanada 2:7a251cc3d679 290 wr_dat(0x2c);
mihanada 2:7a251cc3d679 291 wr_dat(0x29);
mihanada 2:7a251cc3d679 292 wr_dat(0x2e);
mihanada 2:7a251cc3d679 293 wr_dat(0x30);
mihanada 2:7a251cc3d679 294 wr_dat(0x30);
mihanada 2:7a251cc3d679 295 wr_dat(0x39);
mihanada 2:7a251cc3d679 296 wr_dat(0x3f);
mihanada 2:7a251cc3d679 297 wr_dat(0x00);
mihanada 2:7a251cc3d679 298 wr_dat(0x07);
mihanada 2:7a251cc3d679 299 wr_dat(0x03);
mihanada 2:7a251cc3d679 300 wr_dat(0x10);
mihanada 2:7a251cc3d679 301
mihanada 2:7a251cc3d679 302 /*
smultron1977 0:246f2fb5be59 303 wr_cmd(0xE0); // GMCTRP1
smultron1977 0:246f2fb5be59 304 wr_dat(0x02);
smultron1977 0:246f2fb5be59 305 wr_dat(0x1c);
smultron1977 0:246f2fb5be59 306 wr_dat(0x07);
smultron1977 0:246f2fb5be59 307 wr_dat(0x12);
smultron1977 0:246f2fb5be59 308 wr_dat(0x37);
smultron1977 0:246f2fb5be59 309 wr_dat(0x32);
smultron1977 0:246f2fb5be59 310 wr_dat(0x29);
smultron1977 0:246f2fb5be59 311 wr_dat(0x2d);
smultron1977 0:246f2fb5be59 312 wr_dat(0x29);
smultron1977 0:246f2fb5be59 313 wr_dat(0x25);
smultron1977 0:246f2fb5be59 314 wr_dat(0x2B);
smultron1977 0:246f2fb5be59 315 wr_dat(0x39);
smultron1977 0:246f2fb5be59 316 wr_dat(0x00);
smultron1977 0:246f2fb5be59 317 wr_dat(0x01);
smultron1977 0:246f2fb5be59 318 wr_dat(0x03);
smultron1977 0:246f2fb5be59 319 wr_dat(0x10);
smultron1977 0:246f2fb5be59 320 wr_cmd(0xE1); // GMCTRN1
smultron1977 0:246f2fb5be59 321 wr_dat(0x03);
smultron1977 0:246f2fb5be59 322 wr_dat(0x1d);
smultron1977 0:246f2fb5be59 323 wr_dat(0x07);
smultron1977 0:246f2fb5be59 324 wr_dat(0x06);
smultron1977 0:246f2fb5be59 325 wr_dat(0x2E);
smultron1977 0:246f2fb5be59 326 wr_dat(0x2C);
smultron1977 0:246f2fb5be59 327 wr_dat(0x29);
smultron1977 0:246f2fb5be59 328 wr_dat(0x2D);
smultron1977 0:246f2fb5be59 329 wr_dat(0x2E);
smultron1977 0:246f2fb5be59 330 wr_dat(0x2E);
smultron1977 0:246f2fb5be59 331 wr_dat(0x37);
smultron1977 0:246f2fb5be59 332 wr_dat(0x3F);
smultron1977 0:246f2fb5be59 333 wr_dat(0x00);
smultron1977 0:246f2fb5be59 334 wr_dat(0x00);
smultron1977 0:246f2fb5be59 335 wr_dat(0x02);
smultron1977 0:246f2fb5be59 336 wr_dat(0x10);
mihanada 2:7a251cc3d679 337 */
mihanada 2:7a251cc3d679 338
smultron1977 0:246f2fb5be59 339
smultron1977 0:246f2fb5be59 340 wr_cmd(ST7735_DISPON); // display ON
smultron1977 0:246f2fb5be59 341 wait_ms(100);
smultron1977 0:246f2fb5be59 342
smultron1977 0:246f2fb5be59 343 wr_cmd(ST7735_NORON); // normal display on
smultron1977 0:246f2fb5be59 344 wait_ms(10);
smultron1977 0:246f2fb5be59 345
smultron1977 0:246f2fb5be59 346 switch (orientation) {
smultron1977 0:246f2fb5be59 347 case 0:
mihanada 2:7a251cc3d679 348 // wr_reg(0xC8, 0x0008);
smultron1977 0:246f2fb5be59 349 wr_reg(0xC8, 0x0008);
smultron1977 0:246f2fb5be59 350 break;
smultron1977 0:246f2fb5be59 351 case 1:
mihanada 2:7a251cc3d679 352 // wr_reg(0xC8, 0x0068);
smultron1977 0:246f2fb5be59 353 wr_reg(0xC8, 0x0068);
smultron1977 0:246f2fb5be59 354 break;
smultron1977 0:246f2fb5be59 355 case 2:
mihanada 2:7a251cc3d679 356 // wr_reg(0xC8, 0x00C8);
smultron1977 0:246f2fb5be59 357 wr_reg(0xC8, 0x00C8);
smultron1977 0:246f2fb5be59 358 break;
smultron1977 0:246f2fb5be59 359 case 3:
mihanada 2:7a251cc3d679 360 // wr_reg(0xC8, 0x00A8);
smultron1977 0:246f2fb5be59 361 wr_reg(0xC8, 0x00A8);
smultron1977 0:246f2fb5be59 362 break;
smultron1977 0:246f2fb5be59 363 }
smultron1977 0:246f2fb5be59 364 WindowMax ();
smultron1977 0:246f2fb5be59 365 }
smultron1977 0:246f2fb5be59 366
smultron1977 0:246f2fb5be59 367
smultron1977 0:246f2fb5be59 368 void ST7735_TFT::pixel(int x, int y, int color) {
smultron1977 0:246f2fb5be59 369 if ((x >= width()) || (y >= height())) return;
smultron1977 0:246f2fb5be59 370
smultron1977 0:246f2fb5be59 371 window(x,y,x+1,y+1);
smultron1977 0:246f2fb5be59 372
smultron1977 0:246f2fb5be59 373 // setup for data
smultron1977 0:246f2fb5be59 374 _rs = 1;
smultron1977 0:246f2fb5be59 375 _cs = 0;
mihanada 2:7a251cc3d679 376 _spi.write(color >> 8);
mihanada 2:7a251cc3d679 377 _spi.write(color);
mihanada 2:7a251cc3d679 378 _cs = 1;
mihanada 2:7a251cc3d679 379
mihanada 2:7a251cc3d679 380
mihanada 2:7a251cc3d679 381
smultron1977 0:246f2fb5be59 382 }
smultron1977 0:246f2fb5be59 383
smultron1977 0:246f2fb5be59 384 void ST7735_TFT::window (unsigned int x, unsigned int y, unsigned int w, unsigned int h) {
mihanada 2:7a251cc3d679 385 /*
smultron1977 0:246f2fb5be59 386 wr_cmd(ST7735_CASET); // column addr set
smultron1977 0:246f2fb5be59 387 wr_dat(0x00);
smultron1977 0:246f2fb5be59 388 wr_dat(x+2); // XSTART
smultron1977 0:246f2fb5be59 389 wr_dat(0x00);
smultron1977 0:246f2fb5be59 390 wr_dat(x+w+1); // XEND
smultron1977 0:246f2fb5be59 391
smultron1977 0:246f2fb5be59 392 wr_cmd(ST7735_RASET); // row addr set
smultron1977 0:246f2fb5be59 393 wr_dat(0x00);
smultron1977 0:246f2fb5be59 394 wr_dat(y+1); // YSTART
smultron1977 0:246f2fb5be59 395 wr_dat(0x00);
smultron1977 0:246f2fb5be59 396 wr_dat(y+h+1); // YEND
mihanada 2:7a251cc3d679 397 */
smultron1977 0:246f2fb5be59 398
mihanada 2:7a251cc3d679 399 wr_cmd(ST7735_CASET); // column addr set
mihanada 2:7a251cc3d679 400 wr_dat(0x00);
mihanada 2:7a251cc3d679 401 wr_dat(x); // XSTART
mihanada 2:7a251cc3d679 402 wr_dat(0x00);
mihanada 2:7a251cc3d679 403 wr_dat(x+w-1); // XEND
mihanada 2:7a251cc3d679 404
mihanada 2:7a251cc3d679 405 wr_cmd(ST7735_RASET); // row addr set
mihanada 2:7a251cc3d679 406 wr_dat(0x00);
mihanada 2:7a251cc3d679 407 wr_dat(y); // YSTART
mihanada 2:7a251cc3d679 408 wr_dat(0x00);
mihanada 2:7a251cc3d679 409 wr_dat(y+h); // YEND
mihanada 2:7a251cc3d679 410
smultron1977 0:246f2fb5be59 411 wr_cmd(ST7735_RAMWR); // write to RAM
smultron1977 0:246f2fb5be59 412 }
smultron1977 0:246f2fb5be59 413
smultron1977 0:246f2fb5be59 414
smultron1977 0:246f2fb5be59 415 void ST7735_TFT::WindowMax (void) {
smultron1977 0:246f2fb5be59 416 window (0, 0, width(), height());
smultron1977 0:246f2fb5be59 417 }
smultron1977 0:246f2fb5be59 418
smultron1977 0:246f2fb5be59 419
smultron1977 0:246f2fb5be59 420 void ST7735_TFT::cls (void) {
smultron1977 0:246f2fb5be59 421 unsigned int i;
smultron1977 0:246f2fb5be59 422 WindowMax();
smultron1977 0:246f2fb5be59 423 wr_dat_start();
smultron1977 0:246f2fb5be59 424 for (i = 0; i < ( (width()+1) * (height()+3)); i++) {
mihanada 2:7a251cc3d679 425 _spi.write(_background >>8);
mihanada 2:7a251cc3d679 426 _spi.write(_background);
smultron1977 0:246f2fb5be59 427 }
smultron1977 0:246f2fb5be59 428 wr_dat_stop();
smultron1977 0:246f2fb5be59 429 }
smultron1977 0:246f2fb5be59 430
smultron1977 0:246f2fb5be59 431
smultron1977 0:246f2fb5be59 432 void ST7735_TFT::circle(int x0, int y0, int r, int color) {
smultron1977 0:246f2fb5be59 433
smultron1977 0:246f2fb5be59 434 int draw_x0, draw_y0;
smultron1977 0:246f2fb5be59 435 int draw_x1, draw_y1;
smultron1977 0:246f2fb5be59 436 int draw_x2, draw_y2;
smultron1977 0:246f2fb5be59 437 int draw_x3, draw_y3;
smultron1977 0:246f2fb5be59 438 int draw_x4, draw_y4;
smultron1977 0:246f2fb5be59 439 int draw_x5, draw_y5;
smultron1977 0:246f2fb5be59 440 int draw_x6, draw_y6;
smultron1977 0:246f2fb5be59 441 int draw_x7, draw_y7;
smultron1977 0:246f2fb5be59 442 int xx, yy;
smultron1977 0:246f2fb5be59 443 int di;
smultron1977 0:246f2fb5be59 444 WindowMax();
smultron1977 0:246f2fb5be59 445 if (r == 0) { /* no radius */
smultron1977 0:246f2fb5be59 446 return;
smultron1977 0:246f2fb5be59 447 }
smultron1977 0:246f2fb5be59 448
smultron1977 0:246f2fb5be59 449 draw_x0 = draw_x1 = x0;
smultron1977 0:246f2fb5be59 450 draw_y0 = draw_y1 = y0 + r;
smultron1977 0:246f2fb5be59 451 if (draw_y0 < height()) {
smultron1977 0:246f2fb5be59 452 pixel(draw_x0, draw_y0, color); /* 90 degree */
smultron1977 0:246f2fb5be59 453 }
smultron1977 0:246f2fb5be59 454
smultron1977 0:246f2fb5be59 455 draw_x2 = draw_x3 = x0;
smultron1977 0:246f2fb5be59 456 draw_y2 = draw_y3 = y0 - r;
smultron1977 0:246f2fb5be59 457 if (draw_y2 >= 0) {
smultron1977 0:246f2fb5be59 458 pixel(draw_x2, draw_y2, color); /* 270 degree */
smultron1977 0:246f2fb5be59 459 }
smultron1977 0:246f2fb5be59 460
smultron1977 0:246f2fb5be59 461 draw_x4 = draw_x6 = x0 + r;
smultron1977 0:246f2fb5be59 462 draw_y4 = draw_y6 = y0;
smultron1977 0:246f2fb5be59 463 if (draw_x4 < width()) {
smultron1977 0:246f2fb5be59 464 pixel(draw_x4, draw_y4, color); /* 0 degree */
smultron1977 0:246f2fb5be59 465 }
smultron1977 0:246f2fb5be59 466
smultron1977 0:246f2fb5be59 467 draw_x5 = draw_x7 = x0 - r;
smultron1977 0:246f2fb5be59 468 draw_y5 = draw_y7 = y0;
smultron1977 0:246f2fb5be59 469 if (draw_x5>=0) {
smultron1977 0:246f2fb5be59 470 pixel(draw_x5, draw_y5, color); /* 180 degree */
smultron1977 0:246f2fb5be59 471 }
smultron1977 0:246f2fb5be59 472
smultron1977 0:246f2fb5be59 473 if (r == 1) {
smultron1977 0:246f2fb5be59 474 return;
smultron1977 0:246f2fb5be59 475 }
smultron1977 0:246f2fb5be59 476
smultron1977 0:246f2fb5be59 477 di = 3 - 2*r;
smultron1977 0:246f2fb5be59 478 xx = 0;
smultron1977 0:246f2fb5be59 479 yy = r;
smultron1977 0:246f2fb5be59 480 while (xx < yy) {
smultron1977 0:246f2fb5be59 481
smultron1977 0:246f2fb5be59 482 if (di < 0) {
smultron1977 0:246f2fb5be59 483 di += 4*xx + 6;
smultron1977 0:246f2fb5be59 484 } else {
smultron1977 0:246f2fb5be59 485 di += 4*(xx - yy) + 10;
smultron1977 0:246f2fb5be59 486 yy--;
smultron1977 0:246f2fb5be59 487 draw_y0--;
smultron1977 0:246f2fb5be59 488 draw_y1--;
smultron1977 0:246f2fb5be59 489 draw_y2++;
smultron1977 0:246f2fb5be59 490 draw_y3++;
smultron1977 0:246f2fb5be59 491 draw_x4--;
smultron1977 0:246f2fb5be59 492 draw_x5++;
smultron1977 0:246f2fb5be59 493 draw_x6--;
smultron1977 0:246f2fb5be59 494 draw_x7++;
smultron1977 0:246f2fb5be59 495 }
smultron1977 0:246f2fb5be59 496 xx++;
smultron1977 0:246f2fb5be59 497 draw_x0++;
smultron1977 0:246f2fb5be59 498 draw_x1--;
smultron1977 0:246f2fb5be59 499 draw_x2++;
smultron1977 0:246f2fb5be59 500 draw_x3--;
smultron1977 0:246f2fb5be59 501 draw_y4++;
smultron1977 0:246f2fb5be59 502 draw_y5++;
smultron1977 0:246f2fb5be59 503 draw_y6--;
smultron1977 0:246f2fb5be59 504 draw_y7--;
smultron1977 0:246f2fb5be59 505
smultron1977 0:246f2fb5be59 506 if ( (draw_x0 <= width()) && (draw_y0>=0) ) {
smultron1977 0:246f2fb5be59 507 pixel(draw_x0, draw_y0, color);
smultron1977 0:246f2fb5be59 508 }
smultron1977 0:246f2fb5be59 509
smultron1977 0:246f2fb5be59 510 if ( (draw_x1 >= 0) && (draw_y1 >= 0) ) {
smultron1977 0:246f2fb5be59 511 pixel(draw_x1, draw_y1, color);
smultron1977 0:246f2fb5be59 512 }
smultron1977 0:246f2fb5be59 513
smultron1977 0:246f2fb5be59 514 if ( (draw_x2 <= width()) && (draw_y2 <= height()) ) {
smultron1977 0:246f2fb5be59 515 pixel(draw_x2, draw_y2, color);
smultron1977 0:246f2fb5be59 516 }
smultron1977 0:246f2fb5be59 517
smultron1977 0:246f2fb5be59 518 if ( (draw_x3 >=0 ) && (draw_y3 <= height()) ) {
smultron1977 0:246f2fb5be59 519 pixel(draw_x3, draw_y3, color);
smultron1977 0:246f2fb5be59 520 }
smultron1977 0:246f2fb5be59 521
smultron1977 0:246f2fb5be59 522 if ( (draw_x4 <= width()) && (draw_y4 >= 0) ) {
smultron1977 0:246f2fb5be59 523 pixel(draw_x4, draw_y4, color);
smultron1977 0:246f2fb5be59 524 }
smultron1977 0:246f2fb5be59 525
smultron1977 0:246f2fb5be59 526 if ( (draw_x5 >= 0) && (draw_y5 >= 0) ) {
smultron1977 0:246f2fb5be59 527 pixel(draw_x5, draw_y5, color);
smultron1977 0:246f2fb5be59 528 }
smultron1977 0:246f2fb5be59 529 if ( (draw_x6 <=width()) && (draw_y6 <= height()) ) {
smultron1977 0:246f2fb5be59 530 pixel(draw_x6, draw_y6, color);
smultron1977 0:246f2fb5be59 531 }
smultron1977 0:246f2fb5be59 532 if ( (draw_x7 >= 0) && (draw_y7 <= height()) ) {
smultron1977 0:246f2fb5be59 533 pixel(draw_x7, draw_y7, color);
smultron1977 0:246f2fb5be59 534 }
smultron1977 0:246f2fb5be59 535 }
smultron1977 0:246f2fb5be59 536 return;
smultron1977 0:246f2fb5be59 537 }
smultron1977 0:246f2fb5be59 538
smultron1977 0:246f2fb5be59 539 void ST7735_TFT::fillcircle(int x, int y, int r, int color) {
smultron1977 0:246f2fb5be59 540 int i;
smultron1977 0:246f2fb5be59 541 for (i = 0; i <= r; i++)
smultron1977 0:246f2fb5be59 542 circle(x,y,i,color);
smultron1977 0:246f2fb5be59 543 }
smultron1977 0:246f2fb5be59 544
smultron1977 0:246f2fb5be59 545
smultron1977 0:246f2fb5be59 546
smultron1977 0:246f2fb5be59 547 void ST7735_TFT::hline(int x0, int x1, int y, int color) {
smultron1977 0:246f2fb5be59 548 int w;
smultron1977 0:246f2fb5be59 549 w = x1 - x0 + 1;
smultron1977 0:246f2fb5be59 550 window(x0,y,w,1);
smultron1977 0:246f2fb5be59 551 wr_cmd(0x2C);
smultron1977 0:246f2fb5be59 552 wr_dat_start();
smultron1977 0:246f2fb5be59 553 for (int x=0; x<w; x++) {
mihanada 2:7a251cc3d679 554 _spi.write(color >>8);
smultron1977 0:246f2fb5be59 555 _spi.write(color);
smultron1977 0:246f2fb5be59 556 }
smultron1977 0:246f2fb5be59 557 wr_dat_stop();
smultron1977 0:246f2fb5be59 558 return;
smultron1977 0:246f2fb5be59 559 }
smultron1977 0:246f2fb5be59 560
smultron1977 0:246f2fb5be59 561
smultron1977 0:246f2fb5be59 562
smultron1977 0:246f2fb5be59 563 void ST7735_TFT::vline(int x, int y0, int y1, int color) {
smultron1977 0:246f2fb5be59 564 int h;
smultron1977 0:246f2fb5be59 565 h = y1 - y0 + 1;
smultron1977 0:246f2fb5be59 566 window(x,y0,1,h);
smultron1977 0:246f2fb5be59 567 wr_cmd(0x2C);
smultron1977 0:246f2fb5be59 568 wr_dat_start();
smultron1977 0:246f2fb5be59 569 for (int y=0; y<h; y++) {
mihanada 2:7a251cc3d679 570 _spi.write(color >>8);
smultron1977 0:246f2fb5be59 571 _spi.write(color);
smultron1977 0:246f2fb5be59 572 }
smultron1977 0:246f2fb5be59 573 wr_dat_stop();
smultron1977 0:246f2fb5be59 574 return;
smultron1977 0:246f2fb5be59 575 }
smultron1977 0:246f2fb5be59 576
smultron1977 0:246f2fb5be59 577
smultron1977 0:246f2fb5be59 578
smultron1977 0:246f2fb5be59 579 void ST7735_TFT::line(int x0, int y0, int x1, int y1, int color) {
smultron1977 0:246f2fb5be59 580 WindowMax();
smultron1977 0:246f2fb5be59 581 int dx = 0, dy = 0;
smultron1977 0:246f2fb5be59 582 int dx_sym = 0, dy_sym = 0;
smultron1977 0:246f2fb5be59 583 int dx_x2 = 0, dy_x2 = 0;
smultron1977 0:246f2fb5be59 584 int di = 0;
smultron1977 0:246f2fb5be59 585
smultron1977 0:246f2fb5be59 586 dx = x1-x0;
smultron1977 0:246f2fb5be59 587 dy = y1-y0;
smultron1977 0:246f2fb5be59 588
smultron1977 0:246f2fb5be59 589 if (dx == 0) { /* vertical line */
smultron1977 0:246f2fb5be59 590 if (y1 > y0) vline(x0,y0,y1,color);
smultron1977 0:246f2fb5be59 591 else vline(x0,y1,y0,color);
smultron1977 0:246f2fb5be59 592 return;
smultron1977 0:246f2fb5be59 593 }
smultron1977 0:246f2fb5be59 594
smultron1977 0:246f2fb5be59 595 if (dx > 0) {
smultron1977 0:246f2fb5be59 596 dx_sym = 1;
smultron1977 0:246f2fb5be59 597 } else {
smultron1977 0:246f2fb5be59 598 dx_sym = -1;
smultron1977 0:246f2fb5be59 599 }
smultron1977 0:246f2fb5be59 600 if (dy == 0) { /* horizontal line */
smultron1977 0:246f2fb5be59 601 if (x1 > x0) hline(x0,x1,y0,color);
smultron1977 0:246f2fb5be59 602 else hline(x1,x0,y0,color);
smultron1977 0:246f2fb5be59 603 return;
smultron1977 0:246f2fb5be59 604 }
smultron1977 0:246f2fb5be59 605
smultron1977 0:246f2fb5be59 606 if (dy > 0) {
smultron1977 0:246f2fb5be59 607 dy_sym = 1;
smultron1977 0:246f2fb5be59 608 } else {
smultron1977 0:246f2fb5be59 609 dy_sym = -1;
smultron1977 0:246f2fb5be59 610 }
smultron1977 0:246f2fb5be59 611
smultron1977 0:246f2fb5be59 612 dx = dx_sym*dx;
smultron1977 0:246f2fb5be59 613 dy = dy_sym*dy;
smultron1977 0:246f2fb5be59 614
smultron1977 0:246f2fb5be59 615 dx_x2 = dx*2;
smultron1977 0:246f2fb5be59 616 dy_x2 = dy*2;
smultron1977 0:246f2fb5be59 617
smultron1977 0:246f2fb5be59 618 if (dx >= dy) {
smultron1977 0:246f2fb5be59 619 di = dy_x2 - dx;
smultron1977 0:246f2fb5be59 620 while (x0 != x1) {
smultron1977 0:246f2fb5be59 621
smultron1977 0:246f2fb5be59 622 pixel(x0, y0, color);
smultron1977 0:246f2fb5be59 623 x0 += dx_sym;
smultron1977 0:246f2fb5be59 624 if (di<0) {
smultron1977 0:246f2fb5be59 625 di += dy_x2;
smultron1977 0:246f2fb5be59 626 } else {
smultron1977 0:246f2fb5be59 627 di += dy_x2 - dx_x2;
smultron1977 0:246f2fb5be59 628 y0 += dy_sym;
smultron1977 0:246f2fb5be59 629 }
smultron1977 0:246f2fb5be59 630 }
smultron1977 0:246f2fb5be59 631 pixel(x0, y0, color);
smultron1977 0:246f2fb5be59 632 } else {
smultron1977 0:246f2fb5be59 633 di = dx_x2 - dy;
smultron1977 0:246f2fb5be59 634 while (y0 != y1) {
smultron1977 0:246f2fb5be59 635 pixel(x0, y0, color);
smultron1977 0:246f2fb5be59 636 y0 += dy_sym;
smultron1977 0:246f2fb5be59 637 if (di < 0) {
smultron1977 0:246f2fb5be59 638 di += dx_x2;
smultron1977 0:246f2fb5be59 639 } else {
smultron1977 0:246f2fb5be59 640 di += dx_x2 - dy_x2;
smultron1977 0:246f2fb5be59 641 x0 += dx_sym;
smultron1977 0:246f2fb5be59 642 }
smultron1977 0:246f2fb5be59 643 }
smultron1977 0:246f2fb5be59 644 pixel(x0, y0, color);
smultron1977 0:246f2fb5be59 645 }
smultron1977 0:246f2fb5be59 646 return;
smultron1977 0:246f2fb5be59 647 }
smultron1977 0:246f2fb5be59 648
smultron1977 0:246f2fb5be59 649
smultron1977 0:246f2fb5be59 650
smultron1977 0:246f2fb5be59 651
smultron1977 0:246f2fb5be59 652 void ST7735_TFT::rect(int x0, int y0, int x1, int y1, int color) {
smultron1977 0:246f2fb5be59 653
smultron1977 0:246f2fb5be59 654 if (x1 > x0) hline(x0,x1,y0,color);
smultron1977 0:246f2fb5be59 655 else hline(x1,x0,y0,color);
smultron1977 0:246f2fb5be59 656
smultron1977 0:246f2fb5be59 657 if (y1 > y0) vline(x0,y0,y1,color);
smultron1977 0:246f2fb5be59 658 else vline(x0,y1,y0,color);
smultron1977 0:246f2fb5be59 659
smultron1977 0:246f2fb5be59 660 if (x1 > x0) hline(x0,x1,y1,color);
smultron1977 0:246f2fb5be59 661 else hline(x1,x0,y1,color);
smultron1977 0:246f2fb5be59 662
smultron1977 0:246f2fb5be59 663 if (y1 > y0) vline(x1,y0,y1,color);
smultron1977 0:246f2fb5be59 664 else vline(x1,y1,y0,color);
smultron1977 0:246f2fb5be59 665
smultron1977 0:246f2fb5be59 666 return;
smultron1977 0:246f2fb5be59 667 }
smultron1977 0:246f2fb5be59 668
smultron1977 0:246f2fb5be59 669
smultron1977 0:246f2fb5be59 670
smultron1977 0:246f2fb5be59 671 void ST7735_TFT::fillrect(int x0, int y0, int x1, int y1, int color) {
smultron1977 0:246f2fb5be59 672
smultron1977 0:246f2fb5be59 673 int h = y1 - y0 + 1;
smultron1977 0:246f2fb5be59 674 int w = x1 - x0 + 1;
smultron1977 0:246f2fb5be59 675 int pixel = h * w;
smultron1977 0:246f2fb5be59 676 window(x0,y0,w,h);
smultron1977 0:246f2fb5be59 677 wr_cmd(0x2C);
smultron1977 0:246f2fb5be59 678 wr_dat_start();
smultron1977 0:246f2fb5be59 679 for (int p=0; p<pixel; p++) {
mihanada 2:7a251cc3d679 680 _spi.write(color >>8);
smultron1977 0:246f2fb5be59 681 _spi.write(color);
smultron1977 0:246f2fb5be59 682 }
smultron1977 0:246f2fb5be59 683 wr_dat_stop();
smultron1977 0:246f2fb5be59 684 return;
smultron1977 0:246f2fb5be59 685 }
smultron1977 0:246f2fb5be59 686
smultron1977 0:246f2fb5be59 687
smultron1977 0:246f2fb5be59 688
smultron1977 0:246f2fb5be59 689 void ST7735_TFT::locate(int x, int y) {
smultron1977 0:246f2fb5be59 690 char_x = x;
smultron1977 0:246f2fb5be59 691 char_y = y;
smultron1977 0:246f2fb5be59 692 }
smultron1977 0:246f2fb5be59 693
smultron1977 0:246f2fb5be59 694
smultron1977 0:246f2fb5be59 695
smultron1977 0:246f2fb5be59 696 int ST7735_TFT::columns() {
smultron1977 0:246f2fb5be59 697 return width() / font[1];
smultron1977 0:246f2fb5be59 698 }
smultron1977 0:246f2fb5be59 699
smultron1977 0:246f2fb5be59 700
smultron1977 0:246f2fb5be59 701
smultron1977 0:246f2fb5be59 702 int ST7735_TFT::rows() {
smultron1977 0:246f2fb5be59 703 return height() / font[2];
smultron1977 0:246f2fb5be59 704 }
smultron1977 0:246f2fb5be59 705
smultron1977 0:246f2fb5be59 706
smultron1977 0:246f2fb5be59 707
smultron1977 0:246f2fb5be59 708 int ST7735_TFT::_putc(int value) {
smultron1977 0:246f2fb5be59 709 if (value == '\n') { // new line
smultron1977 0:246f2fb5be59 710 char_x = 0;
smultron1977 0:246f2fb5be59 711 char_y = char_y + font[2];
smultron1977 0:246f2fb5be59 712 if (char_y >= height() - font[2]) {
smultron1977 0:246f2fb5be59 713 char_y = 0;
smultron1977 0:246f2fb5be59 714 }
smultron1977 0:246f2fb5be59 715 } else {
smultron1977 0:246f2fb5be59 716 character(char_x, char_y, value);
smultron1977 0:246f2fb5be59 717 }
smultron1977 0:246f2fb5be59 718 return value;
smultron1977 0:246f2fb5be59 719 }
smultron1977 0:246f2fb5be59 720
smultron1977 0:246f2fb5be59 721
smultron1977 0:246f2fb5be59 722
smultron1977 0:246f2fb5be59 723
smultron1977 0:246f2fb5be59 724 void ST7735_TFT::character(int x, int y, int c) {
smultron1977 0:246f2fb5be59 725 unsigned int hor,vert,offset,bpl,j,i,b;
smultron1977 0:246f2fb5be59 726 unsigned char* zeichen;
smultron1977 0:246f2fb5be59 727 unsigned char z,w;
smultron1977 0:246f2fb5be59 728
smultron1977 0:246f2fb5be59 729 if ((c < 31) || (c > 127)) return; // test char range
smultron1977 0:246f2fb5be59 730
smultron1977 0:246f2fb5be59 731 // read font parameter from start of array
smultron1977 0:246f2fb5be59 732 offset = font[0]; // bytes / char
smultron1977 0:246f2fb5be59 733 hor = font[1]; // get hor size of font
smultron1977 0:246f2fb5be59 734 vert = font[2]; // get vert size of font
smultron1977 0:246f2fb5be59 735 bpl = font[3]; // bytes per line
smultron1977 0:246f2fb5be59 736
smultron1977 0:246f2fb5be59 737 if (char_x + hor > width()) {
smultron1977 0:246f2fb5be59 738 char_x = 0;
smultron1977 0:246f2fb5be59 739 char_y = char_y + vert;
smultron1977 0:246f2fb5be59 740 if (char_y >= height() - font[2]) {
smultron1977 0:246f2fb5be59 741 char_y = 0;
smultron1977 0:246f2fb5be59 742 }
smultron1977 0:246f2fb5be59 743 }
smultron1977 0:246f2fb5be59 744
smultron1977 0:246f2fb5be59 745 window(char_x, char_y,hor,vert); // char box
smultron1977 0:246f2fb5be59 746 wr_cmd(0x2C);
smultron1977 0:246f2fb5be59 747 wr_dat_start();
smultron1977 0:246f2fb5be59 748 zeichen = &font[((c -32) * offset) + 4]; // start of char bitmap
smultron1977 0:246f2fb5be59 749 w = zeichen[0]; // width of actual char
smultron1977 0:246f2fb5be59 750
smultron1977 0:246f2fb5be59 751 for (j=0; j<vert; j++) { // vert line
smultron1977 0:246f2fb5be59 752 for (i=0; i<hor; i++) { // horz line
smultron1977 0:246f2fb5be59 753 z = zeichen[bpl * i + ((j & 0xF8) >> 3)+1];
smultron1977 0:246f2fb5be59 754 b = 1 << (j & 0x07);
smultron1977 0:246f2fb5be59 755 if (( z & b ) == 0x00) {
mihanada 2:7a251cc3d679 756 _spi.write(_background >>8);
mihanada 2:7a251cc3d679 757 _spi.write(_background);
smultron1977 0:246f2fb5be59 758 } else {
mihanada 2:7a251cc3d679 759 _spi.write(_foreground >>8);
mihanada 2:7a251cc3d679 760 _spi.write(_foreground);
smultron1977 0:246f2fb5be59 761 }
smultron1977 0:246f2fb5be59 762 }
smultron1977 0:246f2fb5be59 763 }
smultron1977 0:246f2fb5be59 764 wr_dat_stop();
smultron1977 0:246f2fb5be59 765 if ((w + 2) < hor) { // x offset to next char
smultron1977 0:246f2fb5be59 766 char_x += w + 2;
smultron1977 0:246f2fb5be59 767 } else char_x += hor;
smultron1977 0:246f2fb5be59 768 }
smultron1977 0:246f2fb5be59 769
smultron1977 0:246f2fb5be59 770
smultron1977 0:246f2fb5be59 771
smultron1977 0:246f2fb5be59 772
smultron1977 0:246f2fb5be59 773
smultron1977 0:246f2fb5be59 774 void ST7735_TFT::set_font(unsigned char* f) {
smultron1977 0:246f2fb5be59 775 font = f;
smultron1977 0:246f2fb5be59 776 }
smultron1977 0:246f2fb5be59 777
smultron1977 0:246f2fb5be59 778
smultron1977 0:246f2fb5be59 779
smultron1977 0:246f2fb5be59 780 void ST7735_TFT::Bitmap(unsigned int x, unsigned int y, unsigned int w, unsigned int h,unsigned char *bitmap) {
smultron1977 0:246f2fb5be59 781 unsigned int i,j,value;
smultron1977 0:246f2fb5be59 782 unsigned short *bitmap_ptr = (unsigned short *)bitmap;
smultron1977 0:246f2fb5be59 783 window(x, y, w, h);
smultron1977 0:246f2fb5be59 784 wr_cmd(0x2C);
smultron1977 0:246f2fb5be59 785 wr_dat_start();
smultron1977 0:246f2fb5be59 786 for (j = 0; j < h; j++) { //Lines
smultron1977 0:246f2fb5be59 787 for (i = 0; i < w; i++) { // copy pixel data to TFT
smultron1977 0:246f2fb5be59 788 _spi.write(*bitmap_ptr); // one line
mihanada 2:7a251cc3d679 789 _spi.write(*bitmap_ptr >>8);
smultron1977 0:246f2fb5be59 790 bitmap_ptr++;
smultron1977 0:246f2fb5be59 791 }
smultron1977 0:246f2fb5be59 792 }
smultron1977 0:246f2fb5be59 793 wr_dat_stop();
smultron1977 0:246f2fb5be59 794 }
smultron1977 0:246f2fb5be59 795
mihanada 2:7a251cc3d679 796 /*
smultron1977 0:246f2fb5be59 797 int ST7735_TFT::BMP_16(unsigned int x, unsigned int y, const char *Name_BMP) {
smultron1977 0:246f2fb5be59 798 // BEWARE !
smultron1977 0:246f2fb5be59 799 // NOT TESTED
smultron1977 0:246f2fb5be59 800 #define OffsetPixelWidth 18
smultron1977 0:246f2fb5be59 801 #define OffsetPixelHeigh 22
smultron1977 0:246f2fb5be59 802 #define OffsetFileSize 34
smultron1977 0:246f2fb5be59 803 #define OffsetPixData 10
smultron1977 0:246f2fb5be59 804 #define OffsetBPP 28
smultron1977 0:246f2fb5be59 805
smultron1977 0:246f2fb5be59 806 char filename[50];
smultron1977 0:246f2fb5be59 807 unsigned char BMP_Header[54];
smultron1977 0:246f2fb5be59 808 unsigned short BPP_t;
smultron1977 0:246f2fb5be59 809 unsigned int PixelWidth,PixelHeigh,start_data;
smultron1977 0:246f2fb5be59 810 unsigned int i,off;
smultron1977 0:246f2fb5be59 811 int padd,j;
smultron1977 0:246f2fb5be59 812 unsigned short *line;
smultron1977 0:246f2fb5be59 813
smultron1977 0:246f2fb5be59 814 // get the filename
smultron1977 0:246f2fb5be59 815 LocalFileSystem local("local");
smultron1977 0:246f2fb5be59 816 sprintf(&filename[0],"/local/");
smultron1977 0:246f2fb5be59 817 i=7;
smultron1977 0:246f2fb5be59 818 while (*Name_BMP!='\0') {
smultron1977 0:246f2fb5be59 819 filename[i++]=*Name_BMP++;
smultron1977 0:246f2fb5be59 820 }
smultron1977 0:246f2fb5be59 821 FILE *Image = fopen((const char *)&filename[0], "r"); // open the bmp file
smultron1977 0:246f2fb5be59 822 if (!Image) {
smultron1977 0:246f2fb5be59 823 return(0); // error file not found !
smultron1977 0:246f2fb5be59 824 }
smultron1977 0:246f2fb5be59 825
smultron1977 0:246f2fb5be59 826 fread(&BMP_Header[0],1,54,Image); // get the BMP Header
smultron1977 0:246f2fb5be59 827
smultron1977 0:246f2fb5be59 828 if (BMP_Header[0] != 0x42 || BMP_Header[1] != 0x4D) { // check magic byte
smultron1977 0:246f2fb5be59 829 fclose(Image);
smultron1977 0:246f2fb5be59 830 return(-1); // error no BMP file
smultron1977 0:246f2fb5be59 831 }
smultron1977 0:246f2fb5be59 832
smultron1977 0:246f2fb5be59 833 BPP_t = BMP_Header[OffsetBPP] + (BMP_Header[OffsetBPP + 1] << 8);
smultron1977 0:246f2fb5be59 834 if (BPP_t != 0x0010) {
smultron1977 0:246f2fb5be59 835 fclose(Image);
smultron1977 0:246f2fb5be59 836 return(-2); // error no 16 bit BMP
smultron1977 0:246f2fb5be59 837 }
smultron1977 0:246f2fb5be59 838
smultron1977 0:246f2fb5be59 839 PixelHeigh = BMP_Header[OffsetPixelHeigh] + (BMP_Header[OffsetPixelHeigh + 1] << 8) + (BMP_Header[OffsetPixelHeigh + 2] << 16) + (BMP_Header[OffsetPixelHeigh + 3] << 24);
smultron1977 0:246f2fb5be59 840 PixelWidth = BMP_Header[OffsetPixelWidth] + (BMP_Header[OffsetPixelWidth + 1] << 8) + (BMP_Header[OffsetPixelWidth + 2] << 16) + (BMP_Header[OffsetPixelWidth + 3] << 24);
smultron1977 0:246f2fb5be59 841 if (PixelHeigh > height() + y || PixelWidth > width() + x) {
smultron1977 0:246f2fb5be59 842 fclose(Image);
smultron1977 0:246f2fb5be59 843 return(-3); // to big
smultron1977 0:246f2fb5be59 844 }
smultron1977 0:246f2fb5be59 845
smultron1977 0:246f2fb5be59 846 start_data = BMP_Header[OffsetPixData] + (BMP_Header[OffsetPixData + 1] << 8) + (BMP_Header[OffsetPixData + 2] << 16) + (BMP_Header[OffsetPixData + 3] << 24);
smultron1977 0:246f2fb5be59 847
smultron1977 0:246f2fb5be59 848 line = (unsigned short *) malloc (PixelWidth); // we need a buffer for a line
smultron1977 0:246f2fb5be59 849 if (line == NULL) {
smultron1977 0:246f2fb5be59 850 return(-4); // error no memory
smultron1977 0:246f2fb5be59 851 }
smultron1977 0:246f2fb5be59 852
smultron1977 0:246f2fb5be59 853 // the lines are padded to multiple of 4 bytes
smultron1977 0:246f2fb5be59 854 padd = -1;
smultron1977 0:246f2fb5be59 855 do {
smultron1977 0:246f2fb5be59 856 padd ++;
smultron1977 0:246f2fb5be59 857 } while ((PixelWidth * 2 + padd)%4 != 0);
smultron1977 0:246f2fb5be59 858
smultron1977 0:246f2fb5be59 859 window(x, y,PixelWidth,PixelHeigh);
smultron1977 0:246f2fb5be59 860 wr_cmd(0x2C);
smultron1977 0:246f2fb5be59 861 wr_dat_start();
smultron1977 0:246f2fb5be59 862 _spi.format(16,3);
smultron1977 0:246f2fb5be59 863 for (j = PixelHeigh - 1; j >= 0; j--) { //Lines bottom up
smultron1977 0:246f2fb5be59 864 off = j * (PixelWidth * 2 + padd) + start_data; // start of line
smultron1977 0:246f2fb5be59 865 fseek(Image, off ,SEEK_SET);
smultron1977 0:246f2fb5be59 866 fread(line,1,PixelWidth * 2,Image); // read a line - slow !
smultron1977 0:246f2fb5be59 867 for (i = 0; i < PixelWidth; i++) { // copy pixel data to TFT
smultron1977 0:246f2fb5be59 868 _spi.write(line[i]); // one 16 bit pixel
smultron1977 0:246f2fb5be59 869 }
smultron1977 0:246f2fb5be59 870 }
smultron1977 0:246f2fb5be59 871 _spi.format(8,3);
smultron1977 0:246f2fb5be59 872 wr_dat_stop();
smultron1977 0:246f2fb5be59 873 free (line);
smultron1977 0:246f2fb5be59 874 fclose(Image);
smultron1977 0:246f2fb5be59 875 return(1);
mihanada 2:7a251cc3d679 876 }
mihanada 2:7a251cc3d679 877 */
mihanada 2:7a251cc3d679 878