サンプルプログラム F446RE_MSP2807_TP_ASCII_10K の説明
TP_Screen_Input   タッチパネル付きグラフィックLCD
 MSP2807のサンプルプログラムです。

  タッチパネルのデータ入力を行うプログラムを紹介します。

  0 - 9, A - Z, a - z および
 HEXデータ 0x00 - 0xFF を入力することができます。


  サンプルプログラムの動作を確認するために
 えがおのでんし製の評価用基板 Base-Nucleo-64
 STMicroelectronics社のfreeの開発ツール、
 STM32CubeIDE を使用しています。

  MSP2807は秋月電子通商が販売している、
 2.8インチのタッチパネル付きグラフィックLCDです。



目次

えがおのでんし製の評価用基板 Base-Nucleo-64 の説明

Firmwareの配置アドレスについて
  サンプルプログラム F446RE_MSP2807_TP_ASCII_10K は
 0x08010000 番地に配置します。

 1) F446RE_MSP2807_TP_ASCII_10K の配置
 2) DFU の配置
  a) F446RE_DFU_10K について
  b) STM32CubeProgrammer について
 3) Flash Memory の配置について

サンプルプログラム F446RE_MSP2807_TP_ASCII_10K のプロジェクト

使用しているフォント の説明
 1) 8x8dot Font ASCII
 2) 16x16dot Font ASCII
 3) 16x16dot Font HEX

サンプルプログラム F446RE_MSP2807_TP_ASCII_10K の説明
 F446RE_MSP2807_TP_ASCII_10K の構成

 プログラムを 0x08010000 番地から実行するための設定

 F446RE_MSP2807_TP_ASCII_10K の動作パラメータの定義
 ユーザープログラムの実行開始位置
 F446RE_MSP2807_TP_ASCII_10K のmain()の説明
  1) 初期化の部分
  2) LED点滅 と MSP2807のタッチパネル試験 の部分

 MSP2807のタッチパネル試験の画面
  1) 起動時の画面
  2) タッチパネルの位置調整画面
  3) データ入力画面


 タッチパネルの位置調整
  1) タッチパネルの位置調整方法

 タッチパネルのデータ入力
  1) データ入力操作


 MSP2807のタッチパネル試験 MSP2807_Test_TP_ASCII の説明
  1) MSP2807_Test_TP_ASCII のコード
  2) ILI9341 の初期化
  3) 起動画面表示
  4) タッチパネルの位置調整
  5) タッチパネルのデータ入力
  6) 入力データ表示
  7) タッチ待ち

 タッチパネルの位置調整モジュール の説明
  1) XPT2046初期化とタッチパネル調整用変数チェック
  2) User Switchの検出とタッチ検出
  3) タッチパネルの位置調整

 タッチパネル上のアルファニューメリックデータ入力モジュール の説明
  1) データ入力画面の表示パラメータ設定
  2) データ入力画面の表示
  3) データ入力処理

タッチパネルの位置調整の使用方法
  1) 通常の使用方法
  2) 並列動作がよくわからない場合

タッチパネルのデータ入力モジュールの使用方法
  1) 通常の使用方法
  2) 並列動作がよくわからない場合



えがおのでんし製の評価用基板 Base-Nucleo-64 の説明
  このサンプルプログラムは、
  えがおのでんし製の評価用基板 Base-Nucleo-64 を使用して動作を確認しています。

Base_Nucleo_64_Dim

  基板については、
 Base-Nucleo-64基板 の説明 をご覧ください。



Firmwareの配置アドレスについて

 1) F446RE_MSP2807_TP_ASCII_10K の配置
   F446RE_MSP2807_TP_ASCII_10K のFirmwareは 0x08010000 番地から配置します。

 2) DFU の配置
   F446RE_MSP2807_TP_ASCII_10K を 0x08010000 番地から実行するために、

sector 0 : 0x08000000 - 0x08003FFF : 16Kbytes
sector 1 : 0x08004000 - 0x08007FFF : 16Kbytes

 には、Download Firmware Update (DFU) のプログラム(Firmwareの .bin ファイル)
 F446RE_DFU_10K_Release.bin を書き込んでおく必要があります。

  F446RE_DFU_10K は、0x08010000 番地から実行するプログラム(.binファイル)を、
 USB経由でFlashMemory の 0x08010000 番地に書き込むためのFirmwareです。

  USB経由でSTM32F446REのFlashMemoryに .binファイルを書き込むには
 STMicroelectronics社が提供するPCアプリケーション STM32CubeProgrammer を使用します。

  a) F446RE_DFU_10K について
  F446RE_DFU_10K については、
 サンプルプログラム F446RE_DFU_10K の説明 をご覧ください。

  b) STM32CubeProgrammer について
  STM32CubeProgrammer については、
 PCアプリケーション STM32CubeProgrammer の説明 をご覧ください。


 3) Flash Memoryの配置について
  本サンプルプログラム F446RE_MSP2807_TP_ASCII_10K では、
 STM32F446RE の Flash Memory を以下のように使用しています。
sector  0 : 0x08000000 - 0x08003FFF :  16Kbytes : F446RE_DFU_10K を配置

sector  1 : 0x08004000 - 0x08007FFF :  16Kbytes : F446RE_DFU_10K を配置

sector  2 : 0x08008000 - 0x0800BFFF :  16Kbytes : 動作パラメータを保存

sector  3 : 0x0800C000 - 0x0800FFFF :  16Kbytes : 動作パラメータを保存 (タッチパネルの調整値)

sector  4 : 0x08010000 - 0x0801FFFF :  64Kbytes : F446RE_MSP2807_TP_ASCII_10K を配置

sector  5 : 0x08020000 - 0x0803FFFF : 128Kbytes : 未使用

sector  6 : 0x08040000 - 0x0805FFFF : 128Kbytes : 未使用
 
sector  7 : 0x08060000 - 0x0807FFFF : 128Kbytes : 未使用



サンプルプログラム F446RE_MSP2807_TP_ASCII_10K のプロジェクト
 STM32CubeIDE 1.12.0 を使用して作成しました。
 ここからサンプルプログラムのプロジェクト W_F446RE_MSP2807_TP_ASCII_10K.zip をダウンロードしてください。

  プロジェクト W_F446RE_MSP2807_TP_ASCII_10K は、
 フォルダ C:\Work_CubeIDE\W_F446RE\W_F446RE_MSP2807_TP_ASCII_10K のように配置して作成しました。

  フォルダ C:\Work_CubeIDE\W_F446RE を作成して、
 そのフォルダに W_F446RE_MSP2807_TP_ASCII_10K.zip を貼り付けて解凍し、
 プロジェクト作成時と同一に C:\Work_CubeIDE\W_F446RE\W_F446RE_MSP2807_TP_ASCII_10K と
 配置した場合は、普通にプロジェクトを開くことができます。

  サンプルプログラムのプロジェクトを任意のフォルダに配置した場合に、
 STM32CubeIDEにより、そのプロジェクトを開く方法については
既存のプロジェクトを開く方法 をご覧ください。



使用しているフォント の説明
  このサンプルプログラムでは、ASCII文字 および HEX表示 の
 フォント配列を使用しています。
  フォントはプログラムに埋め込まれます。

  a) ASCII文字を表示するときにASCII文字のコードからフォント配列の位置を算出して
   その位置からフォントを抜き出して使用しています。

  b) HEX表示するときにHEXの値からフォント配列の位置を算出して
   その位置からフォントを抜き出して使用しています。

1) 8x8dot Font ASCII
   8x8dot の ASCII文字のフォントです。

   LCD_Lib/Font/Font_ASCII_A/Font_ASCII_8x8_A.c にフォントの配列が記述されています。

2) 16x16dot Font ASCII
   16x16dot の ASCII文字のフォントです。

   LCD_Lib/Font/Font_ASCII_A/Font_ASCII_16x16_A.c にフォントの配列が記述されています。

3) 16x16dot Font HEX
   16x16dot の HEX表示のフォントです。

   LCD_Lib/Font/Font_HEX_16x16_A/Font_HEX_16x16_A.c にフォントの配列が記述されています。



サンプルプログラム F446RE_MSP2807_TP_ASCII_10K の説明
MSP2807_Startup_Screen_TP_ASCII
  タッチパネル付きLCD MSP2807 のタッチパネルのデータ入力を行うプログラムです。

TP_Screen_Input
  タッチパネルの入力位置の調整 および
 タッチパネルのデータ入力を行います。

  ASCIIデータ 0 - 9, A - Z, a - z および
 HEXデータ 0x00 - 0xFF を入力することができます。


 プロジェクトを最初に開いた画面は以下のようになります。

F446RE_MSP2807_TP_ASCII_10K_Scrn_First

 以下、サンプルプログラム F446RE_MSP2807_TP_ASCII_10K について説明していきます。



 F446RE_MSP2807_TP_ASCII_10K の構成
  STM32CubeIDEの画面左側、Project Explorerの
 F446RE_MSP2807_TP_ASCII_10Kを展開した画面は以下のようになります。

F446RE_MSP2807_TP_ASCII_10K_Tree

  サンプルプログラム F446RE_MSP2807_TP_ASCII_10K の構成を以下に示します。
F446RE_MSP2807_TP_ASCII_10K
  |- Includes
  |
  |- C_Lib
  |    |- M_Lib : 共通ライブラリ : Sort
  |    |   |- M_Lib.c
  |    |   |- M_Lib.h
  |    |
  |    |- User_IF_Lib
  |    |    |- Blink_LED_Status : Status LED点滅処理
  |    |    |   |- Blink_LED_Status.c
  |    |    |   |- Blink_LED_Status.h
  |    |    |
  |    |    |- Buzzer_PWM : Buzzer鳴動処理
  |    |    |   |- Buzzer_PWM.c
  |    |    |   |- Buzzer_PWM.h
  |    |    |
  |    |    |- Detect_USW : User Switch押下検出処理
  |    |        |- Detect_USW.c
  |    |        |- Detect_USW.h
  |    |
  |    |- Wait_Interval : 時間待ち処理
  |        |- Wait_Interval.c
  |        |- Wait_Interval.h
  |
  |- Core
  |    |- Inc
  |    |    |- main.h
  |    |    |- stm32f4xx_hal_conf.h
  |    |    |- stm32f4xx_it.h
  |    |
  |    |- Src
  |    |    |- main.c
  |    |    |- stm32f4xx_hal_msp.c
  |    |    |- stm32f4xx_it.c : 割り込み処理
  |    |    |- syscalls.c
  |    |    |- system.c
  |    |    |- system_stm32f4xx.c
  |    |
  |    |- Startup
  |
  |- Drivers
  |
  |- LCD_Lib
  |    |- Draw_Buffer_Lib
  |    |    |- Draw_Graphic : タッチパネル上のSWの枠表示
  |    |    |    |- Draw_Graphic.c
  |    |    |    |- Draw_Graphic.h
  |    |    |
  |    |    |- Draw_String
  |    |         |- String_ASCII : ASCII文字表示
  |    |              |- String_ASCII_16x16.c : ASCII文字列表示 : 16x16dot
  |    |              |- String_ASCII_16x16.h
  |    |              |- String_ASCII_8x8.c : ASCII文字列表示 : 8x8dot
  |    |              |- String_ASCII_8x8.h
  |    |              |- String_ASCII_Expand_32x32.c : 16x16dotのASCII文字を 32x32dotに拡大する。
  |    |              |- String_ASCII_Expand_32x32.h
  |    |              |- String_ASCII_Expand_48x48.c : 16x16dotのASCII文字を 48x48dotに拡大する。
  |    |              |- String_ASCII_Expand_48x48.h
  |    |
  |    |- Font
  |    |    |- Font_ASCII_A : ASCII文字Font
  |    |    |    |- Font_ASCII_16x16_A.c : ASCII文字Font 16x16dot の配列
  |    |    |    |- Font_ASCII_16x16_A.h
  |    |    |    |- Font_ASCII_8x8_A.c : ASCII文字Font 8x8dot の配列
  |    |    |    |- Font_ASCII_8x8_A.h
  |    |    |
  |    |    |- Font_HEX_16x16_A : HEX表示Font
  |    |         |- Font_HEX_16x16_A.c : HEX表示Font 16x16dot の配列
  |    |         |- Font_HEX_16x16_A.h
  |    |
  |    |- ILI9341_Lib
  |    |    |- ILI9341_Display
  |    |    |    |- ILI9341_Display_Graph : Graph表示
  |    |    |    |    |- ILI9341_Display_Graph.c
  |    |    |    |    |- ILI9341_Display_Graph.h
  |    |    |    |
  |    |    |    |- ILI9341_Display_HEX : HEX表示
  |    |    |    |    |- ILI9341_Display_HEX.c
  |    |    |    |    |- ILI9341_Display_HEX.h
  |    |    |    |
  |    |    |    |- ILI9341_Display_String_ASCII : ASCII文字表示
  |    |    |         |- ILI9341_Display_String_ASCII.c
  |    |    |         |- ILI9341_Display_String_ASCII.h
  |    |    |
  |    |    |- ILI9341_SPI_Lib : ILI9341の制御
  |    |         |- ILI9341_SPI_Clear_Display.c : 画面表示クリア
  |    |         |- ILI9341_SPI_Clear_Display.h
  |    |         |- ILI9341_SPI_Draw.c : ILI9341のレジスタ設定とデータ送信
  |    |         |- ILI9341_SPI_Draw.h : Color Code, Fontサイズ など各種パラメータの定義
  |    |         |- ILI9341_SPI_Init.c : ILI9341初期化
  |    |         |- ILI9341_SPI_Init.h
  |    |
  |    |- MSP2807_Ope
  |    |    |- F446RE_MSP2807_TP_ASCII_10K_Config
  |    |    |    |- Dev_Conf.h : 動作パラメータの定義
  |    |    |
  |    |    |- MSP2807_Startup_Screen_TP_ASCII : MSP2807起動画面表示 : タッチパネル : ASCII文字
  |    |    |    |- MSP2807_Startup_Screen_TP_ASCII.c
  |    |    |    |- MSP2807_Startup_Screen_TP_ASCII.h
  |    |    |
  |    |    |- MSP2807_Test_TP_ASCII : MSP2807のタッチパネル試験
  |    |         |- MSP2807_Test_TP_ASCII.c
  |    |         |- MSP2807_Test_TP_ASCII.h
  |    |
  |    |- MSP2807_TP_Lib : タッチパネル制御ライブラリ
  |         |- MSP2807_TP_Cont
  |         |    |- MSP2807_TP_Access.c : タッチパネル制御
  |         |    |- MSP2807_TP_Access.h
  |         |    |- MSP2807_TP_Adjust.c : タッチパネル位置調整
  |         |    |- MSP2807_TP_Adjust.h
  |         |    |- MSP2807_TP_Correct_Pos.c : タッチパネル位置補正
  |         |    |- MSP2807_TP_Correct_Pos.h
  |         |
  |         |- MSP2807_TP_Draw_SW : タッチパネル上のSW表示
  |         |    |-MSP2807_TP_Draw_SW.c
  |         |    |-MSP2807_TP_Draw_SW.h
  |         |
  |         |- MSP2807_TP_IN
  |              |- MSP2807_TP_Detect.c : タッチパネルのタッチ検出
  |              |- MSP2807_TP_Detect.h
  |              |- MSP2807_TP_Key_In.c : タッチパネルのデータ入力
  |              |- MSP2807_TP_Key_In.h
  |
  |- Periph : 周辺インターフェースのハンドラ
  |    |- H_C_TIM1_PWM.c  // PWMハンドラ
  |    |- H_C_TIM1_PWM.h
  |    |- H_F4_FLASH.c  // FLASHハンドラ
  |    |- H_F4_FLASH.h
  |    |- H_F4_SPI.c  // SPIハンドラ
  |    |- H_F4_SPI.h
  |
  |- F446RE_MSP2807_TP_ASCII_10K.launch
  |- STM32F446RETX_FLASH.ld
  |- STM32F446RETX_RAM.ld


 プログラムを 0x08010000 番地から実行するための設定

 1) .ld ファイルの変更
   STM32F446RETX_FLASH.ld と STM32F446RETX_RAM.ld の以下の個所を変更します。
/* Memories definition */
MEMORY
{
  RAM    (xrw)    : ORIGIN = 0x20000000,   LENGTH = 128K
/*---------------------------------------------------------------*/
/*  FLASH    (rx)    : ORIGIN = 0x8000000,   LENGTH = 512K*/
/*---------------------------------------------------------------*/
  FLASH    (rx)    : ORIGIN = 0x08010000,   LENGTH = 512K-0x10000
/*---------------------------------------------------------------*/
}

 2) stm32f446xx.h ファイルの変更
   Drivers/CMSIS/Device/ST/STM32F4xx/include/stm32f446xx.h の以下の個所を変更します。
/** @addtogroup Peripheral_memory_map
  * @{
  */
//-----------------------------------------------------------------------------------
//#define FLASH_BASE            0x08000000UL /*!< FLASH(up to 1 MB) base address in the alias region                         */
//-----------------------------------------------------------------------------------
#define FLASH_BASE            0x08010000UL /*!< FLASH(up to 512 KB - 0x10000) base address in the alias region             */
//-----------------------------------------------------------------------------------



 F446RE_MSP2807_TP_ASCII_10K の動作パラメータの定義
  サンプルプログラム F446RE_MSP2807_TP_ASCII_10K の動作パラメータの定義を
  LCD_Lib/MSP2807_Ope/F446RE_MSP2807_TP_ASCII_10K_Config/Dev_Conf.h に記述しています。

  使用する CPU の定義、ヘッダ名の定義、GPIO のポートとピンの定義、動作パラメータ
 などを記述しています。



 ユーザープログラムの実行開始位置
  プログラムは、int main(void) から実行開始します。

  int main(void) は、フォルダ Core/Src/main.c にあります。

F446RE_MSP2807_TP_ASCII_10K_main

  STM32CubeIDEでビルドされたプログラムは、自動的にCPUの初期化を
 行った後、int main(void) を呼び出します。

  ユーザーコード(記述したプログラム)は、
 int main(void) の先頭から実行されます。



 F446RE_MSP2807_TP_ASCII_10K の main()の説明
  サンプルプログラム F446RE_MSP2807_TP_ASCII_10K の main() の記述は、
 以下のとおりです。



int main(void)
{
  /* USER CODE BEGIN 1 */

  uint8_t uint8_JobNum_LED = 0;
  uint8_t uint8_JobNum_MSP2807 = 0;

  SCB->VTOR = FLASH_BASE;

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
    //------------------------------------------------------
    // Status LED点滅
    //------------------------------------------------------
    // 引数:
    // uint8_t *puint8_JobNum : 処理番号を格納する変数のポインタ

    // uint16_t uint16_Time_ON  : 点灯時間
    // uint16_t uint16_Time_OFF : 消灯時間

    // 戻り値:
    //   -1 : 処理中
    //    0 : OK終了
    //    1 : NG
    //------------------------------------------------------
    Blink_LED_Status(&uint8_JobNum_LED,
                     GLB_uint16_Time_LED_Status_ON,
                     GLB_uint16_Time_LED_Status_OFF);


    //------------------------------------------------------------
    // MSP2807のタッチパネル試験 : 起動画面表示 : ASCII
    //------------------------------------------------------------
    // 引数:
    // uint8_t *puint8_JobNum : 処理番号を格納する変数のポインタ

    // 戻り値:
    //   -1 : 処理中
    //    0 : OK終了
    //    1 : NG終了
    //------------------------------------------------------------
    MSP2807_Test_TP_ASCII(&uint8_JobNum_MSP2807);
  }
  /* USER CODE END 3 */
}


 1) 初期化の部分

  a) CPUのPeripheral初期化
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();
   により、CPUのPeripheralなどの基本的な初期化を行います。
  PeripheralとはCPUの周辺インターフェースなどのことを言います。

   プロジェクト構築時に自動的に組み込まれる、
  HAL Drivers(フォルダ Drivers/STM32L4xx_HAL_Drivers) 内に記述されています。


  b) CPU動作クロックの設定
  /* Configure the system clock */
  SystemClock_Config();

   CPUの動作クロックとPeripheralの動作クロックを設定します。

   SystemClock_Config(); の設定内容は、

int main(void)
{
         .
         .
         .
}
 の、すぐ下に記述されています。


  c) MSP2807の初期化
   MSP2807のタッチパネル試験のモジュール MSP2807_Test_TP_ASCII 内で
  初期化処理 ILI9341_Initialize を呼びだしています。



 2) LED点滅 と MSP2807のタッチパネル試験 の部分
   永久ループ部分の記述を以下に示します。


  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
    //------------------------------------------------------
    // Status LED点滅
    //------------------------------------------------------
    // 引数:
    // uint8_t *puint8_JobNum : 処理番号を格納する変数のポインタ

    // uint16_t uint16_Time_ON  : 点灯時間
    // uint16_t uint16_Time_OFF : 消灯時間

    // 戻り値:
    //   -1 : 処理中
    //    0 : OK終了
    //    1 : NG
    //------------------------------------------------------
    Blink_LED_Status(&uint8_JobNum_LED,
                     GLB_uint16_Time_LED_Status_ON,
                     GLB_uint16_Time_LED_Status_OFF);


    //------------------------------------------------------------
    // MSP2807のタッチパネル試験 : 起動画面表示 : ASCII
    //------------------------------------------------------------
    // 引数:
    // uint8_t *puint8_JobNum : 処理番号を格納する変数のポインタ

    // 戻り値:
    //   -1 : 処理中
    //    0 : OK終了
    //    1 : NG終了
    //------------------------------------------------------------
    MSP2807_Test_TP_ASCII(&uint8_JobNum_MSP2807);
  }
  /* USER CODE END 3 */

  Status LED点滅処理 Blink_LED_Status と
 MSP2807のタッチパネル試験 MSP2807_Test_TP_ASCII を呼び出しています。
  MSP2807_Test_TP_ASCII では、タッチパネルの制御を行います。

  Blink_LED_Status と MSP2807_Test_TP_ASCII は並列に実行されます。



 MSP2807のタッチパネル試験の画面

  1) 起動時の画面
   起動時の画面を以下に示します。

MSP2807_Startup_Screen_TP_ASCII

   a) 起動時の画面 で、画面をタッチしたとき、タッチパネルの位置調整が
    一度も実行されていない場合は、以下の 「 2) タッチパネルの位置調整画面 」が表示されます。

   b) 以前に位置調整を行っている場合でも、起動時の画面 で、NUCLEO-F446RE基板の
    USERスイッチを押すと、以下の 「 2) タッチパネルの位置調整画面 」が表示されます。

   c) 以前に位置調整を行っている場合、起動時の画面 で、画面をタッチすると、
    以下の 「 3) データ入力画面 」が表示されます。

  2) タッチパネルの位置調整画面
   タッチパネルの位置調整の画面を以下に示します。

Adjust_TP_First


  3) データ入力画面
   タッチパネルのデータ入力画面を以下に示します。

TP_Screen_Input


 タッチパネルの位置調整
  タッチパネルの基準位置を設定するために、位置調整を行う必要があります。
  調整後、基準位置はCPUのFlash Memoryに保存されます。

  タッチパネルの位置調整の操作について、以下に説明します。

 1) タッチパネルの位置調整方法
  調整方法については
 タッチパネルの位置調整 をご覧ください。



 タッチパネルのデータ入力
  タッチパネルのデータ入力について説明します。

 1) データ入力操作
 タッチパネルのデータ入力操作 をご覧ください。



 MSP2807のタッチパネル試験 MSP2807_Test_TP_ASCII の説明

 1) MSP2807_Test_TP_ASCII のコード
  LCD_Lib/MSP2807_Test_TP_ASCII/MSP2807_Test_TP_ASCII.c にプログラムが記述されています。

  以下に、MSP2807_Test_TP_ASCII のコードを示します。
//-----------------------------------------------------------
// MSP2807のタッチパネル試験 : 起動画面表示 : ASCII
//-----------------------------------------------------------
// 引数:
// uint8_t *puint8_JobNum : 処理番号が格納された変数のポインタ

// 戻り値:
//   -1 : 処理中
//    0 : OK終了
//    1 : NG終了
//-----------------------------------------------------------
int16_t MSP2807_Test_TP_ASCII(uint8_t *puint8_JobNum)
{
  static uint8_t STC_uint8_JobNum_MSP2807;  // MSP2807処理番号

  int16_t int16_Return;


  switch(*puint8_JobNum)
  {
  case 0:
    // ILI9341初期化済みを判定
    if(GLB_uint8_Flag_Init_ILI9341 == 0){
      // ILI9341初期化済みでない場合、初期化する。
      //------------------------------------------------------------
      // LCD初期化 : SPI_ILI9341
      //------------------------------------------------------------
      ILI9341_Initialize();

      GLB_uint8_Flag_Init_ILI9341 = 1;  // ILI9341初期化済みをセット
    }

    STC_uint8_JobNum_MSP2807 = 0;  // MSP2807処理番号初期化


    (*puint8_JobNum)++;  // 次の処理番号に移行する。 : case 1:
    int16_Return = -1;   // 処理継続
    break;

  case 1:
    //------------------------------------------------------------
    // MSP2807起動画面表示 : Touch Panel : ASCII
    //------------------------------------------------------------
    // 引数:
    // uint8_t *puint8_JobNum : 処理番号を格納する変数のポインタ

    // 戻り値:
    //   -1 : 処理中
    //    0 : OK終了
    //    1 : NG終了
    //------------------------------------------------------------
    int16_Return = MSP2807_Startup_Screen_TP_ASCII(&STC_uint8_JobNum_MSP2807);
    if(int16_Return == -1){
      // 処理中
      break;  // 処理番号維持 : 処理継続 : case 1: をループ
    }


    (*puint8_JobNum)++;  // 次の処理番号に移行する。 : case 2:
    int16_Return = -1;   // 処理継続
    break;

  case 2:
    //------------------------------------------------------------------
    // タッチパネルの位置調整
    //------------------------------------------------------------------
    // 引数:
    // uint8_t *puint8_JobNum : 処理番号を格納する変数のポインタ

    // 戻り値:
    //   -1 : 処理中
    //    0 : OK終了
    //    1 : NG終了
    //------------------------------------------------------------------
    int16_Return = Transact_Adjust_TP(&STC_uint8_JobNum_MSP2807);
    if(int16_Return == -1){
      // 処理中
      break;  // 処理番号維持 : 処理継続 : case 2: をループ
    }


    (*puint8_JobNum)++;  // 次の処理番号に移行する。 : case 3:
    int16_Return = -1;   // 処理継続
    break;

  case 3:
    //-----------------------------------------------------------
    // タッチパネル上のアルファニューメリックデータ入力
    //-----------------------------------------------------------
    // 引数:
    // uint8_t *puint8_JobNum : 処理番号が格納された変数のポインタ

    // uint16_t *puint16_Num_Data_Input : 入力データ数を格納sるWorkのポインタ
    // uint8_t *puint8_Data : Dataを格納するBufferのポインタ

    // 戻り値:
    //   -1 : 処理中
    //    0 : OK終了
    //    1 : NG終了
    //-----------------------------------------------------------
    int16_Return = Input_Data_AN_TP(&STC_uint8_JobNum_MSP2807,
                                    &GLB_uint16_Num_Data_Input,
                                    GLB_uint8_Data_Input);
    if(int16_Return == -1){
      // 処理中
      break;  // 処理番号維持 : 処理継続 : case 3: をループ
    }

    if(int16_Return != 0){
      // NG
      int16_Return = -1;  // 処理中をセット
      break;  // 処理番号維持 : 処理継続 : case 3: を継続する。
    }


    (*puint8_JobNum)++;  // 次の処理番号に移行する。 : case 4:
                // タッチパネル上のアルファニューメリックデータ入力に対する処理
    int16_Return = -1;   // 処理継続
    break;

  case 4:
    // タッチパネル上のアルファニューメリックデータ入力に対する処理

    // この例では、入力データを 32 x 32 のサイズで表示する。
    //-------------------------------------------------------
    // タッチパネルの入力データを表示する。
    //-------------------------------------------------------
    // 引数:
    // uint8_t *puint8_JobNum : 処理番号が格納される変数のポインタ

    // int16_t uint16_Num_Data_Input : データ長
    // uint8_t *puint8_Data_Buffer : 入力Dataが格納されているBufferのポインタ

    // 戻り値:
    //   -1 : 処理中
    //    0 : OK終了
    //    1 : NG終了
    //-------------------------------------------------------
    int16_Return = Draw_TP_SW_Input_Data(&STC_uint8_JobNum_MSP2807,
                                         GLB_uint16_Num_Data_Input,
                                         GLB_uint8_Data_Input);
    if(int16_Return == -1){
      // 処理中
      break;  // 処理番号維持 : 処理継続 : case 4: をループ
    }

    if(int16_Return != 0){
      // NG
      *puint8_JobNum = 0;  // 処理番号初期化 : case 0: に移行する。
      // int16_Return : 結果
      break;
    }


    (*puint8_JobNum)++;  // 次の処理番号に移行する。 : case 5:
              // タッチパネル上のアルファニューメリックデータ入力に対する処理
    int16_Return = -1;   // 処理継続
    break;

  case 5:
    //------------------------------------------------------------------------
    // LCD画面がタッチされるのを待つ。
    //------------------------------------------------------------------------

    //------------------------------------------------------------------------
    // Touch Panel 位置検出
    //------------------------------------------------------------------------
    // 引数:
    // uint8_t *puint8_JobNum : 処理番号を格納する変数のポインタ

    // uint16_t *puint16_Position_XYZ : XYZ位置を格納するBufferのポインタ

    // 戻り値:
    //   -1 : 処理中
    //    0 : OK終了
    //    1 : NG終了
    //------------------------------------------------------------------------
    int16_Return = Detect_Position_TouchPanel(&STC_uint8_JobNum_MSP2807,
                                              GLB_uint16_Position_TP_XYZ);
    if(int16_Return == -1){
      // 処理中
      break;  // 処理番号維持 : 処理継続 : case 5: をループ
    }


    *puint8_JobNum = 0;  // 処理番号初期化 : case 0: に移行する。
    // int16_Return : 結果
    break;

  default:
    *puint8_JobNum = 0;  // 処理番号初期化
    int16_Return = 1;    // NG終了
    break;
  }

  return(int16_Return);
}

 2) ILI9341 の初期化
   case 0: では、初期化済みフラグ GLB_uint8_Flag_Init_ILI9341 を判定して、
  初期化済みでない場合は、モジュール ILI9341_Initialize を呼び出して
  ILI9341 の初期化を行います。


 3) 起動画面表示
   case 1: では、MSP2807_Startup_Screen_TP_ASCII を呼び出して
  起動画面の表示を行います。

   以下の画面が表示されます。

MSP2807_Startup_Screen_TP_ASCII

 4) タッチパネルの位置調整
   case 2: では、Transact_Adjust_TP を呼び出して
  タッチパネルの位置調整を行います。

   起動画面表示のときの操作により、タッチパネルの位置調整の動作が選択された場合、
  以下の画面が表示されます。

Adjust_TP_First

   タッチパネルの位置調整が終了したとき、
  また、起動画面表示のときの操作により、タッチパネルのデータ入力が選択された場合は
  以下の、タッチパネルのデータ入力の画面が表示されます。

 5) タッチパネルのデータ入力
   case 3: では、Input_Data_AN_TP を呼び出して
  タッチパネルのデータ入力を行います。

TP_Screen_Input

   [ET] が押されるまで、case 3: をループします。
   [ET] が押されると、case 4: の処理に移行します。


 6) 入力データ表示
   case 4: では、case 3: で入力したデータを 32 x 32 ドットのフォントで表示します。
   0, 1, 2, 3, A, B, C, D を入力した場合の画面表示を以下に示します。

TP_Screen_Draw_Input_Data_0123ABCD

   変数 GLB_uint16_Num_Data_Input に入力データ数が、
  バッファ GLB_uint8_Data_Input に入力データが格納されています。
   それを参照して表示します。

   表示後、case 5: の処理に移行します。

   このサンプルプログラムでは、入力データの表示処理を行っていますが、
  入力データに対する処理を、自由に作成してください。

 7) タッチ待ち
   case 5: では、画面がタッチされるのを待ちます。

   画面がタッチされると、処理番号を 0 にセットして、終了します。
   再び case 0: から処理を開始します。



 タッチパネルの位置調整モジュール の説明
  上記、MSP2807_Test_TP_ASCII の case 2: で呼び出されているモジュール、
 Transact_Adjust_TP について説明します。

  以下の起動時の画面が表示されているときの処理です。

MSP2807_Startup_Screen_TP_ASCII

  モジュール Transact_Adjust_TP のコードを以下に示します。
//------------------------------------------------------------------
// タッチパネルの位置調整
//------------------------------------------------------------------
// 引数:
// uint8_t *puint8_JobNum : 処理番号を格納する変数のポインタ

// 戻り値:
//   -1 : 処理中
//    0 : OK終了
//    1 : NG終了
//------------------------------------------------------------------
int16_t Transact_Adjust_TP(uint8_t *puint8_JobNum)
{
  static uint8_t STC_uint8_JobNum_USW;
  static uint8_t STC_uint8_JobNum_TP;


  int16_t int16_Return;


  switch(*puint8_JobNum)
  {
  case 0:
    STC_uint8_JobNum_USW = 0;  // 処理番号初期化
    STC_uint8_JobNum_TP = 0;  // 処理番号初期化


    if(GLB_Initialize_XPT2046 == 0){
      //----------------------------------------------
      // User Switch入力ピン初期化
      //----------------------------------------------
      Init_USW();


      //-------------------------------------
      // XPT2046初期化
      //-------------------------------------
      Initialize_XPT2046();


      GLB_Initialize_XPT2046 = 1;
    }


    //--------------------------------------------------
    // タッチパネル調整用変数チェック
    //--------------------------------------------------
    // Flash Memoryのタッチパネル変数エリアを参照して、調整済みなら、
    //    変数をセットする。
    //--------------------------------------------------

    //----------------------------------------------------
    // タッチパネル調整値をFlash Memoryから読み込む。
    //----------------------------------------------------
    // 戻り値:
    //    0 : OK
    //    1 : NG
    //----------------------------------------------------
    Load_Adjust_TP();


    (*puint8_JobNum)++;  // 次の処理番号に移行する。
    int16_Return = -1;   // 処理継続
    break;

  case 1:
    //-----------------------------------------------------------
    // User Switch入力検出
    //-----------------------------------------------------------
    // 引数:
    // uint8_t *puint8_JobNum : 処理番号が格納された変数のポインタ

    // 戻り値:
    //  -1 : 検出なし
    //  0 : 検出あり
    //-----------------------------------------------------------
    int16_Return = Det_USW(&STC_uint8_JobNum_USW);
    if(int16_Return == 0){
      // User Switch検出あり
      STC_uint8_JobNum_TP = 0;  // タッチパネル処理番号初期化

      (*puint8_JobNum)++;  // 次の処理番号に移行する。 : タッチパネル調整処理番号に移行する。
      int16_Return = -1;
      break;
    }


    //------------------------------------------------------------------------
    // LCD画面がタッチされるのを待つ。
    //------------------------------------------------------------------------

    //------------------------------------------------------------------------
    // Touch Panel 位置検出
    //------------------------------------------------------------------------
    // 引数:
    // uint8_t *puint8_JobNum : 処理番号を格納する変数のポインタ

    // uint16_t *puint16_Position_XYZ : XYZ位置を格納するBufferのポインタ

    // 戻り値:
    //   -1 : 処理中
    //    0 : OK終了
    //    1 : NG終了
    //------------------------------------------------------------------------
    int16_Return = Detect_Position_TouchPanel(&STC_uint8_JobNum_TP,
                                              GLB_uint16_Position_TP_XYZ);
    if(int16_Return == -1){
      // 処理中
      break;  // 処理番号維持 : 処理継続
    }


    // タッチパネル調整用変数をチェック
    if(GLB_int16_Adjust_TP_X_MIN == -1){
      // タッチパネル調整済みでない場合
      (*puint8_JobNum)++;  // 次の処理番号に移行する。 : タッチパネル調整処理番号に移行する。
      int16_Return = -1;
      break;
    }


    //----------------------------------------------
    // タッチパネルのY位置補正係数算出
    //----------------------------------------------
    Calc_Correction_Coefficent_Pos_TP_Y();


    *puint8_JobNum = 0;  // 処理番号初期化 : case 0: に移行する。
    int16_Return = 0;  // OK終了
    break;

  case 2:
    //------------------------------------------------------------------
    // タッチパネルの位置調整
    //------------------------------------------------------------------
    // 引数:
    // uint8_t *puint8_JobNum : 処理番号を格納する変数のポインタ

    // 戻り値:
    //   -1 : 処理中
    //    0 : OK終了
    //    1 : NG終了
    //------------------------------------------------------------------
    int16_Return = Adjust_TP(&STC_uint8_JobNum_TP);
    if(int16_Return == -1){
      // 処理中
      break;  // 処理番号維持 : 処理継続
    }


    *puint8_JobNum = 0;  // 処理番号初期化 : case 0: に移行する。
    int16_Return = 0;    // OK終了
    break;

  default:
    *puint8_JobNum = 0;  // 処理番号初期化
    int16_Return = 1;    // NG終了
    break;
  }

  return(int16_Return);
}

 1) XPT2046初期化とタッチパネル調整用変数チェック
   case 0: では、タッチパネル検出利用IC XPT2046 の初期化、
  および、タッチパネル調整用変数のチェックを行います。

  a) XPT2046初期化
    初期化フラグ GLB_Initialize_XPT2046 をチェックして、初期化済みでない場合、
   Initialize_XPT2046モジュールにより XPT2046 を初期化します。

  b) タッチパネル調整用変数チェック
    Load_Adjust_TPモジュールにより、Flash Memoryのタッチパネル変数エリアを参照して、
   調整済みのフラグがONの場合、その調整用変数をWorkにセットします。

 2) User Switchの検出とタッチ検出
   case 1: では、NUCLEO-F446RE基板上の User Switch の検出、
  および、タッチパネルのタッチ検出を行います。

  User Switchの検出とタッチ検出は、並列に動作します。

  a) User Switch の検出
    Det_USWモジュールにより、NUCLEO-F446RE基板上の User Switch を検出します。
    NUCLEO-F446RE基板上の User Switch が押されたことを検出した場合、
   処理番号をインクリメントして、case 2: のタッチパネルの位置調整処理に移行します。

  b) タッチパネル のタッチ検出
    Detect_Position_TouchPanelモジュールによりタッチ検出を行います。
    タッチされたことを検出した場合、タッチパネル調整用変数をチェックします。

   i) タッチパネル調整済みでない場合
     処理番号をインクリメントして、case 2: のタッチパネルの位置調整処理に移行します。

   ii) タッチパネル調整済みの場合
     タッチパネルのY位置補正係数算出を行い、
    Transact_Adjust_TPモジュールの処理を終了します。

 3) タッチパネルの位置調整
   case 2: では、タッチパネルの位置調整処理を行います。
   以下の画面が表示されます。

Adjust_TP_First

   タッチパネルの位置調整を完了すると、Transact_Adjust_TPモジュールの処理は終了します。

   調整方法については
  タッチパネルの位置調整 をご覧ください。



 タッチパネル上のアルファニューメリックデータ入力モジュール の説明
  上記、MSP2807_Test_TP_ASCII の case 3: で呼び出されているモジュール、
 Input_Data_AN_TP について説明します。

  以下の画面でデータ入力を行います。

TP_Screen_Input

  データ入力操作については、
 タッチパネルのデータ入力操作 をご覧ください。

  モジュール Input_Data_AN_TP のコードを以下に示します。
//-------------------------------------------------------
// タッチパネル上のアルファニューメリックデータ入力
//-------------------------------------------------------
// 引数:
// uint8_t *puint8_JobNum : 処理番号が格納される変数のポインタ

// uint16_t *puint16_Num_Data_Input : 入力データ数を格納sるWorkのポインタ
// uint8_t *puint8_Data : Dataを格納するBufferのポインタ

// 戻り値:
//   -1 : 処理中
//    0 : OK終了
//    1 : NG終了
//-------------------------------------------------------
int16_t Input_Data_AN_TP(uint8_t *puint8_JobNum,
                         uint16_t *puint16_Num_Data_Input, uint8_t *puint8_Data)
{
  static uint8_t STC_uint8_JobNum_LCD;  // LCD処理番号


  int16_t int16_Return;


  switch(*puint8_JobNum)
  {
  case 0:
    STC_uint8_JobNum_LCD = 0;  // LCD処理番号初期化


    //---------------------------------------------------------------------
    // TP SW パラメータセット
    //---------------------------------------------------------------------
    //-------------------------------------------
    // TP SW Alpha Numericの値を設定
    //-------------------------------------------
    // 引数:
    // int16_t int16_A_H : ASCII/HEX選択
    //    0 : ASCII
    //    1 : HEX

    // int16_t int16_U_L : Upper case/Lower case 選択 : 大文字/小文字 選択
    //    0 : Upper case : 大文字
    //    1 : Lower case : 小文字
    //-------------------------------------------
    Set_TP_SW_Value_Alpha_Numeric(GLB_int16_Flag_AN_HEX, GLB_int16_Flag_U_L);


    //-------------------------------------------
    // TP SW Functionの値を設定
    //-------------------------------------------
    Set_TP_SW_Value_Function();


    //-------------------------------------------
    // TP SW Upper case/Lower caseの値を設定 : UL
    //-------------------------------------------
    // 引数:
    // int16_t int16_Sel : 表示選択
    //    0 : 表示 : ASCII
    //    1 : 消去 : HEX
    //-------------------------------------------
    Set_TP_SW_Value_Upper_Lower(GLB_int16_Flag_U_L);


    //-------------------------------------------
    // TP SWの表示位置と検出位置をセット
    //-------------------------------------------
    Set_TP_SW_Position();
    //---------------------------------------------------------------------


    (*puint8_JobNum)++;  // 次の処理番号に移行する。
    int16_Return = -1;   // 処理継続
    break;

  case 1:
    //-------------------------------------------------------
    // データ入力画面表示
    //-------------------------------------------------------
    // 引数:
    // uint8_t *puint8_JobNum : 処理番号が格納される変数のポインタ

    // 戻り値:
    //   -1 : 処理中
    //    0 : OK終了
    //    1 : NG終了
    //-------------------------------------------------------
    int16_Return = Print_Screen_Input_Data(&STC_uint8_JobNum_LCD);
    if(int16_Return == -1){
      // 処理中
      break;  // 処理番号維持 : 処理継続
    }


    (*puint8_JobNum)++;  // 次の処理番号に移行する。
    int16_Return = -1;   // 処理継続
    break;

  case 2:
    //-------------------------------------------------------
    // TP SWデータ入力
    //-------------------------------------------------------
    // 引数:
    // uint8_t *puint8_JobNum : 処理番号が格納される変数のポインタ

    // uint16_t uint16_Offset_Draw_Y : 表示位置オフセット Y

    // int16_t int16_Size_Data_Buffer : Data Buffer Size

    // int16_t *pint16_Size_Input_Data : 入力データサイズを格納する変数のポインタ
    // uint8_t *puint8_Data_Buffer : Dataを格納するBufferのポインタ

    // 戻り値:
    //   -1 : 処理中
    //    0 : OK終了
    //    1 : NG終了
    //-------------------------------------------------------
    int16_Return = Input_Data_TP_SW(&STC_uint8_JobNum_LCD,
                                    (uint16_t)def_Offset_Draw_Input_Data_Y,
                                    (int16_t)def_Size_Data_Buffer_Input,
                                    (int16_t *)puint16_Num_Data_Input,
                                    puint8_Data);
    if(int16_Return == -1){
      // 処理中
      break;  // 処理番号維持 : 処理継続
    }


    *puint8_JobNum = 0;  // 処理番号初期化
    // int16_Return : 結果
    break;  // OK

  default:
    *puint8_JobNum = 0;  // 処理番号初期化
    int16_Return = 1;    // NG
    break;
  }

  return(int16_Return);
}

 1) データ入力画面の表示パラメータ設定
   case 0: でデータ入力画面のための表示パラメータをセットしています。
   表示するスイッチの位置、スイッチの検出位置などをセットします。

 2) データ入力画面の表示
   case 1: でデータ入力画面のスイッチなどの表示を行っています。
   表示画面は以下のようになります。

TP_Screen_Input

 3) データ入力処理
   case 2: でデータ入力と入力データの表示を行っています。

   [ET] が押されるまで、case 2: をループします。
   [ET] が押されると、処理を終了します。



タッチパネルの位置調整モジュールの使用方法
  タッチパネルの位置調整モジュール Transact_Adjust_TP の使用方法を
 簡単に説明します。

 1) 通常の使用方法
   MSP2807のタッチパネル試験 MSP2807_Test_TP_ASCII において
  タッチパネルの位置調整 Transact_Adjust_TP を
  使用している部分を以下に示します。
  case 2:
    //------------------------------------------------------------------
    // タッチパネルの位置調整
    //------------------------------------------------------------------
    // 引数:
    // uint8_t *puint8_JobNum : 処理番号を格納する変数のポインタ

    // 戻り値:
    //   -1 : 処理中
    //    0 : OK終了
    //    1 : NG終了
    //------------------------------------------------------------------
    int16_Return = Transact_Adjust_TP(&STC_uint8_JobNum_MSP2807);
    if(int16_Return == -1){
      // 処理中
      break;  // 処理番号維持 : 処理継続
    }


    (*puint8_JobNum)++;  // 次の処理番号に移行する。
    int16_Return = -1;   // 処理継続
    break;

  戻り値が "処理中" でなくなるまで、case 2: をループして繰り返し呼び出します。
  戻り値が "処理中" 以外になったら、次の処理番号に移行します。

  この部分を実行しているときの、最初の画面を以下に示します。

Adjust_TP_First

 2) 並列動作がよくわからない場合
   以下のように、int16_Return が -1 以外の値になるまで繰り返し呼び出すことにより
  タッチパネルの位置調整を行うことができます。
  STC_uint8_JobNum_MSP2807 = 0;


  do{
    //------------------------------------------------------------------
    // タッチパネルの位置調整
    //------------------------------------------------------------------
    // 引数:
    // uint8_t *puint8_JobNum : 処理番号を格納する変数のポインタ

    // 戻り値:
    //   -1 : 処理中
    //    0 : OK終了
    //    1 : NG終了
    //------------------------------------------------------------------
    int16_Return = Transact_Adjust_TP(&STC_uint8_JobNum_MSP2807);
  }while(int16_Return == -1);


タッチパネルのデータ入力モジュールの使用方法
  タッチパネルのデータ入力モジュール Input_Data_AN_TP の使用方法を
 簡単に説明します。

 1) 通常の使用方法
   MSP2807のタッチパネル試験 MSP2807_Test_TP_ASCII において
  タッチパネル上のアルファニューメリックデータ入力 Input_Data_AN_TP を
  使用している部分を以下に示します。
  case 3:
    //-----------------------------------------------------------
    // タッチパネル上のアルファニューメリックデータ入力
    //-----------------------------------------------------------
    // 引数:
    // uint8_t *puint8_JobNum : 処理番号が格納された変数のポインタ

    // uint16_t *puint16_Num_Data_Input : 入力データ数を格納sるWorkのポインタ
    // uint8_t *puint8_Data : Dataを格納するBufferのポインタ

    // 戻り値:
    //   -1 : 処理中
    //    0 : OK終了
    //    1 : NG終了
    //-----------------------------------------------------------
    int16_Return = Input_Data_AN_TP(&STC_uint8_JobNum_MSP2807,
                                    &GLB_uint16_Num_Data_Input,
                                    GLB_uint8_Data_Input);
    if(int16_Return == -1){
      // 処理中
      break;  // 処理番号維持 : 処理継続 : case 3: をループ
    }

    if(int16_Return != 0){
      // NG
      int16_Return = -1;  // 処理中をセット
      break;  // 処理番号維持 : 処理継続 : case 3: を継続する。
    }


    (*puint8_JobNum)++;  // 次の処理番号に移行する。 : タッチパネル上のアルファニューメリックデータ入力に対する処理
    int16_Return = -1;   // 処理継続
    break;

  戻り値が "処理中" でなくなるまで、case 3: をループして繰り返し呼び出します。
  戻り値が "処理中" 以外になったら、次の処理番号に移行します。

  この部分を実行しているときの、最初の画面を以下に示します。

TP_Screen_Input

  0, 1, 2, 3, A, B, C, D を入力した画面を以下に示します。

TP_D_0123ABCD

  ここで、[ET] を押すと、Input_Data_AN_TP の戻り値が 0 になります。
  [ET] を押したとき以外は、Input_Data_AN_TP の戻り値が -1 なので
 case 3: をループします。

  変数 GLB_uint16_Num_Data_Input に入力データ数、
  バッファ GLB_uint8_Data_Input に入力データがセットされています。

  この値を利用して、希望の処理を行ってください。

 2) 並列動作がよくわからない場合
   以下のように、int16_Return が -1 以外の値になるまで繰り返し呼び出すことにより
  タッチパネルのデータを入力することができます。
  STC_uint8_JobNum_MSP2807 = 0;


  do{
    //-----------------------------------------------------------
    // タッチパネル上のアルファニューメリックデータ入力
    //-----------------------------------------------------------
    // 引数:
    // uint8_t *puint8_JobNum : 処理番号が格納された変数のポインタ

    // uint16_t *puint16_Num_Data_Input : 入力データ数を格納sるWorkのポインタ
    // uint8_t *puint8_Data : Dataを格納するBufferのポインタ

    // 戻り値:
    //   -1 : 処理中
    //    0 : OK終了
    //    1 : NG終了
    //-----------------------------------------------------------
    int16_Return = Input_Data_AN_TP(&STC_uint8_JobNum_MSP2807,
                                    &GLB_uint16_Num_Data_Input,
                                    GLB_uint8_Data_Input);
  }while(int16_Return == -1);


A+-2C (ええ加減にC) のページに戻る




 メールアドレス: apm2c.sumi@gmail.com

 なんでも、気軽に ご相談ください。
 担当:おの

  えがおのでんし 案内