This library can be used to control a low-cost Adafruit 358 TFT display. It has basic functionality but is a starting point for others trying to control this type of display using the FRDM-K64F.

Committer:
bmazzeo
Date:
Thu Aug 07 03:17:21 2014 +0000
Revision:
1:cd3c7c2e2746
Parent:
0:7cb96171f886
A few updates to clean up the code before publishing.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bmazzeo 0:7cb96171f886 1 /* Display library for Adafruit 358 TFT display written for the FRDM-K64F
bmazzeo 0:7cb96171f886 2 *
bmazzeo 0:7cb96171f886 3 * Copyright (c) 2014 Brian Mazzeo
bmazzeo 0:7cb96171f886 4 * Released under the MIT License: http://mbed.org/license/mit
bmazzeo 0:7cb96171f886 5 *
bmazzeo 0:7cb96171f886 6 * This 1.8" display has 128x160 color pixels
bmazzeo 0:7cb96171f886 7 */
bmazzeo 0:7cb96171f886 8
bmazzeo 0:7cb96171f886 9 #include "mbed.h"
bmazzeo 0:7cb96171f886 10 #include "Adafruit_358.h"
bmazzeo 0:7cb96171f886 11
bmazzeo 0:7cb96171f886 12
bmazzeo 0:7cb96171f886 13 //Constructor
bmazzeo 0:7cb96171f886 14 Adafruit_358::Adafruit_358(PinName MOSI, PinName MISO, PinName SCLK, PinName CS, PinName RESET, PinName DC, const char *name)
bmazzeo 0:7cb96171f886 15 : GraphicsDisplay(name), _spi(MOSI, MISO, SCLK), _cs(CS), _reset(RESET), _dc(DC)
bmazzeo 0:7cb96171f886 16 {
bmazzeo 0:7cb96171f886 17 char_x = 0;
bmazzeo 0:7cb96171f886 18 char_y = 0;
bmazzeo 0:7cb96171f886 19 screen_reset();
bmazzeo 0:7cb96171f886 20 }
bmazzeo 0:7cb96171f886 21
bmazzeo 0:7cb96171f886 22 int Adafruit_358::width()
bmazzeo 0:7cb96171f886 23 {
bmazzeo 0:7cb96171f886 24 return 128;
bmazzeo 0:7cb96171f886 25 }
bmazzeo 0:7cb96171f886 26
bmazzeo 0:7cb96171f886 27 int Adafruit_358::height()
bmazzeo 0:7cb96171f886 28 {
bmazzeo 0:7cb96171f886 29 return 160;
bmazzeo 0:7cb96171f886 30 }
bmazzeo 0:7cb96171f886 31
bmazzeo 0:7cb96171f886 32
bmazzeo 0:7cb96171f886 33 void Adafruit_358::wr_cmd(unsigned char cmd)
bmazzeo 0:7cb96171f886 34 {
bmazzeo 0:7cb96171f886 35 _dc = 0;
bmazzeo 0:7cb96171f886 36 _cs = 0;
bmazzeo 0:7cb96171f886 37 _spi.write(cmd);
bmazzeo 0:7cb96171f886 38 _dc = 1;
bmazzeo 0:7cb96171f886 39 };
bmazzeo 0:7cb96171f886 40
bmazzeo 0:7cb96171f886 41
bmazzeo 0:7cb96171f886 42 void Adafruit_358::screen_reset()
bmazzeo 0:7cb96171f886 43 {
bmazzeo 0:7cb96171f886 44 _spi.format(8,3);
bmazzeo 0:7cb96171f886 45 _spi.frequency(10000000);
bmazzeo 0:7cb96171f886 46 _cs = 1;
bmazzeo 0:7cb96171f886 47 _dc = 1;
bmazzeo 0:7cb96171f886 48
bmazzeo 0:7cb96171f886 49 _reset = 1; // Reset the display
bmazzeo 0:7cb96171f886 50 wait_us(500);
bmazzeo 0:7cb96171f886 51 _reset = 0;
bmazzeo 0:7cb96171f886 52 wait_us(500);
bmazzeo 0:7cb96171f886 53 _reset = 1;
bmazzeo 0:7cb96171f886 54
bmazzeo 0:7cb96171f886 55 wait_ms(5);
bmazzeo 0:7cb96171f886 56
bmazzeo 0:7cb96171f886 57 wr_cmd(ST7735_SWRESET); // SW reset
bmazzeo 0:7cb96171f886 58 wait_ms(150);
bmazzeo 0:7cb96171f886 59
bmazzeo 0:7cb96171f886 60 wr_cmd(ST7735_SLPOUT); // Sleep off
bmazzeo 0:7cb96171f886 61 wait_ms(255);
bmazzeo 0:7cb96171f886 62
bmazzeo 0:7cb96171f886 63 wr_cmd(ST7735_FRMCTR1); // Frame rate control
bmazzeo 0:7cb96171f886 64 _spi.write(0x01);
bmazzeo 0:7cb96171f886 65 _spi.write(0x2C);
bmazzeo 0:7cb96171f886 66 _spi.write(0x2D);
bmazzeo 0:7cb96171f886 67
bmazzeo 0:7cb96171f886 68 wr_cmd(ST7735_FRMCTR2);
bmazzeo 0:7cb96171f886 69 _spi.write(0x01);
bmazzeo 0:7cb96171f886 70 _spi.write(0x2C);
bmazzeo 0:7cb96171f886 71 _spi.write(0x2D);
bmazzeo 0:7cb96171f886 72
bmazzeo 0:7cb96171f886 73 wr_cmd(ST7735_FRMCTR3);
bmazzeo 0:7cb96171f886 74 _spi.write(0x01);
bmazzeo 0:7cb96171f886 75 _spi.write(0x2C);
bmazzeo 0:7cb96171f886 76 _spi.write(0x2D);
bmazzeo 0:7cb96171f886 77 _spi.write(0x01);
bmazzeo 0:7cb96171f886 78 _spi.write(0x2C);
bmazzeo 0:7cb96171f886 79 _spi.write(0x2D);
bmazzeo 0:7cb96171f886 80
bmazzeo 0:7cb96171f886 81 wr_cmd(ST7735_INVCTR);
bmazzeo 0:7cb96171f886 82 _spi.write(0x07);
bmazzeo 0:7cb96171f886 83
bmazzeo 0:7cb96171f886 84 wr_cmd(ST7735_PWCTR1);
bmazzeo 0:7cb96171f886 85 _spi.write(0xA2);
bmazzeo 0:7cb96171f886 86 _spi.write(0x02);
bmazzeo 0:7cb96171f886 87 _spi.write(0x84);
bmazzeo 0:7cb96171f886 88
bmazzeo 0:7cb96171f886 89 wr_cmd(ST7735_PWCTR2);
bmazzeo 0:7cb96171f886 90 _spi.write(0xC5);
bmazzeo 0:7cb96171f886 91
bmazzeo 0:7cb96171f886 92 wr_cmd(ST7735_PWCTR3);
bmazzeo 0:7cb96171f886 93 _spi.write(0x0A);
bmazzeo 0:7cb96171f886 94 _spi.write(0x00);
bmazzeo 0:7cb96171f886 95
bmazzeo 0:7cb96171f886 96 wr_cmd(ST7735_PWCTR4);
bmazzeo 0:7cb96171f886 97 _spi.write(0x8A);
bmazzeo 0:7cb96171f886 98 _spi.write(0x2A);
bmazzeo 0:7cb96171f886 99
bmazzeo 0:7cb96171f886 100 wr_cmd(ST7735_PWCTR5);
bmazzeo 0:7cb96171f886 101 _spi.write(0x8A);
bmazzeo 0:7cb96171f886 102 _spi.write(0xEE);
bmazzeo 0:7cb96171f886 103
bmazzeo 0:7cb96171f886 104 wr_cmd(ST7735_VMCTR1);
bmazzeo 0:7cb96171f886 105 _spi.write(0x0E);
bmazzeo 0:7cb96171f886 106
bmazzeo 0:7cb96171f886 107 wr_cmd(ST7735_INVOFF);
bmazzeo 0:7cb96171f886 108
bmazzeo 0:7cb96171f886 109 wr_cmd(ST7735_MADCTL); // Memory access control (directions)
bmazzeo 0:7cb96171f886 110 _spi.write(0xC8); // row addr/col adddr, bottom to top refresh
bmazzeo 0:7cb96171f886 111
bmazzeo 0:7cb96171f886 112 wr_cmd(ST7735_COLMOD); // Color mode
bmazzeo 0:7cb96171f886 113 _spi.write(0x05); // 16 bit color
bmazzeo 0:7cb96171f886 114
bmazzeo 0:7cb96171f886 115 wr_cmd(ST7735_CASET); // Column address set
bmazzeo 0:7cb96171f886 116 _spi.write(0x00);
bmazzeo 0:7cb96171f886 117 _spi.write(0x02);
bmazzeo 0:7cb96171f886 118 _spi.write(0x00);
bmazzeo 0:7cb96171f886 119 _spi.write(0x7F+0x02);
bmazzeo 0:7cb96171f886 120
bmazzeo 0:7cb96171f886 121 wr_cmd(ST7735_RASET); // Row address set
bmazzeo 0:7cb96171f886 122 _spi.write(0x00);
bmazzeo 0:7cb96171f886 123 _spi.write(0x01);
bmazzeo 0:7cb96171f886 124 _spi.write(0x00);
bmazzeo 0:7cb96171f886 125 _spi.write(0x9F+0x01);
bmazzeo 0:7cb96171f886 126
bmazzeo 0:7cb96171f886 127 wr_cmd(ST7735_NORON); // Normal display on
bmazzeo 0:7cb96171f886 128 wait_ms(10);
bmazzeo 0:7cb96171f886 129
bmazzeo 0:7cb96171f886 130 wr_cmd(ST7735_DISPON); // Main screen turn on
bmazzeo 0:7cb96171f886 131 wait_ms(100);
bmazzeo 0:7cb96171f886 132 }
bmazzeo 0:7cb96171f886 133
bmazzeo 0:7cb96171f886 134 void Adafruit_358::pixel(int x, int y, int color)
bmazzeo 0:7cb96171f886 135 {
bmazzeo 0:7cb96171f886 136 wr_cmd(0x2A);
bmazzeo 0:7cb96171f886 137 _spi.write(x >> 8);
bmazzeo 0:7cb96171f886 138 _spi.write(x);
bmazzeo 0:7cb96171f886 139 _cs = 1;
bmazzeo 0:7cb96171f886 140 wr_cmd(0x2B);
bmazzeo 0:7cb96171f886 141 _spi.write(y >> 8);
bmazzeo 0:7cb96171f886 142 _spi.write(y);
bmazzeo 0:7cb96171f886 143 _cs = 1;
bmazzeo 0:7cb96171f886 144 wr_cmd(0x2C);
bmazzeo 0:7cb96171f886 145 _spi.write(color >> 8);
bmazzeo 0:7cb96171f886 146 _spi.write(color & 0xff);
bmazzeo 0:7cb96171f886 147 _cs = 1;
bmazzeo 0:7cb96171f886 148 }
bmazzeo 0:7cb96171f886 149
bmazzeo 0:7cb96171f886 150 void Adafruit_358::WindowMax (void)
bmazzeo 0:7cb96171f886 151 {
bmazzeo 0:7cb96171f886 152 window (0, 0, width(), height());
bmazzeo 0:7cb96171f886 153 }
bmazzeo 0:7cb96171f886 154
bmazzeo 0:7cb96171f886 155 void Adafruit_358::cls() {
bmazzeo 0:7cb96171f886 156 fillrect(0, 0, width(), height(), _background);
bmazzeo 0:7cb96171f886 157 }
bmazzeo 0:7cb96171f886 158
bmazzeo 0:7cb96171f886 159
bmazzeo 0:7cb96171f886 160 void Adafruit_358::set_font(unsigned char* f)
bmazzeo 0:7cb96171f886 161 {
bmazzeo 0:7cb96171f886 162 font = f;
bmazzeo 0:7cb96171f886 163 }
bmazzeo 0:7cb96171f886 164
bmazzeo 0:7cb96171f886 165 void Adafruit_358::fillrect(int x0, int y0, int x1, int y1, uint16_t color)
bmazzeo 0:7cb96171f886 166 {
bmazzeo 0:7cb96171f886 167 for (int x_coord = x0; x_coord <= x1; x_coord++) {
bmazzeo 0:7cb96171f886 168 for (int y_coord = y0; y_coord <= y1; y_coord++) {
bmazzeo 0:7cb96171f886 169 pixel(x_coord, y_coord, color);
bmazzeo 0:7cb96171f886 170 }
bmazzeo 0:7cb96171f886 171 }
bmazzeo 0:7cb96171f886 172 }