Fork of the Adafruit ST7735R library targeted to the 1.44" TFT with custom high speed monochrome and color drawing routines. Note that this library includes modifications to use a shared SPI module to simplify projects that use the SPI for several peripherals. Read the WIKI to see how to get this library working in your own project.

Fork of Adafruit_ST7735 by Andrew Lindsay

This library is a modification of Andrew Lindsay's ST7735 Adafruit library. It includes custom bitmap drawing routines that work around 15 times faster when using custom byte arrays generated by my png to char array converter.

For more info look to the detailed post explaining the changes and where you can download the converter binaries as well: http://alfredoer.com/microcontrollers-2/adafruit-image-bitmap-generator/

IMPORTANT: One of the main modifications is that this library does not instantiate an SPI object directly, rather it is meant to use a shared SPI object exported in a "board.h" file elsewhere in your project.

The contents of such a file can be something like:

ifndef BOARD_H_

  1. define BOARD_H_
  1. include <mbed.h>
  2. include <rtos.h> extern Mutex spi_mutex; extern SPI spi_port;
  1. endif

And of course, the objects should be instantiated somewhere (like in board.c) like this (for a KL25z, modify as needed):

mosi, miso, sck Mutex spi_mutex; SPI spi_port( PTD2, PTD3, PTD1);

The rationale is that several modules can use the hardware SPI port on several threads and coexist happily with each other.

Committer:
SomeRandomBloke
Date:
Tue Mar 26 23:09:06 2013 +0000
Revision:
0:99ee879ef5a9
Child:
3:38c4a70421f0
new commit;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
SomeRandomBloke 0:99ee879ef5a9 1 /***************************************************
SomeRandomBloke 0:99ee879ef5a9 2 This is a library for the Adafruit 1.8" SPI display.
SomeRandomBloke 0:99ee879ef5a9 3 This library works with the Adafruit 1.8" TFT Breakout w/SD card
SomeRandomBloke 0:99ee879ef5a9 4 ----> http://www.adafruit.com/products/358
SomeRandomBloke 0:99ee879ef5a9 5 as well as Adafruit raw 1.8" TFT display
SomeRandomBloke 0:99ee879ef5a9 6 ----> http://www.adafruit.com/products/618
SomeRandomBloke 0:99ee879ef5a9 7
SomeRandomBloke 0:99ee879ef5a9 8 Check out the links above for our tutorials and wiring diagrams
SomeRandomBloke 0:99ee879ef5a9 9 These displays use SPI to communicate, 4 or 5 pins are required to
SomeRandomBloke 0:99ee879ef5a9 10 interface (RST is optional)
SomeRandomBloke 0:99ee879ef5a9 11 Adafruit invests time and resources providing this open source code,
SomeRandomBloke 0:99ee879ef5a9 12 please support Adafruit and open-source hardware by purchasing
SomeRandomBloke 0:99ee879ef5a9 13 products from Adafruit!
SomeRandomBloke 0:99ee879ef5a9 14
SomeRandomBloke 0:99ee879ef5a9 15 Written by Limor Fried/Ladyada for Adafruit Industries.
SomeRandomBloke 0:99ee879ef5a9 16 MIT license, all text above must be included in any redistribution
SomeRandomBloke 0:99ee879ef5a9 17 ****************************************************/
SomeRandomBloke 0:99ee879ef5a9 18
SomeRandomBloke 0:99ee879ef5a9 19 #ifndef _ADAFRUIT_ST7735H_
SomeRandomBloke 0:99ee879ef5a9 20 #define _ADAFRUIT_ST7735H_
SomeRandomBloke 0:99ee879ef5a9 21
SomeRandomBloke 0:99ee879ef5a9 22 #include "mbed.h"
SomeRandomBloke 0:99ee879ef5a9 23 #include "Adafruit_GFX.h"
SomeRandomBloke 0:99ee879ef5a9 24
SomeRandomBloke 0:99ee879ef5a9 25 #define boolean bool
SomeRandomBloke 0:99ee879ef5a9 26
SomeRandomBloke 0:99ee879ef5a9 27 // some flags for initR() :(
SomeRandomBloke 0:99ee879ef5a9 28 #define INITR_GREENTAB 0x0
SomeRandomBloke 0:99ee879ef5a9 29 #define INITR_REDTAB 0x1
SomeRandomBloke 0:99ee879ef5a9 30
SomeRandomBloke 0:99ee879ef5a9 31 #define ST7735_TFTWIDTH 128
SomeRandomBloke 0:99ee879ef5a9 32 #define ST7735_TFTHEIGHT 160
SomeRandomBloke 0:99ee879ef5a9 33
SomeRandomBloke 0:99ee879ef5a9 34 #define ST7735_NOP 0x00
SomeRandomBloke 0:99ee879ef5a9 35 #define ST7735_SWRESET 0x01
SomeRandomBloke 0:99ee879ef5a9 36 #define ST7735_RDDID 0x04
SomeRandomBloke 0:99ee879ef5a9 37 #define ST7735_RDDST 0x09
SomeRandomBloke 0:99ee879ef5a9 38
SomeRandomBloke 0:99ee879ef5a9 39 #define ST7735_SLPIN 0x10
SomeRandomBloke 0:99ee879ef5a9 40 #define ST7735_SLPOUT 0x11
SomeRandomBloke 0:99ee879ef5a9 41 #define ST7735_PTLON 0x12
SomeRandomBloke 0:99ee879ef5a9 42 #define ST7735_NORON 0x13
SomeRandomBloke 0:99ee879ef5a9 43
SomeRandomBloke 0:99ee879ef5a9 44 #define ST7735_INVOFF 0x20
SomeRandomBloke 0:99ee879ef5a9 45 #define ST7735_INVON 0x21
SomeRandomBloke 0:99ee879ef5a9 46 #define ST7735_DISPOFF 0x28
SomeRandomBloke 0:99ee879ef5a9 47 #define ST7735_DISPON 0x29
SomeRandomBloke 0:99ee879ef5a9 48 #define ST7735_CASET 0x2A
SomeRandomBloke 0:99ee879ef5a9 49 #define ST7735_RASET 0x2B
SomeRandomBloke 0:99ee879ef5a9 50 #define ST7735_RAMWR 0x2C
SomeRandomBloke 0:99ee879ef5a9 51 #define ST7735_RAMRD 0x2E
SomeRandomBloke 0:99ee879ef5a9 52
SomeRandomBloke 0:99ee879ef5a9 53 #define ST7735_PTLAR 0x30
SomeRandomBloke 0:99ee879ef5a9 54 #define ST7735_COLMOD 0x3A
SomeRandomBloke 0:99ee879ef5a9 55 #define ST7735_MADCTL 0x36
SomeRandomBloke 0:99ee879ef5a9 56
SomeRandomBloke 0:99ee879ef5a9 57 #define ST7735_FRMCTR1 0xB1
SomeRandomBloke 0:99ee879ef5a9 58 #define ST7735_FRMCTR2 0xB2
SomeRandomBloke 0:99ee879ef5a9 59 #define ST7735_FRMCTR3 0xB3
SomeRandomBloke 0:99ee879ef5a9 60 #define ST7735_INVCTR 0xB4
SomeRandomBloke 0:99ee879ef5a9 61 #define ST7735_DISSET5 0xB6
SomeRandomBloke 0:99ee879ef5a9 62
SomeRandomBloke 0:99ee879ef5a9 63 #define ST7735_PWCTR1 0xC0
SomeRandomBloke 0:99ee879ef5a9 64 #define ST7735_PWCTR2 0xC1
SomeRandomBloke 0:99ee879ef5a9 65 #define ST7735_PWCTR3 0xC2
SomeRandomBloke 0:99ee879ef5a9 66 #define ST7735_PWCTR4 0xC3
SomeRandomBloke 0:99ee879ef5a9 67 #define ST7735_PWCTR5 0xC4
SomeRandomBloke 0:99ee879ef5a9 68 #define ST7735_VMCTR1 0xC5
SomeRandomBloke 0:99ee879ef5a9 69
SomeRandomBloke 0:99ee879ef5a9 70 #define ST7735_RDID1 0xDA
SomeRandomBloke 0:99ee879ef5a9 71 #define ST7735_RDID2 0xDB
SomeRandomBloke 0:99ee879ef5a9 72 #define ST7735_RDID3 0xDC
SomeRandomBloke 0:99ee879ef5a9 73 #define ST7735_RDID4 0xDD
SomeRandomBloke 0:99ee879ef5a9 74
SomeRandomBloke 0:99ee879ef5a9 75 #define ST7735_PWCTR6 0xFC
SomeRandomBloke 0:99ee879ef5a9 76
SomeRandomBloke 0:99ee879ef5a9 77 #define ST7735_GMCTRP1 0xE0
SomeRandomBloke 0:99ee879ef5a9 78 #define ST7735_GMCTRN1 0xE1
SomeRandomBloke 0:99ee879ef5a9 79
SomeRandomBloke 0:99ee879ef5a9 80 // Color definitions
SomeRandomBloke 0:99ee879ef5a9 81 #define ST7735_BLACK 0x0000
SomeRandomBloke 0:99ee879ef5a9 82 #define ST7735_BLUE 0x001F
SomeRandomBloke 0:99ee879ef5a9 83 #define ST7735_RED 0xF800
SomeRandomBloke 0:99ee879ef5a9 84 #define ST7735_GREEN 0x07E0
SomeRandomBloke 0:99ee879ef5a9 85 #define ST7735_CYAN 0x07FF
SomeRandomBloke 0:99ee879ef5a9 86 #define ST7735_MAGENTA 0xF81F
SomeRandomBloke 0:99ee879ef5a9 87 #define ST7735_YELLOW 0xFFE0
SomeRandomBloke 0:99ee879ef5a9 88 #define ST7735_WHITE 0xFFFF
SomeRandomBloke 0:99ee879ef5a9 89
SomeRandomBloke 0:99ee879ef5a9 90
SomeRandomBloke 0:99ee879ef5a9 91 class Adafruit_ST7735 : public Adafruit_GFX {
SomeRandomBloke 0:99ee879ef5a9 92
SomeRandomBloke 0:99ee879ef5a9 93 public:
SomeRandomBloke 0:99ee879ef5a9 94
SomeRandomBloke 0:99ee879ef5a9 95 Adafruit_ST7735(PinName mosi, PinName miso, PinName sck, PinName CS, PinName RS, PinName RST);
SomeRandomBloke 0:99ee879ef5a9 96
SomeRandomBloke 0:99ee879ef5a9 97 void initB(void); // for ST7735B displays
SomeRandomBloke 0:99ee879ef5a9 98 void initR(uint8_t options = INITR_GREENTAB); // for ST7735R
SomeRandomBloke 0:99ee879ef5a9 99 void setAddrWindow(uint8_t x0, uint8_t y0, uint8_t x1, uint8_t y1);
SomeRandomBloke 0:99ee879ef5a9 100 void pushColor(uint16_t color);
SomeRandomBloke 0:99ee879ef5a9 101
SomeRandomBloke 0:99ee879ef5a9 102 void fillScreen(uint16_t color);
SomeRandomBloke 0:99ee879ef5a9 103 void drawPixel(int16_t x, int16_t y, uint16_t color);
SomeRandomBloke 0:99ee879ef5a9 104 void drawFastVLine(int16_t x, int16_t y, int16_t h, uint16_t color);
SomeRandomBloke 0:99ee879ef5a9 105 void drawFastHLine(int16_t x, int16_t y, int16_t w, uint16_t color);
SomeRandomBloke 0:99ee879ef5a9 106 void fillRect(int16_t x, int16_t y, int16_t w, int16_t h, uint16_t color);
SomeRandomBloke 0:99ee879ef5a9 107 void invertDisplay(boolean i);
SomeRandomBloke 0:99ee879ef5a9 108
SomeRandomBloke 0:99ee879ef5a9 109 void setRotation(uint8_t r);
SomeRandomBloke 0:99ee879ef5a9 110 uint16_t Color565(uint8_t r, uint8_t g, uint8_t b);
SomeRandomBloke 0:99ee879ef5a9 111
SomeRandomBloke 0:99ee879ef5a9 112 private:
SomeRandomBloke 0:99ee879ef5a9 113
SomeRandomBloke 0:99ee879ef5a9 114 void spiwrite(uint8_t),
SomeRandomBloke 0:99ee879ef5a9 115 writecommand(uint8_t c),
SomeRandomBloke 0:99ee879ef5a9 116 writedata(uint8_t d),
SomeRandomBloke 0:99ee879ef5a9 117 commandList(uint8_t *addr),
SomeRandomBloke 0:99ee879ef5a9 118 commonInit(uint8_t *cmdList);
SomeRandomBloke 0:99ee879ef5a9 119
SomeRandomBloke 0:99ee879ef5a9 120 uint8_t colstart, rowstart; // some displays need this changed
SomeRandomBloke 0:99ee879ef5a9 121
SomeRandomBloke 0:99ee879ef5a9 122 SPI lcdPort; // does SPI MOSI, MISO and SCK
SomeRandomBloke 0:99ee879ef5a9 123 DigitalOut _cs; // does SPI CE
SomeRandomBloke 0:99ee879ef5a9 124 DigitalOut _rs; // register/date select
SomeRandomBloke 0:99ee879ef5a9 125 DigitalOut _rst; // does 3310 LCD_RST
SomeRandomBloke 0:99ee879ef5a9 126 };
SomeRandomBloke 0:99ee879ef5a9 127
SomeRandomBloke 0:99ee879ef5a9 128 #endif