Monday, October 31, 2016

ST7735 1.8" TFT display with PIC16F877A example


Interfacing PIC16F877A with ST7735 1.8" SPI TFT Color Display
PIC16F877A microcontroller with ST7735 1.8" SPI TFT display 
After interfacing 1.8" TFT display with PIC18F4550 microcontroller at the link below, now let's see how to make the same interfacing of this SPI TFT display with PIC16F877A microcontroller.
Interfacing PIC18F4550 with 1.8" TFT display
For this project we need a CCS C compiler library for the ST7735 TFT display which can be found in the link below with some descriptions:
ST7735 SPI TFT Display Driver for CCS PIC C compiler
Or you can just download it directly from the following link:
ST7735 SPI TFT Display Driver
Put the downloaded C file in your project folder.
Required Components:
  • PIC16F877A Microcontroller
  • ST7735R (or ST7735S) 1.8" SPI TFT Display
  • 8MHz Crystal oscillator
  • 2 x 22pF Capacitors
  • 10K Resistor
  • 5 x 1K Resistors (If the system is 3.3V there is no need for these resistors)
  • Power Supply Source (+5V or +3.3V)
  • Breadboard
  • Jumper Wires
Interfacing ST7735 1.8" TFT display with PIC16F877A circuit:
Interfacing PIC16F877A with ST7735S SPI TFT display circuit
The system power supply is 5V and if you are using a microcontroller TFT display of 3.3V remove all the 1K resistors (5 resistors) from the circuit and connect the TFT display directly to the microcontroller.
The microcontroller runs with 8MHz crystal oscillator, if you want to get better result (fast) use a crystal with higher frequency up to 20MHz.
ST7735 1.8" TFT display with PIC16F877A example CCS C code:
PIC16F877A hardware SPI module is used to send data to the TFT display. SPI module uses the following pins:
SDI (RC4): data input pin (not used in this project)
SCK (RC3): clock line
SDO (RC5): data output
// TFT module connections
#define TFT_CS   PIN_D1
#define TFT_DC   PIN_D0

#define TFT_SPI_HARDWARE
 // End TFT module connections
My TFT display is ST7735R Black Tap (ST7735S) and for initializing this type of TFT display I used the following line:
TFT_BlackTab_Initialize();
If you have a TFT display with green or red tabs or a TFT with ST7735B controller read the driver topic above.
Note that green, red and black tabs have the same controller ST7735R.
fillScreen(ST7735_BLACK);              // Fill all the screen with black
The following line means that the TFT willl display a text called txt starting from coordinates (0, 30) with red color, black background and size 1.
drawtext(0, 30, txt, ST7735_RED, ST7735_BLACK, 1);
The following line will display a white straight horizontal line starting from coordinates (0, 53).
drawFastHLine(0, 53,  _width,  ST7735_WHITE);
This code is tested with CCS PIC C compiler PCWHD versions 4 and 5.
// PIC16F877A and ST7735 1.8" SPI color TFT display example CCS C code
// ST7735 TFT display driver for CCS PIC C compiler is required
// http: //ccspicc.blogspot.com/
// electronnote@gmail.com

// TFT module connections
#define TFT_CS   PIN_D1
#define TFT_DC   PIN_D0
#define TFT_SPI_HARDWARE
// End TFT module connections

#include <16F877A.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP                       
#use delay(clock = 8000000)
#include <ST7735_TFT.c>

int8 k = 0;
char *txt = "1.8 Inch ST7735 TFT  display test example";
void testlines(unsigned int16 color) {
  unsigned int8 x, y;
  fillScreen(ST7735_BLACK);
  for (x=0; x < _width; x+=6) {
    drawLine(0, 0, x, _height-1, color);
  }
  for (y=0; y < _height; y+=6) {
    drawLine(0, 0, _width-1, y, color);
  }

  fillScreen(ST7735_BLACK);
  for (x=0; x < _width; x+=6) {
    drawLine(_width-1, 0, x, _height-1, color);
  }
  for (y=0; y < _height; y+=6) {
    drawLine(_width-1, 0, 0, y, color);
  }

  fillScreen(ST7735_BLACK);
  for (x=0; x < _width; x+=6) {
    drawLine(0, _height-1, x, 0, color);
  }
  for (y=0; y < _height; y+=6) {
    drawLine(0, _height-1, _width-1, y, color);
  }

  fillScreen(ST7735_BLACK);
  for (x=0; x < _width; x+=6) {
    drawLine(_width-1, _height-1, x, 0, color);
  }
  for (y=0; y < _height; y+=6) {
    drawLine(_width-1, _height-1, 0, y, color);
  }
}
void testfastlines(unsigned int16 color1, unsigned int16 color2) {
  int16 x, y;
  fillScreen(ST7735_BLACK);
  for (y = 0; y < _height; y += 5) {
    drawFastHLine(0, y, _width, color1);
  }
  for (x = 0; x < _width; x += 5) {
    drawFastVLine(x, 0, _height, color2);
  }
}
void testdrawrects(unsigned int16 color) {
  int16 x;
  fillScreen(ST7735_BLACK);
  for (x = 0; x < _width; x+=6) {
    drawRect(_width/2 -x/2, _height/2 -x/2 , x, x, color);
  }
}
void testfillrects(unsigned int16 color1, unsigned int16 color2) {
  int16 x;
  fillScreen(ST7735_BLACK);
  for (x = _width - 1; x > 6; x -= 6) {
    fillRect(_width/2 -x/2, _height/2 -x/2 , x, x, color1);
    drawRect(_width/2 -x/2, _height/2 -x/2 , x, x, color2);
  }
}
void testfillcircles(unsigned int8 radius, unsigned int16 color) {
  int16 x, y;
  for (x = radius; x < _width; x += radius * 2) {
    for (y = radius; y < _height; y += radius * 2) {
      fillCircle(x, y, radius, color);
    }
  }
}
void testdrawcircles(unsigned int8 radius, unsigned int16 color) {
  int16 x, y;
  for (x = 0; x < _width + radius; x += radius * 2) {
    for (y = 0; y < _height + radius; y += radius * 2) {
      drawCircle(x, y, radius, color);
    }
  }
}
void testroundrects() {
  int8 i, t;
  unsigned int16 color = 100;
  fillScreen(ST7735_BLACK);
  for(t = 0 ; t <= 4; t += 1) {
    unsigned int8 x = 0, y = 0, w = _width - 2, h = _height - 2;
    for(i = 0 ; i <= 16; i++) {
      drawRoundRect(x, y, w, h, 5, color);
      x += 2;
      y += 3;
      w -= 4;
      h -= 6;
      color += 1100;
    }
    color += 100;
  }
}
void testtriangles() {
  unsigned int8 t, w, x, y, z;
  unsigned int16 color = 0xF800;
  fillScreen(ST7735_BLACK);
  w = _width/2, x = _height - 1, y = 0, z = _width;
  for(t = 0 ; t <= 15; t++) {
    drawTriangle(w, y, y, x, z, x, color);
    x -= 4;
    y += 4;
    z -= 4;
    color += 100;
  }
}
void mediabuttons() {
  // play
  fillScreen(ST7735_BLACK);
  fillRoundRect(25, 10, 78, 60, 8, ST7735_WHITE);
  fillTriangle(42, 20, 42, 60, 90, 40, ST7735_RED);
  delay_ms(500);
  // pause
  fillRoundRect(25, 90, 78, 60, 8, ST7735_WHITE);
  fillRoundRect(39, 98, 20, 45, 5, ST7735_GREEN);
  fillRoundRect(69, 98, 20, 45, 5, ST7735_GREEN);
  delay_ms(500);
  // play color
  fillTriangle(42, 20, 42, 60, 90, 40, ST7735_BLUE);
  delay_ms(50);
  // pause color
  fillRoundRect(39, 98, 20, 45, 5, ST7735_RED);
  fillRoundRect(69, 98, 20, 45, 5, ST7735_RED);
  // play color
  fillTriangle(42, 20, 42, 60, 90, 40, ST7735_GREEN);
}
void main(){
  TFT_BlackTab_Initialize();
  fillScreen(ST7735_BLACK);
  drawtext(0, 5, txt, ST7735_WHITE, ST7735_BLACK, 1);
  setTextWrap(false);
  strcpy (txt, "Hello World!");
  drawtext(0, 30, txt, ST7735_RED, ST7735_BLACK, 1);
  drawtext(0, 47, txt, ST7735_YELLOW, ST7735_BLACK, 2);
  drawtext(0, 80, txt, ST7735_MAGENTA, ST7735_BLACK, 3);
  drawtext(0, 120, txt, ST7735_CYAN, ST7735_BLACK, 4);
  delay_ms(5000);
  fillScreen(ST7735_BLACK);
  drawFastHLine(0, 53, _width,  ST7735_WHITE);
  drawFastHLine(0, 106, _width, ST7735_WHITE);
  while(k++ < 20){
    sprintf(txt,"%02u",k);
    drawtext(59, 25, txt,  ST7735_GREEN, ST7735_BLACK, 1);
    drawtext(54, 75, txt,  ST7735_BLUE,  ST7735_BLACK, 2);
    drawtext(49, 125, txt, ST7735_RED,  ST7735_BLACK, 3);
    delay_ms(500);
  }
  testlines(ST7735_YELLOW);
  delay_ms(1000);
  testfastlines(ST7735_RED, ST7735_BLUE);
  delay_ms(1000);
  testdrawrects(ST7735_GREEN);
  delay_ms(1000);
  testfillrects(ST7735_YELLOW, ST7735_MAGENTA);
  delay_ms(1000);
  fillScreen(ST7735_BLACK);
  testfillcircles(10, ST7735_BLUE);
  testdrawcircles(10, ST7735_WHITE);
  delay_ms(1000);
  testroundrects();
  delay_ms(1000);
  testtriangles();
  delay_ms(1000);
  mediabuttons();
  delay_ms(1000);
  while(TRUE){
    invertDisplay(true);
    delay_ms(500);
    invertDisplay(false);
    delay_ms(500);
  }
}
ST7735 1.8" TFT display with PIC16F877A example video:
Simple hardware circuit of this example.


Interfacing PIC18F4550 with 1.8" TFT display



Interfacing PIC18F4550 with ST7735S 1.8" SPI TFT Color Display
This post shows how to connect ST7735S TFT display to PIC18F4550 microcontroller and display different things (numbers, text, lines, circles .....). The compiler used is CCS PIC C.
To interface PIC18F4550 with the ST7735 TFT display we need a small library (driver) which can be downloaded from its original post at the following url:
ST7735 SPI TFT Display Driver for CCS PIC C compiler
Or you can just download it directly from the following link:
ST7735 SPI TFT Display Driver
Put the downloaded C file in your project folder.
Required Components:
  • PIC18F4550 Microcontroller
  • ST7735R (or S) 1.8" SPI TFT Display
  • 5 x 1K Resistors (If the system is 3.3V there is no need for these resistors)
  • Power Supply Source (+5V or +3.3V)
  • Breadboard
  • Jumper Wires
Interfacing PIC18F4550 with ST7735S 1.8" SPI TFT display circuit:
Interfacing PIC18F4550 with ST7735 1.8" SPI TFT display
PIC18F4550 internal oscillator is used in this project and MCLR pin function is disabled.
The system power supply is 5V and if you are using a microcontroller TFT display of 3.3V remove all the 1K resistors (5 resistors) from the circuit and connect the TFT display directly to the microcontroller.
Interfacing PIC18F4550 with ST7735S 1.8" SPI TFT display CCS C code:
PIC18F4550 SPI module is used for to communicate with the TFT display. SPI module uses the following pins:
SDI (RB0): data input pin (not used in this project)
SCK (RB1): clock line
SDO (RC7): data output
// TFT module connections
#define TFT_CS  PIN_B2
#define TFT_DC  PIN_B3
#define TFT_SPI_HARDWARE
// End TFT module connections

My TFT display is ST7735R Black Tap (ST7735S) and for initializing this type of TFT display I used the following line:
TFT_BlackTab_Initialize();
If you have a TFT display with green or red tabs or a TFT with ST7735B controller read the driver topic above.
Note that green, red and black tabs have the same controller ST7735R.
The microcontroller runs with its internal oscillator at 8MHz.
This code is tested with CCS PIC C compiler PCWHD versions 4 and 5.
// PIC18F4550 ST7735 1.8" SPI TFT display example CCS C code
// ST7735 TFT display driver for CCS PIC C compiler is required
// http://ccspicc.blogspot.com/
// electronnote@gmail.com

// TFT module connections
#define TFT_CS  PIN_B2
#define TFT_DC  PIN_B3
#define TFT_SPI_HARDWARE
// End TFT module connections

#include <18F4550.h>
#fuses NOMCLR INTRC_IO
#use delay(clock = 8000000)
#include <ST7735_TFT.c>

int8 k = 0;
char *txt = "1.8 Inch ST7735 TFT  display test example";
void testlines(unsigned int16 color) {
  unsigned int8 x, y;
  fillScreen(ST7735_BLACK);
  for (x=0; x < _width; x+=6) {
    drawLine(0, 0, x, _height-1, color);
  }
  for (y=0; y < _height; y+=6) {
    drawLine(0, 0, _width-1, y, color);
  }

  fillScreen(ST7735_BLACK);
  for (x=0; x < _width; x+=6) {
    drawLine(_width-1, 0, x, _height-1, color);
  }
  for (y=0; y < _height; y+=6) {
    drawLine(_width-1, 0, 0, y, color);
  }

  fillScreen(ST7735_BLACK);
  for (x=0; x < _width; x+=6) {
    drawLine(0, _height-1, x, 0, color);
  }
  for (y=0; y < _height; y+=6) {
    drawLine(0, _height-1, _width-1, y, color);
  }

  fillScreen(ST7735_BLACK);
  for (x=0; x < _width; x+=6) {
    drawLine(_width-1, _height-1, x, 0, color);
  }
  for (y=0; y < _height; y+=6) {
    drawLine(_width-1, _height-1, 0, y, color);
  }
}
void testfastlines(unsigned int16 color1, unsigned int16 color2) {
  int16 x, y;
  fillScreen(ST7735_BLACK);
  for (y = 0; y < _height; y += 5) {
    drawFastHLine(0, y, _width, color1);
  }
  for (x = 0; x < _width; x += 5) {
    drawFastVLine(x, 0, _height, color2);
  }
}
void testdrawrects(unsigned int16 color) {
  int16 x;
  fillScreen(ST7735_BLACK);
  for (x = 0; x < _width; x+=6) {
    drawRect(_width/2 -x/2, _height/2 -x/2 , x, x, color);
  }
}
void testfillrects(unsigned int16 color1, unsigned int16 color2) {
  int16 x;
  fillScreen(ST7735_BLACK);
  for (x = _width - 1; x > 6; x -= 6) {
    fillRect(_width/2 -x/2, _height/2 -x/2 , x, x, color1);
    drawRect(_width/2 -x/2, _height/2 -x/2 , x, x, color2);
  }
}
void testfillcircles(unsigned int8 radius, unsigned int16 color) {
  int16 x, y;
  for (x = radius; x < _width; x += radius * 2) {
    for (y = radius; y < _height; y += radius * 2) {
      fillCircle(x, y, radius, color);
    }
  }
}
void testdrawcircles(unsigned int8 radius, unsigned int16 color) {
  int16 x, y;
  for (x = 0; x < _width + radius; x += radius * 2) {
    for (y = 0; y < _height + radius; y += radius * 2) {
      drawCircle(x, y, radius, color);
    }
  }
}
void testroundrects() {
  int8 i, t;
  unsigned int16 color = 100;
  fillScreen(ST7735_BLACK);
  for(t = 0 ; t <= 4; t += 1) {
    unsigned int8 x = 0, y = 0, w = _width - 2, h = _height - 2;
    for(i = 0 ; i <= 16; i++) {
      drawRoundRect(x, y, w, h, 5, color);
      x += 2;
      y += 3;
      w -= 4;
      h -= 6;
      color += 1100;
    }
    color += 100;
  }
}
void testtriangles() {
  unsigned int8 t, w, x, y, z;
  unsigned int16 color = 0xF800;
  fillScreen(ST7735_BLACK);
  w = _width/2, x = _height - 1, y = 0, z = _width;
  for(t = 0 ; t <= 15; t++) {
    drawTriangle(w, y, y, x, z, x, color);
    x -= 4;
    y += 4;
    z -= 4;
    color += 100;
  }
}
void mediabuttons() {
  // play
  fillScreen(ST7735_BLACK);
  fillRoundRect(25, 10, 78, 60, 8, ST7735_WHITE);
  fillTriangle(42, 20, 42, 60, 90, 40, ST7735_RED);
  delay_ms(500);
  // pause
  fillRoundRect(25, 90, 78, 60, 8, ST7735_WHITE);
  fillRoundRect(39, 98, 20, 45, 5, ST7735_GREEN);
  fillRoundRect(69, 98, 20, 45, 5, ST7735_GREEN);
  delay_ms(500);
  // play color
  fillTriangle(42, 20, 42, 60, 90, 40, ST7735_BLUE);
  delay_ms(50);
  // pause color
  fillRoundRect(39, 98, 20, 45, 5, ST7735_RED);
  fillRoundRect(69, 98, 20, 45, 5, ST7735_RED);
  // play color
  fillTriangle(42, 20, 42, 60, 90, 40, ST7735_GREEN);
}
void main(){
  setup_oscillator(OSC_8MHZ);                         // Set internal oscillator to 8MHz
  setup_adc_ports(NO_ANALOGS);                        // Configure AN pins as digital
  TFT_BlackTab_Initialize();
  fillScreen(ST7735_BLACK);
  drawtext(0, 5, txt, ST7735_WHITE, ST7735_BLACK, 1);
  setTextWrap(false);
  strcpy (txt, "Hello World!");
  drawtext(0, 30, txt, ST7735_RED, ST7735_BLACK, 1);
  drawtext(0, 47, txt, ST7735_YELLOW, ST7735_BLACK, 2);
  drawtext(0, 80, txt, ST7735_MAGENTA, ST7735_BLACK, 3);
  drawtext(0, 120, txt, ST7735_CYAN, ST7735_BLACK, 4);
  delay_ms(5000);
  fillScreen(ST7735_BLACK);
  drawFastHLine(0, 53, _width,  ST7735_WHITE);
  drawFastHLine(0, 106, _width, ST7735_WHITE);
  while(k++ < 20){
    sprintf(txt,"%02u",k);
    drawtext(59, 25, txt,  ST7735_GREEN, ST7735_BLACK, 1);
    drawtext(54, 75, txt,  ST7735_BLUE,  ST7735_BLACK, 2);
    drawtext(49, 125, txt, ST7735_RED,  ST7735_BLACK, 3);
    delay_ms(500);
  }
  testlines(ST7735_YELLOW);
  delay_ms(1000);
  testfastlines(ST7735_RED, ST7735_BLUE);
  delay_ms(1000);
  testdrawrects(ST7735_GREEN);
  delay_ms(1000);
  testfillrects(ST7735_YELLOW, ST7735_MAGENTA);
  delay_ms(1000);
  fillScreen(ST7735_BLACK);
  testfillcircles(10, ST7735_BLUE);
  testdrawcircles(10, ST7735_WHITE);
  delay_ms(1000);
  testroundrects();
  delay_ms(1000);
  testtriangles();
  delay_ms(1000);
  mediabuttons();
  delay_ms(1000);
  while(TRUE){
    invertDisplay(true);
    delay_ms(500);
    invertDisplay(false);
    delay_ms(500);
  }
}
Some images from my home made circuit:
PIC18F4550 microcontroller with ST7735R TFT BlackTap (ST7735S)
PIC18F4550 microcontroller with ST7735R SPI TFT BlackTap (ST7735S)
Interfacing PIC18F4550 with ST7735S 1.8" SPI TFT display video:
Project video ....

ST7735 SPI TFT Display Driver for CCS PIC C compiler



ST7735 SPI TFT Display Library for CCS PIC C compiler
The ST7735 SPI TFT library allows the interfacing of this display with any PIC microcontroller more simpler and easier. This library is based on the Adafruit TFT library for Arduino. This library works with any PIC microcontroller with or without SPI module (hardware SPI is faster than software SPI).
Basically the TFT display has 5 control lines:  RST (Reset, active low), CS (Chip Select, active low), DC (Data/Command), SDA (Data Line) and SCL (Clock Line).
Using ST7735 SPI TFT Library:
The ST7735 SPI TFT library can work with hardware SPI or software. The hardware SPI is much faster than the software SPI. If you want to use your microcontroller hardware SPI module the following variables must be defined:
#define TFT_CS
#define TFT_DC
#define TFT_SPI_HARDWARE

And if you want to use software SPI define the following parameters:
#define TFT_CS
#define TFT_DC
#define TFT_CLK
#define TFT_DATA
 
 
Examples:
The following ST7735 SPI TFT display is connected to microcontroller hardware SPI module pins:
#define TFT_CS   PIN_D1
#define TFT_DC   PIN_D0

#define TFT_SPI_HARDWARE

The following ST7735 SPI TFT is connected to the microcontroller where software SPI is used:
#define TFT_CS   PIN_D1
#define TFT_DC   PIN_D0
#define TFT_CLK  PIN_D2
#define TFT_DATA PIN_D3

Library Routines:
Generally there are 4 types of the ST7735 TFT display. One has ST7735B controller and the other 3 types are:
ST7735R Green Tab
ST7735R Red Tab
ST7735R Black Tab (ST7735S)
As for a simple LCD display the TFT display has an initialization sequence which can be made using the following functions according to the TFT display type:
TFT_ST7735B_Initialize();                 // For ST7735B
TFT_GreenTab_Initialize();               // For ST7735R green tab
TFT_RedTab_Initialize();                   // For ST7735R red tab
TFT_BlackTab_Initialize();                // For ST7735R black tab (ST7735S)
The other functions are:
drawPixel(unsigned int8 x, unsigned int8 y, unsigned int16 color);
fillRectangle(unsigned int8 x, unsigned int8 y, unsigned int8 w, unsigned int8 h, unsigned int16 color);
fillScreen(unsigned int16 color);
drawFastVLine(unsigned int8 x, unsigned int8 y, unsigned int8 h, unsigned int16 color);
drawFastHLine(unsigned int8 x, unsigned int8 y, unsigned int8 h, unsigned int16 color);
drawCircle(signed int16 x0, signed int16 y0, signed int16 r, unsigned int16 color);
drawCircleHelper(signed int16 x0, signed int16 y0, signed int16 r, unsigned int8 cornername, unsigned int16 color);
fillCircleHelper(signed int16 x0, signed int16 y0, signed int16 r, unsigned int8 cornername, signed int16 delta, unsigned int16 color);
fillCircle(signed int16 x0, signed int16 y0, signed int16 r, unsigned int16 color);
drawRect(unsigned int8 x, unsigned int8 y, unsigned int8 w, unsigned int8 h, unsigned int16 color);
fillRect(unsigned int8 x, unsigned int8 y, unsigned int8 w, unsigned int8 h, unsigned int16 color);
drawLine(signed int16 x0, signed int16 y0, signed int16 x1, signed int16 y1, unsigned int16 color);
drawRoundRect(unsigned int8 x, unsigned int8 y, unsigned int8 w, unsigned int8 h, unsigned int8 r, unsigned int16 color);
fillRoundRect(unsigned int8 x, unsigned int8 y, unsigned int8 w, unsigned int8 h, unsigned int8 r, unsigned int16 color);
drawTriangle(signed int16 x0, signed int16 y0, signed int16 x1, signed int16 y1, signed int16 x2, signed int16 y2, unsigned int16 color);
fillTriangle(signed int16 x0, signed int16 y0, signed int16 x1, signed int16 y1, signed int16 x2, signed int16 y2, unsigned int16 color);
drawChar(unsigned int8 x, unsigned int8 y, unsigned int16 c, unsigned int16 color, unsigned int16 bg,  unsigned int8 size);
setTextWrap(int1 w);
drawtext(unsigned int8 x, unsigned int8 y, char *_text, unsigned int16 color, unsigned int16 bg, unsigned int8 size);
invertDisplay(int1 i);
setScrollDefinition(unsigned int8 top_fix_height, unsigned int8 bottom_fix_height, int1 _scroll_direction);
VerticalScroll(unsigned int8 _vsp);
NormalDisplay();
bmpDraw(int8 x, int8 y, int8 *bmpname);
Colors:
The following colors are defined in the library.
ST7735_BLACK
ST7735_BLUE
ST7735_RED
ST7735_GREEN
ST7735_CYAN
ST7735_MAGENTA
ST7735_YELLOW

ST7735_WHITE
Routines description:
fillScreen: fills the whole screen with a given color.
drawFastVLine: draws a vertical line starting at (x,y) with height h.
drawFastHLine: draws a horizontal line starting at (x,y) with width w.
drawCircle: draws a circle where (x0,y0) are center coordinates an r is circle radius.
drawRect: draws rectangle at (x,y) where h is height and w is width of the rectangle.
fillRect: fills a rectangle starting from coordinates (x,y) with width of w and height of h.
drawLine: draws a line from (x0,y0) to (x1,y1).
drawRoundRect: draws a rectangle with rounded edges. h: height, w:width, r: radius of the rounded edges.
drawTriangle: draws a triangle of coordinates (x0,y0), (x1,y1) and (x2,y2).
drawChar: writes a char (c) on the TFT at coordinates (x, y). size: char size.
drawText: Writes text (*text) on the TFT at coordinates (x, y). size: text size.
setTextWrap: turn on or off wrap of the text (TRUE of FALSE).
invertDisplay: invert display colors (TRUE of FALSE).
setScrollDefinition: This command defines the Vertical Scrolling Area of the display where:
top_fix_height: describes the Top Fixed Area,
bottom_fix_height: describes the Bottom Fixed Area and
_scroll_direction: is scroll direction (0 for top to bottom and 1 for bottom to top).
VerticalScroll: This command is used together with the last command. These two commands describe the scrolling area and the scrolling mode.
NormalDisplay(): returns the TFT display to its normal state for example exit from scrolling mode.
bmpDraw: draws predefined BMP image from MMC/SD card. This function requires MMC/SD card driver and FAT file system library. This function also requires the definition:
#define   DRAW_BMP_FROM_MMCSD_CARD
ST7735 SPI TFT Display Driver for CCS PIC C compiler download (Last Update: August 2017):
Updates:
August 2017: Added draw BMP images from MMC/SD card.
November 2016: added vertical scrolling.
The driver C file can be downloaded from the following url.
Put the C file in the CCS C driver folder of just in the project folder.
ST7735 SPI TFT Display Driver

Examples:
Some of the ST7735 SPI TFT library examples.
PIC12F1822 and ST7735 SPI TFT Example
Interfacing PIC18F4550 with 1.8" TFT display
ST7735 1.8" TFT display with PIC16F877A example