//************************************************************************************
//**  
//**  Source name:   M:\01_EmbeddedDesign\Flowcode\BasicLearning\IO_Interrupt_STM32.fcfx
//**  Title:         
//**  Description:   
//**  Device:        ARM.F4.32F411CE
//**  
//**  Generated by:  Flowcode v10.1.2.40
//**  Date:          Tuesday, June 10, 2025 16:02:54
//**  Users:         1
//**  Registered to: liudeqiang_2008 (33914687)
//**  Licence key: EQXM6W
//**  
//**  
//**     NOT FOR COMMERCIAL USE
//**  
//**  https://www.flowcode.co.uk
//**  
//************************************************************************************


#define MX_ARM

#define MX_CAL_ARM

#define MX_CLK_SPEED 16000000

#define FCP_NULL Unconnected_Port


#define MX_CAL_STARM

//Configuration Start
#define RCC_OSC_TYPE (0)
#define RCC_PLL_SRC (1)
#define RCC_PLLM (16)
#define RCC_PLLN (192)
#define RCC_PLLP (2)
#define RCC_PLLQ (4)
#define RCC_SYSCLK_SRC (2)
#define RCC_AHB_PRE (1)
#define RCC_APB1_PRE (2)
#define RCC_APB2_PRE (1)
#define FLASH_LTNC (3)
//Configuration End

/*========================================================================*\
   Use :Include the type definitions
\*========================================================================*/
#include "C:\ProgramData\MatrixTSL\FlowcodeV10\CAL\internals.c"



MX_UINT32 FCLV_LOOP1;
MX_UINT32 FCLV_LOOP2;
MX_UINT32 FCLV_LOOP3;

void FCM_Call_Interrupt();
MX_UINT16 FCD_00fb8_WidthData__GetLUTCount();
MX_UINT16 FCD_00fb7_ASCIIData__GetLUTCount();
MX_UINT16 FCD_09e54_gLCD_Font4__SumWidths(MX_UINT8 FCL_CHARACTER);
MX_UINT8 FCD_09e54_gLCD_Font4__ReadWidth(MX_UINT8 FCL_CHARACTER);
MX_UINT8 FCD_09e54_gLCD_Font4__ReadFontStat(MX_UINT8 FCL_INDEX);
MX_UINT8 FCD_09e54_gLCD_Font4__ReadASCIILUT(MX_UINT8 FCL_CHARACTER, MX_UINT8 FCL_BYTEINDEX);
MX_UINT16 FCD_00fb6_WidthData__GetLUTCount();
MX_UINT16 FCD_00fb5_ASCIIData__GetLUTCount();
MX_UINT16 FCD_09e53_gLCD_Font3__SumWidths(MX_UINT8 FCL_CHARACTER);
MX_UINT8 FCD_09e53_gLCD_Font3__ReadWidth(MX_UINT8 FCL_CHARACTER);
MX_UINT8 FCD_09e53_gLCD_Font3__ReadFontStat(MX_UINT8 FCL_INDEX);
MX_UINT8 FCD_09e53_gLCD_Font3__ReadASCIILUT(MX_UINT8 FCL_CHARACTER, MX_UINT8 FCL_BYTEINDEX);
MX_UINT16 FCD_00fb4_WidthData__GetLUTCount();
MX_UINT16 FCD_00fb3_ASCIIData__GetLUTCount();
MX_UINT16 FCD_09e52_gLCD_Font2__SumWidths(MX_UINT8 FCL_CHARACTER);
MX_UINT8 FCD_09e52_gLCD_Font2__ReadWidth(MX_UINT8 FCL_CHARACTER);
MX_UINT8 FCD_09e52_gLCD_Font2__ReadFontStat(MX_UINT8 FCL_INDEX);
MX_UINT8 FCD_09e52_gLCD_Font2__ReadASCIILUT(MX_UINT8 FCL_CHARACTER, MX_UINT8 FCL_BYTEINDEX);
MX_UINT16 FCD_00fb2_WidthData__GetLUTCount();
MX_UINT16 FCD_00fb1_ASCIIData__GetLUTCount();
MX_UINT16 FCD_09e51_gLCD_Font1__SumWidths(MX_UINT8 FCL_CHARACTER);
MX_UINT8 FCD_09e51_gLCD_Font1__ReadWidth(MX_UINT8 FCL_CHARACTER);
MX_UINT8 FCD_09e51_gLCD_Font1__ReadFontStat(MX_UINT8 FCL_INDEX);
MX_UINT8 FCD_09e51_gLCD_Font1__ReadASCIILUT(MX_UINT8 FCL_CHARACTER, MX_UINT8 FCL_BYTEINDEX);

/*========================================================================*\
   Use :Base_GLCD1
       :Macro function declarations
\*========================================================================*/

/*=----------------------------------------------------------------------=*\
   Use :Base_GLCD1
       :Supplementary defines
\*=----------------------------------------------------------------------=*/
#define ReadFontWidth(FONT, CHAR) FCD_0ba71_Base_GLCD1__ReadFontWidth(FONT, CHAR)
#define ReadFontStat(FONT, IDX) FCD_0ba71_Base_GLCD1__ReadFontStat(FONT, IDX)


MX_UINT8 FCD_0ba71_Base_GLCD1__ReadFontWidth(MX_UINT8 FCL_FONT, MX_UINT8 FCL_CHARACTER);
MX_UINT8 FCD_0ba71_Base_GLCD1__ReadFontStat(MX_UINT8 FCL_FONT, MX_UINT8 FCL_INDEX);
MX_UINT8 FCD_0ba71_Base_GLCD1__ReadFontByte(MX_UINT8 FCL_FONT, MX_UINT8 FCL_CHARACTER, MX_UINT8 FCL_BYTEINDEX);
void FCD_04071_LCD__Clear();
void FCD_04071_LCD__PrintString(MX_CHAR *FCL_TEXT, MX_UINT16 FCLsz_TEXT);
void FCD_04071_LCD__PrintAscii(MX_UINT8 FCL_CHARACTER);
void FCD_04071_LCD__PrintNumber(MX_SINT16 FCL_NUMBER);
void FCD_04071_LCD__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_04071_LCD__ClearLine(MX_UINT8 FCL_LINE);
void FCD_04071_LCD__Cursor(MX_UINT8 FCL_X, MX_UINT8 FCL_Y);
void FCD_04071_LCD__Command(MX_UINT8 FCL_INSTRUCTION);
void FCD_04071_LCD__PrintFormattedNumber(MX_UINT32 FCL_NUMBER, MX_BOOL FCL_FORMAT);
void FCD_04071_LCD__ScrollDisplay(MX_UINT8 FCL_POSITION, MX_UINT8 FCL_DIRECTION);
void FCD_04071_LCD__RawSend(MX_UINT8 FCL_DATA, MX_BOOL FCL_TYPE);
void FCD_04071_LCD__PrintFloat(MX_FLOAT FCL_NUMBER, MX_UINT8 FCL_DECIMALPLACES);
void FCD_04071_LCD__RemapCharacter(MX_UINT8 FCL_REMAPIDX, MX_UINT8 FCL_SEARCHCHARACTER, MX_UINT8 FCL_REPLACEMENTCHARACTER);
void FCD_04071_LCD__Start();
void FCD_0c241_lcd_4x20__Clear();
void FCD_0c241_lcd_4x20__PrintString(MX_CHAR *FCL_TEXT, MX_UINT16 FCLsz_TEXT);
void FCD_0c241_lcd_4x20__PrintAscii(MX_UINT8 FCL_CHARACTER);
void FCD_0c241_lcd_4x20__PrintNumber(MX_SINT16 FCL_NUMBER);
void FCD_0c241_lcd_4x20__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_0c241_lcd_4x20__ClearLine(MX_UINT8 FCL_LINE);
void FCD_0c241_lcd_4x20__Cursor(MX_UINT8 FCL_X, MX_UINT8 FCL_Y);
void FCD_0c241_lcd_4x20__Command(MX_UINT8 FCL_INSTRUCTION);
void FCD_0c241_lcd_4x20__PrintFormattedNumber(MX_UINT32 FCL_NUMBER, MX_BOOL FCL_FORMAT);
void FCD_0c241_lcd_4x20__ScrollDisplay(MX_UINT8 FCL_POSITION, MX_UINT8 FCL_DIRECTION);
void FCD_0c241_lcd_4x20__RawSend(MX_UINT8 FCL_DATA, MX_BOOL FCL_TYPE);
void FCD_0c241_lcd_4x20__PrintFloat(MX_FLOAT FCL_NUMBER, MX_UINT8 FCL_DECIMALPLACES);
void FCD_0c241_lcd_4x20__RemapCharacter(MX_UINT8 FCL_REMAPIDX, MX_UINT8 FCL_SEARCHCHARACTER, MX_UINT8 FCL_REPLACEMENTCHARACTER);
void FCD_0c241_lcd_4x20__Start();

/*========================================================================*\
   Use :Include the chip adaption layer
\*========================================================================*/
#include "C:\ProgramData\MatrixTSL\FlowcodeV10\CAL\includes.c"


/*========================================================================*\
   Use :WidthData
       :GUID: dfb4d07a-3d70-45d5-83ef-07e3c95d86ab
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\lut.fcpx
       :Version: 15.0 (0x100728)
       :Timestamp: 11\04\2025
       :Variable declarations
       :Macro implementations
\*========================================================================*/
#define FCVsz_00fb8_WidthData__FLOATFIXEDLIST 1
#define FCVsz_00fb8_WidthData__INTFIXEDLIST 1
#define FCD_00fb8_WidthData__INTFIXEDLIST(ix) 0

/*=----------------------------------------------------------------------=*\
   Use :Gets the number of individual data entries stored in the LUT.
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_00fb8_WidthData__GetLUTCount()
{
  //Local variable definitions
  MX_UINT16 FCR_RETVAL;


  #if (0)
  //Code has been optimised out by the pre-processor
  #else
    FCR_RETVAL = 0;

  #endif

  return (FCR_RETVAL);

}


/*========================================================================*\
   Use :ASCIIData
       :GUID: dfb4d07a-3d70-45d5-83ef-07e3c95d86ab
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\lut.fcpx
       :Version: 15.0 (0x100728)
       :Timestamp: 11\04\2025
       :Variable declarations
       :Macro implementations
\*========================================================================*/
#define FCVsz_00fb7_ASCIIData__FLOATFIXEDLIST 1
#define FCVsz_00fb7_ASCIIData__INTFIXEDLIST 1
#define FCD_00fb7_ASCIIData__INTFIXEDLIST(ix) 0

/*=----------------------------------------------------------------------=*\
   Use :Gets the number of individual data entries stored in the LUT.
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_00fb7_ASCIIData__GetLUTCount()
{
  //Local variable definitions
  MX_UINT16 FCR_RETVAL;


  #if (0)
  //Code has been optimised out by the pre-processor
  #else
    FCR_RETVAL = 0;

  #endif

  return (FCR_RETVAL);

}


/*========================================================================*\
   Use :gLCD_Font4
       :GUID: 1b08885c-807e-4631-930e-a4fef06159dc
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\gLCD_Font.fcpx
       :Version: 31.0 (0x100028)
       :Timestamp: 06\06\2025
       :Variable declarations
       :Macro implementations
\*========================================================================*/
MX_GLOBAL MX_UINT8 FCV_09e54_gLCD_Font4__OLDCHAR = (0x0);
MX_GLOBAL MX_UINT16 FCV_09e54_gLCD_Font4__OLDPOSITION = (0x0);

/*=----------------------------------------------------------------------=*\
   Use :Adds up all the pixels widths before the selected character to get to the start of the pixel data
       :
       :Parameters for macro SumWidths:
       :  Character : MX_UINT8
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_09e54_gLCD_Font4__SumWidths(MX_UINT8 FCL_CHARACTER)
{
  //Local variable definitions
  MX_UINT8 FCL_WIDTH;
  MX_UINT16 FCR_RETVAL;


  FCR_RETVAL = 0;

  #if (0)
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Gets the width of the ASCII character font data
       :
       :Parameters for macro ReadWidth:
       :  Character : ASCII position so A = 'A'
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_09e54_gLCD_Font4__ReadWidth(MX_UINT8 FCL_CHARACTER)
{
  //Local variable definitions
  MX_UINT16 FCL_POSITION;
  MX_UINT8 FCL_PWIDTH;
  MX_UINT8 FCR_RETVAL;


  #if (0)
  //Code has been optimised out by the pre-processor
  #else
    FCR_RETVAL = 0;

  #endif

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Collects a stat about the selected font
       :
       :Parameters for macro ReadFontStat:
       :  Index : 0=SpaceColumns, 1=CharacterHeight
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_09e54_gLCD_Font4__ReadFontStat(MX_UINT8 FCL_INDEX)
{
  //Local variable definitions
  MX_UINT8 FCR_RETVAL;


  if (FCL_INDEX == 1)
  {  

    FCR_RETVAL = 36;

  } else {

    FCR_RETVAL = 1;

  }

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Gets a single pixel column byte from the selected ASCII character font data.
       :
       :Parameters for macro ReadASCIILUT:
       :  Character : ASCII position so A = 'A'
       :  ByteIndex : Range: 0 to ((PixelWidth - 1) * BytesPerColumn)
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_09e54_gLCD_Font4__ReadASCIILUT(MX_UINT8 FCL_CHARACTER, MX_UINT8 FCL_BYTEINDEX)
{
  //Local variable definitions
  MX_UINT16 FCL_POSITION;
  MX_UINT8 FCR_RETVAL;


  #if (0)
  //Code has been optimised out by the pre-processor
  #else
    FCR_RETVAL = 0;

  #endif

  return (FCR_RETVAL);

}


/*========================================================================*\
   Use :WidthData
       :GUID: dfb4d07a-3d70-45d5-83ef-07e3c95d86ab
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\lut.fcpx
       :Version: 15.0 (0x100728)
       :Timestamp: 11\04\2025
       :Variable declarations
       :Macro implementations
\*========================================================================*/
#define FCVsz_00fb6_WidthData__FLOATFIXEDLIST 1
#define FCVsz_00fb6_WidthData__INTFIXEDLIST 1
#define FCD_00fb6_WidthData__INTFIXEDLIST(ix) 0

/*=----------------------------------------------------------------------=*\
   Use :Gets the number of individual data entries stored in the LUT.
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_00fb6_WidthData__GetLUTCount()
{
  //Local variable definitions
  MX_UINT16 FCR_RETVAL;


  #if (0)
  //Code has been optimised out by the pre-processor
  #else
    FCR_RETVAL = 0;

  #endif

  return (FCR_RETVAL);

}


/*========================================================================*\
   Use :ASCIIData
       :GUID: dfb4d07a-3d70-45d5-83ef-07e3c95d86ab
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\lut.fcpx
       :Version: 15.0 (0x100728)
       :Timestamp: 11\04\2025
       :Variable declarations
       :Macro implementations
\*========================================================================*/
#define FCVsz_00fb5_ASCIIData__FLOATFIXEDLIST 1
#define FCVsz_00fb5_ASCIIData__INTFIXEDLIST 1
#define FCD_00fb5_ASCIIData__INTFIXEDLIST(ix) 0

/*=----------------------------------------------------------------------=*\
   Use :Gets the number of individual data entries stored in the LUT.
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_00fb5_ASCIIData__GetLUTCount()
{
  //Local variable definitions
  MX_UINT16 FCR_RETVAL;


  #if (0)
  //Code has been optimised out by the pre-processor
  #else
    FCR_RETVAL = 0;

  #endif

  return (FCR_RETVAL);

}


/*========================================================================*\
   Use :gLCD_Font3
       :GUID: 1b08885c-807e-4631-930e-a4fef06159dc
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\gLCD_Font.fcpx
       :Version: 31.0 (0x100028)
       :Timestamp: 06\06\2025
       :Variable declarations
       :Macro implementations
\*========================================================================*/
MX_GLOBAL MX_UINT8 FCV_09e53_gLCD_Font3__OLDCHAR = (0x0);
MX_GLOBAL MX_UINT16 FCV_09e53_gLCD_Font3__OLDPOSITION = (0x0);

/*=----------------------------------------------------------------------=*\
   Use :Adds up all the pixels widths before the selected character to get to the start of the pixel data
       :
       :Parameters for macro SumWidths:
       :  Character : MX_UINT8
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_09e53_gLCD_Font3__SumWidths(MX_UINT8 FCL_CHARACTER)
{
  //Local variable definitions
  MX_UINT8 FCL_WIDTH;
  MX_UINT16 FCR_RETVAL;


  FCR_RETVAL = 0;

  #if (0)
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Gets the width of the ASCII character font data
       :
       :Parameters for macro ReadWidth:
       :  Character : ASCII position so A = 'A'
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_09e53_gLCD_Font3__ReadWidth(MX_UINT8 FCL_CHARACTER)
{
  //Local variable definitions
  MX_UINT16 FCL_POSITION;
  MX_UINT8 FCL_PWIDTH;
  MX_UINT8 FCR_RETVAL;


  #if (0)
  //Code has been optimised out by the pre-processor
  #else
    FCR_RETVAL = 0;

  #endif

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Collects a stat about the selected font
       :
       :Parameters for macro ReadFontStat:
       :  Index : 0=SpaceColumns, 1=CharacterHeight
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_09e53_gLCD_Font3__ReadFontStat(MX_UINT8 FCL_INDEX)
{
  //Local variable definitions
  MX_UINT8 FCR_RETVAL;


  if (FCL_INDEX == 1)
  {  

    FCR_RETVAL = 14;

  } else {

    FCR_RETVAL = 1;

  }

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Gets a single pixel column byte from the selected ASCII character font data.
       :
       :Parameters for macro ReadASCIILUT:
       :  Character : ASCII position so A = 'A'
       :  ByteIndex : Range: 0 to ((PixelWidth - 1) * BytesPerColumn)
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_09e53_gLCD_Font3__ReadASCIILUT(MX_UINT8 FCL_CHARACTER, MX_UINT8 FCL_BYTEINDEX)
{
  //Local variable definitions
  MX_UINT16 FCL_POSITION;
  MX_UINT8 FCR_RETVAL;


  #if (0)
  //Code has been optimised out by the pre-processor
  #else
    FCR_RETVAL = 0;

  #endif

  return (FCR_RETVAL);

}


/*========================================================================*\
   Use :WidthData
       :GUID: dfb4d07a-3d70-45d5-83ef-07e3c95d86ab
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\lut.fcpx
       :Version: 15.0 (0x100728)
       :Timestamp: 11\04\2025
       :Variable declarations
       :Macro implementations
\*========================================================================*/
#define FCVsz_00fb4_WidthData__FLOATFIXEDLIST 1
#define FCVsz_00fb4_WidthData__INTFIXEDLIST 1
#define FCD_00fb4_WidthData__INTFIXEDLIST(ix) 0

/*=----------------------------------------------------------------------=*\
   Use :Gets the number of individual data entries stored in the LUT.
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_00fb4_WidthData__GetLUTCount()
{
  //Local variable definitions
  MX_UINT16 FCR_RETVAL;


  #if (0)
  //Code has been optimised out by the pre-processor
  #else
    FCR_RETVAL = 0;

  #endif

  return (FCR_RETVAL);

}


/*========================================================================*\
   Use :ASCIIData
       :GUID: dfb4d07a-3d70-45d5-83ef-07e3c95d86ab
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\lut.fcpx
       :Version: 15.0 (0x100728)
       :Timestamp: 11\04\2025
       :Variable declarations
       :Macro implementations
\*========================================================================*/
#define FCVsz_00fb3_ASCIIData__FLOATFIXEDLIST 1
#define FCVsz_00fb3_ASCIIData__INTFIXEDLIST 1
#define FCD_00fb3_ASCIIData__INTFIXEDLIST(ix) 0

/*=----------------------------------------------------------------------=*\
   Use :Gets the number of individual data entries stored in the LUT.
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_00fb3_ASCIIData__GetLUTCount()
{
  //Local variable definitions
  MX_UINT16 FCR_RETVAL;


  #if (0)
  //Code has been optimised out by the pre-processor
  #else
    FCR_RETVAL = 0;

  #endif

  return (FCR_RETVAL);

}


/*========================================================================*\
   Use :gLCD_Font2
       :GUID: 1b08885c-807e-4631-930e-a4fef06159dc
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\gLCD_Font.fcpx
       :Version: 31.0 (0x100028)
       :Timestamp: 06\06\2025
       :Variable declarations
       :Macro implementations
\*========================================================================*/
MX_GLOBAL MX_UINT8 FCV_09e52_gLCD_Font2__OLDCHAR = (0x0);
MX_GLOBAL MX_UINT16 FCV_09e52_gLCD_Font2__OLDPOSITION = (0x0);

/*=----------------------------------------------------------------------=*\
   Use :Adds up all the pixels widths before the selected character to get to the start of the pixel data
       :
       :Parameters for macro SumWidths:
       :  Character : MX_UINT8
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_09e52_gLCD_Font2__SumWidths(MX_UINT8 FCL_CHARACTER)
{
  //Local variable definitions
  MX_UINT8 FCL_WIDTH;
  MX_UINT16 FCR_RETVAL;


  FCR_RETVAL = 0;

  #if (0)
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Gets the width of the ASCII character font data
       :
       :Parameters for macro ReadWidth:
       :  Character : ASCII position so A = 'A'
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_09e52_gLCD_Font2__ReadWidth(MX_UINT8 FCL_CHARACTER)
{
  //Local variable definitions
  MX_UINT16 FCL_POSITION;
  MX_UINT8 FCL_PWIDTH;
  MX_UINT8 FCR_RETVAL;


  #if (0)
  //Code has been optimised out by the pre-processor
  #else
    FCR_RETVAL = 0;

  #endif

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Collects a stat about the selected font
       :
       :Parameters for macro ReadFontStat:
       :  Index : 0=SpaceColumns, 1=CharacterHeight
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_09e52_gLCD_Font2__ReadFontStat(MX_UINT8 FCL_INDEX)
{
  //Local variable definitions
  MX_UINT8 FCR_RETVAL;


  if (FCL_INDEX == 1)
  {  

    FCR_RETVAL = 11;

  } else {

    FCR_RETVAL = 1;

  }

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Gets a single pixel column byte from the selected ASCII character font data.
       :
       :Parameters for macro ReadASCIILUT:
       :  Character : ASCII position so A = 'A'
       :  ByteIndex : Range: 0 to ((PixelWidth - 1) * BytesPerColumn)
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_09e52_gLCD_Font2__ReadASCIILUT(MX_UINT8 FCL_CHARACTER, MX_UINT8 FCL_BYTEINDEX)
{
  //Local variable definitions
  MX_UINT16 FCL_POSITION;
  MX_UINT8 FCR_RETVAL;


  #if (0)
  //Code has been optimised out by the pre-processor
  #else
    FCR_RETVAL = 0;

  #endif

  return (FCR_RETVAL);

}


/*========================================================================*\
   Use :WidthData
       :GUID: dfb4d07a-3d70-45d5-83ef-07e3c95d86ab
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\lut.fcpx
       :Version: 15.0 (0x100728)
       :Timestamp: 11\04\2025
       :Variable declarations
       :Macro implementations
\*========================================================================*/
#define FCVsz_00fb2_WidthData__FLOATFIXEDLIST 1
#define FCD_00fb2_WidthData__INTFIXEDLIST(ix) 0

/*=----------------------------------------------------------------------=*\
   Use :Gets the number of individual data entries stored in the LUT.
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_00fb2_WidthData__GetLUTCount()
{
  //Local variable definitions
  MX_UINT16 FCR_RETVAL;


  #if (1)
    FCR_RETVAL = 0;

  #else
  //Code has been optimised out by the pre-processor
  #endif

  return (FCR_RETVAL);

}


/*========================================================================*\
   Use :ASCIIData
       :GUID: dfb4d07a-3d70-45d5-83ef-07e3c95d86ab
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\lut.fcpx
       :Version: 15.0 (0x100728)
       :Timestamp: 11\04\2025
       :Variable declarations
       :Macro implementations
\*========================================================================*/
#define FCVsz_00fb1_ASCIIData__FLOATFIXEDLIST 1
#define FCVsz_00fb1_ASCIIData__INTFIXEDLIST 475
#define FCD_00fb1_ASCIIData__INTFIXEDLIST(ix) 0

/*=----------------------------------------------------------------------=*\
   Use :Gets the number of individual data entries stored in the LUT.
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_00fb1_ASCIIData__GetLUTCount()
{
  //Local variable definitions
  MX_UINT16 FCR_RETVAL;


  #if (1)
    FCR_RETVAL = 475;

  #else
  //Code has been optimised out by the pre-processor
  #endif

  return (FCR_RETVAL);

}


/*========================================================================*\
   Use :gLCD_Font1
       :GUID: 1b08885c-807e-4631-930e-a4fef06159dc
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\gLCD_Font.fcpx
       :Version: 31.0 (0x100028)
       :Timestamp: 06\06\2025
       :Variable declarations
       :Macro implementations
\*========================================================================*/
MX_GLOBAL MX_UINT8 FCV_09e51_gLCD_Font1__OLDCHAR = (0x0);
MX_GLOBAL MX_UINT16 FCV_09e51_gLCD_Font1__OLDPOSITION = (0x0);

/*=----------------------------------------------------------------------=*\
   Use :Adds up all the pixels widths before the selected character to get to the start of the pixel data
       :
       :Parameters for macro SumWidths:
       :  Character : MX_UINT8
       :
       :Returns : MX_UINT16
\*=----------------------------------------------------------------------=*/
MX_UINT16 FCD_09e51_gLCD_Font1__SumWidths(MX_UINT8 FCL_CHARACTER)
{
  //Local variable definitions
  MX_UINT8 FCL_WIDTH;
  MX_UINT16 FCR_RETVAL;


  FCR_RETVAL = 0;

  #if (1)
    #if (0) // 1 == 0
    //Code has been optimised out by the pre-processor
    // #else
    #endif

  // #else
  //Code has been optimised out by the pre-processor
  #endif

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Gets the width of the ASCII character font data
       :
       :Parameters for macro ReadWidth:
       :  Character : ASCII position so A = 'A'
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_09e51_gLCD_Font1__ReadWidth(MX_UINT8 FCL_CHARACTER)
{
  //Local variable definitions
  MX_UINT16 FCL_POSITION;
  MX_UINT8 FCL_PWIDTH;
  MX_UINT8 FCR_RETVAL;


  #if (1)
    #if (1) // 127 < 255
      if ((FCL_CHARACTER == 167) || (FCL_CHARACTER == 248))
      {      

        FCL_CHARACTER = 127;

      // } else {

      }

    // #else
    //Code has been optimised out by the pre-processor
    #endif

    #if (1)
      if (FCL_CHARACTER == 32)
      {      

        FCR_RETVAL = 5;

      } else {

        FCR_RETVAL = 5;

      }

    #else
    //Code has been optimised out by the pre-processor
    #endif

  #else
  //Code has been optimised out by the pre-processor
  #endif

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Collects a stat about the selected font
       :
       :Parameters for macro ReadFontStat:
       :  Index : 0=SpaceColumns, 1=CharacterHeight
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_09e51_gLCD_Font1__ReadFontStat(MX_UINT8 FCL_INDEX)
{
  //Local variable definitions
  MX_UINT8 FCR_RETVAL;


  if (FCL_INDEX == 1)
  {  

    FCR_RETVAL = 8;

  } else {

    FCR_RETVAL = 0;

  }

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Gets a single pixel column byte from the selected ASCII character font data.
       :
       :Parameters for macro ReadASCIILUT:
       :  Character : ASCII position so A = 'A'
       :  ByteIndex : Range: 0 to ((PixelWidth - 1) * BytesPerColumn)
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_09e51_gLCD_Font1__ReadASCIILUT(MX_UINT8 FCL_CHARACTER, MX_UINT8 FCL_BYTEINDEX)
{
  //Local variable definitions
  MX_UINT16 FCL_POSITION;
  MX_UINT8 FCR_RETVAL;


  #if (1)
    #if (1) // 127 < 255
      if ((FCL_CHARACTER == 167) || (FCL_CHARACTER == 248))
      {      

        FCL_CHARACTER = 127;

      // } else {

      }

    // #else
    //Code has been optimised out by the pre-processor
    #endif

    if ((FCL_CHARACTER < 33) || (FCL_CHARACTER >= (33 + 95)))
    {    

      if (FCL_CHARACTER == 32)
      {      

        FCR_RETVAL = 0;

      } else {

        //Comment:
        //Out of range

        FCR_RETVAL = 0xAA;

      }

    } else {

      FCL_CHARACTER = FCL_CHARACTER - 33;

      #if (1) // 1 == 1
        if (FCL_CHARACTER == FCV_09e51_gLCD_Font1__OLDCHAR)
        {        

          FCL_POSITION = FCV_09e51_gLCD_Font1__OLDPOSITION;

        } else {

          FCL_POSITION = FCL_CHARACTER * 5 * 1;

          FCV_09e51_gLCD_Font1__OLDPOSITION = FCL_POSITION;
          FCV_09e51_gLCD_Font1__OLDCHAR = FCL_CHARACTER;

        }

      #else
      //Code has been optimised out by the pre-processor
      #endif

      FCL_POSITION = FCL_POSITION + FCL_BYTEINDEX;

      FCR_RETVAL = FCD_00fb1_ASCIIData__INTFIXEDLIST(FCL_POSITION);

    }

  #else
  //Code has been optimised out by the pre-processor
  #endif

  return (FCR_RETVAL);

}


/*========================================================================*\
   Use :Base_GLCD1
       :GUID: 4384cba9-0bea-4359-8c5b-dcd046aa7778
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\Base_GLCD.fcpx
       :Version: 45.0 (0x300028)
       :Timestamp: 06\06\2025
       :Variable declarations
       :Macro implementations
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :Reads the number of pixel columns used in the selected font
       :
       :Parameters for macro ReadFontWidth:
       :  Font : Font selection range: 0 to (NumFonts - 1)
       :  Character : ASCII character to get the pixel width e.g. 'A' or 65
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_0ba71_Base_GLCD1__ReadFontWidth(MX_UINT8 FCL_FONT, MX_UINT8 FCL_CHARACTER)
{
  //Local variable definitions
  MX_UINT8 FCR_RETVAL;


  FCR_RETVAL = 0;

  if (FCL_FONT >= 1)
  {  

    FCL_FONT = 0;

  // } else {

  }

  if (FCL_FONT == 0)
  {  

    FCR_RETVAL = FCD_09e51_gLCD_Font1__ReadWidth(FCL_CHARACTER);

  // } else {

  }

  #if (0) // 1 > 1
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  #if (0) // 1 > 2
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  #if (0) // 1 > 3
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Gets a stat from the selected embedded ASCII font data.
       :
       :Parameters for macro ReadFontStat:
       :  Font : Font selection range: 0 to (NumFonts - 1)
       :  Index : 0=SpaceWidth, 1=PixelHeight
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_0ba71_Base_GLCD1__ReadFontStat(MX_UINT8 FCL_FONT, MX_UINT8 FCL_INDEX)
{
  //Local variable definitions
  MX_UINT16 FCL_POSITION;
  MX_UINT8 FCR_RETVAL;


  FCR_RETVAL = 0;

  if (FCL_FONT >= 1)
  {  

    FCL_FONT = 0;

  // } else {

  }

  if (FCL_FONT == 0)
  {  

    FCR_RETVAL = FCD_09e51_gLCD_Font1__ReadFontStat(FCL_INDEX);

  // } else {

  }

  #if (0) // 1 > 1
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  #if (0) // 1 > 2
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  #if (0) // 1 > 3
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  return (FCR_RETVAL);

}

/*=----------------------------------------------------------------------=*\
   Use :Gets a byte from the selected embedded ASCII font data.
       :
       :Parameters for macro ReadFontByte:
       :  Font : Font selection range: 0 to (NumFonts - 1)
       :  Character : ASCII character for example 'A' or 65
       :  ByteIndex : Font column Ranging 0-4
       :
       :Returns : MX_UINT8
\*=----------------------------------------------------------------------=*/
MX_UINT8 FCD_0ba71_Base_GLCD1__ReadFontByte(MX_UINT8 FCL_FONT, MX_UINT8 FCL_CHARACTER, MX_UINT8 FCL_BYTEINDEX)
{
  //Local variable definitions
  MX_UINT16 FCL_POSITION;
  MX_UINT8 FCR_RETVAL;


  FCR_RETVAL = 0;

  if (FCL_FONT >= 1)
  {  

    FCL_FONT = 0;

  // } else {

  }

  if (FCL_FONT == 0)
  {  

    FCR_RETVAL = FCD_09e51_gLCD_Font1__ReadASCIILUT(FCL_CHARACTER, FCL_BYTEINDEX);

  // } else {

  }

  #if (0) // 1 > 1
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  #if (0) // 1 > 2
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  #if (0) // 1 > 3
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  return (FCR_RETVAL);

}


/*========================================================================*\
   Use :LCD
       :GUID: 0953aac0-9c23-4c2f-9843-88954a4191ea
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\LCD.fcpx
       :Version: 6.0 (0x200528)
       :Timestamp: 10\10\2023
       :Variable declarations
       :Macro implementations
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :Clears the entire contents of the display.
\*=----------------------------------------------------------------------=*/
void FCD_04071_LCD__Clear()
{

  // ctrl_lcd::Clear()

  // ::Component.Property.SetValue(this, "CursorPosX", 0)

  // ::Component.Property.SetValue(this, "CursorPosY", 0)

  FCD_04071_LCD__RawSend(0x01, 0);

  FCI_DELAYBYTE_MS(2);

  FCD_04071_LCD__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] : Enter the text or variable to print to the LCD
\*=----------------------------------------------------------------------=*/
void FCD_04071_LCD__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)
  {
    #if (0) // 0 > 0
    //Code has been optimised out by the pre-processor
    #else
      // ctrl_lcd::AddText(CursorPosX, CursorPosY, .Text)

      FCD_04071_LCD__RawSend(FCL_TEXT[FCL_IDX], 0x10);

    #endif

    FCL_IDX = FCL_IDX + 1;

  }

  // ::Component.Property.SetValue(this, "CursorPosX", CursorPosX + LENGTH$ (.Text))

}

/*=----------------------------------------------------------------------=*\
   Use :Takes the ascii value for a character and prints the character
       :
       :Parameters for macro PrintAscii:
       :  character : Holds an ascii value.
\*=----------------------------------------------------------------------=*/
void FCD_04071_LCD__PrintAscii(MX_UINT8 FCL_CHARACTER)
{

  FCD_04071_LCD__RawSend(FCL_CHARACTER, 0x10);

  // ctrl_lcd::AddChar(CursorPosX, CursorPosY, .character)

  // ::Component.Property.SetValue(this, "CursorPosX", CursorPosX + 1)

}

/*=----------------------------------------------------------------------=*\
   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 : Enter the number or variable to print to the LCD
\*=----------------------------------------------------------------------=*/
void FCD_04071_LCD__PrintNumber(MX_SINT16 FCL_NUMBER)
{
  //Local variable definitions
  #define FCLsz_S 10
  MX_CHAR FCL_S[FCLsz_S];


  FCI_TOSTRING(FCL_NUMBER, FCL_S,10);

  FCD_04071_LCD__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_04071_LCD__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_04071_LCD__RawSend(64 + (FCL_INDEX << 3), 0);

  FCI_DELAYBYTE_MS(2);

  FCD_04071_LCD__RawSend(FCL_D0, 0x10);

  FCD_04071_LCD__RawSend(FCL_D1, 0x10);

  FCD_04071_LCD__RawSend(FCL_D2, 0x10);

  FCD_04071_LCD__RawSend(FCL_D3, 0x10);

  FCD_04071_LCD__RawSend(FCL_D4, 0x10);

  FCD_04071_LCD__RawSend(FCL_D5, 0x10);

  FCD_04071_LCD__RawSend(FCL_D6, 0x10);

  FCD_04071_LCD__RawSend(FCL_D7, 0x10);

  FCD_04071_LCD__Clear();

}

/*=----------------------------------------------------------------------=*\
   Use :Clears a single line on the display and then moves the cursor to the start of the line to allow you to start populating the line with data.
       :
       :Parameters for macro ClearLine:
       :  Line : The line to clear, zero being the first (top) line of the display
\*=----------------------------------------------------------------------=*/
void FCD_04071_LCD__ClearLine(MX_UINT8 FCL_LINE)
{
  //Local variable definitions
  MX_UINT8 FCL_X;


  if (FCL_LINE < 4)
  {  

    // ctrl_lcd::ClearLine(.Line)

    FCD_04071_LCD__Cursor(0, FCL_LINE);

    FCL_X = 0;

    while (FCL_X < 20)
    {
      FCD_04071_LCD__RawSend(' ', 0x10);

      FCL_X = FCL_X + 1;

    }

    FCD_04071_LCD__Cursor(0, FCL_LINE);

  // } else {

  }

}

/*=----------------------------------------------------------------------=*\
   Use :Moves the cursor on the LCD Display
       :
       :Parameters for macro Cursor:
       :  x : Set the cursor position in the X plane, 0 is the left most cell
       :  y : Set the cursor position in the Y plane, 0 is the top most cell
\*=----------------------------------------------------------------------=*/
void FCD_04071_LCD__Cursor(MX_UINT8 FCL_X, MX_UINT8 FCL_Y)
{

  // ::Component.Property.SetValue(this, "CursorPosX", .x)

  // ::Component.Property.SetValue(this, "CursorPosY", .y)

  #if (0) // 4 == 1
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  #if (0) // 4 == 2
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  #if (1) // 4 == 4
    if (FCL_Y == 0)
    {    

      FCL_Y = 0x80;

    } else {

      if (FCL_Y == 1)
      {      

        FCL_Y = 0xC0;

      } else {

        #if (0) // 20 == 16
        //Code has been optimised out by the pre-processor
        #else
          #if (1) // 20 == 20
            if (FCL_Y == 2)
            {            

              FCL_Y = 0x94;

            } else {

              FCL_Y = 0xd4;

            }

          // #else
          //Code has been optimised out by the pre-processor
          #endif

        #endif

      }

    }

  // #else
  //Code has been optimised out by the pre-processor
  #endif

  FCD_04071_LCD__RawSend(FCL_Y + FCL_X, 0);

  FCI_DELAYBYTE_MS(2);

  //Comment:
  //EB2 LCDs have occasional problems here if cursor command isn't called twice

  FCD_04071_LCD__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_04071_LCD__Command(MX_UINT8 FCL_INSTRUCTION)
{

  FCD_04071_LCD__RawSend(FCL_INSTRUCTION, 0);

  FCI_DELAYBYTE_MS(2);

}

/*=----------------------------------------------------------------------=*\
   Use :Will allow you to print a number up to 32-bits with signed or unsigned formatting.
       :Signed = -2147483648 to 2147483647
       :Unsigned = 0 to 4294967295
       :
       :Parameters for macro PrintFormattedNumber:
       :  Number : Enter the number or variable to print to the LCD
       :  Format : 0=Signed, 1=Unsigned
\*=----------------------------------------------------------------------=*/
void FCD_04071_LCD__PrintFormattedNumber(MX_UINT32 FCL_NUMBER, MX_BOOL FCL_FORMAT)
{
  //Local variable definitions
  #define FCLsz_S 15
  MX_CHAR FCL_S[FCLsz_S];


  if (FCL_FORMAT == 1)
  {  

    FCI_UTOS32(FCL_NUMBER, FCL_S,15);

  } else {

    FCI_ITOS32((MX_SINT32)(FCL_NUMBER), FCL_S,15);

  }

  FCD_04071_LCD__PrintString(FCL_S, FCLsz_S);

  //Local variable definitions
  #undef FCLsz_S
}

/*=----------------------------------------------------------------------=*\
   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_04071_LCD__ScrollDisplay(MX_UINT8 FCL_POSITION, MX_UINT8 FCL_DIRECTION)
{
  //Local variable definitions
  MX_UINT8 FCL_CMD = (0x0);
  MX_UINT8 FCL_SCROLL;


  FCL_CMD = 0;

  if (FCL_DIRECTION == 0)
  {  

    FCL_CMD = 0x18;

    // .scroll=ctrl_lcd::GetScrollX()

    // ctrl_lcd::SetScrollX(.scroll + .Position)

  } else {

    FCL_CMD = 0x1C;

    // ctrl_lcd::SetScrollX(ctrl_lcd::GetScrollX() - .Position)

  }

  if (FCL_CMD != 0 && FCL_POSITION != 0)
  {  

    while (FCL_POSITION != 0)
    {
      FCD_04071_LCD__RawSend(FCL_CMD, 0);

      FCL_POSITION = FCL_POSITION - 1;

    }

  // } else {

  }

}

/*=----------------------------------------------------------------------=*\
   Use :Sends data to the LCD display
       :
       :Parameters for macro RawSend:
       :  data : The data byte to send to the LCD
       :  type : A boolean to indicate command type: true to write data, false to write a command
\*=----------------------------------------------------------------------=*/
void FCD_04071_LCD__RawSend(MX_UINT8 FCL_DATA, MX_BOOL FCL_TYPE)
{
  //Local variable definitions
  MX_UINT8 FCL_NIBBLE;


  //Comment:
  //Output upper nibble of the byte

  #if (1) // 0 == 0
    SET_PORT_PIN(B, 0, 0);
    SET_PORT_PIN(B, 1, 0);
    SET_PORT_PIN(B, 2, 0);
    SET_PORT_PIN(B, 3, 0);
    SET_PORT_PIN(B, 4, 0);
    SET_PORT_PIN(B, 5, 0);

    #if (0)
    //Code has been optimised out by the pre-processor
    // #else
    #endif

    FCL_NIBBLE = (FCL_DATA >> 4);
    SET_PORT_PIN(B, 0, (FCL_NIBBLE & 0x01));
    FCL_NIBBLE = FCL_NIBBLE >> 1;
    SET_PORT_PIN(B, 1, (FCL_NIBBLE & 0x01));
    FCL_NIBBLE = FCL_NIBBLE >> 1;
    SET_PORT_PIN(B, 2, (FCL_NIBBLE & 0x01));
    FCL_NIBBLE = FCL_NIBBLE >> 1;
    SET_PORT_PIN(B, 3, (FCL_NIBBLE & 0x01));

  // #else
  //Code has been optimised out by the pre-processor
  #endif

  //Comment:
  //Output byte to pins

  #if (0) // 0 == 1
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  //Comment:
  //Output byte to port

  #if (0) // 0 == 2
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  if (FCL_TYPE)
  {  

    SET_PORT_PIN(B, 4, 1);

  // } else {

  }

  #if (0)
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  FCI_DELAYBYTE_US(100);

  //Comment:
  //Set Enable high, pause then set low
  //to acknowledge the data has been 
  //submitted.

  SET_PORT_PIN(B, 5, 1);

  FCI_DELAYBYTE_US(100);

  SET_PORT_PIN(B, 5, 0);

  FCI_DELAYBYTE_US(100);

  #if (1) // 0 == 0
    SET_PORT_PIN(B, 0, 0);
    SET_PORT_PIN(B, 1, 0);
    SET_PORT_PIN(B, 2, 0);
    SET_PORT_PIN(B, 3, 0);
    SET_PORT_PIN(B, 4, 0);

    FCL_NIBBLE = (FCL_DATA & 0xf);
    SET_PORT_PIN(B, 0, (FCL_NIBBLE & 0x01));
    FCL_NIBBLE = FCL_NIBBLE >> 1;
    SET_PORT_PIN(B, 1, (FCL_NIBBLE & 0x01));
    FCL_NIBBLE = FCL_NIBBLE >> 1;
    SET_PORT_PIN(B, 2, (FCL_NIBBLE & 0x01));
    FCL_NIBBLE = FCL_NIBBLE >> 1;
    SET_PORT_PIN(B, 3, (FCL_NIBBLE & 0x01));

    if (FCL_TYPE)
    {    

      SET_PORT_PIN(B, 4, 1);

    // } else {

    }

    FCI_DELAYBYTE_US(100);

    SET_PORT_PIN(B, 5, 1);

    FCI_DELAYBYTE_US(100);

    SET_PORT_PIN(B, 5, 0);

    FCI_DELAYBYTE_US(100);

  // #else
  //Code has been optimised out by the pre-processor
  #endif

}

/*=----------------------------------------------------------------------=*\
   Use :Print a Float number rounded up to a specified amount of decimal places.
       :
       :Parameters for macro PrintFloat:
       :  Number : Enter the number or variable to print to the LCD
       :  DecimalPlaces : Enter how many decimal places to round up to (1 - 6)
\*=----------------------------------------------------------------------=*/
void FCD_04071_LCD__PrintFloat(MX_FLOAT FCL_NUMBER, MX_UINT8 FCL_DECIMALPLACES)
{
  //Local variable definitions
  #define FCLsz_S 10
  MX_CHAR FCL_S[FCLsz_S];


  if (FCL_DECIMALPLACES > 6)
  {  

    FCL_DECIMALPLACES = 6;

  } else {

    if (FCL_DECIMALPLACES < 1)
    {    

      FCL_DECIMALPLACES = 1;

    // } else {

    }

  }

  FCI_FLOAT_TO_STRING(FCL_NUMBER, FCL_DECIMALPLACES, FCL_S, FCLsz_S);

  FCD_04071_LCD__PrintString(FCL_S, FCLsz_S);

  //Local variable definitions
  #undef FCLsz_S
}

/*=----------------------------------------------------------------------=*\
   Use :Assigns a remap character allowing the PrintString function to automatically swap between pre-defined characters. 
       :The characters can be custom (in the range 0-9) or can point to an existing character in the LCD character map.
       :
       :Parameters for macro RemapCharacter:
       :  RemapIdx : Remap Index, Range: 0 to (Remap Characters - 1)
       :  SearchCharacter : Character to look for a replace
       :  ReplacementCharacter : New character value to use in place of the search character.
\*=----------------------------------------------------------------------=*/
void FCD_04071_LCD__RemapCharacter(MX_UINT8 FCL_REMAPIDX, MX_UINT8 FCL_SEARCHCHARACTER, MX_UINT8 FCL_REPLACEMENTCHARACTER)
{

  #if (0) // 0 > 0
  //Code has been optimised out by the pre-processor
  // #else
  #endif

}

/*=----------------------------------------------------------------------=*\
   Use :Startup routine required by the hardware device.
       :Automatically clears the display after initialising.
\*=----------------------------------------------------------------------=*/
void FCD_04071_LCD__Start()
{

  // ::Component.Property.SetValue(this, "CursorPosX", 0)

  // ::Component.Property.SetValue(this, "CursorPosY", 0)

  #if (1) // 0 == 0
    SET_PORT_PIN(B, 0, 0);
    SET_PORT_PIN(B, 1, 0);
    SET_PORT_PIN(B, 2, 0);
    SET_PORT_PIN(B, 3, 0);
    SET_PORT_PIN(B, 4, 0);
    SET_PORT_PIN(B, 5, 0);

  // #else
  //Code has been optimised out by the pre-processor
  #endif

  #if (0) // 0 == 1
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  #if (0) // 0 == 2
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  #if (0)
  //Code has been optimised out by the pre-processor
  // #else
  #endif

  FCI_DELAYBYTE_MS(12);

  FCD_04071_LCD__RawSend(0x33, 0);

  FCI_DELAYBYTE_MS(2);

  FCD_04071_LCD__RawSend(0x33, 0);

  FCI_DELAYBYTE_MS(2);

  #if (0) // 0 > 0
  //Code has been optimised out by the pre-processor
  #else
    FCD_04071_LCD__RawSend(0x32, 0);

    FCI_DELAYBYTE_MS(2);

    FCD_04071_LCD__RawSend(0x2c, 0);

  #endif

  FCI_DELAYBYTE_MS(2);

  FCD_04071_LCD__RawSend(0x06, 0);

  FCI_DELAYBYTE_MS(2);

  FCD_04071_LCD__RawSend(0x0c, 0);

  FCI_DELAYBYTE_MS(2);

  FCD_04071_LCD__RawSend(0x01, 0);

  FCI_DELAYBYTE_MS(2);

  FCD_04071_LCD__RawSend(0x02, 0);

  FCI_DELAYBYTE_MS(2);

  FCD_04071_LCD__Clear();

  #if (0) // 0 > 0
  //Code has been optimised out by the pre-processor
  // #else
  #endif

}


/*========================================================================*\
   Use :lcd_4x20
       :GUID: a2b40602-5421-4e2f-ba82-96db1be51d69
       :Location: C:\ProgramData\MatrixTSL\FlowcodeV10\Components\lcd_4x20.fcpx
       :Version: 6.0 (0x100128)
       :Timestamp: 11\11\2022
       :Variable declarations
       :Macro implementations
\*========================================================================*/
/*=----------------------------------------------------------------------=*\
   Use :Clears the entire contents of the display.
\*=----------------------------------------------------------------------=*/
void FCD_0c241_lcd_4x20__Clear()
{

  FCD_04071_LCD__Clear();

}

/*=----------------------------------------------------------------------=*\
   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] : Enter the text or variable to print to the LCD
\*=----------------------------------------------------------------------=*/
void FCD_0c241_lcd_4x20__PrintString(MX_CHAR *FCL_TEXT, MX_UINT16 FCLsz_TEXT)
{

  FCD_04071_LCD__PrintString(FCL_TEXT, FCLsz_TEXT);

}

/*=----------------------------------------------------------------------=*\
   Use :Takes the ascii value for a character and prints the character
       :
       :Parameters for macro PrintAscii:
       :  character : Holds an ascii value.
\*=----------------------------------------------------------------------=*/
void FCD_0c241_lcd_4x20__PrintAscii(MX_UINT8 FCL_CHARACTER)
{

  FCD_04071_LCD__PrintAscii(FCL_CHARACTER);

}

/*=----------------------------------------------------------------------=*\
   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 : Enter the number or variable to print to the LCD
\*=----------------------------------------------------------------------=*/
void FCD_0c241_lcd_4x20__PrintNumber(MX_SINT16 FCL_NUMBER)
{

  FCD_04071_LCD__PrintNumber(FCL_NUMBER);

}

/*=----------------------------------------------------------------------=*\
   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_0c241_lcd_4x20__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_04071_LCD__RAMWrite(FCL_INDEX, FCL_D0, FCL_D1, FCL_D2, FCL_D3, FCL_D4, FCL_D5, FCL_D6, FCL_D7);

}

/*=----------------------------------------------------------------------=*\
   Use :Clears a single line on the display and then moves the cursor to the start of the line to allow you to start populating the line with data.
       :
       :Parameters for macro ClearLine:
       :  Line : The line to clear, zero being the first (top) line of the display
\*=----------------------------------------------------------------------=*/
void FCD_0c241_lcd_4x20__ClearLine(MX_UINT8 FCL_LINE)
{

  FCD_04071_LCD__ClearLine(FCL_LINE);

}

/*=----------------------------------------------------------------------=*\
   Use :Moves the cursor on the LCD Display
       :
       :Parameters for macro Cursor:
       :  x : Set the cursor position in the X plane, 0 is the left most cell
       :  y : Set the cursor position in the Y plane, 0 is the top most cell
\*=----------------------------------------------------------------------=*/
void FCD_0c241_lcd_4x20__Cursor(MX_UINT8 FCL_X, MX_UINT8 FCL_Y)
{

  FCD_04071_LCD__Cursor(FCL_X, FCL_Y);

}

/*=----------------------------------------------------------------------=*\
   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_0c241_lcd_4x20__Command(MX_UINT8 FCL_INSTRUCTION)
{

  FCD_04071_LCD__Command(FCL_INSTRUCTION);

}

/*=----------------------------------------------------------------------=*\
   Use :Will allow you to print a number up to 32-bits with signed or unsigned formatting.
       :Signed = -2147483648 to 2147483647
       :Unsigned = 0 to 4294967295
       :
       :Parameters for macro PrintFormattedNumber:
       :  Number : Enter the number or variable to print to the LCD
       :  Format : 0=Signed, 1=Unsigned
\*=----------------------------------------------------------------------=*/
void FCD_0c241_lcd_4x20__PrintFormattedNumber(MX_UINT32 FCL_NUMBER, MX_BOOL FCL_FORMAT)
{

  FCD_04071_LCD__PrintFormattedNumber(FCL_NUMBER, FCL_FORMAT);

}

/*=----------------------------------------------------------------------=*\
   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_0c241_lcd_4x20__ScrollDisplay(MX_UINT8 FCL_POSITION, MX_UINT8 FCL_DIRECTION)
{

  FCD_04071_LCD__ScrollDisplay(FCL_POSITION, FCL_DIRECTION);

}

/*=----------------------------------------------------------------------=*\
   Use :Sends data to the LCD display
       :
       :Parameters for macro RawSend:
       :  data : The data byte to send to the LCD
       :  type : A boolean to indicate command type: true to write data, false to write a command
\*=----------------------------------------------------------------------=*/
void FCD_0c241_lcd_4x20__RawSend(MX_UINT8 FCL_DATA, MX_BOOL FCL_TYPE)
{

  FCD_04071_LCD__RawSend(FCL_DATA, FCL_TYPE);

}

/*=----------------------------------------------------------------------=*\
   Use :Print a Float number rounded up to a specified amount of decimal places.
       :
       :Parameters for macro PrintFloat:
       :  Number : Enter the number or variable to print to the LCD
       :  DecimalPlaces : Enter how many decimal places to round up to (1 - 6)
\*=----------------------------------------------------------------------=*/
void FCD_0c241_lcd_4x20__PrintFloat(MX_FLOAT FCL_NUMBER, MX_UINT8 FCL_DECIMALPLACES)
{

  FCD_04071_LCD__PrintFloat(FCL_NUMBER, FCL_DECIMALPLACES);

}

/*=----------------------------------------------------------------------=*\
   Use :Assigns a remap character allowing the PrintString function to automatically swap between pre-defined characters. 
       :The characters can be custom (in the range 0-9) or can point to an existing character in the LCD character map.
       :
       :Parameters for macro RemapCharacter:
       :  RemapIdx : Remap Index, Range: 0 to (Remap Characters - 1)
       :  SearchCharacter : Character to look for a replace
       :  ReplacementCharacter : New character value to use in place of the search character.
\*=----------------------------------------------------------------------=*/
void FCD_0c241_lcd_4x20__RemapCharacter(MX_UINT8 FCL_REMAPIDX, MX_UINT8 FCL_SEARCHCHARACTER, MX_UINT8 FCL_REPLACEMENTCHARACTER)
{

  FCD_04071_LCD__RemapCharacter(FCL_REMAPIDX, FCL_SEARCHCHARACTER, FCL_REPLACEMENTCHARACTER);

}

/*=----------------------------------------------------------------------=*\
   Use :Startup routine required by the hardware device.
       :Automatically clears the display after initialising.
\*=----------------------------------------------------------------------=*/
void FCD_0c241_lcd_4x20__Start()
{

  FCD_04071_LCD__Start();

}


/*========================================================================*\
   Use :User Project
       :Variable declarations
       :Macro implementations
\*========================================================================*/
#define FCV_FALSE (0)
#define FCV_TRUE (1)

/*=----------------------------------------------------------------------=*\
   Use :
\*=----------------------------------------------------------------------=*/
void FCM_Call_Interrupt()
{

  // Component Macro
  FCD_0c241_lcd_4x20__Cursor(0, 1);

  // Component Macro
  FCD_0c241_lcd_4x20__PrintString("Interrupt Works", 16);

  // Delay
  FCI_DELAYBYTE_S(1);

  // Component Macro
  FCD_0c241_lcd_4x20__ClearLine(1);

}



/*========================================================================*\
   Use :Main
\*========================================================================*/
int main()
{
    SystemClocksSetup();
    HAL_Init();
    // Enable ports ABCDH
    __HAL_RCC_GPIOA_CLK_ENABLE();
    __HAL_RCC_GPIOB_CLK_ENABLE();
    __HAL_RCC_GPIOC_CLK_ENABLE();
    __HAL_RCC_GPIOH_CLK_ENABLE();


  // Interrupt
  MX_EXTI_PinInit(GPIOA,
      GPIO_PIN_0,
      GPIO_MODE_IT_RISING,
      GPIO_NOPULL);
  HAL_NVIC_SetPriority(EXTI0_IRQn, 2, 0);
  HAL_NVIC_EnableIRQ(EXTI0_IRQn);

  // Component Macro
  FCD_0c241_lcd_4x20__Start();

  // Loop
  while (1)
  {
  }

    mainendloop: goto mainendloop;
    return 0;
}



/*========================================================================*\
   Use :Interrupt
\*========================================================================*/

  //Handler code for [EXTI0]
  #ifndef MX_IRQ_INT0
  #define MX_IRQ_INT0
  void EXTI0_IRQHandler(void)
  {
      HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_0);
  }
  #endif
  #ifndef MX_ISR_INT0
  #define MX_ISR_INT0
  void MX_ISR_EXTI0()
  {
      FCM_Call_Interrupt();
  }
  #else
  #warning "This interrupt has previously been enabled, so the macro <Call_Interrupt> may never get called."
  #endif



    void EXTI9_5_IRQHandler(void)
    {
    #ifdef MX_EXTI5_DEFINED
        HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_5);
    #endif
    #ifdef MX_EXTI6_DEFINED
        HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_6);
    #endif
    #ifdef MX_EXTI7_DEFINED
        HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_7);
    #endif
    #ifdef MX_EXTI8_DEFINED
        HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_8);
    #endif
    #ifdef MX_EXTI9_DEFINED
        HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_9);
    #endif
    }

    void EXTI15_10_IRQHandler(void)
    {
    #ifdef MX_EXTI10_DEFINED
        HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_10);
    #endif
    #ifdef MX_EXTI11_DEFINED
        HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_11);
    #endif
    #ifdef MX_EXTI12_DEFINED
        HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_12);
    #endif
    #ifdef MX_EXTI13_DEFINED
        HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_13);
    #endif
    #ifdef MX_EXTI14_DEFINED
        HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_14);
    #endif
    #ifdef MX_EXTI15_DEFINED
        HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_15);
    #endif
    }
        
