//************************************************************************************
//**  
//**  File name:     C:\Documents and Settings\Rob\Desktop\Flowagain\FlowBook\chapter 3\section 3-9\ATF ratio.c
//**  Generated by:  Flowcode v4.2.3.58
//**  Date:          Wednesday, March 24, 2010 14:18:15
//**  Licence:       Student
//**  Registered to: Rob Onkenhout
//**  
//**  
//**     NOT FOR COMMERCIAL USE
//**  
//**  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

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

//Macro function declarations


//Variable declarations
#define FCSZ_PART1 20
#define FCSZ_PART2 20
#define FCSZ_TOLCD 20
char FCV_AIRTOFUEL;
char FCV_TEMP;
char FCV_PART1[FCSZ_PART1];
char FCV_PART2[FCSZ_PART2];
char FCV_TORQUE;
char FCV_TOLCD[FCSZ_TOLCD];
char FCV_ENTRY;
char FCV_MULTIPLIER;


//Defines:

/**** Macro Substitutions ****
portb = D1 Port
trisb = D1 Data Direction
portb = D2 Port
trisb = D2 Data Direction
portb = D3 Port
trisb = D3 Data Direction
portb = D4 Port
trisb = D4 Data Direction
portb = RS Port
trisb = RS Data Direction
portb = E Port
trisb = E Data Direction
0 = Data 1_Pin
1 = Data 2 Pin
2 = Data 3 Pin
3 = Data 4 Pin
4 = RS Pin
5 = Enable Pin
LCD_5833680 = Unique Component Reference Number
2 = Row Count
16 = Column Count
******************************/

	//component connections
	#define LCD_5833680_PORT0    portb
	#define LCD_5833680_TRIS0    trisb
	#define LCD_5833680_PORT1    portb
	#define LCD_5833680_TRIS1    trisb
	#define LCD_5833680_PORT2    portb
	#define LCD_5833680_TRIS2    trisb
	#define LCD_5833680_PORT3    portb
	#define LCD_5833680_TRIS3    trisb
	#define LCD_5833680_PORT4    portb
	#define LCD_5833680_TRIS4    trisb
	#define LCD_5833680_PORT5    portb
	#define LCD_5833680_TRIS5    trisb
	#define LCD_5833680_BIT0    	0
	#define LCD_5833680_BIT1    	1
	#define LCD_5833680_BIT2    	2
	#define LCD_5833680_BIT3    	3
	#define LCD_5833680_RS      	4
	#define LCD_5833680_E       	5
	#define LCD_5833680_ROWCNT	2
	#define LCD_5833680_COLCNT	16

	#ifdef _BOOSTC
	  #define LCD_5833680_DELAY   delay_10us(10)
	#endif
	#ifdef _C2C_
	  #define LCD_5833680_DELAY   delay_us(100)
	#endif
	#ifdef HI_TECH_C
	  #define LCD_5833680_DELAY   __delay_us(120)
	#endif
	#ifndef LCD_5833680_DELAY
	  #define LCD_5833680_DELAY   delay_us(100)
	#endif




//LCDDisplay0: //Macro function declarations

void FCD_LCDDisplay0_RawSend(char in, char mask);
void FCD_LCDDisplay0_Start();
void FCD_LCDDisplay0_Clear();
void FCD_LCDDisplay0_PrintASCII(char Character);
void FCD_LCDDisplay0_Command(char in);
void FCD_LCDDisplay0_Cursor(char x, char y);
void FCD_LCDDisplay0_PrintNumber(short Number);
void FCD_LCDDisplay0_PrintString(char* String, char MSZ_String);
void FCD_LCDDisplay0_ScrollDisplay(char Direction, char Num_Positions);
void FCD_LCDDisplay0_ClearLine(char Line);
void FCD_LCDDisplay0_RAM_Write(char nIdx, char d0, char d1, char d2, char d3, char d4, char d5, char d6, char d7);
//Defines:

/**** Macro Substitutions ****
{'1','4','7','*','2','5','8','0','3','6','9','#'} = Key List (Numbers)
{1,4,7,10,2,5,8,0,3,6,9,11} = Key List (Characters)
trisd = Row Data Direction Register
portd = Row Port Register
3 = Number Of Columns
4 = Number Of Rows
trisd = Column Data Direction Register
portd = Column Port Register
1 = Column 1 mask
2 = Column 2 mask
4 = Column 3 mask
16 = Column 4 mask
16 = Row 1 mask
32 = Row 2 mask
64 = Row 3 mask
128 = Row 4 mask
******************************/




//KeyPad0: //Macro function declarations

char FCD_KeyPad0_GetKeypadNumber();
char FCD_KeyPad0_GetKeypadAscii();

//Supplementary defines
rom char* ATF = {132,145,151,157,160,164,167,170,172,174,177,179,182,184,186,188,189,191,193,194,197,198,199,201,202,204,205,207,208,209,211};





//LCDDisplay0: //Macro implementations


void FCD_LCDDisplay0_RawSend(char in, char mask)
{
		unsigned char pt;

		clear_bit(LCD_5833680_PORT0, LCD_5833680_BIT0);
		clear_bit(LCD_5833680_PORT1, LCD_5833680_BIT1);
		clear_bit(LCD_5833680_PORT2, LCD_5833680_BIT2);
		clear_bit(LCD_5833680_PORT3, LCD_5833680_BIT3);
		clear_bit(LCD_5833680_PORT4, LCD_5833680_RS);
		clear_bit(LCD_5833680_PORT5, LCD_5833680_E);
		pt = ((in >> 4) & 0x0f);
		if (pt & 0x01)
		    set_bit(LCD_5833680_PORT0, LCD_5833680_BIT0);
		if (pt & 0x02)
		    set_bit(LCD_5833680_PORT1, LCD_5833680_BIT1);
		if (pt & 0x04)
		    set_bit(LCD_5833680_PORT2, LCD_5833680_BIT2);
		if (pt & 0x08)
		    set_bit(LCD_5833680_PORT3, LCD_5833680_BIT3);
		if (mask)
		    set_bit(LCD_5833680_PORT4, LCD_5833680_RS);
		LCD_5833680_DELAY;
		set_bit (LCD_5833680_PORT5, LCD_5833680_E);
		LCD_5833680_DELAY;
		clear_bit (LCD_5833680_PORT5, LCD_5833680_E);
		pt = (in & 0x0f);
		LCD_5833680_DELAY;
		clear_bit(LCD_5833680_PORT0, LCD_5833680_BIT0);
		clear_bit(LCD_5833680_PORT1, LCD_5833680_BIT1);
		clear_bit(LCD_5833680_PORT2, LCD_5833680_BIT2);
		clear_bit(LCD_5833680_PORT3, LCD_5833680_BIT3);
		clear_bit(LCD_5833680_PORT4, LCD_5833680_RS);
		clear_bit(LCD_5833680_PORT5, LCD_5833680_E);
		if (pt & 0x01)
		    set_bit(LCD_5833680_PORT0, LCD_5833680_BIT0);
		if (pt & 0x02)
		    set_bit(LCD_5833680_PORT1, LCD_5833680_BIT1);
		if (pt & 0x04)
		    set_bit(LCD_5833680_PORT2, LCD_5833680_BIT2);
		if (pt & 0x08)
		    set_bit(LCD_5833680_PORT3, LCD_5833680_BIT3);
		if (mask)
		    set_bit(LCD_5833680_PORT4, LCD_5833680_RS);
		LCD_5833680_DELAY;
		set_bit (LCD_5833680_PORT5, LCD_5833680_E);
		LCD_5833680_DELAY;
		clear_bit (LCD_5833680_PORT5, LCD_5833680_E);
		LCD_5833680_DELAY;
}

void FCD_LCDDisplay0_Start()
{
	
		clear_bit(LCD_5833680_TRIS0, LCD_5833680_BIT0);
		clear_bit(LCD_5833680_TRIS1, LCD_5833680_BIT1);
		clear_bit(LCD_5833680_TRIS2, LCD_5833680_BIT2);
		clear_bit(LCD_5833680_TRIS3, LCD_5833680_BIT3);
		clear_bit(LCD_5833680_TRIS4, LCD_5833680_RS);
		clear_bit(LCD_5833680_TRIS5, LCD_5833680_E);

		Wdt_Delay_Ms(12);

		FCD_LCDDisplay0_RawSend(0x33, 0);
		Wdt_Delay_Ms(2);
		FCD_LCDDisplay0_RawSend(0x33, 0);
		Wdt_Delay_Ms(2);
		FCD_LCDDisplay0_RawSend(0x32, 0);
		Wdt_Delay_Ms(2);
		FCD_LCDDisplay0_RawSend(0x2c, 0);
		Wdt_Delay_Ms(2);
		FCD_LCDDisplay0_RawSend(0x06, 0);
		Wdt_Delay_Ms(2);
		FCD_LCDDisplay0_RawSend(0x0c, 0);
		Wdt_Delay_Ms(2);

		//clear the display
		FCD_LCDDisplay0_RawSend(0x01, 0);
		Wdt_Delay_Ms(2);
		FCD_LCDDisplay0_RawSend(0x02, 0);
		Wdt_Delay_Ms(2);

}

void FCD_LCDDisplay0_Clear()
{
	
		FCD_LCDDisplay0_RawSend(0x01, 0);
		Wdt_Delay_Ms(2);
		FCD_LCDDisplay0_RawSend(0x02, 0);
		Wdt_Delay_Ms(2);

}

void FCD_LCDDisplay0_PrintASCII(char Character)
{
	
		FCD_LCDDisplay0_RawSend(Character, 0x10);

}

void FCD_LCDDisplay0_Command(char in)
{
	
		FCD_LCDDisplay0_RawSend(in, 0);
		Wdt_Delay_Ms(2);

}

void FCD_LCDDisplay0_Cursor(char x, char y)
{
	
	  #if (LCD_5833680_ROWCNT == 1)
	    y=0x80;
	  #endif

	  #if (LCD_5833680_ROWCNT == 2)
		if (y==0)
			y=0x80;
		else
			y=0xc0;
	  #endif

	  #if (LCD_5833680_ROWCNT == 4)
		if (y==0)
			y=0x80;
		else if (y==1)
			y=0xc0;

		#if (LCD_5833680_COLCNT == 16)
			else if (y==2)
				y=0x90;
			else
				y=0xd0;
		#endif

		#if (LCD_5833680_COLCNT == 20)
			else if (y==2)
				y=0x94;
			else
				y=0xd4;
		#endif
	  #endif

		FCD_LCDDisplay0_RawSend(y+x, 0);
		Wdt_Delay_Ms(2);

}

void FCD_LCDDisplay0_PrintNumber(short Number)
{
	
		short tmp_int;
		char tmp_byte;
		if (Number < 0)
		{
			FCD_LCDDisplay0_RawSend('-', 0x10);
			Number = 0 - Number;
		}

		tmp_int = Number;
		if (Number >= 10000)
		{
			tmp_byte = tmp_int / 10000;
			FCD_LCDDisplay0_RawSend('0' + tmp_byte, 0x10);

			while (tmp_byte > 0)
			{
				tmp_int = tmp_int - 10000;
				tmp_byte--;
			}
		}
		if (Number >= 1000)
		{
			tmp_byte = tmp_int / 1000;
			FCD_LCDDisplay0_RawSend('0' + tmp_byte, 0x10);

			while (tmp_byte > 0)
			{
				tmp_int = tmp_int - 1000;
				tmp_byte--;
			}
		}
		if (Number >= 100)
		{
			tmp_byte = tmp_int / 100;
			FCD_LCDDisplay0_RawSend('0' + tmp_byte, 0x10);

			while (tmp_byte > 0)
			{
				tmp_int = tmp_int - 100;
				tmp_byte--;
			}
		}
		if (Number >= 10)
		{
			tmp_byte = tmp_int / 10;
			FCD_LCDDisplay0_RawSend('0' + tmp_byte, 0x10);

			while (tmp_byte > 0)
			{
				tmp_int = tmp_int - 10;
				tmp_byte--;
			}
		}
		FCD_LCDDisplay0_RawSend('0' + tmp_int, 0x10);

}

void FCD_LCDDisplay0_PrintString(char* String, char MSZ_String)
{
	
		char idx = 0;

		for (idx=0; idx<MSZ_String; idx++)
		{
			#ifdef _BOOSTC
				if (String[idx] == 0)
				{
					break;
				}
				FCD_LCDDisplay0_RawSend(String[idx], 0x10);
			#endif

			#ifdef HI_TECH_C
				if (*String == 0)
				{
					break;
				}
				FCD_LCDDisplay0_RawSend(*String, 0x10);
				String++;
			#endif
		}

}

void FCD_LCDDisplay0_ScrollDisplay(char Direction, char Num_Positions)
{
	
		char cmd = 0;
		char count;

		//Choose the direction
		switch (Direction)
		{
			case 0:
			case 'l':
			case 'L':

				cmd = 0x18;
				break;

			case 1:
			case 'r':
			case 'R':

				cmd = 0x1C;
				break;

			default:
				break;
		}

		//If direction accepted then scroll the specified amount
		if (cmd)
		{
			for (count = 0; count < Num_Positions; count++)
				FCD_LCDDisplay0_Command(cmd);
		}

}

void FCD_LCDDisplay0_ClearLine(char Line)
{
	
		char count;
		char rowcount;

		//Define number of columns per line
		#if (LCD_5833680_ROWCNT == 1)
			rowcount=80;
		#endif

		#if (LCD_5833680_ROWCNT == 2)
			rowcount=40;
		#endif

		#if (LCD_5833680_ROWCNT == 4)
			#if (LCD_5833680_COLCNT == 16)
				rowcount=16;
			#endif
			#if (LCD_5833680_COLCNT == 20)
				rowcount=20;
			#endif
		#endif

		//Start at beginning of the line
		FCD_LCDDisplay0_Cursor (0, Line);

		//Send out spaces to clear line
		for (count = 0; count < rowcount; count++)
			FCD_LCDDisplay0_RawSend(' ', 0x10);

		//Move back to the beginning of the line.
		FCD_LCDDisplay0_Cursor (0, Line);

}

void FCD_LCDDisplay0_RAM_Write(char nIdx, char d0, char d1, char d2, char d3, char d4, char d5, char d6, char d7)
{
	   //set CGRAM address
	   FCD_LCDDisplay0_RawSend(64 + (nIdx << 3), 0);
	   delay_ms(2);

	   //write CGRAM data
	   FCD_LCDDisplay0_RawSend(d0, 0x10);
	   FCD_LCDDisplay0_RawSend(d1, 0x10);
	   FCD_LCDDisplay0_RawSend(d2, 0x10);
	   FCD_LCDDisplay0_RawSend(d3, 0x10);
	   FCD_LCDDisplay0_RawSend(d4, 0x10);
	   FCD_LCDDisplay0_RawSend(d5, 0x10);
	   FCD_LCDDisplay0_RawSend(d6, 0x10);
	   FCD_LCDDisplay0_RawSend(d7, 0x10);

	   //Clear the display
	   FCD_LCDDisplay0_RawSend(0x01, 0);
	   delay_ms(2);
	   FCD_LCDDisplay0_RawSend(0x02, 0);
	   delay_ms(2);
}



//KeyPad0: //Macro implementations


char FCD_KeyPad0_GetKeypadNumber()
{
		//get matrices for rows and columns
		#if (3 == 1)
			#define KPAD_COL_MTX {1}
			#define KPAD_COL_MASK (1)
		#endif
		#if (3 == 2)
			#define KPAD_COL_MTX {1,2}
			#define KPAD_COL_MASK (1|2)
		#endif
		#if (3 == 3)
			#define KPAD_COL_MTX {1,2,4}
			#define KPAD_COL_MASK (1|2|4)
		#endif
		#if (3 == 4)
			#define KPAD_COL_MTX {1,2,4,16}
			#define KPAD_COL_MASK (1|2|4|16)
		#endif
		#if (4 == 1)
			#define KPAD_ROW_MTX {16}
			#define KPAD_ROW_MASK (16)
		#endif
		#if (4 == 2)
			#define KPAD_ROW_MTX {16,32}
			#define KPAD_ROW_MASK (16|32)
		#endif
		#if (4 == 3)
			#define KPAD_ROW_MTX {16,32,64}
			#define KPAD_ROW_MASK (16|32|64)
		#endif
		#if (4 == 4)
			#define KPAD_ROW_MTX {16,32,64,128}
			#define KPAD_ROW_MASK (16|32|64|128)
		#endif

		#ifndef KPAD_COL_MTX
			#pragma error Keypad error: column count is not 1-4
		#endif
		#ifndef KPAD_ROW_MTX
			#pragma error Keypad error: row count is not 1-4
		#endif

		//store keys and pin connections into a constant array
		#ifdef _BOOSTC
			rom char* mtxKeysAsNumbers = {1,4,7,10,2,5,8,0,3,6,9,11};
			rom char* mtxCols = KPAD_COL_MTX;
			rom char* mtxRows = KPAD_ROW_MTX;
		#endif
		#ifdef HI_TECH_C
			const char mtxKeysAsNumbers[] = {1,4,7,10,2,5,8,0,3,6,9,11};
			const char mtxCols[] = KPAD_COL_MTX;
			const char mtxRows[] = KPAD_ROW_MTX;
		#endif

		//set up i/o of port (rows = inputs, columns = outputs)
		trisd = (trisd | KPAD_ROW_MASK);
		trisd = (trisd & ~KPAD_COL_MASK);		//BR

		char iCol;
		char iRow;
		char c_ip;
		for (iCol=0; iCol<3; iCol++)
		{
			//output the appropriate column high
			portd = mtxCols[iCol];

			//delay
			delay_us(10);

			//read the port
			c_ip = portd;

			//check for a hit
			for (iRow=0; iRow<4; iRow++)
			{
				if ((c_ip & mtxRows[iRow]) != 0)
				{
					//found it!
					goto found_key;
				}
			}
		}

		//if it gets here, it has not been found...
		return (255);

	  found_key:
		return (mtxKeysAsNumbers[(iCol*4) + iRow]);

	  #undef KPAD_COL_MTX
	  #undef KPAD_ROW_MTX
	  #undef KPAD_COL_MASK
	  #undef KPAD_ROW_MASK

}

char FCD_KeyPad0_GetKeypadAscii()
{
		//get matrices for rows and columns
		#if (3 == 1)
			#define KPAD_COL_MTX {1}
			#define KPAD_COL_MASK (1)
		#endif
		#if (3 == 2)
			#define KPAD_COL_MTX {1,2}
			#define KPAD_COL_MASK (1|2)
		#endif
		#if (3 == 3)
			#define KPAD_COL_MTX {1,2,4}
			#define KPAD_COL_MASK (1|2|4)
		#endif
		#if (3 == 4)
			#define KPAD_COL_MTX {1,2,4,16}
			#define KPAD_COL_MASK (1|2|4|16)
		#endif
		#if (4 == 1)
			#define KPAD_ROW_MTX {16}
			#define KPAD_ROW_MASK (16)
		#endif
		#if (4 == 2)
			#define KPAD_ROW_MTX {16,32}
			#define KPAD_ROW_MASK (16|32)
		#endif
		#if (4 == 3)
			#define KPAD_ROW_MTX {16,32,64}
			#define KPAD_ROW_MASK (16|32|64)
		#endif
		#if (4 == 4)
			#define KPAD_ROW_MTX {16,32,64,128}
			#define KPAD_ROW_MASK (16|32|64|128)
		#endif

		#ifndef KPAD_COL_MTX
			#pragma error Keypad error: column count is not 1-4
		#endif
		#ifndef KPAD_ROW_MTX
			#pragma error Keypad error: row count is not 1-4
		#endif

		//store keys and pin connections into a constant array
		#ifdef _BOOSTC
			rom char* mtxKeysAsChars = {'1','4','7','*','2','5','8','0','3','6','9','#'};
			rom char* mtxCols = KPAD_COL_MTX;
			rom char* mtxRows = KPAD_ROW_MTX;
		#endif
		#ifdef HI_TECH_C
			const char mtxKeysAsChars[] = {'1','4','7','*','2','5','8','0','3','6','9','#'};
			const char mtxCols[] = KPAD_COL_MTX;
			const char mtxRows[] = KPAD_ROW_MTX;
		#endif

		//set up i/o of port (rows = inputs, columns = outputs)
		trisd = (trisd | KPAD_ROW_MASK);
		trisd = (trisd & ~KPAD_COL_MASK);

		char iCol;
		char iRow;
		char c_ip;
		for (iCol=0; iCol<3; iCol++)
		{
			//output the appropriate column high
			portd = mtxCols[iCol];

			//delay
			delay_us(10);

			//read the port
			c_ip = portd;

			//check for a hit
			for (iRow=0; iRow<4; iRow++)
			{
				if ((c_ip & mtxRows[iRow]) != 0)
				{
					//found it!
					goto found_key;
				}
			}
		}

		//if it gets here, it has not been found...
		return (255);

	  found_key:
		return (mtxKeysAsChars[(iCol*4) + iRow]);

	  #undef KPAD_COL_MTX
	  #undef KPAD_ROW_MTX
	  #undef KPAD_COL_MASK
	  #undef KPAD_ROW_MASK

}

//Macro implementations

//Supplementary implementations


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


	//Interrupt initialisation code
	option_reg = 0xC0;


	//
	//Call Component Macro: LCDDisplay(0)::Start
	FCD_LCDDisplay0_Start();


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


	//Loop
	//Loop: While 1
	while (1)
	{
		//Set variables
		//Calculation:
		//  multiplier = 100
		//  torque = 0
		//  entry = 0
		FCV_MULTIPLIER = 100;
		FCV_TORQUE = 0;
		FCV_ENTRY = 0;
		

		//
		//Call Component Macro: LCDDisplay(0)::Cursor(0, 0)
		FCD_LCDDisplay0_Cursor(0, 0);


		//Loop until 3 digits are in
		//Loop: While multiplier <> 0
		while (FCV_MULTIPLIER != 0)
		{
			//
			//Call Component Macro: entry=KeyPad(0)::GetKeypadNumber
			FCV_ENTRY = FCD_KeyPad0_GetKeypadNumber();


			//Key pressed but not * or #
			//Decision: ( entry <> 255 ) AND ( entry <> 10 ) AND ( entry <> 11 )?
			if (( FCV_ENTRY != 255 ) & ( FCV_ENTRY != 10 ) & ( FCV_ENTRY != 11 ))
			{
				//
				//Calculation:
				//  torque = torque + entry * multiplier
				//  multiplier = multiplier / 10
				FCV_TORQUE = FCV_TORQUE + FCV_ENTRY * FCV_MULTIPLIER;
				FCV_MULTIPLIER = FCV_MULTIPLIER / 10;
				

				//Show on LCD
				//Call Component Macro: LCDDisplay(0)::PrintNumber(entry)
				FCD_LCDDisplay0_PrintNumber(FCV_ENTRY);


				//Wait until key is released
				//Loop: While entry = temp
				while (1)
				{
					//
					//Call Component Macro: temp=KeyPad(0)::GetKeypadNumber
					FCV_TEMP = FCD_KeyPad0_GetKeypadNumber();


					if ((FCV_ENTRY == FCV_TEMP) == 0) break;
				}


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


			}


		}


		//Convert to LUT number
		//Calculation:
		//  torque = torque - 70
		FCV_TORQUE = FCV_TORQUE - 70;
		

		//Get value from the table
		//C Code:
		FCV_AIRTOFUEL = ATF[FCV_TORQUE];



		//Put decimal point back in
		//String Manipulation:
		//  tolcd = ToString$(airtofuel)
		//  part1 = left$(tolcd, 2)
		//  part2 = right$(tolcd, 1)
		//  tolcd = part1 + "." + part2
		FCI_TOSTRING(FCV_AIRTOFUEL,FCV_TOLCD,FCSZ_TOLCD);
		FCI_LEFTSTRING(FCV_TOLCD,FCSZ_TOLCD,FCV_PART1,FCSZ_PART1,2);
		FCI_RIGHTSTRING(FCV_TOLCD,FCSZ_TOLCD,FCV_PART2,FCSZ_PART2,1);
		FCI_CONCATENATE(FCV_PART1,FCSZ_PART1,".",1,FCI_TMP_STR,20);
		FCI_CONCATENATE(FCI_TMP_STR,20,FCV_PART2,FCSZ_PART2,FCV_TOLCD,FCSZ_TOLCD);
		

		//
		//Call Component Macro: LCDDisplay(0)::Cursor(0, 1)
		FCD_LCDDisplay0_Cursor(0, 1);


		//Show Air to Fuel ratio
		//Call Component Macro: LCDDisplay(0)::PrintString(tolcd)
		FCD_LCDDisplay0_PrintString(FCV_TOLCD,FCSZ_TOLCD);


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


		//Clear after 1 second
		//Call Component Macro: LCDDisplay(0)::Clear
		FCD_LCDDisplay0_Clear();


	}


	mainendloop: goto mainendloop;
}

void MX_INTERRUPT_MACRO(void)
{
}



