//************************************************************************************
//**  
//**  File name:     H:\Display Files\Display Text & Simple Fill Box.c
//**  Generated by:  Flowcode v4.5.18.74
//**  Date:          Tuesday, November 15, 2011 19:04:49
//**  Licence:       Professional
//**  Registered to: Mr John Crow
//**  
//**  
//**  http://www.matrixmultimedia.com
//************************************************************************************


#define MX_PIC

//Defines for microcontroller
#define P16F877A
#define MX_EE
#define MX_EE_TYPE2
#define MX_EE_SIZE 256
#define MX_SPI
#define MX_SPI_C
#define MX_SPI_SDI 4
#define MX_SPI_SDO 5
#define MX_SPI_SCK 3
#define MX_UART
#define MX_UART_C
#define MX_UART_TX 6
#define MX_UART_RX 7
#define MX_I2C
#define MX_MI2C
#define MX_I2C_C
#define MX_I2C_SDA 4
#define MX_I2C_SCL 3
#define MX_PWM
#define MX_PWM_CNT 2
#define MX_PWM_TRIS1 trisc
#define MX_PWM_1 2
#define MX_PWM_TRIS2 trisc
#define MX_PWM_2 1

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

//Configuration data
#ifdef _BOOSTC
#pragma DATA 0x2007, 0x3f3a
#endif
#ifdef HI_TECH_C
__CONFIG(0x3f3a);
#endif

//Internal functions
#include "C:\Program Files (x86)\Matrix Multimedia\Flowcode V4\FCD\internals.h"

//Macro function declarations
void FCM_ClearLCD();
void FCM_Text();


//Variable declarations
char FCV_LCD_W;
char FCV_DRAW;
char FCV_X;
char FCV_Y;
char FCV_ACK;
char FCV_INT_COUNT;
char FCV_LCD_R;




//I2C(0): //Defines:

/**** Macro Substitutions ****
1 = SM BUS Enable
1 = Slew Rate Enable
98 = Baud Rate
1 = Hardware or Bitbanged I2C
portc = Bitbanged Port Register
trisc = Bitbanged Data Direction Register
3 = Bitbanged Clock Pin
4 = Bitbanged Data Pin
MI2C_460460 = Unique component ID
******************************/

//common defines
#define MI2C_460460_MX_MI2C_SMBUS  	1
#define MI2C_460460_MX_MI2C_SLEW  	1
#define MI2C_460460_MX_MI2C_BAUD 	(98/2)
#define MI2C_460460_MX_HARDWARE  	1

#if MI2C_460460_MX_HARDWARE == 1
  #ifdef MX_I2C_A
    #define MI2C_460460_MX_TRIS trisa
    #define MI2C_460460_MX_PORT porta
  #endif
  #ifdef MX_I2C_B
    #define MI2C_460460_MX_TRIS trisb
    #define MI2C_460460_MX_PORT portb
  #endif
  #ifdef MX_I2C_C
    #define MI2C_460460_MX_TRIS trisc
    #define MI2C_460460_MX_PORT portc
  #endif
  #ifdef MX_I2C_D
    #define MI2C_460460_MX_TRIS trisd
    #define MI2C_460460_MX_PORT portd
  #endif
  #define MI2C_460460_MX_SCL MX_I2C_SCL
  #define MI2C_460460_MX_SDA MX_I2C_SDA
#else
  #define MI2C_460460_MX_PORT    portc
  #define MI2C_460460_MX_TRIS    trisc
  #define MI2C_460460_MX_SCL     3
  #define MI2C_460460_MX_SDA     4
#endif

#define MI2C_460460_MX_I2C_DELAY 	delay_us(5);
#define MI2C_460460_SET_SCL			set_bit(MI2C_460460_MX_TRIS,MI2C_460460_MX_SCL);
#define MI2C_460460_CLEAR_SCL		{clear_bit(MI2C_460460_MX_TRIS,MI2C_460460_MX_SCL); clear_bit(MI2C_460460_MX_PORT,MI2C_460460_MX_SCL);}
#define MI2C_460460_SET_SDA			set_bit(MI2C_460460_MX_TRIS,MI2C_460460_MX_SDA);
#define MI2C_460460_CLEAR_SDA		{clear_bit(MI2C_460460_MX_TRIS,MI2C_460460_MX_SDA); clear_bit(MI2C_460460_MX_PORT,MI2C_460460_MX_SDA);}




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

void FCD_I2C0_MI2C_Init();
void FCD_I2C0_MI2C_Start();
void FCD_I2C0_MI2C_Restart();
void FCD_I2C0_MI2C_Stop();
char FCD_I2C0_MI2C_Transmit_Byte(char Data);
char FCD_I2C0_MI2C_Receive_Byte(char Last);
void FCD_I2C0_MI2C_Send_Byte_Transaction(char Device_ID, char AddrH, char AddrL, char Data);
char FCD_I2C0_MI2C_Receive_Byte_Transaction(char Device_ID, char AddrH, char AddrL);



//I2C(0): //Macro implementations


void FCD_I2C0_MI2C_Init()
{
	
	#ifdef MX_MIAC_SYSTEM
	  #if (1 != MX_MIAC_MM_MIAC_BASE)

		unsigned int ModID = ((trisc << 5) + portc) << 9;

		MIAC_CAN_TX[0] = 1;			//SMBUS
		MIAC_CAN_TX[1] = 1;			//Slew
		MIAC_CAN_TX[2] = (98 >> 8);		//Baud_H
		MIAC_CAN_TX[3] = 98;			//Baud_L

		MIAC_Module_WR(ModID, 384, 4,1,0);
		MIAC_Module_GetAck(ModID + 32, 384, 20);
	  #endif
	#else
		#if MI2C_460460_MX_HARDWARE == 1									//Use Master I2C Hardware
			#ifndef MX_MI2C
				#error "This chip does not have Master I2C capability"
			#else
				#if MI2C_460460_MX_MI2C_SLEW == 1
					cr_bit (sspstat,SMP);					//Slew Rate Control Enabled
				#else
					st_bit (sspstat,SMP);					//Slew Rate Control Disabled
				#endif
				#if MI2C_460460_MX_MI2C_SMBUS == 1
					st_bit (sspstat,CKE);					//Enable SMBus specific inputs
				#else
					cr_bit (sspstat,CKE);					//Disable SMBus specific inputs
				#endif

				#ifdef _BOOSTC
				  #ifdef SSPCON
					sspcon = 0x28;								//Setup I2C into Master Mode
				  #endif
				  #ifdef SSPCON1
					sspcon1 = 0x28;								//Setup I2C into Master Mode
				  #endif
				#endif

				#ifdef HI_TECH_C
				  #ifdef sspcon
					sspcon = 0x28;								//Setup I2C into Master Mode
				  #endif
				  #ifdef sspcon1
					sspcon1 = 0x28;								//Setup I2C into Master Mode
				  #endif
				#endif

				sspadd = MI2C_460460_MX_MI2C_BAUD;						//Set the Baud Rate
				sspcon2 = 0x00;								//Clear the control bits
				st_bit(intcon, GIE);
				set_bit(MI2C_460460_MX_TRIS, MI2C_460460_MX_SCL);			//Configure SCL as Input
				set_bit(MI2C_460460_MX_TRIS, MI2C_460460_MX_SDA);			//Configure SDA as Input
			#endif
		#else												//Use Software
	    	clear_bit(MI2C_460460_MX_PORT,MI2C_460460_MX_SCL);						//Set Outputs to 0
			clear_bit(MI2C_460460_MX_PORT,MI2C_460460_MX_SDA);
			MI2C_460460_SET_SDA;										//Configure SDA as Input
			MI2C_460460_SET_SCL;										//Configure SCL as Input
		#endif
	#endif

}

void FCD_I2C0_MI2C_Start()
{
	
	#ifdef MX_MIAC_SYSTEM
	  #if (1 != MX_MIAC_MM_MIAC_BASE)

		unsigned int ModID = ((trisc << 5) + portc) << 9;

		MIAC_Module_WR(ModID, 385, 0,1,0);
		MIAC_Module_GetAck(ModID + 32, 385, 20);
	  #endif
	#else
		#if MI2C_460460_MX_HARDWARE == 1								//Use Master I2C Hardware
			#ifndef MX_MI2C
				#error "This chip does not have Master I2C capability"
			#else
				cr_bit(pir1,SSPIF);							//Clear SSP interrupt flag
				st_bit(sspcon2,SEN);						//Initiate start condition
				while(ts_bit(sspcon2,SEN));					//Wait for start bit to be generated
			#endif
		#else												//Use Software I2C
			MI2C_460460_SET_SCL;										//Make Sure SCL is Set
			MI2C_460460_SET_SDA;										//Make Sure SDA is Set
			MI2C_460460_MX_I2C_DELAY;									//Small Delay
			MI2C_460460_CLEAR_SDA;										//Clear SDA
			MI2C_460460_MX_I2C_DELAY;
			MI2C_460460_CLEAR_SCL;										//Clear SCL
			MI2C_460460_MX_I2C_DELAY;
		#endif
	#endif

}

void FCD_I2C0_MI2C_Restart()
{
	
	#ifdef MX_MIAC_SYSTEM
	  #if (1 != MX_MIAC_MM_MIAC_BASE)

		unsigned int ModID = ((trisc << 5) + portc) << 9;

		MIAC_Module_WR(ModID, 386, 0,1,0);
		MIAC_Module_GetAck(ModID + 32, 386, 20);
	  #endif
	#else
		#if MI2C_460460_MX_HARDWARE == 1									//Use Master I2C Hardware
			#ifndef MX_MI2C
				#error "This chip does not have Master I2C capability"
			#else
				cr_bit(pir1,SSPIF);							//Clear SSP interrupt flag
				st_bit(sspcon2,RSEN);						//Initiate restart condition
				while(ts_bit(sspcon2,RSEN));				//Wait for restart bit to be generated
			#endif
		#else												//Use Software I2C
			MI2C_460460_SET_SDA;										//Set SDA High
			MI2C_460460_MX_I2C_DELAY;
			MI2C_460460_SET_SCL;										//Set SCL High
			MI2C_460460_MX_I2C_DELAY;
			MI2C_460460_CLEAR_SDA;										//Set SDA Low
			MI2C_460460_MX_I2C_DELAY;
			MI2C_460460_CLEAR_SCL;										//Set SCL Low
			MI2C_460460_MX_I2C_DELAY;
		#endif
	#endif

}

void FCD_I2C0_MI2C_Stop()
{
	
	#ifdef MX_MIAC_SYSTEM
	  #if (1 != MX_MIAC_MM_MIAC_BASE)

		unsigned int ModID = ((trisc << 5) + portc) << 9;

		MIAC_Module_WR(ModID, 387, 0,1,0);
		MIAC_Module_GetAck(ModID + 32, 387, 20);
	  #endif
	#else
		#if MI2C_460460_MX_HARDWARE == 1									//Use Master I2C Hardware
			#ifndef MX_MI2C
				#error "This chip does not have Master I2C capability"
			#else
				cr_bit(pir1,SSPIF);							//Clear SSP interrupt flag
				st_bit(sspcon2,PEN);						//Initiate stop condition
				while(ts_bit(sspcon2,PEN));					//Wait for stop bit to be generated
				delay_ms(10);								//Wait before reusing the I2C BUS
			#endif
		#else												//Use Software I2C
			MI2C_460460_CLEAR_SCL;										//Set SCL Low
			MI2C_460460_CLEAR_SDA;										//Set SDA Low
			MI2C_460460_MX_I2C_DELAY;
			MI2C_460460_SET_SCL;										//Set SCL High
			MI2C_460460_MX_I2C_DELAY;
			MI2C_460460_SET_SDA;										//Set SDA High
			delay_ms(10);									//Wait before reusing the I2C BUS
		#endif
	#endif
}

char FCD_I2C0_MI2C_Transmit_Byte(char Data)
{
	
	#ifdef MX_MIAC_SYSTEM
	  #if (1 != MX_MIAC_MM_MIAC_BASE)

		unsigned int ModID = ((trisc << 5) + portc) << 9;

		MIAC_CAN_TX[0] = Data;		//Data

		MIAC_Module_WR(ModID, 388, 1,1,0);
		MIAC_Module_GetAck(ModID + 32, 388, 20);
		return(MIAC_CAN_RX[0]);
	  #endif
	#else
		#if MI2C_460460_MX_HARDWARE == 1									//Use Master I2C Hardware
			#ifndef MX_MI2C
				#error "This chip does not have Master I2C capability"
			#else
				cr_bit(pir1,SSPIF);							//Clear SSP interrupt flag
				sspbuf=Data;								//Send byte
				while(ts_bit(pir1,SSPIF) == 0);				//Wait for control bit to be sent
				if(ts_bit(sspcon2,ACKSTAT))					//Check Acknowledgement
					return (1);								//No Acknowledgement
				else return (0);							//Acknowledgement received
			#endif
		#else												//Use Software I2C
			char bit_mask;
			char local_ack = 0;
			for(bit_mask=0x80;bit_mask;bit_mask=bit_mask>>1)
			{
				if(Data & bit_mask)
				{
					MI2C_460460_SET_SDA;								//Set SDA High
				} else {
					MI2C_460460_CLEAR_SDA;								//Set SDA Low
				}
				MI2C_460460_MX_I2C_DELAY;
				MI2C_460460_SET_SCL;									//Set SCL High
				MI2C_460460_MX_I2C_DELAY;
				MI2C_460460_CLEAR_SCL;									//Set SCL Low
				MI2C_460460_MX_I2C_DELAY;
			}
			MI2C_460460_SET_SDA;										//Set SDA High
			MI2C_460460_MX_I2C_DELAY;
			MI2C_460460_SET_SCL;										//Set SCL High
			MI2C_460460_MX_I2C_DELAY;
			if (test_bit(MI2C_460460_MX_PORT,MI2C_460460_MX_SDA))					//Get the Status Bit
				local_ack = 1;
			MI2C_460460_MX_I2C_DELAY;
			MI2C_460460_CLEAR_SCL;										//Set SCL Low
			MI2C_460460_MX_I2C_DELAY;
			return (local_ack);								//0 = Ack received : 1 = Ack not received
		#endif
	#endif
}

char FCD_I2C0_MI2C_Receive_Byte(char Last)
{
	
	#ifdef MX_MIAC_SYSTEM
	  #if (1 != MX_MIAC_MM_MIAC_BASE)

		unsigned int ModID = ((trisc << 5) + portc) << 9;

		MIAC_CAN_TX[0] = Last;

		MIAC_Module_WR(ModID, 389, 1,1,0);
		MIAC_Module_GetAck(ModID + 32, 389, 20);
		return(MIAC_CAN_RX[0]);
	  #endif
	#else
		#if MI2C_460460_MX_HARDWARE == 1									//Use Master I2C Hardware
			#ifndef MX_MI2C
				#error "This chip does not have Master I2C capability"
			#else
				cr_bit(pir1,SSPIF);							//Clear SSP interrupt flag
				st_bit(sspcon2,RCEN);						//Initiate Read
				while(ts_bit(pir1,SSPIF) == 0);				//Wait for data read
				if (Last)
					st_bit(sspcon2,ACKDT);					//Send Nack
				else cr_bit(sspcon2,ACKDT);					//Send Ack
				st_bit(sspcon2,ACKEN);						//Initiate Nack
				while(ts_bit(sspcon2,ACKEN));				//Wait for data read
				return(sspbuf);								//Store incoming data
			#endif
		#else												//Use Software I2C
			char bit_mask;
			char Data = 0;
			char local_ack;
			MI2C_460460_SET_SDA;										//Set SDA High
			MI2C_460460_MX_I2C_DELAY;
			for(bit_mask=0x80;bit_mask;bit_mask=bit_mask>>1)
			{
				MI2C_460460_SET_SCL;									//Set SCL High
				MI2C_460460_MX_I2C_DELAY;
				MI2C_460460_SET_SDA;
				if(test_bit(MI2C_460460_MX_PORT,MI2C_460460_MX_SDA))				//Read Incoming Bit
					Data = Data | bit_mask;					//Add data to variable
				MI2C_460460_CLEAR_SCL;									//Set SCL Low
				MI2C_460460_MX_I2C_DELAY;
			}
			if (Last)										//Acknowledge?
			{
				MI2C_460460_SET_SDA;									//Send Nack
			} else {
				MI2C_460460_CLEAR_SDA;									//Send Ack
			}
			MI2C_460460_MX_I2C_DELAY;
			MI2C_460460_SET_SCL;										//Set SCL High
			MI2C_460460_MX_I2C_DELAY;
			MI2C_460460_CLEAR_SCL;										//Set SCL Low
			MI2C_460460_MX_I2C_DELAY;
			return (Data);
		#endif
	#endif
}

void FCD_I2C0_MI2C_Send_Byte_Transaction(char Device_ID, char AddrH, char AddrL, char Data)
{
	
	#ifdef MX_MIAC_SYSTEM
	  #if (1 != MX_MIAC_MM_MIAC_BASE)

		unsigned int ModID = ((trisc << 5) + portc) << 9;

		MIAC_CAN_TX[0] = Device_ID;
		MIAC_CAN_TX[1] = AddrH;
		MIAC_CAN_TX[2] = AddrL;
		MIAC_CAN_TX[3] = Data;

		MIAC_Module_WR(ModID, 390, 4,1,0);
		MIAC_Module_GetAck(ModID + 32, 390, 20);
	  #endif
	#else
		Device_ID = Device_ID << 1;			//Shift Device ID to enable write mode

		FCD_I2C0_MI2C_Start();						//Start transaction
		FCD_I2C0_MI2C_Transmit_Byte(Device_ID);		//Transmit Device Address
		FCD_I2C0_MI2C_Transmit_Byte(AddrH);			//Transmit Internal Address
		FCD_I2C0_MI2C_Transmit_Byte(AddrL);
		FCD_I2C0_MI2C_Transmit_Byte(Data);			//Send Data byte
		FCD_I2C0_MI2C_Stop();						//Stop Transaction
	#endif

}

char FCD_I2C0_MI2C_Receive_Byte_Transaction(char Device_ID, char AddrH, char AddrL)
{
	
	#ifdef MX_MIAC_SYSTEM
	  #if (1 != MX_MIAC_MM_MIAC_BASE)

		unsigned int ModID = ((trisc << 5) + portc) << 9;

		MIAC_CAN_TX[0] = Device_ID;
		MIAC_CAN_TX[1] = AddrH;
		MIAC_CAN_TX[2] = AddrL;

		MIAC_Module_WR(ModID, 391, 3,1,0);
		MIAC_Module_GetAck(ModID + 32, 391, 20);
		return(MIAC_CAN_RX[0]);
	  #endif
	#else
		char RetVal = 0;
		Device_ID = Device_ID << 1;			//Shift Device ID to enable write mode

		FCD_I2C0_MI2C_Start();						//Start transaction
		FCD_I2C0_MI2C_Transmit_Byte(Device_ID);		//Transmit Device Address
		FCD_I2C0_MI2C_Transmit_Byte(AddrH);			//Transmit Internal Address
		FCD_I2C0_MI2C_Transmit_Byte(AddrL);
		FCD_I2C0_MI2C_Restart();						//Restart transaction

		Device_ID = Device_ID | 0x01;		//Change Device ID to read mode
		FCD_I2C0_MI2C_Transmit_Byte(Device_ID);		//Transmit Device Address
		RetVal = FCD_I2C0_MI2C_Receive_Byte(1);		//Read data at address
		FCD_I2C0_MI2C_Stop();						//Stop Transaction

		return RetVal;						//Return data
	#endif
}

//Macro implementations

void FCM_ClearLCD()
{
	
	//
	//Call Component Macro: I2C(0)::MI2C_Start
	FCD_I2C0_MI2C_Start();


	//Write to LCD
	//Call Component Macro: ack=I2C(0)::MI2C_Transmit_Byte(LCD_W)
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte(FCV_LCD_W);


	//Command 5 Reset & Clear
	//Call Component Macro: ack=I2C(0)::MI2C_Transmit_Byte(5)
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte(5);


	//
	//Call Component Macro: I2C(0)::MI2C_Stop
	FCD_I2C0_MI2C_Stop();


}

void FCM_Text()
{
	
	//Comment:
	//Set Row & Column position 


	//
	//Call Component Macro: I2C(0)::MI2C_Start
	FCD_I2C0_MI2C_Start();


	//Write to LCD
	//Call Component Macro: ack=I2C(0)::MI2C_Transmit_Byte(LCD_W)
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte(FCV_LCD_W);


	//Command 25 Set R,C position
	//Call Component Macro: ack=I2C(0)::MI2C_Transmit_Byte(0x25)
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte(0x25);


	//Row 0
	//Call Component Macro: ack=I2C(0)::MI2C_Transmit_Byte(0)
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte(0);


	//Col 2
	//Call Component Macro: ack=I2C(0)::MI2C_Transmit_Byte(2)
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte(2);


	//
	//Call Component Macro: I2C(0)::MI2C_Stop
	FCD_I2C0_MI2C_Stop();


	//Comment:
	//Send Some Text To LCD


	//
	//Call Component Macro: I2C(0)::MI2C_Start
	FCD_I2C0_MI2C_Start();


	//Write to LCD
	//Call Component Macro: ack=I2C(0)::MI2C_Transmit_Byte(LCD_W)
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte(FCV_LCD_W);


	//Command 20 White Character
	//Call Component Macro: ack=I2C(0)::MI2C_Transmit_Byte(0x20)
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte(0x20);


	//"Matrix Multimedia"
	//Call Component Macro: ack=I2C(0)::MI2C_Transmit_Byte("Matrix Multimedia")
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte('M');
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte('a');
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte('t');
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte('r');
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte('i');
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte('x');
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte(' ');
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte('M');
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte('u');
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte('l');
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte('t');
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte('i');
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte('m');
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte('e');
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte('d');
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte('i');
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte('a');


	//
	//Call Component Macro: I2C(0)::MI2C_Stop
	FCD_I2C0_MI2C_Stop();


	//
	//Call Component Macro: I2C(0)::MI2C_Start
	FCD_I2C0_MI2C_Start();


	//Write to LCD
	//Call Component Macro: ack=I2C(0)::MI2C_Transmit_Byte(LCD_W)
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte(FCV_LCD_W);


	//Command 25 Set R,C position
	//Call Component Macro: ack=I2C(0)::MI2C_Transmit_Byte(0x25)
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte(0x25);


	//Row 2
	//Call Component Macro: ack=I2C(0)::MI2C_Transmit_Byte(2)
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte(2);


	//Col 1
	//Call Component Macro: ack=I2C(0)::MI2C_Transmit_Byte(1)
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte(1);


	//
	//Call Component Macro: I2C(0)::MI2C_Stop
	FCD_I2C0_MI2C_Stop();


	//
	//Call Component Macro: I2C(0)::MI2C_Start
	FCD_I2C0_MI2C_Start();


	//Write to LCD
	//Call Component Macro: ack=I2C(0)::MI2C_Transmit_Byte(LCD_W)
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte(FCV_LCD_W);


	//Command 20 White Character
	//Call Component Macro: ack=I2C(0)::MI2C_Transmit_Byte(0x20)
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte(0x20);


	//"On ByVac BV4512 LCD"
	//Call Component Macro: ack=I2C(0)::MI2C_Transmit_Byte("On ByVac BV4512 LCD")
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte('O');
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte('n');
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte(' ');
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte('B');
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte('y');
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte('V');
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte('a');
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte('c');
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte(' ');
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte('B');
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte('V');
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte('4');
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte('5');
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte('1');
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte('2');
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte(' ');
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte('L');
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte('C');
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte('D');


	//
	//Call Component Macro: I2C(0)::MI2C_Stop
	FCD_I2C0_MI2C_Stop();


	//
	//Call Component Macro: I2C(0)::MI2C_Start
	FCD_I2C0_MI2C_Start();


	//Write to LCD
	//Call Component Macro: ack=I2C(0)::MI2C_Transmit_Byte(LCD_W)
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte(FCV_LCD_W);


	//Comment:
	//Top Left Of Display = 0,0


	//Command 18 Draw Fill Box
	//Call Component Macro: ack=I2C(0)::MI2C_Transmit_Byte(0x18)
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte(0x18);


	//X pos
	//Call Component Macro: ack=I2C(0)::MI2C_Transmit_Byte(10)
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte(10);


	//Y pos
	//Call Component Macro: ack=I2C(0)::MI2C_Transmit_Byte(50)
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte(50);


	//X Length
	//Call Component Macro: ack=I2C(0)::MI2C_Transmit_Byte(108)
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte(108);


	//Y Length
	//Call Component Macro: ack=I2C(0)::MI2C_Transmit_Byte(10)
	FCV_ACK = FCD_I2C0_MI2C_Transmit_Byte(10);


	//
	//Call Component Macro: I2C(0)::MI2C_Stop
	FCD_I2C0_MI2C_Stop();


}

void main()
{
	
	//Initialisation
	adcon1 = 0x07;


	//Interrupt initialisation code
	option_reg = 0xC0;


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


	//Calculation
	//Calculation:
	//  LCD_W = 0x42
	//  LCD_R = 0x43
	//  X = 0
	//  Y = 0
	FCV_LCD_W = 0x42;
	FCV_LCD_R = 0x43;
	FCV_X = 0;
	FCV_Y = 0;
	

	//Setup I2C
	//Call Component Macro: I2C(0)::MI2C_Init
	FCD_I2C0_MI2C_Init();


	//Clear Display
	//Call Macro: ClearLCD
	FCM_ClearLCD();


	//Display Text
	//Call Macro: Text
	FCM_Text();


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


	mainendloop: goto mainendloop;
}

void MX_INTERRUPT_MACRO(void)
{
}



