/*********************************************************************
 *                   Flowcode Custom Component 2 Code
 *
 * File: PIC_Custom2.c
 *
 * (c) 2009 Matrix Multimedia Ltd.
 * http://www.matrixmultimedia.com
 *
 * Software License Agreement
 *
 * The software supplied herewith by Matrix Multimedia Ltd (the
 * “Company”) for its Flowcode graphical programming language is
 * intended and supplied to you, the Company’s customer, for use
 * solely and exclusively on the Company's products. The software
 * is owned by the Company, and is protected under applicable
 * copyright laws. All rights are reserved. Any use in violation
 * of the foregoing restrictions may subject the user to criminal
 * sanctions under applicable laws, as well as to civil liability
 * for the breach of the terms and conditions of this licence.
 *
 * THIS SOFTWARE IS PROVIDED IN AN “AS IS” CONDITION. NO WARRANTIES,
 * WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED
 * TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
 * PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE COMPANY SHALL NOT,
 * IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR
 * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
 *
 * Changelog:
 *
 *  date  | by | description
 * -------+----+-----------------------------------------------------
 * 240407 | ST | Created
 * 111111 | ST | Made much simpler
 *
 ********************************************************************/

/*********************************************************************

 Return & parameter types:
   void
   char
   short
   unsigned short
   char*
   unsigned char*

 Pin directions:
   0 = OUTPUT
   2 = INPUT
   3 = BIDIRECTIONAL

**********************************************************************

[Settings]
CLSID={FC63F846-39C0-4BAF-BF23-9D007D092701}
IsAnalogue=0
MultipleAllowed=0
Description=Sainsmart LCD Component

**********************************************************************

[Port]
DesiredPort=0
PortMandatory=0
SamePortAsID=0

[Pins]
Count=0

[PinPort]
# PORTA = 0
# PORTB = 1
# PORTC = 2
# PORTD = 3
# PORTE = 4

[PinDesiredBit]

[PinDirection]
# DIR_INPUT = 2
# DIR_OUTPUT = 0
# DIR_BIDIRECTIONAL = 3

[PinMustUsePort]
# boolean

[SamePortAsPinX]
# -1 = any pin
# otherwise, the pin number

[PinMustUsePin]
# boolean

[PinValue]
# boolean (0 = off, 1 = on)

**********************************************************************

[MacroNames]
Count=14
1=Write_Command
2=Write_Data
3=Write_Command_Data
4=TFT_Set_Address
5=TFT_Init
6=Set_color
7=TFT_Fill
8=TFT_Box
9=TFT_Dot
10=TFT_Line
11=TFT_H_Line
12=TFT_V_Line
13=TFT_Rectangle
14=TFT_Char
15=TFT_Circle




[MacroReturns]
1=void
2=void
3=void
4=void
5=void
6=MX_UINT16
7=void
8=void
9=void
10=void
11=void
12=void
13=void
14=void
15=void


[MacroIsPrivate]
1=0
2=0
3=0
4=0
5=0
6=0
7=0
8=0
9=0
10=0
11=0
12=0
13=0
14=0
15=0


[MacroParameters_Write_Command]
Count=1
1=Wcommand

[MacroParamTypes_Write_Command]
1=MX_UINT16

[MacroParameters_Write_Data]
Count=1
1=Wdata

[MacroParamTypes_Write_Data]
1=MX_UINT16


[MacroParameters_Write_Command_Data]
Count=2
1=Wcommand
2=Wdata

[MacroParamTypes_Write_Command_Data]
1=MX_UINT16
2=MX_UINT16


[MacroParameters_TFT_Set_Address]
Count=4
1=PX1
2=PY1
3=PX2
4=PY2

[MacroParamTypes_TFT_Set_Address]
1=MX_UINT16
2=MX_UINT16
3=MX_UINT16
4=MX_UINT16


[MacroParameters_TFT_Init]
Count=0

[MacroParamTypes_TFT_Init]


[MacroParameters_Set_color]
Count=3
1=r
2=g
3=b

[MacroParamTypes_Set_color]
1=MX_UINT16
2=MX_UINT16
3=MX_UINT16


[MacroParameters_TFT_Fill]
Count=1
1=color

[MacroParamTypes_TFT_Fill]
1=MX_UINT16


[MacroParameters_TFT_Box]
Count=5
1=x1
2=y1
3=x2
4=y2
5=color

[MacroParamTypes_TFT_Box]
1=MX_UINT16
2=MX_UINT16
3=MX_UINT16
4=MX_UINT16
5=MX_UINT16


[MacroParameters_TFT_Dot]
Count=3
1=x
2=y
3=color

[MacroParamTypes_TFT_Dot]
1=MX_UINT16
2=MX_UINT16
3=MX_UINT16


[MacroParameters_TFT_Line]
Count=5
1=x1
2=y1
3=x2
4=y2
5=color

[MacroParamTypes_TFT_Line]
1=MX_UINT16
2=MX_UINT16
3=MX_UINT16
4=MX_UINT16
5=MX_UINT16


[MacroParameters_TFT_H_Line]
Count=4
1=x1
2=x2
3=y_pos
4=color

[MacroParamTypes_TFT_H_Line]
1=char
2=char
3=MX_UINT16
4=MX_UINT16

[MacroParameters_TFT_V_Line]
Count=4
1=y1
2=y2
3=x_pos
4=color

[MacroParamTypes_TFT_V_Line]
1=MX_UINT16
2=MX_UINT16
3=char
4=MX_UINT16


[MacroParameters_TFT_Rectangle]
Count=5
1=x1
2=y1
3=x2
4=y2
5=color

[MacroParamTypes_TFT_Rectangle]
1=MX_UINT16
2=MX_UINT16
3=MX_UINT16
4=MX_UINT16
5=MX_UINT16

[MacroParameters_TFT_Char]
Count=6
1=C
2=x
3=y
4=DimFont
5=Fcolor
6=Bcolor

[MacroParamTypes_TFT_Char]
1=char
2=MX_UINT16
3=MX_UINT16
4=char
5=MX_UINT16
6=MX_UINT16

[MacroParameters_TFT_Circle]
Count=5
1=x
2=y
3=radius
4=fill
5=color

[MacroParamTypes_TFT_Circle]
1=MX_UINT16
2=MX_UINT16
3=char
4=char
5=MX_UINT16


 ********************************************************************/

/********************************************************************
 * ADDITIONAL CODE
 ********************************************************************/

/*DefinesCode_Start*/

/**** 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 FONT_8x8[784] = {
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, // ?
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, // _
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
0x60,0x90,0x90,0x60,0x00,0x00,0x00,0x00,  // DEGREE use:€
0x22,0x77,0x7f,0x7f,0x3e,0x1c,0x08,0x00         //HEART use:�
};

const char FONT_16x16[3040]  = {
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //  <Space>
0x00,0x00,0x00,0x00,0x07,0x00,0x0F,0x80,0x0F,0x80,0x0F,0x80,0x0F,0x80,0x0F,0x80,0x07,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x00,0x00, // !
0x00,0x00,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x06,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // "
0x00,0x00,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x7F,0xFE,0x7F,0xFE,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x7F,0xFE,0x7F,0xFE,0x0C,0x30,0x0C,0x30,0x0C,0x30,0x00,0x00, // #
0x00,0x00,0x02,0x40,0x02,0x40,0x0F,0xF8,0x1F,0xF8,0x1A,0x40,0x1A,0x40,0x1F,0xF0,0x0F,0xF8,0x02,0x58,0x02,0x58,0x1F,0xF8,0x1F,0xF0,0x02,0x40,0x02,0x40,0x00,0x00, // $
0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x10,0x0E,0x30,0x0E,0x70,0x00,0xE0,0x01,0xC0,0x03,0x80,0x07,0x00,0x0E,0x70,0x0C,0x70,0x08,0x70,0x00,0x00,0x00,0x00,0x00,0x00, // %
0x00,0x00,0x00,0x00,0x0F,0x00,0x19,0x80,0x19,0x80,0x19,0x80,0x0F,0x00,0x0F,0x08,0x0F,0x98,0x19,0xF8,0x18,0xF0,0x18,0xE0,0x19,0xF0,0x0F,0x98,0x00,0x00,0x00,0x00, // &
0x00,0x00,0x00,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '
0x00,0x00,0x00,0x00,0x00,0xF0,0x01,0xC0,0x03,0x80,0x07,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x07,0x00,0x03,0x80,0x01,0xC0,0x00,0xF0,0x00,0x00,0x00,0x00, // (
0x00,0x00,0x00,0x00,0x0F,0x00,0x03,0x80,0x01,0xC0,0x00,0xE0,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0xE0,0x01,0xC0,0x03,0x80,0x0F,0x00,0x00,0x00,0x00,0x00, // )
0x00,0x00,0x00,0x00,0x01,0x80,0x11,0x88,0x09,0x90,0x07,0xE0,0x07,0xE0,0x3F,0xFC,0x3F,0xFC,0x07,0xE0,0x07,0xE0,0x09,0x90,0x11,0x88,0x01,0x80,0x00,0x00,0x00,0x00, // *
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x01,0x80,0x01,0x80,0x0F,0xF0,0x0F,0xF0,0x01,0x80,0x01,0x80,0x01,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // +
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x0E,0x00,0x00,0x00, // ,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xF8,0x1F,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // -
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x00,0x00,0x00,0x00, // ,
0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x06,0x00,0x0E,0x00,0x1C,0x00,0x38,0x00,0x70,0x00,0xE0,0x01,0xC0,0x03,0x80,0x07,0x00,0x0E,0x00,0x1C,0x00,0x00,0x00,0x00,0x00, // '/
0x00,0x00,0x00,0x00,0x0F,0xF0,0x1C,0x38,0x1C,0x78,0x1C,0xF8,0x1C,0xF8,0x1D,0xB8,0x1D,0xB8,0x1F,0x38,0x1F,0x38,0x1E,0x38,0x1C,0x38,0x0F,0xF0,0x00,0x00,0x00,0x00, // 0
0x00,0x00,0x00,0x00,0x01,0x80,0x01,0x80,0x03,0x80,0x1F,0x80,0x1F,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x1F,0xF0,0x00,0x00,0x00,0x00, // 1
0x00,0x00,0x00,0x00,0x0F,0xE0,0x1C,0x70,0x1C,0x38,0x00,0x38,0x00,0x70,0x00,0xE0,0x01,0xC0,0x03,0x80,0x07,0x00,0x0E,0x38,0x1C,0x38,0x1F,0xF8,0x00,0x00,0x00,0x00, // 2
0x00,0x00,0x00,0x00,0x0F,0xE0,0x1C,0x70,0x1C,0x38,0x00,0x38,0x00,0x70,0x03,0xC0,0x03,0xC0,0x00,0x70,0x00,0x38,0x1C,0x38,0x1C,0x70,0x0F,0xE0,0x00,0x00,0x00,0x00, // 3
0x00,0x00,0x00,0x00,0x00,0xE0,0x01,0xE0,0x03,0xE0,0x06,0xE0,0x0C,0xE0,0x18,0xE0,0x1F,0xF8,0x1F,0xF8,0x00,0xE0,0x00,0xE0,0x00,0xE0,0x03,0xF8,0x00,0x00,0x00,0x00, // 4
0x00,0x00,0x00,0x00,0x1F,0xF8,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1F,0xE0,0x1F,0xF0,0x00,0x78,0x00,0x38,0x1C,0x38,0x1C,0x70,0x0F,0xE0,0x00,0x00,0x00,0x00, // 5
0x00,0x00,0x00,0x00,0x03,0xE0,0x07,0x00,0x0E,0x00,0x1C,0x00,0x1C,0x00,0x1F,0xF0,0x1F,0xF8,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x0F,0xF0,0x00,0x00,0x00,0x00, // 6
0x00,0x00,0x00,0x00,0x1F,0xFC,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x00,0x1C,0x00,0x38,0x00,0x70,0x00,0xE0,0x01,0xC0,0x03,0x80,0x03,0x80,0x03,0x80,0x00,0x00,0x00,0x00, // 7
0x00,0x00,0x00,0x00,0x0F,0xF0,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1F,0x38,0x07,0xE0,0x07,0xE0,0x1C,0xF8,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x0F,0xF0,0x00,0x00,0x00,0x00, // 8
0x00,0x00,0x00,0x00,0x0F,0xF0,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1F,0xF8,0x0F,0xF8,0x00,0x38,0x00,0x38,0x00,0x70,0x00,0xE0,0x07,0xC0,0x00,0x00,0x00,0x00, // 9
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x03,0x80,0x03,0x80,0x00,0x00,0x00,0x00,0x03,0x80,0x03,0x80,0x03,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // :
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x80,0x03,0x80,0x03,0x80,0x00,0x00,0x00,0x00,0x03,0x80,0x03,0x80,0x03,0x80,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ;
0x00,0x00,0x00,0x70,0x00,0xE0,0x01,0xC0,0x03,0x80,0x07,0x00,0x0E,0x00,0x1C,0x00,0x1C,0x00,0x0E,0x00,0x07,0x00,0x03,0x80,0x01,0xC0,0x00,0xE0,0x00,0x70,0x00,0x00, // <
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3F,0xFC,0x3F,0xFC,0x00,0x00,0x00,0x00,0x3F,0xFC,0x3F,0xFC,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // =
0x00,0x00,0x1C,0x00,0x0E,0x00,0x07,0x00,0x03,0x80,0x01,0xC0,0x00,0xE0,0x00,0x70,0x00,0x70,0x00,0xE0,0x01,0xC0,0x03,0x80,0x07,0x00,0x0E,0x00,0x1C,0x00,0x00,0x00, // >
0x00,0x00,0x03,0xC0,0x0F,0xF0,0x1E,0x78,0x18,0x38,0x00,0x38,0x00,0x70,0x00,0xE0,0x01,0xC0,0x01,0xC0,0x00,0x00,0x00,0x00,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x00,0x00, // ?
0x00,0x00,0x0F,0xF8,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0xFC,0x1C,0xFC,0x1C,0xFC,0x1C,0xFC,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1F,0xF0,0x07,0xF8,0x00,0x00, // @
0x00,0x00,0x00,0x00,0x03,0xC0,0x07,0xE0,0x0E,0x70,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1F,0xF8,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x00,0x00,0x00,0x00, // A
0x00,0x00,0x00,0x00,0x1F,0xF0,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0F,0xF0,0x0F,0xF0,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x1F,0xF0,0x00,0x00,0x00,0x00, // B
0x00,0x00,0x00,0x00,0x07,0xF0,0x0E,0x38,0x1C,0x38,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0x38,0x0E,0x38,0x07,0xF0,0x00,0x00,0x00,0x00, // C
0x00,0x00,0x00,0x00,0x1F,0xE0,0x0E,0x70,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x70,0x1F,0xE0,0x00,0x00,0x00,0x00, // D
0x00,0x00,0x00,0x00,0x1F,0xF8,0x0E,0x18,0x0E,0x08,0x0E,0x00,0x0E,0x30,0x0F,0xF0,0x0F,0xF0,0x0E,0x30,0x0E,0x00,0x0E,0x08,0x0E,0x18,0x1F,0xF8,0x00,0x00,0x00,0x00, // E
0x00,0x00,0x00,0x00,0x1F,0xF8,0x0E,0x18,0x0E,0x08,0x0E,0x00,0x0E,0x30,0x0F,0xF0,0x0F,0xF0,0x0E,0x30,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x1F,0x00,0x00,0x00,0x00,0x00, // F
0x00,0x00,0x00,0x00,0x07,0xF0,0x0E,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x00,0x1C,0x00,0x1C,0x00,0x1C,0xF8,0x1C,0x38,0x1C,0x38,0x0E,0x38,0x07,0xF8,0x00,0x00,0x00,0x00, // G
0x00,0x00,0x00,0x00,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1F,0xF0,0x1F,0xF0,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x00,0x00,0x00,0x00, // H
0x00,0x00,0x00,0x00,0x0F,0xE0,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x0F,0xE0,0x00,0x00,0x00,0x00, // I
0x00,0x00,0x00,0x00,0x01,0xFC,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x38,0x70,0x38,0x70,0x38,0x70,0x38,0x70,0x0F,0xE0,0x00,0x00,0x00,0x00, // J
0x00,0x00,0x00,0x00,0x1E,0x38,0x0E,0x38,0x0E,0x70,0x0E,0xE0,0x0F,0xC0,0x0F,0x80,0x0F,0x80,0x0F,0xC0,0x0E,0xE0,0x0E,0x70,0x0E,0x38,0x1E,0x38,0x00,0x00,0x00,0x00, // K
0x00,0x00,0x00,0x00,0x1F,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x08,0x0E,0x18,0x0E,0x38,0x1F,0xF8,0x00,0x00,0x00,0x00, // L
0x00,0x00,0x00,0x00,0x1C,0x1C,0x1E,0x3C,0x1F,0x7C,0x1F,0xFC,0x1F,0xFC,0x1D,0xDC,0x1C,0x9C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x00,0x00,0x00,0x00, // M
0x00,0x00,0x00,0x00,0x1C,0x1C,0x1C,0x1C,0x1E,0x1C,0x1F,0x1C,0x1F,0x9C,0x1D,0xDC,0x1C,0xFC,0x1C,0x7C,0x1C,0x3C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x00,0x00,0x00,0x00, // N
0x00,0x00,0x00,0x00,0x03,0xE0,0x07,0xF0,0x0E,0x38,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x0E,0x38,0x07,0xF0,0x03,0xE0,0x00,0x00,0x00,0x00, // O
0x00,0x00,0x00,0x00,0x1F,0xF0,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0F,0xF0,0x0F,0xF0,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x1F,0x00,0x00,0x00,0x00,0x00, // P
0x00,0x00,0x00,0x00,0x03,0xE0,0x0F,0x78,0x0E,0x38,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x7C,0x1C,0xFC,0x0F,0xF8,0x0F,0xF8,0x00,0x38,0x00,0xFC,0x00,0x00, // Q
0x00,0x00,0x00,0x00,0x1F,0xF0,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0F,0xF0,0x0F,0xF0,0x0E,0x70,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x1E,0x38,0x00,0x00,0x00,0x00, // R
0x00,0x00,0x00,0x00,0x0F,0xF0,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x00,0x0F,0xE0,0x07,0xF0,0x00,0x38,0x1C,0x38,0x1C,0x38,0x1C,0x38,0x0F,0xF0,0x00,0x00,0x00,0x00, // S
0x00,0x00,0x00,0x00,0x1F,0xFC,0x19,0xCC,0x11,0xC4,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x07,0xF0,0x00,0x00,0x00,0x00, // T
0x00,0x00,0x00,0x00,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x0F,0xE0,0x00,0x00,0x00,0x00, // U
0x00,0x00,0x00,0x00,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x0E,0xE0,0x07,0xC0,0x03,0x80,0x00,0x00,0x00,0x00, // V
0x00,0x00,0x00,0x00,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x9C,0x1C,0x9C,0x1C,0x9C,0x0F,0xF8,0x0F,0xF8,0x07,0x70,0x07,0x70,0x00,0x00,0x00,0x00, // W
0x00,0x00,0x00,0x00,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x0E,0xE0,0x07,0xC0,0x03,0x80,0x03,0x80,0x07,0xC0,0x0E,0xE0,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x00,0x00,0x00,0x00, // X
0x00,0x00,0x00,0x00,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x0E,0xE0,0x07,0xC0,0x03,0x80,0x03,0x80,0x03,0x80,0x03,0x80,0x0F,0xE0,0x00,0x00,0x00,0x00, // Y
0x00,0x00,0x00,0x00,0x1F,0xF8,0x1C,0x38,0x18,0x38,0x10,0x70,0x00,0xE0,0x01,0xC0,0x03,0x80,0x07,0x00,0x0E,0x08,0x1C,0x18,0x1C,0x38,0x1F,0xF8,0x00,0x00,0x00,0x00, // Z
0x00,0x00,0x00,0x00,0x07,0xF0,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0xF0,0x00,0x00,0x00,0x00, // [
0x00,0x00,0x00,0x00,0x10,0x00,0x18,0x00,0x1C,0x00,0x0E,0x00,0x07,0x00,0x03,0x80,0x01,0xC0,0x00,0xE0,0x00,0x70,0x00,0x38,0x00,0x1C,0x00,0x07,0x00,0x00,0x00,0x00, // <Backslash>
0x00,0x00,0x00,0x00,0x07,0xF0,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x07,0xF0,0x00,0x00,0x00,0x00, // ]
0x00,0x00,0x01,0x80,0x03,0xC0,0x07,0xE0,0x0E,0x70,0x1C,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ^
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFF,0x7F,0xFF, // _
0x00,0x00,0x00,0x00,0x1C,0x00,0x1C,0x00,0x07,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // '
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xE0,0x00,0x70,0x00,0x70,0x0F,0xF0,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x0F,0xD8,0x00,0x00,0x00,0x00, // a
0x00,0x00,0x00,0x00,0x1E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0F,0xF0,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x1B,0xF0,0x00,0x00,0x00,0x00, // b
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xE0,0x1C,0x70,0x1C,0x70,0x1C,0x00,0x1C,0x00,0x1C,0x70,0x1C,0x70,0x0F,0xE0,0x00,0x00,0x00,0x00, // c
0x00,0x00,0x00,0x00,0x00,0xF8,0x00,0x70,0x00,0x70,0x00,0x70,0x0F,0xF0,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x0F,0xD8,0x00,0x00,0x00,0x00, // d
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xE0,0x1C,0x70,0x1C,0x70,0x1F,0xF0,0x1C,0x00,0x1C,0x70,0x1C,0x70,0x0F,0xE0,0x00,0x00,0x00,0x00, // e
0x00,0x00,0x00,0x00,0x03,0xE0,0x07,0x70,0x07,0x70,0x07,0x00,0x07,0x00,0x1F,0xE0,0x1F,0xE0,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x1F,0xC0,0x00,0x00,0x00,0x00, // f
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xD8,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x0F,0xF0,0x07,0xF0,0x00,0x70,0x1C,0x70,0x0F,0xE0, // g
0x00,0x00,0x00,0x00,0x1E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0xF0,0x0F,0x38,0x0F,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x1E,0x38,0x00,0x00,0x00,0x00, // h
0x00,0x00,0x00,0x00,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x00,0x00,0x0F,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x0F,0xF8,0x00,0x00,0x00,0x00, // i
0x00,0x00,0x00,0x00,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x00,0x03,0xF0,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x00,0x70,0x1C,0x70,0x0C,0xF0,0x07,0xE0, // j
0x00,0x00,0x00,0x00,0x1E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x38,0x0E,0x70,0x0E,0xE0,0x0F,0xC0,0x0E,0xE0,0x0E,0x70,0x0E,0x38,0x1E,0x38,0x00,0x00,0x00,0x00, // k
0x00,0x00,0x00,0x00,0x0F,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x0F,0xF8,0x00,0x00,0x00,0x00, // l
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xF8,0x1C,0x9C,0x1C,0x9C,0x1C,0x9C,0x1C,0x9C,0x1C,0x9C,0x1C,0x9C,0x1C,0x9C,0x00,0x00,0x00,0x00, // m
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xE0,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x00,0x00,0x00,0x00, // n
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xE0,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x0F,0xE0,0x00,0x00,0x00,0x00, // o
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1B,0xF0,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0F,0xF0,0x0E,0x00,0x0E,0x00,0x1F,0x00, // p
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xB0,0x38,0xE0,0x38,0xE0,0x38,0xE0,0x38,0xE0,0x38,0xE0,0x1F,0xE0,0x00,0xE0,0x00,0xE0,0x01,0xF0, // q
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1E,0xF0,0x0F,0xF8,0x0F,0x38,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x0E,0x00,0x1F,0x00,0x00,0x00,0x00,0x00, // r
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xE0,0x1C,0x30,0x1C,0x30,0x0F,0x80,0x03,0xE0,0x18,0x70,0x18,0x70,0x0F,0xE0,0x00,0x00,0x00,0x00, // s
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x03,0x00,0x07,0x00,0x1F,0xF0,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x00,0x07,0x70,0x07,0x70,0x03,0xE0,0x00,0x00,0x00,0x00, // t
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x0F,0xD8,0x00,0x00,0x00,0x00, // u
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x1C,0x70,0x0E,0xE0,0x07,0xC0,0x03,0x80,0x00,0x00,0x00,0x00, // v
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x9C,0x1C,0x9C,0x0F,0xF8,0x07,0x70,0x07,0x70,0x00,0x00,0x00,0x00, // w
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1C,0xE0,0x1C,0xE0,0x0F,0xC0,0x07,0x80,0x07,0x80,0x0F,0xC0,0x1C,0xE0,0x1C,0xE0,0x00,0x00,0x00,0x00, // x
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x0E,0x38,0x07,0xF0,0x03,0xE0,0x00,0xE0,0x01,0xC0,0x1F,0x80, // y
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xE0,0x18,0xE0,0x11,0xC0,0x03,0x80,0x07,0x00,0x0E,0x20,0x1C,0x60,0x1F,0xE0,0x00,0x00,0x00,0x00, // z
0x00,0x00,0x00,0x00,0x01,0xF8,0x03,0x80,0x03,0x80,0x03,0x80,0x07,0x00,0x1C,0x00,0x1C,0x00,0x07,0x00,0x03,0x80,0x03,0x80,0x03,0x80,0x01,0xF8,0x00,0x00,0x00,0x00, // {
0x00,0x00,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x00,0x00, // |
0x00,0x00,0x00,0x00,0x1F,0x80,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x00,0xE0,0x00,0x38,0x00,0x38,0x00,0xE0,0x01,0xC0,0x01,0xC0,0x01,0xC0,0x1F,0x80,0x00,0x00,0x00,0x00, // }
0x00,0x00,0x00,0x00,0x1F,0x1C,0x3B,0x9C,0x39,0xDC,0x38,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00  // ~
};




/*DefinesCode_End*/

/*InitialisationCode_Start*/

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


/*InitialisationCode_End*/

/*InterruptCode_Start*/
/*InterruptCode_End*/

/********************************************************************
 * FUNCTIONS
 ********************************************************************/


void Write_Command(MX_UINT16 Wcommand)
{
/*Macro_Write_Command_Start*/

  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;

/*Macro_Write_Command_End*/
}


void Write_Data(MX_UINT16 Wdata)
{
/*Macro_Write_Data_Start*/

  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 ;

/*Macro_Write_Data_End*/
}


void Write_Command_Data(MX_UINT16 Wcommand, MX_UINT16 Wdata)
{
/*Macro_Write_Command_Data_Start*/

   Write_Command(Wcommand);
   Write_Data(Wdata);

/*Macro_Write_Command_Data_End*/
}


void TFT_Set_Address(MX_UINT16 PX1, MX_UINT16 PY1, MX_UINT16 PX2, MX_UINT16 PY2)
{
/*Macro_TFT_Set_Address_Start*/

  Write_Command_Data(68,(PX2 << 8) + PX1 );  	//Column address start2
  Write_Command_Data(69,PY1);      		//Column address start1
  Write_Command_Data(70,PY2);  			//Column address end2
  Write_Command_Data(78,PX1);      		//Column address end1
  Write_Command_Data(79,PY1);  			//Row address start2
  Write_Command(34);

/*Macro_TFT_Set_Address_End*/
}

void TFT_Init()
{
/*Macro_TFT_Init_Start*/

        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;

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

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

/*Macro_TFT_Init_End*/
}


MX_UINT16 Set_color(MX_UINT16 r, MX_UINT16 g, MX_UINT16 b)
{
/*Macro_Set_color_Start*/

  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;

/*Macro_Set_color_End*/
}


void TFT_Fill(MX_UINT16 color)
{
/*Macro_TFT_Fill_Start*/

  MX_UINT16 i,j;

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

  TFT_Set_Address(0,0,239,319);
  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;

/*Macro_TFT_Fill_End*/
}

void TFT_Box(MX_UINT16 x1, MX_UINT16 y1, MX_UINT16 x2, MX_UINT16 y2, MX_UINT16 color)
{
/*Macro_TFT_Box_Start*/

  MX_UINT16  i,j;

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

  TFT_Set_Address(x1,y1,x2,y2);
  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;

/*Macro_TFT_Box_End*/
}


void TFT_Dot(MX_UINT16 x, MX_UINT16 y, MX_UINT16 color)
{
/*Macro_TFT_Dot_Start*/

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

  TFT_Set_Address(x,y,x,y);
  Write_Data(color);

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

/*Macro_TFT_Dot_End*/
}


void TFT_Line(MX_UINT16 x1, MX_UINT16 y1, MX_UINT16 x2, MX_UINT16 y2, MX_UINT16 color)
{
/*Macro_TFT_Line_Start*/

  unsigned long x, y, steps;
  short dx, dy;
  unsigned long addx, addy;
  short 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++)
  {
     TFT_Dot(x,y,color);
     x = x1 + ((i*addx)/50);
     y = y1 + ((i*addy)/50); 
  }

/*Macro_TFT_Line_End*/
}


void TFT_H_Line(char x1, char x2, MX_UINT16 y_pos, MX_UINT16 color)
{
/*Macro_TFT_H_Line_Start*/

  TFT_Line( x1, y_pos, x2, y_pos, color);

/*Macro_TFT_H_Line_End*/

}


void TFT_V_Line(MX_UINT16 y1, MX_UINT16 y2, char x_pos, MX_UINT16 color)
{
/*Macro_TFT_V_Line_Start*/

  TFT_Line( x_pos, y1, x_pos, y2, color);

/*Macro_TFT_V_Line_End*/
}


void TFT_Rectangle(MX_UINT16 x1, MX_UINT16 y1, MX_UINT16 x2, MX_UINT16 y2, MX_UINT16 color)
{
/*Macro_TFT_Rectangle_Start*/

  TFT_H_Line(x1,x2,y1,color);
  TFT_H_Line(x1,x2,y2,color);
  TFT_V_Line(y1,y2,x1,color);
  TFT_V_Line(y1,y2,x2,color);

/*Macro_TFT_Rectangle_End*/
}




void TFT_Char(char C, MX_UINT16 x, MX_UINT16 y, char DimFont, MX_UINT16 Fcolor, MX_UINT16 Bcolor)
{
/*Macro_TFT_Char_Start*/

  cons char* 	ptrfont;
  MX_UINT16 	Cptrfont;
  MX_UINT16 	font8x8[8];
  MX_UINT16 	font16x16[16];
  char 		k,i,print1,print2;
  MX_UINT16 	print3,print4;

  if(DimFont == 8)
  {
     ptrfont = &Font_8x8;
     Cptrfont = (C-32)*8;
     ptrfont = ptrfont + Cptrfont;

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

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

  else if(DimFont == 16)
  {
     ptrfont = &Font_16x16;
     Cptrfont = (C-32)*32;
     ptrfont = ptrfont + Cptrfont;

     for(k = 0; k <= 15; k++)
     {
      font16x16[k] = *ptrfont;
      ptrFont++;
      font16x16[k] = (font16x16[k] << 8);
      font16x16[k] = font16x16[k] + *ptrfont;
      ptrFont++;
     }

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

     TFT_Set_Address(x,y,x+15,y+15);
     for(i = 0; i <= 15; i++)
     {
       for(k = 0; k <= 15; k++)
       {
        print3 = (font16x16[i] & 0x8000);
        print4 = print3 >>15;

        if(print4 == 1)
        {
           Write_Data(Fcolor);
        }
        else
        {
           Write_Data(Bcolor);
        }

        font16x16[i] = font16x16[i] << 1;
       }
     }

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

/*Macro_TFT_Char_End*/
}



void TFT_Circle(MX_UINT16 x, MX_UINT16 y, char radius, char fill, MX_UINT16 color)
{
/*Macro_TFT_Circle_Start*/

   short atmp,bvar,P_Rad;
   atmp = 0;
   bvar = radius;
   P_Rad = 1 - radius;
   while (atmp <= bvar)
   {
    if(fill == 1)
    {
         TFT_Box(x-atmp,y-bvar,x+atmp,y+bvar,color);
         TFT_Box(x-bvar,y-atmp,x+bvar,y+atmp,color);
    }
    else
    {
         TFT_Dot(atmp+x, bvar+y, color);
         TFT_Dot(bvar+x, atmp+y, color);
         TFT_Dot(x-atmp, bvar+y, color);
         TFT_Dot(x-bvar, atmp+y, color);
         TFT_Dot(bvar+x, y-atmp, color);
         TFT_Dot(atmp+x, y-bvar, color);
         TFT_Dot(x-atmp, y-bvar, color);
         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 --;
    }
   }

/*Macro_TFT_Circle_End*/
}
