//************************************************************************************
//**  
//**  File name:     C:\Users\owner\Desktop\18F46K80\TFT_LCD\Flowcode1.c
//**  Title:         
//**  Description:   
//**  
//**  Generated by:  Flowcode v5.4.0.0
//**  Date:          Monday, October 22, 2012 16:58:43
//**  Licence:       Professional
//**  Registered to: Kermann/Sefi
//**  Licence key:   UPMA7X
//**  
//**  
//**  http://www.matrixmultimedia.com
//**  
//************************************************************************************


#define MX_PIC

#define MX_USES_UINT8 1
#define MX_USES_SINT16 0
#define MX_USES_CHAR 0
#define MX_USES_FLOAT 0
#define MX_USES_SINT32 0
#define MX_USES_BOOL 1
#define MX_USES_UINT16 1
#define MX_USES_UINT32 0
//Defines for microcontroller
#define P18F46K80
#define FC_CAL_PIC
#define MX_ADC
#define MX_ADC_TYPE_21
#define MX_ADC_BITS_12
#define MX_EE
#define MX_EE_TYPE3
#define MX_EE_SIZE 1024
#define MX_SPI_1
#define MX_SPI_1_MISO_PORT portc
#define MX_SPI_1_MISO_TRIS trisc
#define MX_SPI_1_MISO_PIN 4
#define MX_SPI_1_MOSI_PORT portc
#define MX_SPI_1_MOSI_TRIS trisc
#define MX_SPI_1_MOSI_PIN 5
#define MX_SPI_1_CLK_PORT portc
#define MX_SPI_1_CLK_TRIS trisc
#define MX_SPI_1_CLK_PIN 3
#define MX_SPI_1_SS_PORT porta
#define MX_SPI_1_SS_TRIS trisa
#define MX_SPI_1_SS_PIN 5
#define MX_UART_1
#define MX_UART_1_TX_PORT portc
#define MX_UART_1_TX_TRIS trisc
#define MX_UART_1_TX_PIN 6
#define MX_UART_1_RX_PORT portc
#define MX_UART_1_RX_TRIS trisc
#define MX_UART_1_RX_PIN 7
#define MX_UART_2
#define MX_UART_2_TX_PORT portd
#define MX_UART_2_TX_TRIS trisd
#define MX_UART_2_TX_PIN 6
#define MX_UART_2_RX_PORT portd
#define MX_UART_2_RX_TRIS trisd
#define MX_UART_2_RX_PIN 7
#define MX_I2C
#define MX_MI2C
#define MX_I2C_1
#define MX_I2C_1_SDA_PORT portc
#define MX_I2C_1_SDA_TRIS trisc
#define MX_I2C_1_SDA_PIN 4
#define MX_I2C_1_SCL_PORT portc
#define MX_I2C_1_SCL_TRIS trisc
#define MX_I2C_1_SCL_PIN 3
#define MX_PWM
#define MX_PWM_CNT 5
#define MX_PWM_PSCA1
#define MX_PWM_PSCA4
#define MX_PWM_PSCA16
#define MX_PWM_1_PORT portd
#define MX_PWM_1_TRIS trisd
#define MX_PWM_1_PIN 4
#define MX_PWM_2_PORT portc
#define MX_PWM_2_TRIS trisc
#define MX_PWM_2_PIN 1
#define MX_PWM_3_PORT portc
#define MX_PWM_3_TRIS trisc
#define MX_PWM_3_PIN 6
#define MX_PWM_4_PORT portc
#define MX_PWM_4_TRIS trisc
#define MX_PWM_4_PIN 7
#define MX_PWM_5_PORT portb
#define MX_PWM_5_TRIS trisb
#define MX_PWM_5_PIN 5
#define MX_ECAN

//Functions
#define MX_CLK_SPEED 19660800
#ifdef _BOOSTC
#include <system.h>
#endif
#ifdef HI_TECH_C
#include <pic18.h>
#endif

//Configuration data
#ifdef _BOOSTC
#pragma DATA 0x300000, 0x15
#endif
#ifdef _HI_TECH_C
%C__CONFIG(%A, %V);
#endif
#ifdef _BOOSTC
#pragma DATA 0x300001, 0x2
#endif
#ifdef _HI_TECH_C
%C__CONFIG(%A, %V);
#endif
#ifdef _BOOSTC
#pragma DATA 0x300002, 0x79
#endif
#ifdef _HI_TECH_C
%C__CONFIG(%A, %V);
#endif
#ifdef _BOOSTC
#pragma DATA 0x300003, 0x74
#endif
#ifdef _HI_TECH_C
%C__CONFIG(%A, %V);
#endif
#ifdef _BOOSTC
#pragma DATA 0x300004, 0xff
#endif
#ifdef _HI_TECH_C
%C__CONFIG(%A, %V);
#endif
#ifdef _BOOSTC
#pragma DATA 0x300005, 0x89
#endif
#ifdef _HI_TECH_C
%C__CONFIG(%A, %V);
#endif
#ifdef _BOOSTC
#pragma DATA 0x300006, 0x91
#endif
#ifdef _HI_TECH_C
%C__CONFIG(%A, %V);
#endif
#ifdef _BOOSTC
#pragma DATA 0x300007, 0xff
#endif
#ifdef _HI_TECH_C
%C__CONFIG(%A, %V);
#endif
#ifdef _BOOSTC
#pragma DATA 0x300008, 0xf
#endif
#ifdef _HI_TECH_C
%C__CONFIG(%A, %V);
#endif
#ifdef _BOOSTC
#pragma DATA 0x300009, 0xc0
#endif
#ifdef _HI_TECH_C
%C__CONFIG(%A, %V);
#endif
#ifdef _BOOSTC
#pragma DATA 0x30000a, 0xf
#endif
#ifdef _HI_TECH_C
%C__CONFIG(%A, %V);
#endif
#ifdef _BOOSTC
#pragma DATA 0x30000b, 0xe0
#endif
#ifdef _HI_TECH_C
%C__CONFIG(%A, %V);
#endif
#ifdef _BOOSTC
#pragma DATA 0x30000c, 0xf
#endif
#ifdef _HI_TECH_C
%C__CONFIG(%A, %V);
#endif
#ifdef _BOOSTC
#pragma DATA 0x30000d, 0x40
#endif
#ifdef _HI_TECH_C
%C__CONFIG(%A, %V);
#endif

//Internal functions
#include "C:\Program Files (x86)\Flowcode\v5\FCD\internals.c"

//Macro function declarations


//Variable declarations
#define FCV_FALSE (0)
#define FCV_TRUE (1)
MX_UINT16 FCV_WHITE = (0xffff);
MX_UINT16 FCV_BLUE = (0x1f);
MX_UINT16 FCV_COUNT;
MX_UINT16 FCV_BLACK = (0x0);
MX_UINT16 FCV_RED = (0xf800);
MX_UINT16 FCV_GREEN = (0x7e0);

MX_UINT8 FCLV_LOOP1;



//Custom2(0): //Defines:

/**** Macro Substitutions ****
a = port for lower 8 bits of daa
b = port for higher 8 bits of data
c = User Define 3
d = User Define 4
e = User Define 5
f = User Define 6
g = User Define 7
h = User Define 8
i = User Define 9
j = User Define 10
******************************/

//common defines
#define TFT_DP_Lo  		portc
#define TFT_DP_Lo_Direction  	trisc
#define TFT_DP_Hi	  	portd
#define TFT_DP_Hi_Direction  	trisd
#define TFT_CONTROL  		portb
#define TFT_CONTROL_TRIS 	trisb
#define TFT_RS 			0
#define TFT_CS 			1
#define TFT_WR 			2
#define TFT_RST			3
#define TFT_RD 			4


const char F8x8_1[256] = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // space 0x20
0x30,0x78,0x78,0x30,0x30,0x00,0x30,0x00, // !
0x6C,0x6C,0x6C,0x00,0x00,0x00,0x00,0x00, // "
0x6C,0x6C,0xFE,0x6C,0xFE,0x6C,0x6C,0x00, // #
0x18,0x3E,0x60,0x3C,0x06,0x7C,0x18,0x00, // $
0x00,0x63,0x66,0x0C,0x18,0x33,0x63,0x00, // %
0x1C,0x36,0x1C,0x3B,0x6E,0x66,0x3B,0x00, // &
0x30,0x30,0x60,0x00,0x00,0x00,0x00,0x00, // '
0x0C,0x18,0x30,0x30,0x30,0x18,0x0C,0x00, // (
0x30,0x18,0x0C,0x0C,0x0C,0x18,0x30,0x00, // )
0x00,0x66,0x3C,0xFF,0x3C,0x66,0x00,0x00, // *
0x00,0x30,0x30,0xFC,0x30,0x30,0x00,0x00, // +
0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x30, // ,
0x00,0x00,0x00,0x7E,0x00,0x00,0x00,0x00, // -
0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00, // .
0x03,0x06,0x0C,0x18,0x30,0x60,0x40,0x00, // ' (forward slash)
0x3E,0x63,0x63,0x6B,0x63,0x63,0x3E,0x00, // 0 0x30
0x18,0x38,0x58,0x18,0x18,0x18,0x7E,0x00, // 1
0x3C,0x66,0x06,0x1C,0x30,0x66,0x7E,0x00, // 2
0x3C,0x66,0x06,0x1C,0x06,0x66,0x3C,0x00, // 3
0x0E,0x1E,0x36,0x66,0x7F,0x06,0x0F,0x00, // 4
0x7E,0x60,0x7C,0x06,0x06,0x66,0x3C,0x00, // 5
0x1C,0x30,0x60,0x7C,0x66,0x66,0x3C,0x00, // 6
0x7E,0x66,0x06,0x0C,0x18,0x18,0x18,0x00, // 7
0x3C,0x66,0x66,0x3C,0x66,0x66,0x3C,0x00, // 8
0x3C,0x66,0x66,0x3E,0x06,0x0C,0x38,0x00, // 9
0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x00, // :
0x00,0x18,0x18,0x00,0x00,0x18,0x18,0x30, // ;
0x0C,0x18,0x30,0x60,0x30,0x18,0x0C,0x00, // <
0x00,0x00,0x7E,0x00,0x00,0x7E,0x00,0x00, // =
0x30,0x18,0x0C,0x06,0x0C,0x18,0x30,0x00, // >
0x3C,0x66,0x06,0x0C,0x18,0x00,0x18,0x00, // ?
};



const char F8x8_2[256] = {
0x3E,0x63,0x6F,0x69,0x6F,0x60,0x3E,0x00, // @ 0x40
0x18,0x3C,0x66,0x66,0x7E,0x66,0x66,0x00, // A
0x7E,0x33,0x33,0x3E,0x33,0x33,0x7E,0x00, // B
0x1E,0x33,0x60,0x60,0x60,0x33,0x1E,0x00, // C
0x7C,0x36,0x33,0x33,0x33,0x36,0x7C,0x00, // D
0x7F,0x31,0x34,0x3C,0x34,0x31,0x7F,0x00, // E
0x7F,0x31,0x34,0x3C,0x34,0x30,0x78,0x00, // F
0x1E,0x33,0x60,0x60,0x67,0x33,0x1F,0x00, // G
0x66,0x66,0x66,0x7E,0x66,0x66,0x66,0x00, // H
0x3C,0x18,0x18,0x18,0x18,0x18,0x3C,0x00, // I
0x0F,0x06,0x06,0x06,0x66,0x66,0x3C,0x00, // J
0x73,0x33,0x36,0x3C,0x36,0x33,0x73,0x00, // K
0x78,0x30,0x30,0x30,0x31,0x33,0x7F,0x00, // L
0x63,0x77,0x7F,0x7F,0x6B,0x63,0x63,0x00, // M
0x63,0x73,0x7B,0x6F,0x67,0x63,0x63,0x00, // N
0x3E,0x63,0x63,0x63,0x63,0x63,0x3E,0x00, // O
0x7E,0x33,0x33,0x3E,0x30,0x30,0x78,0x00, // P 0x50
0x3C,0x66,0x66,0x66,0x6E,0x3C,0x0E,0x00, // Q
0x7E,0x33,0x33,0x3E,0x36,0x33,0x73,0x00, // R
0x3C,0x66,0x30,0x18,0x0C,0x66,0x3C,0x00, // S
0x7E,0x5A,0x18,0x18,0x18,0x18,0x3C,0x00, // T
0x66,0x66,0x66,0x66,0x66,0x66,0x7E,0x00, // U
0x66,0x66,0x66,0x66,0x66,0x3C,0x18,0x00, // V
0x63,0x63,0x63,0x6B,0x7F,0x77,0x63,0x00, // W
0x63,0x63,0x36,0x1C,0x1C,0x36,0x63,0x00, // X
0x66,0x66,0x66,0x3C,0x18,0x18,0x3C,0x00, // Y
0x7F,0x63,0x46,0x0C,0x19,0x33,0x7F,0x00, // Z
0x3C,0x30,0x30,0x30,0x30,0x30,0x3C,0x00, // [
0x60,0x30,0x18,0x0C,0x06,0x03,0x01,0x00, // \ (back slash)
0x3C,0x0C,0x0C,0x0C,0x0C,0x0C,0x3C,0x00, // ]
0x08,0x1C,0x36,0x63,0x00,0x00,0x00,0x00, // ^
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF, // _
};




const char F8x8_3[256] = {
0x18,0x18,0x0C,0x00,0x00,0x00,0x00,0x00, // ` 0x60
0x00,0x00,0x3C,0x06,0x3E,0x66,0x3B,0x00, // a
0x70,0x30,0x3E,0x33,0x33,0x33,0x6E,0x00, // b
0x00,0x00,0x3C,0x66,0x60,0x66,0x3C,0x00, // c
0x0E,0x06,0x3E,0x66,0x66,0x66,0x3B,0x00, // d
0x00,0x00,0x3C,0x66,0x7E,0x60,0x3C,0x00, // e
0x1C,0x36,0x30,0x78,0x30,0x30,0x78,0x00, // f
0x00,0x00,0x3B,0x66,0x66,0x3E,0x06,0x7C, // g
0x70,0x30,0x36,0x3B,0x33,0x33,0x73,0x00, // h
0x18,0x00,0x38,0x18,0x18,0x18,0x3C,0x00, // i
0x06,0x00,0x06,0x06,0x06,0x66,0x66,0x3C, // j
0x70,0x30,0x33,0x36,0x3C,0x36,0x73,0x00, // k
0x38,0x18,0x18,0x18,0x18,0x18,0x3C,0x00, // l
0x00,0x00,0x66,0x7F,0x7F,0x6B,0x63,0x00, // m
0x00,0x00,0x7C,0x66,0x66,0x66,0x66,0x00, // n
0x00,0x00,0x3C,0x66,0x66,0x66,0x3C,0x00, // o
0x00,0x00,0x6E,0x33,0x33,0x3E,0x30,0x78, // p 0x70
0x00,0x00,0x3B,0x66,0x66,0x3E,0x06,0x0F, // q
0x00,0x00,0x6E,0x3B,0x33,0x30,0x78,0x00, // r
0x00,0x00,0x3E,0x60,0x3C,0x06,0x7C,0x00, // s
0x08,0x18,0x3E,0x18,0x18,0x1A,0x0C,0x00, // t
0x00,0x00,0x66,0x66,0x66,0x66,0x3B,0x00, // u
0x00,0x00,0x66,0x66,0x66,0x3C,0x18,0x00, // v
0x00,0x00,0x63,0x6B,0x7F,0x7F,0x36,0x00, // w
0x00,0x00,0x63,0x36,0x1C,0x36,0x63,0x00, // x
0x00,0x00,0x66,0x66,0x66,0x3E,0x06,0x7C, // y
0x00,0x00,0x7E,0x4C,0x18,0x32,0x7E,0x00, // z
0x0E,0x18,0x18,0x70,0x18,0x18,0x0E,0x00, // {
0x0C,0x0C,0x0C,0x00,0x0C,0x0C,0x0C,0x00, // |
0x70,0x18,0x18,0x0E,0x18,0x18,0x70,0x00, // }
0x3B,0x6E,0x00,0x00,0x00,0x00,0x00,0x00, // ~
0x1C,0x36,0x36,0x1C,0x00,0x00,0x00,0x00, // DEL
};






//Custom2(0): //Macro function declarations

void FCD_Custom20_Write_Command(MX_UINT16 Wcommand);
void FCD_Custom20_Write_Data(MX_UINT16 Wdata);
void FCD_Custom20_Write_Command_Data(MX_UINT16 Wcommand, MX_UINT16 Wdata);
void FCD_Custom20_TFT_Set_Address(MX_UINT16 PX1, MX_UINT16 PY1, MX_UINT16 PX2, MX_UINT16 PY2);
void FCD_Custom20_TFT_Init();
MX_UINT16 FCD_Custom20_Set_color(MX_UINT16 r, MX_UINT16 g, MX_UINT16 b);
void FCD_Custom20_TFT_Fill(MX_UINT16 color);
void FCD_Custom20_TFT_Box(MX_UINT16 x1, MX_UINT16 y1, MX_UINT16 x2, MX_UINT16 y2, MX_UINT16 color);
void FCD_Custom20_TFT_Dot(MX_UINT16 x, MX_UINT16 y, MX_UINT16 color);
void FCD_Custom20_TFT_Line(MX_UINT16 x1, MX_UINT16 y1, MX_UINT16 x2, MX_UINT16 y2, MX_UINT16 color);
void FCD_Custom20_TFT_H_Line(char x1, char x2, MX_UINT16 y_pos, MX_UINT16 color);
void FCD_Custom20_TFT_V_Line(MX_UINT16 y1, MX_UINT16 y2, char x_pos, MX_UINT16 color);
void FCD_Custom20_TFT_Rectangle(MX_UINT16 x1, MX_UINT16 y1, MX_UINT16 x2, MX_UINT16 y2, MX_UINT16 color);
void FCD_Custom20_TFT_Circle(MX_UINT16 x, MX_UINT16 y, char radius, char fill, MX_UINT16 color);
void FCD_Custom20_TFT_Char(char C, MX_UINT16 x, MX_UINT16 y, char DimFont, MX_UINT16 Fcolor, MX_UINT16 Bcolor);



//Custom2(0): //Macro implementations


void FCD_Custom20_Write_Command(MX_UINT16 Wcommand)
{
	
	  FC_CAL_Bit_High(TFT_CONTROL, TFT_RD);		//TFT_RD = 1;
	  FC_CAL_Bit_Low(TFT_CONTROL, TFT_RS);		//TFT_RS = 0;
	  TFT_DP_Hi = Wcommand >> 8;
	  TFT_DP_Lo = Wcommand ;
	  FC_CAL_Bit_Low(TFT_CONTROL, TFT_WR);		//TFT_WR = 0;
	  FC_CAL_Bit_High(TFT_CONTROL, TFT_WR);		//TFT_WR = 1;

}

void FCD_Custom20_Write_Data(MX_UINT16 Wdata)
{
	
	  FC_CAL_Bit_High(TFT_CONTROL, TFT_RD);		//TFT_RD = 1;
	  FC_CAL_Bit_High(TFT_CONTROL, TFT_RS);		//TFT_RS = 1 ;
	  TFT_DP_Hi = Wdata >>8 ;
	  TFT_DP_Lo = Wdata;
	  FC_CAL_Bit_Low(TFT_CONTROL, TFT_WR);		//TFT_WR = 0;
	  FC_CAL_Bit_High(TFT_CONTROL, TFT_WR);		//TFT_WR = 1 ;

}

void FCD_Custom20_Write_Command_Data(MX_UINT16 Wcommand, MX_UINT16 Wdata)
{
	
	   FCD_Custom20_Write_Command(Wcommand);
	   FCD_Custom20_Write_Data(Wdata);

}

void FCD_Custom20_TFT_Set_Address(MX_UINT16 PX1, MX_UINT16 PY1, MX_UINT16 PX2, MX_UINT16 PY2)
{
	
	  FCD_Custom20_Write_Command_Data(68,(PX2 << 8) + PX1 );  	//Column address start2
	  FCD_Custom20_Write_Command_Data(69,PY1);      		//Column address start1
	  FCD_Custom20_Write_Command_Data(70,PY2);  			//Column address end2
	  FCD_Custom20_Write_Command_Data(78,PX1);      		//Column address end1
	  FCD_Custom20_Write_Command_Data(79,PY1);  			//Row address start2
	  FCD_Custom20_Write_Command(34);

}

void FCD_Custom20_TFT_Init()
{
	
	        FC_CAL_Bit_High(TFT_CONTROL, TFT_RD);	//TFT_RD = 1;
	        FC_CAL_Bit_High(TFT_CONTROL, TFT_RST);	//TFT_RST=1;
	        delay_ms(5);
	        FC_CAL_Bit_Low(TFT_CONTROL, TFT_RST);	//TFT_RST=0;
	        delay_ms(15);
	        FC_CAL_Bit_High(TFT_CONTROL, TFT_RST);	//TFT_RST=1;
	        delay_ms(15);
	        FC_CAL_Bit_Low(TFT_CONTROL, TFT_CS);	//TFT_CS =0;

	        FCD_Custom20_Write_Command_Data(0x0000,0x0001);
	        FCD_Custom20_Write_Command_Data(0x0003,0xA8A4);
	        FCD_Custom20_Write_Command_Data(0x000C,0x0000);
	        FCD_Custom20_Write_Command_Data(0x000D,0x800C);
	        FCD_Custom20_Write_Command_Data(0x000E,0x2B00);
	        FCD_Custom20_Write_Command_Data(0x001E,0x00B7);
	        FCD_Custom20_Write_Command_Data(0x0001,0x2B3F);
	        FCD_Custom20_Write_Command_Data(0x0002,0x0600);
	        FCD_Custom20_Write_Command_Data(0x0010,0x0000);
	        FCD_Custom20_Write_Command_Data(0x0011,0x6070);
	        FCD_Custom20_Write_Command_Data(0x0005,0x0000);
	        FCD_Custom20_Write_Command_Data(0x0006,0x0000);
	        FCD_Custom20_Write_Command_Data(0x0016,0xEF1C);
	        FCD_Custom20_Write_Command_Data(0x0017,0x0003);
	        FCD_Custom20_Write_Command_Data(0x0007,0x0233);
	        FCD_Custom20_Write_Command_Data(0x000B,0x0000);
	        FCD_Custom20_Write_Command_Data(0x000F,0x0000);
	        FCD_Custom20_Write_Command_Data(0x0041,0x0000);
	        FCD_Custom20_Write_Command_Data(0x0042,0x0000);
	        FCD_Custom20_Write_Command_Data(0x0048,0x0000);
	        FCD_Custom20_Write_Command_Data(0x0049,0x013F);
	        FCD_Custom20_Write_Command_Data(0x004A,0x0000);
	        FCD_Custom20_Write_Command_Data(0x004B,0x0000);
	        FCD_Custom20_Write_Command_Data(0x0044,0xEF95);
	        FCD_Custom20_Write_Command_Data(0x0045,0x0000);
	        FCD_Custom20_Write_Command_Data(0x0046,0x013F);
	        FCD_Custom20_Write_Command_Data(0x0030,0x0707);
	        FCD_Custom20_Write_Command_Data(0x0031,0x0204);
	        FCD_Custom20_Write_Command_Data(0x0032,0x0204);
	        FCD_Custom20_Write_Command_Data(0x0033,0x0502);
	        FCD_Custom20_Write_Command_Data(0x0034,0x0507);
	        FCD_Custom20_Write_Command_Data(0x0035,0x0204);
	        FCD_Custom20_Write_Command_Data(0x0036,0x0204);
	        FCD_Custom20_Write_Command_Data(0x0037,0x0502);
	        FCD_Custom20_Write_Command_Data(0x003A,0x0302);
	        FCD_Custom20_Write_Command_Data(0x003B,0x0302);
	        FCD_Custom20_Write_Command_Data(0x0023,0x0000);
	        FCD_Custom20_Write_Command_Data(0x0024,0x0000);
	        FCD_Custom20_Write_Command_Data(0x0025,0x8000);
	        FCD_Custom20_Write_Command_Data(0x004f,0x0000);
	        FCD_Custom20_Write_Command_Data(0x004e,0x0000);
	        FCD_Custom20_Write_Command(0x0022);

	        FC_CAL_Bit_High(TFT_CONTROL, TFT_CS);	//TFT_CS =1;

}

MX_UINT16 FCD_Custom20_Set_color(MX_UINT16 r, MX_UINT16 g, MX_UINT16 b)
{
	
	  char LowByte, HighByte;			
	  MX_UINT16 temp;

	  HighByte = (r & 0xF8) | (g >> 5);			//Hi(temp) = (R & 0xF8) | (G >> 5);
	        g = (g & 0x1C);
	  LowByte = (g << 3) | (b >>3);				//Lo(temp) = (G << 3) | (B >>3);
	  
	  MAKESHORT(temp, LowByte, HighByte);
	  return temp;

}

void FCD_Custom20_TFT_Fill(MX_UINT16 color)
{
	
	  MX_UINT16 i,j;

	  FC_CAL_Bit_Low(TFT_CONTROL, TFT_CS);			//TFT_CS  = 0;

	  FCD_Custom20_TFT_Set_Address(0,0,239,319);
	  FCD_Custom20_Write_Data(color);
	  for(i = 0; i <= 319; i++)
	  {
	    for(j = 0; j <= 239; j++)
	    {
	        FC_CAL_Bit_Low(TFT_CONTROL, TFT_WR);		//TFT_WR = 0;
	        FC_CAL_Bit_High(TFT_CONTROL, TFT_WR);		//TFT_WR = 1;
	    }
	  }
	  FC_CAL_Bit_High(TFT_CONTROL, TFT_CS);			//TFT_CS  = 1;

}

void FCD_Custom20_TFT_Box(MX_UINT16 x1, MX_UINT16 y1, MX_UINT16 x2, MX_UINT16 y2, MX_UINT16 color)
{
	
	  MX_UINT16  i,j;

	  FC_CAL_Bit_Low(TFT_CONTROL, TFT_CS);			//TFT_CS  = 0;

	  FCD_Custom20_TFT_Set_Address(x1,y1,x2,y2);
	  FCD_Custom20_Write_Data(color);
	  for(i = y1; i <= y2; i++)
	  {
	    for(j = x1; j <= x2; j++)
	    {
	        FC_CAL_Bit_Low(TFT_CONTROL, TFT_WR);		//TFT_WR = 0;
	        FC_CAL_Bit_High(TFT_CONTROL, TFT_WR);		//TFT_WR = 1;
	    }
	  }
	  FC_CAL_Bit_High(TFT_CONTROL, TFT_CS);			//TFT_CS  = 1;

}

void FCD_Custom20_TFT_Dot(MX_UINT16 x, MX_UINT16 y, MX_UINT16 color)
{
	
	  FC_CAL_Bit_Low(TFT_CONTROL, TFT_CS);			//TFT_CS  = 0;

	  FCD_Custom20_TFT_Set_Address(x,y,x,y);
	  FCD_Custom20_Write_Data(color);

	  FC_CAL_Bit_High(TFT_CONTROL, TFT_CS);			//TFT_CS = 1;

}

void FCD_Custom20_TFT_Line(MX_UINT16 x1, MX_UINT16 y1, MX_UINT16 x2, MX_UINT16 y2, MX_UINT16 color)
{
	
	  unsigned long x, y, steps;
	  MX_UINT16 dx, dy;
	  unsigned long addx, addy;
	  MX_UINT16 i;

	  dx = abs(x2-x1);
	  dy = abs(y2-y1);

	  if (dx >= dy)
	  	steps = dx;
	  else
		steps = dy;


	  addx = (dx*50) / steps;
	  addy = (dy*50) / steps; 

	  x = x1;
	  y = y1;

	  if (x1 > x2)
		addx = addx * (-1);
	  if(y1 > y2)
		addy = addy * (-1);


	  for(i = 1; i <= (steps +1); i++)
	  {
	     FCD_Custom20_TFT_Dot(x,y,color);
	     x = x1 + ((i*addx)/50);
	     y = y1 + ((i*addy)/50); 
	  }

}

void FCD_Custom20_TFT_H_Line(char x1, char x2, MX_UINT16 y_pos, MX_UINT16 color)
{
	
	  FCD_Custom20_TFT_Line( x1, y_pos, x2, y_pos, color);

}

void FCD_Custom20_TFT_V_Line(MX_UINT16 y1, MX_UINT16 y2, char x_pos, MX_UINT16 color)
{
	
	  FCD_Custom20_TFT_Line( x_pos, y1, x_pos, y2, color);

}

void FCD_Custom20_TFT_Rectangle(MX_UINT16 x1, MX_UINT16 y1, MX_UINT16 x2, MX_UINT16 y2, MX_UINT16 color)
{
	
	  FCD_Custom20_TFT_H_Line(x1,x2,y1,color);
	  FCD_Custom20_TFT_H_Line(x1,x2,y2,color);
	  FCD_Custom20_TFT_V_Line(y1,y2,x1,color);
	  FCD_Custom20_TFT_V_Line(y1,y2,x2,color);

}

void FCD_Custom20_TFT_Circle(MX_UINT16 x, MX_UINT16 y, char radius, char fill, MX_UINT16 color)
{
	
	   MX_UINT16 atmp,bvar,P_Rad;
	   atmp = 0;
	   bvar = radius;
	   P_Rad = 1 - radius;
	   while (atmp <= bvar)
	   {
	    if(fill == 1)
	    {
	         FCD_Custom20_TFT_Box(x-atmp,y-bvar,x+atmp,y+bvar,color);
	         FCD_Custom20_TFT_Box(x-bvar,y-atmp,x+bvar,y+atmp,color);
	    }
	    else
	    {
	         FCD_Custom20_TFT_Dot(atmp+x, bvar+y, color);
	         FCD_Custom20_TFT_Dot(bvar+x, atmp+y, color);
	         FCD_Custom20_TFT_Dot(x-atmp, bvar+y, color);
	         FCD_Custom20_TFT_Dot(x-bvar, atmp+y, color);
	         FCD_Custom20_TFT_Dot(bvar+x, y-atmp, color);
	         FCD_Custom20_TFT_Dot(atmp+x, y-bvar, color);
	         FCD_Custom20_TFT_Dot(x-atmp, y-bvar, color);
	         FCD_Custom20_TFT_Dot(x-bvar, y-atmp, color);
	    }
	    if (P_Rad < 0 )
	    {
	        P_Rad = (P_Rad + 3) + (2* atmp);
	        atmp ++;
	    }
	    else
	    {
	        P_Rad = (P_Rad + 5) + (2* (atmp - bvar));
	        atmp ++;
	        bvar --;
	    }
	   }

}

void FCD_Custom20_TFT_Char(char C, MX_UINT16 x, MX_UINT16 y, char DimFont, MX_UINT16 Fcolor, MX_UINT16 Bcolor)
{
	
	  cons char* 	ptrfont;
	  MX_UINT16 	Cptrfont;
	  MX_UINT16 	f8[8];
	  MX_UINT16 	f16[16];
	  char 		k,i,print1,print2;
	  MX_UINT16 	print3,print4;

	  if(DimFont == 8)
	  {
	     // first establish which array the caharcter is in
	     if (C>= 32 && C<=63)
	     {
		ptrfont = &F8x8_1;
	        Cptrfont = (C-32)*8;
	     }
	     else if (C>= 64 && C<=95)    
	     {
		ptrfont = &F8x8_2;
	        Cptrfont = (C-64)*8;
	     }
	     else if (C>= 96 && C<=127)    
	     {
		ptrfont = &F8x8_3;
	        Cptrfont = (C-96)*8;
	     }
	     else
		return;


	     ptrfont = ptrfont + Cptrfont;

	     for(k = 0; k <= 7; k++)
	     {
	      f8[k] = *ptrfont;
	      ptrfont++;
	     }
	     
	     FC_CAL_Bit_Low(TFT_CONTROL, TFT_CS);			//TFT_CS = 0;

	     FCD_Custom20_TFT_Set_Address(x,y,x+7,y+7);
	     for(i = 0; i <= 7; i++)
	     {
	       for(k = 0; k <= 7; k++)
	       {
	          print1 = (f8[i] & 0x80);
	          print2 = print1 >>7;
	          if(print2 == 1)
	          {
	             FCD_Custom20_Write_Data(Fcolor);
	          }
	          else
	          {
	             FCD_Custom20_Write_Data(Bcolor);
	          }
	          f8[i] = f8[i] << 1;
	       }
	     }
	     FC_CAL_Bit_High(TFT_CONTROL, TFT_CS);			//TFT_CS = 1;
	  }

}

#include "C:\Program Files (x86)\Flowcode\v5\CAL\includes.c"

//Macro implementations


void main()
{
	//Initialization
	ancon0 = 0x00;
ancon1 = 0x00;

	
	TFT_DP_Lo_Direction = 0;
	TFT_DP_Hi_Direction = 0;
	TFT_CONTROL_TRIS = 0;



	//Interrupt initialization code
	


	//Call Component Macro
	//Call Component Macro: TFT_Init()
	FCD_Custom20_TFT_Init();

	//Call Component Macro
	//Call Component Macro: TFT_Fill(0)
	FCD_Custom20_TFT_Fill(0);

	//Delay
	//Delay: 1 s
	delay_s(1);

	//Call Component Macro
	//Call Component Macro: TFT_Fill(63488)
	FCD_Custom20_TFT_Fill(63488);

	//Delay
	//Delay: 1 s
	delay_s(1);

	//Call Component Macro
	//Call Component Macro: TFT_Fill(65504)
	FCD_Custom20_TFT_Fill(65504);

	//Delay
	//Delay: 1 s
	delay_s(1);

	//Call Component Macro
	//Call Component Macro: TFT_Fill(31)
	FCD_Custom20_TFT_Fill(31);

	//Delay
	//Delay: 1 s
	delay_s(1);

	//Call Component Macro
	//Call Component Macro: TFT_Box(10, 10, 100, 120, 31727)
	FCD_Custom20_TFT_Box(10, 10, 100, 120, 31727);

	//Calculation
	//Calculation:
	//  count = 0
	FCV_COUNT = 0;

	//Loop
	//Loop: Loop 50 times
	for (FCLV_LOOP1=0; FCLV_LOOP1<50; FCLV_LOOP1++)
	{

		//Call Component Macro
		//Call Component Macro: TFT_Dot(150, count + 10, 65535)
		FCD_Custom20_TFT_Dot(150, FCV_COUNT + 10, 65535);

		//Calculation
		//Calculation:
		//  count = count + 1
		FCV_COUNT = FCV_COUNT + 1;


	}

	//Call Component Macro
	//Call Component Macro: TFT_Line(100, 100, 200, 105, 65535)
	FCD_Custom20_TFT_Line(100, 100, 200, 105, 65535);

	//Call Component Macro
	//Call Component Macro: TFT_Line(100, 100, 200, 130, 65535)
	FCD_Custom20_TFT_Line(100, 100, 200, 130, 65535);

	//Call Component Macro
	//Call Component Macro: TFT_Line(100, 100, 200, 150, 65535)
	FCD_Custom20_TFT_Line(100, 100, 200, 150, 65535);

	//Call Component Macro
	//Call Component Macro: TFT_Line(100, 100, 200, 180, 65535)
	FCD_Custom20_TFT_Line(100, 100, 200, 180, 65535);

	//Call Component Macro
	//Call Component Macro: TFT_H_Line(10, 150, 140, Green)
	FCD_Custom20_TFT_H_Line(10, 150, 140, FCV_GREEN);

	//Call Component Macro
	//Call Component Macro: TFT_V_Line(150, 310, 220, Red)
	FCD_Custom20_TFT_V_Line(150, 310, 220, FCV_RED);

	//Call Component Macro
	//Call Component Macro: TFT_Rectangle(50, 160, 160, 240, Black)
	FCD_Custom20_TFT_Rectangle(50, 160, 160, 240, FCV_BLACK);

	//Loop
	//Loop: While 1
	while (1)
	{

		//Output
		//Output: 255 -> PORTA
		trisa = 0x00;
		porta = (255);

		//Delay
		//Delay: 100 ms
		delay_ms(100);

		//Output
		//Output: 0 -> PORTA
		trisa = 0x00;
		porta = (0);

		//Delay
		//Delay: 900 ms
		delay_ms(255);
		delay_ms(255);
		delay_ms(255);
		delay_ms(135);


	}

	mainendloop: goto mainendloop;
}

void MX_INTERRUPT_MACRO(void)
{
}



