//************************************************************************************
//**  
//**  Source name:   D:\PICkit3 Demo\Demo_Board1_8bit_v6.fcfx
//**  Title:         
//**  Description:   
//**  Device:        PIC.16F.16LF1939
//**  
//**  Generated by:  Flowcode v6.0.1.0
//**  Date:          Saturday, September 14, 2013 11:04:33
//**  Users:         1
//**  Registered to: Martin xxxxxxx
//**  Licence key:   GCYPWG
//**  
//**  
//**     NOT FOR COMMERCIAL USE
//**  
//**  http://www.matrixmultimedia.com
//**  
//************************************************************************************


#define MX_PIC#define MX_CAL_PIC#define MX_CLK_SPEED 32000000

#ifdef _BOOSTC
#pragma DATA 0x8007, 0xFE2
#endif
#ifdef HI_TECH_C
__CONFIG(0xFE2);
#endif
#ifdef _BOOSTC
#pragma DATA 0x8008, 0x1633
#endif
#ifdef HI_TECH_C
__CONFIG(0x1633);
#endif

/*========================================================================*\
   Use :Include the type definitions
\*========================================================================*/
#include "C:\Program Files (x86)\Flowcode 6\CAL\internals.c"



/*========================================================================*\
   Use :panel
       :Variable declarations
       :Macro function declarations
\*========================================================================*/
MX_GLOBAL MX_BOOL FCV_ENABLE_READ_SWITCH = (1);
MX_GLOBAL MX_UINT8 FCV_REG_SECOND;
MX_GLOBAL MX_UINT8 FCV_RTC_R;
MX_GLOBAL MX_UINT8 FCV_HOUR;
MX_GLOBAL MX_SINT16 FCV_POT_VALUE;
MX_GLOBAL MX_UINT8 FCV_SECOND;
MX_GLOBAL MX_UINT8 FCV_RTC;
MX_GLOBAL MX_UINT8 FCV_REG_HOUR;
MX_GLOBAL MX_UINT8 FCV_VAR2;
MX_GLOBAL MX_UINT8 FCV_VAR1;
MX_GLOBAL MX_UINT8 FCV_READ_RB7;
MX_GLOBAL MX_UINT8 FCV_RETVAL;
MX_GLOBAL MX_UINT8 FCV_X;
MX_GLOBAL MX_UINT8 FCV_REG_MINUTE;
MX_GLOBAL MX_BOOL FCV_READ_SWITCH = (0);
MX_GLOBAL MX_UINT8 FCV_MINUTE;
MX_GLOBAL MX_UINT8 FCV_LED_VALUE = (0x0);
MX_GLOBAL MX_UINT8 FCV_RTC_W;
MX_GLOBAL MX_BOOL FCV_ENABLE_LED = (1);

void FCM_Read_Time();
void FCM_LEDs();
void FCM_POT();
void FCM_Switch();
void FCM_Init();
void FCM_Disp_Time();

/*========================================================================*\
   Use :ButtonCtrl
       :Variable declarations
       :Macro function declarations
\*========================================================================*/

/*========================================================================*\
   Use :switch_base
       :Variable declarations
       :Macro function declarations
\*========================================================================*/
MX_UINT8 FCD_0ff_switch_base__ReadState();
void FCD_0ff_switch_base__WaitUntilHigh();
void FCD_0ff_switch_base__WaitUntilLow();

/*========================================================================*\
   Use :led_base1
       :Variable declarations
       :Macro function declarations
\*========================================================================*/
void FCD_0f9_led_base1__TurnOn();
void FCD_0f9_led_base1__TurnOff();

/*========================================================================*\
   Use :default_target
       :Variable declarations
       :Macro function declarations
\*========================================================================*/
#define FCD_0e9_default_target__TurnOn FCD_0f9_led_base1__TurnOn
#define FCD_0e9_default_target__TurnOff FCD_0f9_led_base1__TurnOff

/*========================================================================*\
   Use :led_base1
       :Variable declarations
       :Macro function declarations
\*========================================================================*/
void FCD_0195_led_base1__TurnOn();
void FCD_0195_led_base1__TurnOff();

/*========================================================================*\
   Use :default_target6
       :Variable declarations
       :Macro function declarations
\*========================================================================*/
#define FCD_0f7_default_target6__TurnOn FCD_0195_led_base1__TurnOn
#define FCD_0f7_default_target6__TurnOff FCD_0195_led_base1__TurnOff

/*========================================================================*\
   Use :led_base1
       :Variable declarations
       :Macro function declarations
\*========================================================================*/
void FCD_018f_led_base1__TurnOn();
void FCD_018f_led_base1__TurnOff();

/*========================================================================*\
   Use :default_target5
       :Variable declarations
       :Macro function declarations
\*========================================================================*/
#define FCD_0f7_default_target5__TurnOn FCD_018f_led_base1__TurnOn
#define FCD_0f7_default_target5__TurnOff FCD_018f_led_base1__TurnOff

/*========================================================================*\
   Use :led_base1
       :Variable declarations
       :Macro function declarations
\*========================================================================*/
void FCD_0189_led_base1__TurnOn();
void FCD_0189_led_base1__TurnOff();

/*========================================================================*\
   Use :default_target4
       :Variable declarations
       :Macro function declarations
\*========================================================================*/
#define FCD_0f7_default_target4__TurnOn FCD_0189_led_base1__TurnOn
#define FCD_0f7_default_target4__TurnOff FCD_0189_led_base1__TurnOff

/*========================================================================*\
   Use :led_base1
       :Variable declarations
       :Macro function declarations
\*========================================================================*/
void FCD_0183_led_base1__TurnOn();
void FCD_0183_led_base1__TurnOff();

/*========================================================================*\
   Use :default_target3
       :Variable declarations
       :Macro function declarations
\*========================================================================*/
#define FCD_0f7_default_target3__TurnOn FCD_0183_led_base1__TurnOn
#define FCD_0f7_default_target3__TurnOff FCD_0183_led_base1__TurnOff

/*========================================================================*\
   Use :led_base1
       :Variable declarations
       :Macro function declarations
\*========================================================================*/
void FCD_017d_led_base1__TurnOn();
void FCD_017d_led_base1__TurnOff();

/*========================================================================*\
   Use :default_target2
       :Variable declarations
       :Macro function declarations
\*========================================================================*/
#define FCD_0f7_default_target2__TurnOn FCD_017d_led_base1__TurnOn
#define FCD_0f7_default_target2__TurnOff FCD_017d_led_base1__TurnOff

/*========================================================================*\
   Use :led_base1
       :Variable declarations
       :Macro function declarations
\*========================================================================*/
void FCD_0177_led_base1__TurnOn();
void FCD_0177_led_base1__TurnOff();

/*========================================================================*\
   Use :default_target1
       :Variable declarations
       :Macro function declarations
\*========================================================================*/
#define FCD_0f7_default_target1__TurnOn FCD_0177_led_base1__TurnOn
#define FCD_0f7_default_target1__TurnOff FCD_0177_led_base1__TurnOff

/*========================================================================*\
   Use :fcdhelper
       :Variable declarations
       :Macro function declarations
\*========================================================================*/

/*========================================================================*\
   Use :cal_adc
       :Variable declarations
       :Macro function declarations
\*========================================================================*/
#define ADC_1_MX_ADC_ACTIME 0
#define MX_ADC_REF 
#define ADC_1_MX_ADC_VREFVOL 500
#define MX_ADC_CHANNEL_13 
#define MX_ADC_TYPE_18 
#define ADC_1_MX_ADC_VREFOP 0
#define ADC_1_MX_ADC_CONVSP 0
#define MX_ADC_BITS_10 
#define ADC_1_MX_ADC_CHANNEL 13

#define FCV_0d7_cal_adc__FALSE (0)
#define FCV_0d7_cal_adc__TRUE (1)

void FC_CAL_ADC_Disable();
void FC_CAL_ADC_Enable(MX_UINT8 FCL_CHANNEL, MX_UINT8 FCL_CONV_SPEED, MX_UINT8 FCL_VREF, MX_UINT8 FCL_T_CHARGE);
MX_UINT16 FC_CAL_ADC_Sample(MX_UINT8 FCL_SAMPLE_MODE);

/*========================================================================*\
   Use :adc_base
       :Variable declarations
       :Macro function declarations
\*========================================================================*/
MX_UINT16 FCD_0b7_adc_base__RawSampleInt();
MX_UINT8 FCD_0b7_adc_base__RawAverageByte(MX_UINT8 FCL_NUMSAMPLES, MX_UINT8 FCL_DELAYUS);
void FCD_0b7_adc_base__GetString(MX_CHAR* FCR_RETVAL, MX_UINT16 FCRsz_RETVAL);
MX_SINT16 FCD_0b7_adc_base__RawAverageInt(MX_UINT8 FCL_NUMSAMPLES, MX_UINT8 FCL_DELAYUS);
MX_FLOAT FCD_0b7_adc_base__GetVoltage();
void FCD_0b7_adc_base__RawEnable();
MX_UINT8 FCD_0b7_adc_base__RawSampleByte();
MX_UINT16 FCD_0b7_adc_base__GetInt();
void FCD_0b7_adc_base__RawDisable();
MX_UINT8 FCD_0b7_adc_base__GetByte();

/*========================================================================*\
   Use :v5__adc0
       :Variable declarations
       :Macro function declarations
\*========================================================================*/
#define FCD_01_v5__adc0__RawSampleInt FCD_0b7_adc_base__RawSampleInt
#define FCD_01_v5__adc0__RawAverageByte FCD_0b7_adc_base__RawAverageByte
#define FCD_01_v5__adc0__GetString FCD_0b7_adc_base__GetString
#define FCD_01_v5__adc0__RawAverageInt FCD_0b7_adc_base__RawAverageInt
#define FCD_01_v5__adc0__GetVoltage FCD_0b7_adc_base__GetVoltage
#define FCD_01_v5__adc0__RawEnable FCD_0b7_adc_base__RawEnable
#define FCD_01_v5__adc0__RawSampleByte FCD_0b7_adc_base__RawSampleByte
#define FCD_01_v5__adc0__GetInt FCD_0b7_adc_base__GetInt
#define FCD_01_v5__adc0__RawDisable FCD_0b7_adc_base__RawDisable
#define FCD_01_v5__adc0__GetByte FCD_0b7_adc_base__GetByte

/*========================================================================*\
   Use :ctrl_lcd
       :Variable declarations
       :Macro function declarations
\*========================================================================*/

/*========================================================================*\
   Use :v5__lcddisplay0
       :Variable declarations
       :Macro function declarations
\*========================================================================*/
void FCD_01_v5__lcddisplay0__Clear();
void FCD_01_v5__lcddisplay0__PrintString(MX_CHAR* FCL_TEXT, MX_UINT16 FCLsz_TEXT);
void FCD_01_v5__lcddisplay0__PrintAscii(MX_UINT8 FCL_CHARACTER);
void FCD_01_v5__lcddisplay0__PrintNumber(MX_SINT16 FCL_NUMBER);
void FCD_01_v5__lcddisplay0__RAMWrite(MX_UINT8 FCL_INDEX, MX_UINT8 FCL_D0, MX_UINT8 FCL_D1, MX_UINT8 FCL_D2, MX_UINT8 FCL_D3, MX_UINT8 FCL_D4, MX_UINT8 FCL_D5, MX_UINT8 FCL_D6, MX_UINT8 FCL_D7);
void FCD_01_v5__lcddisplay0__ClearLine(MX_UINT8 FCL_LINE);
void FCD_01_v5__lcddisplay0__Cursor(MX_UINT8 FCL_X, MX_UINT8 FCL_Y);
void FCD_01_v5__lcddisplay0__Command(MX_UINT8 FCL_INSTRUCTION);
void FCD_01_v5__lcddisplay0__ScrollDisplay(MX_UINT8 FCL_POSITION, MX_UINT8 FCL_DIRECTION);
void FCD_01_v5__lcddisplay0__RawSend(MX_UINT8 FCL_DATA, MX_UINT8 FCL_MASK);
void FCD_01_v5__lcddisplay0__Start();

/*========================================================================*\
   Use :InjectorBase1
       :Variable declarations
       :Macro function declarations
\*========================================================================*/

/*========================================================================*\
   Use :dash_IO_flasher
       :Variable declarations
       :Macro function declarations
\*========================================================================*/

/*========================================================================*\
   Use :fcdhelper
       :Variable declarations
       :Macro function declarations
\*========================================================================*/

/*========================================================================*\
   Use :cal_i2c
       :Variable declarations
       :Macro function declarations
\*========================================================================*/
#define MX_I2C_SDA_PORT_1 portc
#define MX_I2C_REF1 
#define MX_I2C_1 
#define MX_I2C_BMODE_1 (0)
#define MX_I2C_SDA_TRIS_1 trisc
#define MX_I2C_SCL_PIN_1 (3)
#define MX_I2C_SCL_PORT_1 portc
#define MX_I2C_SDA_PIN_1 (4)
#define MX_I2C_SCL_TRIS_1 trisc
#define MX_I2C_BAUD_1 (100000)
#define MX_I2C_CHANNEL_1 (1)


/*=----------------------------------------------------------------------=*\
   Use :cal_i2c
       :Supplementary defines
\*=----------------------------------------------------------------------=*/
#define MX_MI2C
MX_GLOBAL MX_UINT32 FCV_07_cal_i2c__CONSOLE;

void FC_CAL_I2C_Slave_Uninit_1();
void FCD_07_cal_i2c__Prv_TextConsole(MX_CHAR* FCL_STR, MX_UINT16 FCLsz_STR);
void FC_CAL_I2C_Master_Stop_1();
void FC_CAL_I2C_Slave_Init_1();
void FC_CAL_I2C_Master_Uninit_1();
void FC_CAL_I2C_Slave_TxByte_1(MX_UINT8 FCL_DATA);
MX_UINT8 FC_CAL_I2C_Slave_RxByte_1(MX_UINT8 FCL_LAST);
void FC_CAL_I2C_Master_Init_1();
void FC_CAL_I2C_Master_Start_1();
MX_UINT8 FC_CAL_I2C_Master_TxByte_1(MX_UINT8 FCL_DATA);
void FC_CAL_I2C_Master_Restart_1();
MX_UINT8 FC_CAL_I2C_Master_RxByte_1(MX_UINT8 FCL_LAST);

/*========================================================================*\
   Use :v5__i2c0
       :Variable declarations
       :Macro function declarations
\*========================================================================*/
MX_UINT8 FCD_01_v5__i2c0__ReceiveByte(MX_UINT8 FCL_LAST);
void FCD_01_v5__i2c0__Restart();
void FCD_01_v5__i2c0__Stop();
MX_UINT8 FCD_01_v5__i2c0__ReceiveByteTransaction(MX_UINT8 FCL_DEVICE_ID, MX_UINT8 FCL_ADDRH, MX_UINT8 FCL_ADDRL);
MX_UINT8 FCD_01_v5__i2c0__TransmitByte(MX_UINT8 FCL_DATA);
void FCD_01_v5__i2c0__SendByteTransaction(MX_UINT8 FCL_DEVICE_ID, MX_UINT8 FCL_ADDRH, MX_UINT8 FCL_ADDRL, MX_UINT8 FCL_DATA);
void FCD_01_v5__i2c0__Start();
void FCD_01_v5__i2c0__Initialise();

/*========================================================================*\
   Use :Include the chip adaption layer
\*========================================================================*/
#include "C:\Program Files (x86)\Flowcode 6\CAL\includes.c"


/*========================================================================*\
   Use :ButtonCtrl
       :Macro implementations
\*========================================================================*/

/*========================================================================*\
   Use :switch_base
       :Macro implementations
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :Reads the button state as 0 for released or 1 for pressed       :Performs debounce if required
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_0ff_switch_base__ReadState()
{
	//Local variable definitions
	MX_UINT8 FCL_SWITCHVAL = (0xff); // Value of the press
	MX_UINT16 FCL_DEL_COUNT;
	MX_UINT8 FCL_OLD_SWITCHVAL;
	MX_UINT8 FCR_RETVAL;


	FCR_RETVAL = FCP_GET(B, 0x80, 0x7);

	#if (0) // 0 == 1

	//Code has been optimised out by the pre-processor
	// #else

	#endif

	#if (0) // 0 > 0

	//Code has been optimised out by the pre-processor
	// #else

	#endif

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Waits until the switch is in state 'high'       :The interpretation of 'high' depends on the polarity
\*=----------------------------------------------------------------------=*/
void FCD_0ff_switch_base__WaitUntilHigh()
{
	//Local variable definitions
	MX_UINT8 FCL_SWITCHVAL = (0xff); // The state of the pin
	MX_UINT16 FCL_DEL_COUNT;
	MX_UINT8 FCL_OLD_SWITCHVAL;


	while (1)
	{

		FCL_SWITCHVAL = FCP_GET(B, 0x80, 0x7);

		#if (0) // 0 == 1

		//Code has been optimised out by the pre-processor
		// #else

		#endif

		#if (0) // 0 > 0

		//Code has been optimised out by the pre-processor
		// #else

		#endif


		if ((FCL_SWITCHVAL == 0) == 0) break;
	}

}

/*=----------------------------------------------------------------------=*\
   Use :Waits until the switch is in state 'low'       :The interpretation of 'high' depends on the polarity
\*=----------------------------------------------------------------------=*/
void FCD_0ff_switch_base__WaitUntilLow()
{
	//Local variable definitions
	MX_UINT8 FCL_SWITCHVAL; // The state of the pin
	MX_UINT16 FCL_DEL_COUNT;
	MX_UINT8 FCL_OLD_SWITCHVAL;


	while (1)
	{

		FCL_SWITCHVAL = FCP_GET(B, 0x80, 0x7);

		#if (0) // 0 == 1

		//Code has been optimised out by the pre-processor
		// #else

		#endif

		#if (0) // 0 > 0

		//Code has been optimised out by the pre-processor
		// #else

		#endif


		if ((FCL_SWITCHVAL != 0) == 0) break;
	}

}


/*========================================================================*\
   Use :led_base1
       :Macro implementations
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :Turn the LED off.
\*=----------------------------------------------------------------------=*/
void FCD_0f9_led_base1__TurnOn()
{

	/* Error: Syntax error */;

}

/*=----------------------------------------------------------------------=*\
   Use :Turn the LED on.
\*=----------------------------------------------------------------------=*/
void FCD_0f9_led_base1__TurnOff()
{

	/* Error: Syntax error */;

}


/*========================================================================*\
   Use :default_target
       :Macro implementations
\*========================================================================*/

/*========================================================================*\
   Use :led_base1
       :Macro implementations
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :Turn the LED off.
\*=----------------------------------------------------------------------=*/
void FCD_0195_led_base1__TurnOn()
{

	FCP_SET(A, 0x20, 0x5, 1);

}

/*=----------------------------------------------------------------------=*\
   Use :Turn the LED on.
\*=----------------------------------------------------------------------=*/
void FCD_0195_led_base1__TurnOff()
{

	FCP_SET(A, 0x20, 0x5, 0);

}


/*========================================================================*\
   Use :default_target6
       :Macro implementations
\*========================================================================*/

/*========================================================================*\
   Use :led_base1
       :Macro implementations
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :Turn the LED off.
\*=----------------------------------------------------------------------=*/
void FCD_018f_led_base1__TurnOn()
{

	FCP_SET(A, 0x10, 0x4, 1);

}

/*=----------------------------------------------------------------------=*\
   Use :Turn the LED on.
\*=----------------------------------------------------------------------=*/
void FCD_018f_led_base1__TurnOff()
{

	FCP_SET(A, 0x10, 0x4, 0);

}


/*========================================================================*\
   Use :default_target5
       :Macro implementations
\*========================================================================*/

/*========================================================================*\
   Use :led_base1
       :Macro implementations
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :Turn the LED off.
\*=----------------------------------------------------------------------=*/
void FCD_0189_led_base1__TurnOn()
{

	FCP_SET(A, 0x8, 0x3, 1);

}

/*=----------------------------------------------------------------------=*\
   Use :Turn the LED on.
\*=----------------------------------------------------------------------=*/
void FCD_0189_led_base1__TurnOff()
{

	FCP_SET(A, 0x8, 0x3, 0);

}


/*========================================================================*\
   Use :default_target4
       :Macro implementations
\*========================================================================*/

/*========================================================================*\
   Use :led_base1
       :Macro implementations
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :Turn the LED off.
\*=----------------------------------------------------------------------=*/
void FCD_0183_led_base1__TurnOn()
{

	FCP_SET(A, 0x4, 0x2, 1);

}

/*=----------------------------------------------------------------------=*\
   Use :Turn the LED on.
\*=----------------------------------------------------------------------=*/
void FCD_0183_led_base1__TurnOff()
{

	FCP_SET(A, 0x4, 0x2, 0);

}


/*========================================================================*\
   Use :default_target3
       :Macro implementations
\*========================================================================*/

/*========================================================================*\
   Use :led_base1
       :Macro implementations
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :Turn the LED off.
\*=----------------------------------------------------------------------=*/
void FCD_017d_led_base1__TurnOn()
{

	FCP_SET(A, 0x2, 0x1, 1);

}

/*=----------------------------------------------------------------------=*\
   Use :Turn the LED on.
\*=----------------------------------------------------------------------=*/
void FCD_017d_led_base1__TurnOff()
{

	FCP_SET(A, 0x2, 0x1, 0);

}


/*========================================================================*\
   Use :default_target2
       :Macro implementations
\*========================================================================*/

/*========================================================================*\
   Use :led_base1
       :Macro implementations
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :Turn the LED off.
\*=----------------------------------------------------------------------=*/
void FCD_0177_led_base1__TurnOn()
{

	FCP_SET(A, 0x1, 0x0, 1);

}

/*=----------------------------------------------------------------------=*\
   Use :Turn the LED on.
\*=----------------------------------------------------------------------=*/
void FCD_0177_led_base1__TurnOff()
{

	FCP_SET(A, 0x1, 0x0, 0);

}


/*========================================================================*\
   Use :default_target1
       :Macro implementations
\*========================================================================*/

/*========================================================================*\
   Use :fcdhelper
       :Macro implementations
\*========================================================================*/

/*========================================================================*\
   Use :cal_adc
       :Macro implementations
\*========================================================================*/

/*========================================================================*\
   Use :adc_base
       :Macro implementations
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :Background call to read the ADC at full bit depth       :Call Enable() first
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_0b7_adc_base__RawSampleInt()
{
	//Local variable definitions
	MX_UINT16 FCR_RETVAL;


	FCR_RETVAL = FC_CAL_ADC_Sample(1);

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Background call to read the ADC as a byte       :Call Enable() before this
       :
       :Parameters for macro RawAverageByte:
       :  NumSamples : MX_UINT8
       :  DelayUs : MX_UINT8
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_0b7_adc_base__RawAverageByte(MX_UINT8 FCL_NUMSAMPLES, MX_UINT8 FCL_DELAYUS)
{
	//Local variable definitions
	MX_UINT32 FCL_AVERAGE = (0x0);
	MX_UINT8 FCL_COUNT = (0x0);
	MX_UINT8 FCR_RETVAL;


	if (FCL_DELAYUS != 0)
	{

		while (FCL_COUNT < FCL_NUMSAMPLES)
		{

			FCL_AVERAGE = FCL_AVERAGE + FC_CAL_ADC_Sample(0);
			FCL_COUNT = FCL_COUNT + 1;

			FCI_DELAYBYTE_US(FCL_DELAYUS);



		}

	} else {

		while (FCL_COUNT < FCL_NUMSAMPLES)
		{

			FCL_AVERAGE = FCL_AVERAGE + FC_CAL_ADC_Sample(0);
			FCL_COUNT = FCL_COUNT + 1;



		}

	}

	FCR_RETVAL = FCL_AVERAGE / FCL_COUNT;

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Reads the ADC as a direct voltage and returns as as tring
       :
       :Returns : MX_CHAR
\*=----------------------------------------------------------------------=*/
void FCD_0b7_adc_base__GetString(MX_CHAR* FCR_RETVAL, MX_UINT16 FCRsz_RETVAL)
{
	//Local variable definitions
	MX_FLOAT FCL_SAMPLE;


	FCL_SAMPLE = FCD_0b7_adc_base__GetVoltage();

	FCI_FLOAT_TO_STRING(FCL_SAMPLE, FCV_PRECISION, FCR_RETVAL,FCRsz_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Background call to read the ADC as a full width sample over time       :Call Enable() before this
       :
       :Parameters for macro RawAverageInt:
       :  NumSamples : MX_UINT8
       :  DelayUs : MX_UINT8
       :
       :Returns : MX_SINT16
\*=----------------------------------------------------------------------=*/
MX_SINT16 FCD_0b7_adc_base__RawAverageInt(MX_UINT8 FCL_NUMSAMPLES, MX_UINT8 FCL_DELAYUS)
{
	//Local variable definitions
	MX_UINT32 FCL_AVERAGE = (0x0);
	MX_UINT8 FCL_COUNT = (0x0);
	MX_SINT16 FCR_RETVAL;


	if (FCL_DELAYUS != 0)
	{

		while (FCL_COUNT < FCL_NUMSAMPLES)
		{

			FCL_AVERAGE = FCL_AVERAGE + FC_CAL_ADC_Sample(1);
			FCL_COUNT = FCL_COUNT + 1;

			FCI_DELAYBYTE_US(FCL_DELAYUS);



		}

	} else {

		while (FCL_COUNT < FCL_NUMSAMPLES)
		{

			FCL_AVERAGE = FCL_AVERAGE + FC_CAL_ADC_Sample(1);
			FCL_COUNT = FCL_COUNT + 1;



		}

	}

	FCR_RETVAL = FCL_AVERAGE / FCL_COUNT;

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Reads the ADC as a direct voltage
       :
       :Returns : MX_FLOAT
\*=----------------------------------------------------------------------=*/
MX_FLOAT FCD_0b7_adc_base__GetVoltage()
{
	//Local variable definitions
	MX_UINT16 FCL_SAMPLE;
	MX_FLOAT FCR_RETVAL;


	FC_CAL_ADC_Enable(13, 0, 0, 0);

	FCL_SAMPLE = FC_CAL_ADC_Sample(1);

	FCR_RETVAL = flt_mul(flt_fromi(FCL_SAMPLE), 0.004883);

	FC_CAL_ADC_Disable();

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Enables the ADC channel
\*=----------------------------------------------------------------------=*/
void FCD_0b7_adc_base__RawEnable()
{

	FC_CAL_ADC_Enable(13, 0, 0, 0);

}

/*=----------------------------------------------------------------------=*\
   Use :Background call to read the ADC as a byte       :Call Enable() before this
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_0b7_adc_base__RawSampleByte()
{
	//Local variable definitions
	MX_UINT8 FCR_RETVAL;


	FCR_RETVAL = FC_CAL_ADC_Sample(0);

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Blocking call to read the ADC at full bit depth
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_0b7_adc_base__GetInt()
{
	//Local variable definitions
	MX_UINT16 FCR_RETVAL;


	FC_CAL_ADC_Enable(13, 0, 0, 0);

	FCR_RETVAL = FC_CAL_ADC_Sample(1);

	FC_CAL_ADC_Disable();

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Disables the previously enabled ADC channel
\*=----------------------------------------------------------------------=*/
void FCD_0b7_adc_base__RawDisable()
{

	FC_CAL_ADC_Disable();

}

/*=----------------------------------------------------------------------=*\
   Use :Blocking call to read the ADC as a byte
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_0b7_adc_base__GetByte()
{
	//Local variable definitions
	MX_UINT8 FCR_RETVAL;


	FC_CAL_ADC_Enable(13, 0, 0, 0);

	FCR_RETVAL = FC_CAL_ADC_Sample(0);

	FC_CAL_ADC_Disable();

	return (FCR_RETVAL);

}


/*========================================================================*\
   Use :v5__adc0
       :Macro implementations
\*========================================================================*/

/*========================================================================*\
   Use :ctrl_lcd
       :Macro implementations
\*========================================================================*/

/*========================================================================*\
   Use :v5__lcddisplay0
       :Macro implementations
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :Clear the whole display.  Leaves an empty display with the cursor positioned       :at the top, left (0, 0).
\*=----------------------------------------------------------------------=*/
void FCD_01_v5__lcddisplay0__Clear()
{




	FCD_01_v5__lcddisplay0__RawSend(0x01, 0);

	FCI_DELAYBYTE_MS(2);

	FCD_01_v5__lcddisplay0__RawSend(0x02, 0);

	FCI_DELAYBYTE_MS(2);

}

/*=----------------------------------------------------------------------=*\
   Use :Breaks down a string of text and sends it to the LCD via the private RawSend(byte, mask) macro
       :
       :Parameters for macro PrintString:
       :  Text[20] : String to print
\*=----------------------------------------------------------------------=*/
void FCD_01_v5__lcddisplay0__PrintString(MX_CHAR* FCL_TEXT, MX_UINT16 FCLsz_TEXT)
{
	//Local variable definitions
	MX_UINT8 FCL_IDX = (0x0);
	MX_UINT8 FCL_COUNT;



	FCL_COUNT = FCI_GETLENGTH(FCL_TEXT, FCLsz_TEXT);

	while (FCL_IDX < FCL_COUNT)
	{

		FCD_01_v5__lcddisplay0__RawSend(FCL_TEXT[FCL_IDX], 0x10);

		FCL_IDX = FCL_IDX + 1;


	}


}

/*=----------------------------------------------------------------------=*\
   Use :Takes the ascii value for a character and prints the character
       :
       :Parameters for macro PrintAscii:
       :  character : Holds an ascii value.
\*=----------------------------------------------------------------------=*/
void FCD_01_v5__lcddisplay0__PrintAscii(MX_UINT8 FCL_CHARACTER)
{
	//Local variable definitions
	MX_UINT8 FCL_X;


	FCD_01_v5__lcddisplay0__RawSend(FCL_CHARACTER, 0x10);



}

/*=----------------------------------------------------------------------=*\
   Use :Based on v5 macro, will allow you to print a number. This is limited to a signed-INT, -32768 to 32767
       :
       :Parameters for macro PrintNumber:
       :  Number : An integer in the range -32768 to 32767
\*=----------------------------------------------------------------------=*/
void FCD_01_v5__lcddisplay0__PrintNumber(MX_SINT16 FCL_NUMBER)
{
	//Local variable definitions
	#define FCLsz_S 20
	MX_CHAR FCL_S[FCLsz_S];


	FCI_TOSTRING(FCL_NUMBER, FCL_S,FCLsz_S);

	FCD_01_v5__lcddisplay0__PrintString(FCL_S, FCLsz_S);

	//Local variable definitions
	#undef FCLsz_S
}

/*=----------------------------------------------------------------------=*\
   Use :Modifies the internal memory of the LCD to allow for up to 8 customised characters to be created and stored in the device memory
       :
       :Parameters for macro RAMWrite:
       :  Index : Values 0 to 7
       :  d0 : MX_UINT8
       :  d1 : MX_UINT8
       :  d2 : MX_UINT8
       :  d3 : MX_UINT8
       :  d4 : MX_UINT8
       :  d5 : MX_UINT8
       :  d6 : MX_UINT8
       :  d7 : MX_UINT8
\*=----------------------------------------------------------------------=*/
void FCD_01_v5__lcddisplay0__RAMWrite(MX_UINT8 FCL_INDEX, MX_UINT8 FCL_D0, MX_UINT8 FCL_D1, MX_UINT8 FCL_D2, MX_UINT8 FCL_D3, MX_UINT8 FCL_D4, MX_UINT8 FCL_D5, MX_UINT8 FCL_D6, MX_UINT8 FCL_D7)
{

	FCD_01_v5__lcddisplay0__RawSend(64 + (FCL_INDEX << 3), 0);

	FCI_DELAYBYTE_MS(2);

	FCD_01_v5__lcddisplay0__RawSend(FCL_D0, 0x10);

	FCD_01_v5__lcddisplay0__RawSend(FCL_D1, 0x10);

	FCD_01_v5__lcddisplay0__RawSend(FCL_D2, 0x10);

	FCD_01_v5__lcddisplay0__RawSend(FCL_D3, 0x10);

	FCD_01_v5__lcddisplay0__RawSend(FCL_D4, 0x10);

	FCD_01_v5__lcddisplay0__RawSend(FCL_D5, 0x10);

	FCD_01_v5__lcddisplay0__RawSend(FCL_D6, 0x10);

	FCD_01_v5__lcddisplay0__RawSend(FCL_D7, 0x10);

	FCD_01_v5__lcddisplay0__Clear();

}

/*=----------------------------------------------------------------------=*\
   Use :Clear a single line of the display.  Leaves the cursor at the start of the       :empty line.
       :
       :Parameters for macro ClearLine:
       :  Line : The line to clear.  The top lline is line zero.
\*=----------------------------------------------------------------------=*/
void FCD_01_v5__lcddisplay0__ClearLine(MX_UINT8 FCL_LINE)
{
	//Local variable definitions
	MX_UINT8 FCL_NUMROWS;
	MX_UINT8 FCL_NUMCOLS;
	MX_SINT16 FCL_X;


	if (FCL_LINE < 2)
	{

		FCD_01_v5__lcddisplay0__Cursor(0, FCL_LINE);

		FCL_X = 0;

		while (FCL_X < 16)
		{


			FCD_01_v5__lcddisplay0__RawSend(' ', 0x10);

			FCL_X = FCL_X + 1;


		}

		FCD_01_v5__lcddisplay0__Cursor(0, FCL_LINE);

	// } else {

	}

}

/*=----------------------------------------------------------------------=*\
   Use :Moves the cursor on the LCD Display
       :
       :Parameters for macro Cursor:
       :  x : X = columns going left to right.  First column is zero.
       :  y : Y = lines going top to bottom.  First line is zero.
\*=----------------------------------------------------------------------=*/
void FCD_01_v5__lcddisplay0__Cursor(MX_UINT8 FCL_X, MX_UINT8 FCL_Y)
{



	#if (0) // 2 == 1

	//Code has been optimised out by the pre-processor
	// #else

	#endif

	#if (1) // 2 == 2

		if (FCL_Y == 0)
		{

			FCL_Y = 0x80;

		} else {

			FCL_Y = 0xC0;

		}

	// #else

	//Code has been optimised out by the pre-processor
	#endif

	#if (0) // 2 == 4

	//Code has been optimised out by the pre-processor
	// #else

	#endif

	FCD_01_v5__lcddisplay0__RawSend(FCL_Y + FCL_X, 0);

	FCI_DELAYBYTE_MS(2);

}

/*=----------------------------------------------------------------------=*\
   Use :Use this method/macro to send a specific command to the LCD. Refer to the Matrix Multimedia EB006 datasheet for a list of supported instructions. For Non-Matrix LCD's refer to the manufacturers datasheet.
       :
       :Parameters for macro Command:
       :  instruction : Send a defined command to the LCD Screen. See datasheet for supported commands.
\*=----------------------------------------------------------------------=*/
void FCD_01_v5__lcddisplay0__Command(MX_UINT8 FCL_INSTRUCTION)
{

	FCD_01_v5__lcddisplay0__RawSend(FCL_INSTRUCTION, 0);

	FCI_DELAYBYTE_MS(2);

}

/*=----------------------------------------------------------------------=*\
   Use :Scrolls the display left or right by a number of given positions.
       :
       :Parameters for macro ScrollDisplay:
       :  Position : Holds the number of positions to shift the display
       :  direction : 0 = left, 1 = right
\*=----------------------------------------------------------------------=*/
void FCD_01_v5__lcddisplay0__ScrollDisplay(MX_UINT8 FCL_POSITION, MX_UINT8 FCL_DIRECTION)
{
	//Local variable definitions
	MX_UINT8 FCL_CMD = (0x0);


	FCL_CMD = -1;

	switch (FCL_DIRECTION)
	{
		case 0:
		{
			FCL_CMD = 0x18;

			break;
		}
		case 'l':
		{
			FCL_CMD = 0x18;

			break;
		}
		case 'L':
		{
			FCL_CMD = 0x18;

			break;
		}
		case 1:
		{
			FCL_CMD = 0x1C;

			break;
		}
		case 'r':
		{
			FCL_CMD = 0x1C;

			break;
		}
		case 'R':
		{
			FCL_CMD = 0x1C;

			break;
		}
		default:
		{
		}
	}

	if (FCL_CMD != -1 & FCL_POSITION != 0)
	{

		while (FCL_POSITION != 0)
		{

			FCD_01_v5__lcddisplay0__RawSend(FCL_CMD, 0);

			FCL_POSITION = FCL_POSITION - 1;


		}

	// } else {

	}

}

/*=----------------------------------------------------------------------=*\
   Use :Sends data to the LCD display
       :
       :Parameters for macro RawSend:
       :  data : MX_UINT8
       :  mask : MX_UINT8
\*=----------------------------------------------------------------------=*/
void FCD_01_v5__lcddisplay0__RawSend(MX_UINT8 FCL_DATA, MX_UINT8 FCL_MASK)
{
	//Local variable definitions
	MX_UINT8 FCL_NIBBLE;


	FCP_SET(D, 0x1, 0x0, 0);
	FCP_SET(D, 0x2, 0x1, 0);
	FCP_SET(D, 0x4, 0x2, 0);
	FCP_SET(D, 0x8, 0x3, 0);
	FCP_SET(C, 0x1, 0x0, 0);
	FCP_SET(A, 0x40, 0x6, 0);

	//Comment:
	//Take the MSB(most significant bits from the byte) 
	//and assign them to pins 0 through 3.

	FCL_NIBBLE = (FCL_DATA >> 4);
	FCP_SET(D, 0x1, 0x0, (FCL_NIBBLE & 0x01));
	FCL_NIBBLE = FCL_NIBBLE >> 1;
	FCP_SET(D, 0x2, 0x1, (FCL_NIBBLE & 0x01));
	FCL_NIBBLE = FCL_NIBBLE >> 1;
	FCP_SET(D, 0x4, 0x2, (FCL_NIBBLE & 0x01));
	FCL_NIBBLE = FCL_NIBBLE >> 1;
	FCP_SET(D, 0x8, 0x3, (FCL_NIBBLE & 0x01));

	if (FCL_MASK)
	{

		FCP_SET(C, 0x1, 0x0, 1);

	// } else {

	}

	FCI_DELAYBYTE_US(100);

	//Comment:
	//Set pin5 high, pause then set low
	//to acknowledge the MSB data has
	//been submitted.

	FCP_SET(A, 0x40, 0x6, 1);

	FCI_DELAYBYTE_US(100);

	FCP_SET(A, 0x40, 0x6, 0);

	FCI_DELAYBYTE_US(100);

	//Comment:
	//Now deal with the LSB(Least significant bits)
	//and send them.

	FCP_SET(D, 0x1, 0x0, 0);
	FCP_SET(D, 0x2, 0x1, 0);
	FCP_SET(D, 0x4, 0x2, 0);
	FCP_SET(D, 0x8, 0x3, 0);
	FCP_SET(C, 0x1, 0x0, 0);
	FCP_SET(A, 0x40, 0x6, 0);

	FCL_NIBBLE = (FCL_DATA & 0xf);
	FCP_SET(D, 0x1, 0x0, (FCL_NIBBLE & 0x01));
	FCL_NIBBLE = FCL_NIBBLE >> 1;
	FCP_SET(D, 0x2, 0x1, (FCL_NIBBLE & 0x01));
	FCL_NIBBLE = FCL_NIBBLE >> 1;
	FCP_SET(D, 0x4, 0x2, (FCL_NIBBLE & 0x01));
	FCL_NIBBLE = FCL_NIBBLE >> 1;
	FCP_SET(D, 0x8, 0x3, (FCL_NIBBLE & 0x01));

	if (FCL_MASK)
	{

		FCP_SET(C, 0x1, 0x0, 1);

	// } else {

	}

	//Comment:
	//Set pin5 high, pause then set low
	//to acknowledge the MSB data has
	//been submitted.

	FCI_DELAYBYTE_US(100);

	FCP_SET(A, 0x40, 0x6, 1);

	FCI_DELAYBYTE_US(100);

	FCP_SET(A, 0x40, 0x6, 0);

	FCI_DELAYBYTE_US(100);

}

/*=----------------------------------------------------------------------=*\
   Use :Startup routine required by the hardware device.
\*=----------------------------------------------------------------------=*/
void FCD_01_v5__lcddisplay0__Start()
{



	FCP_SET(D, 0x1, 0x0, 0);
	FCP_SET(D, 0x2, 0x1, 0);
	FCP_SET(D, 0x4, 0x2, 0);
	FCP_SET(D, 0x8, 0x3, 0);
	FCP_SET(C, 0x1, 0x0, 0);
	FCP_SET(A, 0x40, 0x6, 0);

	FCI_DELAYBYTE_MS(12);

	FCD_01_v5__lcddisplay0__RawSend(0x33, 0);

	FCI_DELAYBYTE_MS(2);

	FCD_01_v5__lcddisplay0__RawSend(0x33, 0);

	FCI_DELAYBYTE_MS(2);

	FCD_01_v5__lcddisplay0__RawSend(0x32, 0);

	FCI_DELAYBYTE_MS(2);

	FCD_01_v5__lcddisplay0__RawSend(0x2c, 0);

	FCI_DELAYBYTE_MS(2);

	FCD_01_v5__lcddisplay0__RawSend(0x06, 0);

	FCI_DELAYBYTE_MS(2);

	FCD_01_v5__lcddisplay0__RawSend(0x0c, 0);

	FCI_DELAYBYTE_MS(2);

	FCD_01_v5__lcddisplay0__RawSend(0x01, 0);

	FCI_DELAYBYTE_MS(2);

	FCD_01_v5__lcddisplay0__RawSend(0x02, 0);

	FCI_DELAYBYTE_MS(2);

	FCD_01_v5__lcddisplay0__Clear();

}


/*========================================================================*\
   Use :InjectorBase1
       :Macro implementations
\*========================================================================*/

/*========================================================================*\
   Use :dash_IO_flasher
       :Macro implementations
\*========================================================================*/

/*========================================================================*\
   Use :fcdhelper
       :Macro implementations
\*========================================================================*/

/*========================================================================*\
   Use :cal_i2c
       :Macro implementations
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :Send text to the console
       :
       :Parameters for macro Prv_TextConsole:
       :  str[20] : MX_CHAR (by-ref)
\*=----------------------------------------------------------------------=*/
void FCD_07_cal_i2c__Prv_TextConsole(MX_CHAR* FCL_STR, MX_UINT16 FCLsz_STR)
{


}


/*========================================================================*\
   Use :v5__i2c0
       :Macro implementations
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :Receives a byte from the I??C bus.
       :
       :Parameters for macro ReceiveByte:
       :  Last : Used to signify the last byte when streaming incoming data. 0=Not last byte, 1=Last Byte
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_01_v5__i2c0__ReceiveByte(MX_UINT8 FCL_LAST)
{
	//Local variable definitions
	MX_UINT8 FCR_RETVAL;


	FCR_RETVAL = FC_CAL_I2C_Master_RxByte_1(FCL_LAST);

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Outputs a restart condition onto the I??C bus.
\*=----------------------------------------------------------------------=*/
void FCD_01_v5__i2c0__Restart()
{

	FC_CAL_I2C_Master_Restart_1();

}

/*=----------------------------------------------------------------------=*\
   Use :Outputs a stop condition onto the I??C bus.
\*=----------------------------------------------------------------------=*/
void FCD_01_v5__i2c0__Stop()
{

	FC_CAL_I2C_Master_Stop_1();

}

/*=----------------------------------------------------------------------=*\
   Use :Function to perform a generic I2C read transaction. The 7-bit device ID is automatically shifted up by one bit to make room for the read/write bit. Returns the data from the location specified.
       :
       :Parameters for macro ReceiveByteTransaction:
       :  Device_ID : 7-bit Device Address ID
       :  AddrH : Internal Address High Byte
       :  AddrL : Internal Address Low Byte
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_01_v5__i2c0__ReceiveByteTransaction(MX_UINT8 FCL_DEVICE_ID, MX_UINT8 FCL_ADDRH, MX_UINT8 FCL_ADDRL)
{
	//Local variable definitions
	MX_UINT8 FCR_RETVAL;


	FCL_DEVICE_ID = FCL_DEVICE_ID << 1;

	FC_CAL_I2C_Master_Start_1();

	FC_CAL_I2C_Master_TxByte_1(FCL_DEVICE_ID);

	FC_CAL_I2C_Master_TxByte_1(FCL_ADDRH);

	FC_CAL_I2C_Master_TxByte_1(FCL_ADDRL);

	FC_CAL_I2C_Master_Restart_1();

	FCL_DEVICE_ID = FCL_DEVICE_ID | 0x01;

	FC_CAL_I2C_Master_TxByte_1(FCL_DEVICE_ID);

	FCR_RETVAL = FC_CAL_I2C_Master_RxByte_1(0x01);

	FC_CAL_I2C_Master_Stop_1();

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Sends a byte on the I??C bus. Returns the acknowledge if any.        :0 represents that data was acknowledged and 1 represents no acknowledge was detected.
       :
       :Parameters for macro TransmitByte:
       :  Data : Data byte to send on the I??C bus.
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_01_v5__i2c0__TransmitByte(MX_UINT8 FCL_DATA)
{
	//Local variable definitions
	MX_UINT8 FCR_RETVAL;


	FCR_RETVAL = FC_CAL_I2C_Master_TxByte_1(FCL_DATA);

	return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Function to perform a generic I2C Write transaction. The 7-bit device ID is automatically shifted up by one bit to make room for the read/write bit.
       :
       :Parameters for macro SendByteTransaction:
       :  Device_ID : 7-bit Device Address ID
       :  AddrH : Internal Address High Byte
       :  AddrL : Internal Address Low Byte
       :  Data : Data Byte
\*=----------------------------------------------------------------------=*/
void FCD_01_v5__i2c0__SendByteTransaction(MX_UINT8 FCL_DEVICE_ID, MX_UINT8 FCL_ADDRH, MX_UINT8 FCL_ADDRL, MX_UINT8 FCL_DATA)
{

	FCL_DEVICE_ID = FCL_DEVICE_ID << 1;

	FC_CAL_I2C_Master_Start_1();

	FC_CAL_I2C_Master_TxByte_1(FCL_DEVICE_ID);

	FC_CAL_I2C_Master_TxByte_1(FCL_ADDRH);

	FC_CAL_I2C_Master_TxByte_1(FCL_ADDRL);

	FC_CAL_I2C_Master_TxByte_1(FCL_DATA);

	FC_CAL_I2C_Master_Stop_1();

}

/*=----------------------------------------------------------------------=*\
   Use :Outputs a start condition onto the I??C bus.
\*=----------------------------------------------------------------------=*/
void FCD_01_v5__i2c0__Start()
{

	FC_CAL_I2C_Master_Start_1();

}

/*=----------------------------------------------------------------------=*\
   Use :Enables the I??C hardware and performs some initialization.       :Should be called at the start of the program or at least before any of the other I??C functions are called.
\*=----------------------------------------------------------------------=*/
void FCD_01_v5__i2c0__Initialise()
{

	FC_CAL_I2C_Master_Init_1();

}


/*========================================================================*\
   Use :panel
       :Macro implementations
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :Reading Hours Min Seconds
\*=----------------------------------------------------------------------=*/
void FCM_Read_Time()
{

	//Comment:
	//The write comand is needed before starting to read data.

	// 
	// Call Component Macro: v5__i2c0::Start()
	FCD_01_v5__i2c0__Start();

	// Set RTC To Write
	// Call Component Macro: Retval=v5__i2c0::TransmitByte(RTC_W)
	FCV_RETVAL = FCD_01_v5__i2c0__TransmitByte(FCV_RTC_W);

	// Select Seconds Register
	// Call Component Macro: Retval=v5__i2c0::TransmitByte(0)
	FCV_RETVAL = FCD_01_v5__i2c0__TransmitByte(0);

	// Restart RTC
	// Call Component Macro: v5__i2c0::Restart()
	FCD_01_v5__i2c0__Restart();

	// Set RTC To Read
	// Call Component Macro: Retval=v5__i2c0::TransmitByte(RTC_R)
	FCV_RETVAL = FCD_01_v5__i2c0__TransmitByte(FCV_RTC_R);

	// Read Seconds (BCD)
	// Call Component Macro: Reg_second=v5__i2c0::ReceiveByte(0)
	FCV_REG_SECOND = FCD_01_v5__i2c0__ReceiveByte(0);

	// Read Minutes (BCD)
	// Call Component Macro: Reg_Minute=v5__i2c0::ReceiveByte(0)
	FCV_REG_MINUTE = FCD_01_v5__i2c0__ReceiveByte(0);

	// Read Hours (BCD)
	// Call Component Macro: Reg_Hour=v5__i2c0::ReceiveByte(1)
	FCV_REG_HOUR = FCD_01_v5__i2c0__ReceiveByte(1);

	//Comment:
	//Setting Last(Byte) = 1 in the Read Hours macro is the 
	//"Not Retvalnowledge" to end the read cycle

	// 
	// Call Component Macro: v5__i2c0::Stop()
	FCD_01_v5__i2c0__Stop();

	// Calculate Decimal Values FromRaw BCD Data
	// Calculation:
	//  Var1 = Reg_second AND 0x0F
	//  Var2 = (Reg_second >> 4) AND 0x07
	//  Second = Var1 + (Var2 * 10)
	//  Var1 = Reg_Minute AND 0x0F
	//  Var2 = (Reg_Minute >> 4) AND 0x07
	//  Minute = Var1 + (Var2 * 10)
	//  Var1 = Reg_Hour AND 0x0F
	//  Var2 = (Reg_Hour >> 4) AND 0x03
	//  Hour = Var1 + (Var2 * 10)
	FCV_VAR1 = FCV_REG_SECOND & 0x0F;
	FCV_VAR2 = (FCV_REG_SECOND >> 4) & 0x07;
	FCV_SECOND = FCV_VAR1 + (FCV_VAR2 * 10);
	FCV_VAR1 = FCV_REG_MINUTE & 0x0F;
	FCV_VAR2 = (FCV_REG_MINUTE >> 4) & 0x07;
	FCV_MINUTE = FCV_VAR1 + (FCV_VAR2 * 10);
	FCV_VAR1 = FCV_REG_HOUR & 0x0F;
	FCV_VAR2 = (FCV_REG_HOUR >> 4) & 0x03;
	FCV_HOUR = FCV_VAR1 + (FCV_VAR2 * 10);

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_LEDs()
{

	// Decision
	// Decision: POT_Value > 840?
	if (FCV_POT_VALUE > 840)
	{

		// Calculation
		// Calculation:
		//  LED_Value = 63
		FCV_LED_VALUE = 63;

	} else {

		// Decision
		// Decision: POT_Value > 700?
		if (FCV_POT_VALUE > 700)
		{

			// Calculation
			// Calculation:
			//  LED_Value = 31
			FCV_LED_VALUE = 31;

		} else {

			// Decision
			// Decision: POT_Value > 560?
			if (FCV_POT_VALUE > 560)
			{

				// Calculation
				// Calculation:
				//  LED_Value = 15
				FCV_LED_VALUE = 15;

			} else {

				// Decision
				// Decision: POT_Value > 420?
				if (FCV_POT_VALUE > 420)
				{

					// Calculation
					// Calculation:
					//  LED_Value = 7
					FCV_LED_VALUE = 7;

				} else {

					// Decision
					// Decision: POT_Value > 280?
					if (FCV_POT_VALUE > 280)
					{

						// Calculation
						// Calculation:
						//  LED_Value = 3
						FCV_LED_VALUE = 3;

					} else {

						// Decision
						// Decision: POT_Value > 140?
						if (FCV_POT_VALUE > 140)
						{

							// Calculation
							// Calculation:
							//  LED_Value = 1
							FCV_LED_VALUE = 1;

						} else {

							// Calculation
							// Calculation:
							//  LED_Value = 0
							FCV_LED_VALUE = 0;

						}

					}

				}

			}

		}

	}

	// Decision
	// Decision: Enable_LED = 1?
	if (FCV_ENABLE_LED == 1)
	{

	} else {

		// Calculation
		// Calculation:
		//  LED_Value = 0
		FCV_LED_VALUE = 0;

	}

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_POT()
{

	// Input
	// Input: B7 -> Read_RB7
	FCP_GET_BIT(B, 0x80, 0x7F, 0, FCV_READ_RB7);
	// Decision
	// Decision: Read_RB7?
	if (FCV_READ_RB7)
	{

		// Call Component Macro
		// Call Component Macro: POT_Value=v5__adc0::GetInt()
		FCV_POT_VALUE = FCD_01_v5__adc0__GetInt();

		// Call Component Macro
		// Call Component Macro: v5__lcddisplay0::Cursor(0, 1)
		FCD_01_v5__lcddisplay0__Cursor(0, 1);

		// Call Component Macro
		// Call Component Macro: v5__lcddisplay0::PrintString("    ")
		FCD_01_v5__lcddisplay0__PrintString("    ", 4);

		// Decision
		// Decision: POT_Value > 999?
		if (FCV_POT_VALUE > 999)
		{

			// Calculation
			// Calculation:
			//  X = 0
			FCV_X = 0;

		} else {

			// Decision
			// Decision: POT_Value > 99?
			if (FCV_POT_VALUE > 99)
			{

				// Calculation
				// Calculation:
				//  X = 1
				FCV_X = 1;

			} else {

				// Decision
				// Decision: POT_Value > 9?
				if (FCV_POT_VALUE > 9)
				{

					// Calculation
					// Calculation:
					//  X = 2
					FCV_X = 2;

				} else {

					// Calculation
					// Calculation:
					//  X = 3
					FCV_X = 3;

				}

			}

		}

		// Call Component Macro
		// Call Component Macro: v5__lcddisplay0::Cursor(X, 1)
		FCD_01_v5__lcddisplay0__Cursor(FCV_X, 1);

		// Call Component Macro
		// Call Component Macro: v5__lcddisplay0::PrintNumber(POT_Value)
		FCD_01_v5__lcddisplay0__PrintNumber(FCV_POT_VALUE);

		// Call Component Macro
		// Call Component Macro: v5__lcddisplay0::PrintString("    ")
		FCD_01_v5__lcddisplay0__PrintString("    ", 4);

	} else {

		// Call Component Macro
		// Call Component Macro: v5__lcddisplay0::Cursor(0, 1)
		FCD_01_v5__lcddisplay0__Cursor(0, 1);

		// Call Component Macro
		// Call Component Macro: v5__lcddisplay0::PrintString("Disbld")
		FCD_01_v5__lcddisplay0__PrintString("Disbld", 6);

		// Calculation
		// Calculation:
		//  POT_Value = 0
		FCV_POT_VALUE = 0;

	}

}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_Switch()
{

	// Output
	// Output: 0 -> A0
	FCP_SET_BIT(A, 0x01, 0xFE, 0, (0));
	// Delay
	// Delay: 10 us
	FCI_DELAYBYTE_US(10);

	// Input
	// Input: A0 -> Read_Switch
	FCP_GET_BIT(A, 0x01, 0xFE, 0, FCV_READ_SWITCH);
	// Decision
	// Decision: Read_Switch = 1?
	if (FCV_READ_SWITCH == 1)
	{

		// Decision
		// Decision: Enable_Read_Switch = 1?
		if (FCV_ENABLE_READ_SWITCH == 1)
		{

			// Calculation
			// Calculation:
			//  Enable_LED = !Enable_LED
			//  Enable_Read_Switch = 0
			FCV_ENABLE_LED = !FCV_ENABLE_LED;
			FCV_ENABLE_READ_SWITCH = 0;

		// } else {

		}

	} else {

		// Calculation
		// Calculation:
		//  Enable_Read_Switch = 1
		FCV_ENABLE_READ_SWITCH = 1;

	}

	// Delay
	// Delay: 10 us
	FCI_DELAYBYTE_US(10);

	// Output
	// Output: LED_Value -> PORTA
	FCP_SET_FULL(A, 0xFF, 0x00, 0, (FCV_LED_VALUE));
}

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_Init()
{

	// Setup LCD
	// Call Component Macro: v5__lcddisplay0::Start()
	FCD_01_v5__lcddisplay0__Start();

	// Call Component Macro
	// Call Component Macro: v5__lcddisplay0::Cursor(3, 0)
	FCD_01_v5__lcddisplay0__Cursor(3, 0);

	// Call Component Macro
	// Call Component Macro: v5__lcddisplay0::PrintString("MICROCHIP")
	FCD_01_v5__lcddisplay0__PrintString("MICROCHIP", 9);

	// Call Component Macro
	// Call Component Macro: v5__lcddisplay0::Cursor(2, 1)
	FCD_01_v5__lcddisplay0__Cursor(2, 1);

	// Call Component Macro
	// Call Component Macro: v5__lcddisplay0::PrintString("One PIC MCU")
	FCD_01_v5__lcddisplay0__PrintString("One PIC MCU", 11);

	// Delay
	// Delay: 2 s
	FCI_DELAYBYTE_S(2);

	// Call Component Macro
	// Call Component Macro: v5__lcddisplay0::Clear()
	FCD_01_v5__lcddisplay0__Clear();

	// Call Component Macro
	// Call Component Macro: v5__lcddisplay0::Cursor(0, 0)
	FCD_01_v5__lcddisplay0__Cursor(0, 0);

	// Call Component Macro
	// Call Component Macro: v5__lcddisplay0::PrintString("Programmed With")
	FCD_01_v5__lcddisplay0__PrintString("Programmed With", 15);

	// Call Component Macro
	// Call Component Macro: v5__lcddisplay0::Cursor(2, 1)
	FCD_01_v5__lcddisplay0__Cursor(2, 1);

	// Call Component Macro
	// Call Component Macro: v5__lcddisplay0::PrintString("FLOWCODE V5!")
	FCD_01_v5__lcddisplay0__PrintString("FLOWCODE V5!", 12);

	// Delay
	// Delay: 2 s
	FCI_DELAYBYTE_S(2);

	// Call Component Macro
	// Call Component Macro: v5__lcddisplay0::Clear()
	FCD_01_v5__lcddisplay0__Clear();

	// Call Component Macro
	// Call Component Macro: v5__lcddisplay0::Cursor(1, 0)
	FCD_01_v5__lcddisplay0__Cursor(1, 0);

	// Call Component Macro
	// Call Component Macro: v5__lcddisplay0::PrintString("PIC16FL1939")
	FCD_01_v5__lcddisplay0__PrintString("PIC16FL1939", 11);

	// Define Parameters
	// Calculation:
	//  RTC = 0x6F
	//  RTC_R = (RTC << 1) + 1
	//  RTC_W = (RTC << 1) + 0
	FCV_RTC = 0x6F;
	FCV_RTC_R = (FCV_RTC << 1) + 1;
	FCV_RTC_W = (FCV_RTC << 1) + 0;

	// 
	// Call Component Macro: v5__i2c0::Initialise()
	FCD_01_v5__i2c0__Initialise();

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

	// 
	// Call Component Macro: v5__i2c0::Start()
	FCD_01_v5__i2c0__Start();

	// Set base addresss in write mode
	// Call Component Macro: Retval=v5__i2c0::TransmitByte(RTC_W)
	FCV_RETVAL = FCD_01_v5__i2c0__TransmitByte(FCV_RTC_W);

	// reg0
	// Call Component Macro: Retval=v5__i2c0::TransmitByte(0)
	FCV_RETVAL = FCD_01_v5__i2c0__TransmitByte(0);

	// Start osc (bit 7 = 1)and set seconds
	// Call Component Macro: Retval=v5__i2c0::TransmitByte(0x80)
	FCV_RETVAL = FCD_01_v5__i2c0__TransmitByte(0x80);

	// Set Minutes
	// Call Component Macro: Retval=v5__i2c0::TransmitByte(0)
	FCV_RETVAL = FCD_01_v5__i2c0__TransmitByte(0);

	// Set hours to 12
	// Call Component Macro: Retval=v5__i2c0::TransmitByte(12)
	FCV_RETVAL = FCD_01_v5__i2c0__TransmitByte(12);

	// 
	// Call Component Macro: v5__i2c0::Stop()
	FCD_01_v5__i2c0__Stop();

}

/*=----------------------------------------------------------------------=*\
   Use :Display Time
\*=----------------------------------------------------------------------=*/
void FCM_Disp_Time()
{

	// 
	// Call Component Macro: v5__lcddisplay0::Cursor(8, 1)
	FCD_01_v5__lcddisplay0__Cursor(8, 1);

	// N < 10
	// Decision: Hour < 10?
	if (FCV_HOUR < 10)
	{

		// Add Leading Zero If Less Than 10
		// Call Component Macro: v5__lcddisplay0::PrintNumber(0)
		FCD_01_v5__lcddisplay0__PrintNumber(0);

	// } else {

	}

	// Display Hour
	// Call Component Macro: v5__lcddisplay0::PrintNumber(Hour)
	FCD_01_v5__lcddisplay0__PrintNumber(FCV_HOUR);

	// Print ":"
	// Call Component Macro: v5__lcddisplay0::PrintString(":")
	FCD_01_v5__lcddisplay0__PrintString(":", 1);

	// N < 10
	// Decision: Minute < 10?
	if (FCV_MINUTE < 10)
	{

		// Add Leading Zero if Less Than 10
		// Call Component Macro: v5__lcddisplay0::PrintNumber(0)
		FCD_01_v5__lcddisplay0__PrintNumber(0);

	// } else {

	}

	// Display Minutes
	// Call Component Macro: v5__lcddisplay0::PrintNumber(Minute)
	FCD_01_v5__lcddisplay0__PrintNumber(FCV_MINUTE);

	// Print ":"
	// Call Component Macro: v5__lcddisplay0::PrintString(":")
	FCD_01_v5__lcddisplay0__PrintString(":", 1);

	// N < 10
	// Decision: Second < 10?
	if (FCV_SECOND < 10)
	{

		// Add Leading Zero If Less Than 10
		// Call Component Macro: v5__lcddisplay0::PrintNumber(0)
		FCD_01_v5__lcddisplay0__PrintNumber(0);

	// } else {

	}

	// Display Seconds
	// Call Component Macro: v5__lcddisplay0::PrintNumber(Second)
	FCD_01_v5__lcddisplay0__PrintNumber(FCV_SECOND);

}



/*========================================================================*\
   Use :Main
\*========================================================================*/
void main()
{ansela = 0x00;
anselb = 0x00;
anseld = 0x00;
ansele = 0x00;
option_reg = 0xC0;

	// Set Internal osc to 32MHz.  (pll has to be enabled)
	// C Code:
	

	// C Code
	// C Code:
	osccon=0x70;//inter osc to 8MHz (32MHZ with pll en) 
	clear_bit(option_reg , 7); //Enable port B weak pullups
	set_bit(wpub,7); //Only Enable WPU on RB7

	// Initalise RTC Settings
	// Call Macro: Init()
	FCM_Init();

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

		// 
		// Call Macro: Read_Time()
		FCM_Read_Time();

		// 
		// Call Macro: Disp_Time()
		FCM_Disp_Time();

		// Call Macro
		// Call Macro: POT()
		FCM_POT();

		// Call Macro
		// Call Macro: Switch()
		FCM_Switch();

		// Call Macro
		// Call Macro: LEDs()
		FCM_LEDs();

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


	}

	mainendloop: goto mainendloop;
}


/*========================================================================*\
   Use :Interrupt
\*========================================================================*/
void MX_INTERRUPT_MACRO(void)
{
}



