IoT

STONE TFTLCDとSTM32をベースにした三目並べゲーム

まとめ

Tic-tac-toeは、五目並べに似た3 x3グリッドでプレイされるゲームです。 ボードは一般的に境界線を描画せず、グリッド線が三目並べに配置されるため、この名前が付けられました。 ゲームに必要な道具は紙とペンだけです。 次に、OとXを表すXNUMX人のプレーヤーが交代で、グリッドにマークを残します。 XNUMXつのマークが直線を形成し、それが勝者です。

この記事では、マイクロコントローラーSTM32とSTONE LCDディスプレイを使用して、簡単な三目並べゲームを開発します。

実験に必要な材料

システム原理

画面の最初のタップはOである必要があり、画面の8番目のタップはXであると指定し、このサイクルを実行しています。 各グリッドの各行、列、対角線にOとXの数を格納するために、XNUMXつの配列を設定します。同じマークがXNUMXつある限り、勝利です。勝利を証明する赤いボックスが点滅します。行、列、または対角線を選択し、[リセット]をタップしてゲームを再開します。

以下はフローチャートです:

STONE TFT LCD と STM32 IOT PlatoBlockchain Data Intelligence に基づく三目並べゲーム。 垂直検索。 あい。

STM32およびSTONELCDディスプレイシステムのハードウェア設計

(A)STONELCDディスプレイ

  1. 「三目並べゲーム」のハードウェア設計

北京STONEテクノロジー株式会社のSTONELCDディスプレイを使用し、モデルはSTWI070WT-01で、TFTディスプレイとタッチコントローラーが統合されています。

STONE TFT LCD と STM32 IOT PlatoBlockchain Data Intelligence に基づく三目並べゲーム。 垂直検索。 あい。
  1.  STVC070WT-01 製品の特徴
物理的パラメータ 
サイズ7インチ
解像度800×RGB×480
ピクセル間隔0.0642(W)×0.1790(H)mm
262,144色(18ビット)
表示エリア154.08(W)×85.92(H)mm
ディスプレイの寸法186.4mmx105.5mm
全体寸法186.4mmx105.5mmx17.4mm(標準タイプ)186.4mmx105.5mmx23.8mm(Ethernetポート付)
正味重量300g
ディスプレイ 
バックライトタイプLED製品
輝度300cd/m2(明るさ100段階調整可能)
コントラスト500:1
バックライト寿命300,000時間
視角70°/ 70°/ 50°/ 70°(L / R / U / D)
TFTパネルクラス業界パネル
タッチスクリーン4線式抵抗タッチ/静電容量式タッチ/タッチスクリーンなし
スクリーンモード:デジタル
プロセッサ 
CPU皮質A8
リフレッシュレート1G Hz
最大フレームレート60のFPS
インタフェース 
シリアル・インターフェースRS232 / RS422 / RS485 / TTLレベル
イーサネットインターフェイス10M / 100M(オプション)
無線インターフェースWi-Fi / Bluetooth(オプション)
プロジェクトファイルのダウンロードUSB2.0ポートまたはUストレージディスク
電源 
定格電圧+ 12VDCまたは+ 5V DC
許容電圧範囲+ 7VDC…+ 28VDCまたは+ 5V DC
最大許容されるトランジェント+ 28V
XNUMXつのトランジェント間の時間最小50秒
内部ヒューズ2A自己回復ヒューズ
消費電力3.0 W
周囲条件 
最大許容周囲温度操作ストレージ-20℃~ +70℃-30℃~ +80℃
相対湿度操作ストレージ55℃、85%60℃、90%
衝撃荷重操作ストレージ15g/11ミリ秒25g/6ミリ秒
振動操作ストレージ0.035 mm (10 – 58 Hz)/1 g (58 – 500 Hz)3.5 mm (5 – 8,5 Hz)/1 g (8.5 – 500 Hz)
気圧操作ストレージ706 ~ 1030 hPa581 ~ 1030 hPa
ノイズ耐性 
静電気放電(接触放電・気中放電)EN 61000-4-2 6 kV / 8 kV
RF照射EN 61000-4-310 V/m、80% AM1 kHz
パルス変調ENV 50204900 MHz ±5 MHz10 V/meff.、50% ED、200 Hz
RF伝導EN 61000-4-6150 kHz – 80 MHz10 V、80% AM、1 kHz
バースト干渉供給ラインプロセスデータライン信号ラインEN 61000-4-42kV2kV1kV
サポート機器 
UARTポートサポートRS232 / RS422 / RS485 / TTL
ネットワークポートサポートイーサネットポート/Wi-Fi/Bluetooth
フラッシュメモリーサポート標準 256MB、拡張 1GB または 2GB
ブザーサポート
RTCサポート
USBポートサポートUSBケーブルによるオンラインダウンロード
Uストレージディスクインターフェイスサポート。ユーザー データのオフライン ダウンロードまたはコピー
タッチスクリーン4線抵抗/容量性
ベクトルフォント標準TTFフォーマット
画像PNG / JPG / BMP / SVG / GIF形式をサポート
音声インターフェースWAV 形式をサポート単一のオーディオ ファイルの長さに制限はなく、理論的には最大 4096 オーディオ ファイル、スピーカー出力は 8 オーム 2 ワットまたは 4 オーム 3 ワットです
コマンドセット統一された簡略化されたコマンドセット
メモリ 
フラッシュメモリー標準256MB、拡張1GBまたは2GB
画像のメモリ量画像の機能に応じて、「PNG、BMP、JPG、SVG、GIF」形式を提案します。

(B)STM32ボード

STM32ボードを使用すると、STM32のチップはCKS32F303になります。

STONE TFT LCD と STM32 IOT PlatoBlockchain Data Intelligence に基づく三目並べゲーム。 垂直検索。 あい。

ARM Cortex-M32、M0 +、M0、M3、およびM4コアのSTM7ファミリは、高性能、低コスト、低消費電力を必要とする組み込みアプリケーション向けに設計されています。

  • 2.0V-3.6V電源
  • 5V互換I / Oピン
  • 優れた安全時計モード
  • ウェイクアップ機能付き低電力モード
  • 内部RC発振器
  • 組み込みリセット回路
  • 動作温度範囲。
  • -40°C〜 + 85°Cまたは105°C

システムソフトウェアの設計

STM32およびSTONELCDディスプレイの開発プロセス

1: プロジェクトを作成し、必要な画像をプロジェクトにロードします。

2: Stone-designerソフトウェアを使用して、動的に関連付けられた関係を作成します。 主なコントロールは次のとおりです。「ボタン」、「画像」。

3: 実行可能ファイルを生成するためのソフトウェアシミュレーションとコンパイル。

4: LCDディスプレイはUSB経由でPCに接続され、実行可能ファイルを画面にコピーします。

まず、以下に示すように新しいプロジェクトを作成します。

STONE TFT LCD と STM32 IOT PlatoBlockchain Data Intelligence に基づく三目並べゲーム。 垂直検索。 あい。
STONE TFT LCD と STM32 IOT PlatoBlockchain Data Intelligence に基づく三目並べゲーム。 垂直検索。 あい。

次に、すべての画像をリソースにインポートします

STONE TFT LCD と STM32 IOT PlatoBlockchain Data Intelligence に基づく三目並べゲーム。 垂直検索。 あい。

次に、ボタンコントロールを各グリッドに設定し、ボタンを非表示にします。 

STONE TFT LCD と STM32 IOT PlatoBlockchain Data Intelligence に基づく三目並べゲーム。 垂直検索。 あい。

リセットボタンを設定することを忘れないでください!

完成した効果を以下に示します。

STONE TFT LCD と STM32 IOT PlatoBlockchain Data Intelligence に基づく三目並べゲーム。 垂直検索。 あい。

その後、同じ方法で各グリッドに画像コントロールを追加し、それらをすべて白い画像に設定します。

最後に、gifコントロールを追加し、非表示に設定します。

完成した効果の部分を以下に示します。

STONE TFT LCD と STM32 IOT PlatoBlockchain Data Intelligence に基づく三目並べゲーム。 垂直検索。 あい。
STONE TFT LCD と STM32 IOT PlatoBlockchain Data Intelligence に基づく三目並べゲーム。 垂直検索。 あい。
STONE TFT LCD と STM32 IOT PlatoBlockchain Data Intelligence に基づく三目並べゲーム。 垂直検索。 あい。
STONE TFT LCD と STM32 IOT PlatoBlockchain Data Intelligence に基づく三目並べゲーム。 垂直検索。 あい。

回路接続図

STONE TFT LCD と STM32 IOT PlatoBlockchain Data Intelligence に基づく三目並べゲーム。 垂直検索。 あい。

コードシェア

/ *含まれるもの——————————————————————— * / 

#include“ stm32f0xx_hal.h” 

#include“ Uart.h” 

#include“ string.h” 

#include“ ws2812.h” 

#include“ IWDG.h” 

RGB_COLOR ユーザー_RGB_COLOR; 

unsigned char TX_Mode = 1; //送信タイプフラグビット1:232 0:TTL 

unsigned char BLINK_2 = 0; 

unsigned char RX3_BUF [32]; //カスタマイズされたXNUMXレベルの受信バッファ 

#ボタン1 0x81を定義します 

#ボタン2 0x82を定義します 

#ボタン3 0x83を定義します 

#ボタン4 0x84を定義します 

#ボタン5 0x85を定義します 

#ボタン6 0x86を定義します 

#ボタン7 0x87を定義します 

#ボタン8 0x88を定義します 

#ボタン9 0x89を定義します 

#define ボタン0 0x8A 

#define CLEAR 0x8E 

unsigned int r_flag1 = 0; 

unsigned int quan [4] [2] = {0}; 

unsigned int cha [4] [2] = {0}; 

unsigned int quan_hang1 = 0; 

unsigned int quan_hang2 = 0; 

unsigned int quan_hang3 = 0; 

unsigned int quan_lie1 = 0; 

unsigned int quan_lie2 = 0; 

unsigned int quan_lie3 = 0; 

unsigned int quan_zuoxia = 0; 

unsigned int quan_youxia = 0; 

unsigned int cha_hang1 = 0; 

unsigned int cha_hang2 = 0; 

unsigned int cha_hang3 = 0; 

unsigned int cha_lie1 = 0; 

unsigned int cha_lie2 = 0; 

unsigned int cha_lie3 = 0; 

unsigned int cha_zuoxia = 0; 

unsigned int cha_youxia = 0; // unsigned int r_flag10 = 0; 

void SystemClock_Config(void); 

void Error_Handler(void); 

static void MX_GPIO_Init(void); 

int main(void) 

uint8_t color_buf = 0; 

//機能の選択 

/ *すべての周辺機器をリセットし、フラッシュインターフェイスとSystickを初期化します。 * / 

HAL_Init(); 

/ *システムクロックを設定します* / 

SystemClock_Config(); 

/ *設定されているすべての周辺機器を初期化します* / 

MX_GPIO_Init(); 

TX_Mode = HAL_GPIO_ReadPin(GPIOA、GPIO_PIN_4); 

if(TX_Mode) 

MX_USART1_UART_Init(); 

// 232初期化 

ほかに 

MX_USART1_UART_Init2(); 

// TTl初期化 

ながら(1) 

if(TX_Mode!= HAL_GPIO_ReadPin(GPIOA、GPIO_PIN_4)) 

HAL_NVIC_SystemReset(); 

//ジャンパーの反転、再起動、再初期化 

if(MNG_USART1.RX_OVER_FLG == TRUE) 

// 

シリアルデータ受信フラグビット 

RX3_BUF [0] = MNG_USART1.RX_BUF [7]; 

//方法2:固定長のコントロール名を取得する 

RX3_BUF [1] = MNG_USART1.RX_BUF [8]; 

RX3_BUF [2] = MNG_USART1.RX_BUF [9]; 

RX3_BUF [3] = MNG_USART1.RX_BUF [10]; 

RX3_BUF [4] = MNG_USART1.RX_BUF [11]; 

RX3_BUF [5] = MNG_USART1.RX_BUF [12]; 

RX3_BUF [6] = MNG_USART1.RX_BUF [13]; 

// RX3_BUF [7] = MNG_USART1.RX_BUF [14]; 

if((strcmp(“ button1”、(const char *)RX3_BUF))== 0) 

//コントロールを選択

color_buf = ボタン 1; 

}

if((strcmp(“ button2”、(const char *)RX3_BUF))== 0) 

color_buf = ボタン 2; 

}

if((strcmp(“ button3”、(const char *)RX3_BUF))== 0) 

color_buf = ボタン 3; 

}

if((strcmp(“ button4”、(const char *)RX3_BUF))== 0) 

color_buf = ボタン 4; 

}

if((strcmp(“ button5”、(const char *)RX3_BUF))== 0) 

color_buf = ボタン 5; 

}

if((strcmp(“ button6”、(const char *)RX3_BUF))== 0) 

color_buf = ボタン 6; 

}

if((strcmp(“ button7”、(const char *)RX3_BUF))== 0) 

color_buf = ボタン 7; 

}

if((strcmp(“ button8”、(const char *)RX3_BUF))== 0) 

color_buf = ボタン 8; 

}

if((strcmp(“ button9”、(const char *)RX3_BUF))== 0) 

color_buf = ボタン 9; 

}

if((strcmp(“ button0”、(const char *)RX3_BUF))== 0) 

color_buf = ボタン 0; 

}

スイッチ(color_buf) 

ケースボタン1: 

// if(r_flag1 == 0) 

if((r_flag1 == 0)&&(MNG_USART1.RX_BUF [14] == 0x02)) 

memset(MNG_USART1.TX_BUF、0、USART1_TX_LEN); 

r_flag1 ^ = 1; 

sprintf((char *)MNG_USART1.TX_BUF、 

“ ST <{\” cmd_code \”:\” set_image \”、\” type \”:\” image \”、\” widget \”:\” image2 \”、\” image \”:\” circle \ ”}> ET”); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data(MNG_USART1); 

r_flag1 ^ = 1; 

quan_hang1 ++; 

quan_lie1 ++; 

quan_youxia ++;  

// memset(RX3_BUF、0,7); 

//memset(MNG_USART1.RX_BUF,0,USART1_RX_LEN); 

color_buf = クリア; 

}

else if((r_flag1 == 1)&&(MNG_USART1.RX_BUF [14] == 0x02)) 

memset(MNG_USART1.TX_BUF、0、USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF、 

“ ST <{\” cmd_code \”:\” set_image \”、\” type \”:\” image \”、\” widget \”:\” image2 \”、\” image \”:\” x \ ”}> ET”); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data(MNG_USART1); 

r_flag1 = 0; 

cha_hang1 ++; 

cha_lie1 ++; 

cha_youxia ++; 

// memset(RX3_BUF、0,7); 

color_buf = クリア; 

}

// r_flag1 = 1; 

破る; 

ケースボタン2: 

if((r_flag1 == 0)&&(MNG_USART1.RX_BUF [14] == 0x02)) 

memset(MNG_USART1.TX_BUF、0、USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF、 

“ ST <{\” cmd_code \”:\” set_image \”、\” type \”:\” image \”、\” widget \”:\” image3 \”、\” image \”:\” circle \ ”}> ET”); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data(MNG_USART1); 

r_flag1 = 1; 

quan_hang1 ++; 

quan_lie2 ++; 

// memset(RX3_BUF、0,7); 

color_buf = クリア; 

}

else if((r_flag1 == 1)&&(MNG_USART1.RX_BUF [14] == 0x02)) 

memset(MNG_USART1.TX_BUF、0、USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF、 

“ ST <{\” cmd_code \”:\” set_image \”、\” type \”:\” image \”、\” widget \”:\” image3 \”、\” image \”:\” x \ ”}> ET”); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data(MNG_USART1); 

r_flag1 = 0; 

cha_hang1 ++; 

cha_lie2 ++; 

// memset(RX3_BUF、0,7); 

color_buf = クリア; 

}

破る; 

ケースボタン3: 

if((r_flag1 == 0)&&(MNG_USART1.RX_BUF [14] == 0x02)) 

memset(MNG_USART1.TX_BUF、0、USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF、 

“ ST <{\” cmd_code \”:\” set_image \”、\” type \”:\” image \”、\” widget \”:\” image4 \”、\” image \”:\” circle \ ”}> ET”); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data(MNG_USART1); 

r_flag1 = 1; 

quan_hang1 ++; 

quan_lie3 ++; 

quan_zuoxia ++; 

// memset(RX3_BUF、0,7); 

color_buf = クリア; 

}

else if((r_flag1 == 1)&&(MNG_USART1.RX_BUF [14] == 0x02)) 

memset(MNG_USART1.TX_BUF、0、USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF、 

“ ST <{\” cmd_code \”:\” set_image \”、\” type \”:\” image \”、\” widget \”:\” image4 \”、\” image \”:\” x \ ”}> ET”); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data(MNG_USART1); 

r_flag1 = 0; 

cha_hang1 ++; 

cha_lie3 ++; 

cha_zuoxia ++; 

// memset(RX3_BUF、0,7); 

color_buf = クリア; 

}

破る; 

ケースボタン4: 

if((r_flag1 == 0)&&(MNG_USART1.RX_BUF [14] == 0x02)) 

memset(MNG_USART1.TX_BUF、0、USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF、 

“ ST <{\” cmd_code \”:\” set_image \”、\” type \”:\” image \”、\” widget \”:\” image5 \”、\” image \”:\” circle \ ”}> ET”); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data(MNG_USART1); 

r_flag1 = 1; 

quan_hang2 ++; 

quan_lie1 ++; 

// memset(RX3_BUF、0,7); 

// r_flag10 = 1; 

color_buf = クリア; 

}

else if((r_flag1 == 1)&&(MNG_USART1.RX_BUF [14] == 0x02)) 

memset(MNG_USART1.TX_BUF、0、USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF、 

“ ST <{\” cmd_code \”:\” set_image \”、\” type \”:\” image \”、\” widget \”:\” image5 \”、\” image \”:\” x \ ”}> ET”); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data(MNG_USART1); 

r_flag1 = 0; 

cha_hang2 ++; 

cha_lie1 ++; 

// memset(RX3_BUF、0,7); 

color_buf = クリア; 

}

破る; 

ケースボタン5: 

if((r_flag1 == 0)&&(MNG_USART1.RX_BUF [14] == 0x02)) 

memset(MNG_USART1.TX_BUF、0、USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF、 

“ ST <{\” cmd_code \”:\” set_image \”、\” type \”:\” image \”、\” widget \”:\” image6 \”、\” image \”:\” circle \ ”}> ET”); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data(MNG_USART1); 

r_flag1 = 1; 

quan_hang2 ++; 

quan_lie2 ++; 

quan_zuoxia ++; 

quan_youxia ++; 

// memset(RX3_BUF、0,7); 

color_buf = クリア; 

}

else if((r_flag1 == 1)&&(MNG_USART1.RX_BUF [14] == 0x02)) 

memset(MNG_USART1.TX_BUF、0、USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF、 

“ ST <{\” cmd_code \”:\” set_image \”、\” type \”:\” image \”、\” widget \”:\” image6 \”、\” image \”:\” x \ ”}> ET”); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data(MNG_USART1); 

r_flag1 = 0; 

cha_hang2 ++; 

cha_lie2 ++; 

cha_zuoxia ++; 

cha_youxia ++; 

// memset(RX3_BUF、0,7); 

color_buf = クリア; 

}

破る; 

ケースボタン6: 

if((r_flag1 == 0)&&(MNG_USART1.RX_BUF [14] == 0x02)) 

memset(MNG_USART1.TX_BUF、0、USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF、 

“ ST <{\” cmd_code \”:\” set_image \”、\” type \”:\” image \”、\” widget \”:\” image7 \”、\” image \”:\” circle \ ”}> ET”); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data(MNG_USART1); 

r_flag1 = 1; 

quan_hang2 ++; 

quan_lie3 ++; 

// memset(RX3_BUF、0,7); 

color_buf = クリア; 

}

else if((r_flag1 == 1)&&(MNG_USART1.RX_BUF [14] == 0x02))

memset(MNG_USART1.TX_BUF、0、USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF、 

“ ST <{\” cmd_code \”:\” set_image \”、\” type \”:\” image \”、\” widget \”:\” image7 \”、\” image \”:\” x \ ”}> ET”); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data(MNG_USART1); 

r_flag1 = 0; 

cha_hang2 ++; 

cha_lie3 ++; 

// memset(RX3_BUF、0,7); 

color_buf = クリア; 

}

破る; 

ケースボタン7: 

if((r_flag1 == 0)&&(MNG_USART1.RX_BUF [14] == 0x02)) 

memset(MNG_USART1.TX_BUF、0、USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF、 

“ ST <{\” cmd_code \”:\” set_image \”、\” type \”:\” image \”、\” widget \”:\” image8 \”、\” image \”:\” circle \ ”}> ET”); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data(MNG_USART1); 

r_flag1 = 1; 

quan_hang3 ++; 

quan_lie1 ++; 

quan_zuoxia ++; 

// memset(RX3_BUF、0,7); 

color_buf = クリア; 

}

else if((r_flag1 == 1)&&(MNG_USART1.RX_BUF [14] == 0x02)) 

memset(MNG_USART1.TX_BUF、0、USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF、 

“ ST <{\” cmd_code \”:\” set_image \”、\” type \”:\” image \”、\” widget \”:\” image8 \”、\” image \”:\” x \ ”}> ET”); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data(MNG_USART1); 

r_flag1 = 0; 

cha_hang3 ++; 

cha_lie1 ++; 

cha_zuoxia ++; 

// memset(RX3_BUF、0,7); 

color_buf = クリア; 

}

破る; 

ケースボタン8: 

if((r_flag1 == 0)&&(MNG_USART1.RX_BUF [14] == 0x02)) 

memset(MNG_USART1.TX_BUF、0、USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF、 

“ ST <{\” cmd_code \”:\” set_image \”、\” type \”:\” image \”、\” widget \”:\” image9 \”、\” image \”:\” circle \ ”}> ET”); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data(MNG_USART1); 

r_flag1 = 1; 

quan_hang3 ++; 

quan_lie2 ++; 

// memset(RX3_BUF、0,7); 

color_buf = クリア; 

}

else if((r_flag1 == 1)&&(MNG_USART1.RX_BUF [14] == 0x02)) 

memset(MNG_USART1.TX_BUF、0、USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF、 

“ ST <{\” cmd_code \”:\” set_image \”、\” type \”:\” image \”、\” widget \”:\” image9 \”、\” image \”:\” x \ ”}> ET”); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data(MNG_USART1); 

r_flag1 = 0; 

cha_hang3 ++; 

cha_lie2 ++; 

// memset(RX3_BUF、0,7); 

color_buf = クリア; 

}

破る; 

ケースボタン9: 

if((r_flag1 == 0)&&(MNG_USART1.RX_BUF [14] == 0x02)) 

memset(MNG_USART1.TX_BUF、0、USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF、 

“ ST <{\” cmd_code \”:\” set_image \”、\” type \”:\” image \”、\” widget \”:\” image10 \”、\” image \”:\” circle \ ”}> ET”);

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data(MNG_USART1); 

r_flag1 = 1; 

quan_hang3 ++; 

quan_lie3 ++; 

quan_youxia ++; 

// memset(RX3_BUF、0,7); 

color_buf = クリア; 

}

else if((r_flag1 == 1)&&(MNG_USART1.RX_BUF [14] == 0x02)) 

memset(MNG_USART1.TX_BUF、0、USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF、 

“ ST <{\” cmd_code \”:\” set_image \”、\” type \”:\” image \”、\” widget \”:\” image10 \”、\” image \”:\” x \ ”}> ET”); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data(MNG_USART1); 

r_flag1 = 0; 

cha_hang3 ++; 

cha_lie3 ++; 

cha_youxia ++; 

// memset(RX3_BUF、0,7); 

color_buf = クリア; 

}

破る; 

ケースボタン0: 

r_flag1 = 0; 

quan_hang1=quan_hang2=quan_hang3=cha_hang1=cha_hang2=cha_hang3=0; 

quan_lie1=quan_lie2=quan_lie3=cha_lie1=cha_lie2=cha_lie3=0; 

quan_zuoxia = quan_youxia = cha_zuoxia = cha_youxia = 0; 

memset(MNG_USART1.TX_BUF、0、USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF、 

“ ST <{\” cmd_code \”:\” set_image \”、\” type \”:\” image \”、\” widget \”:\” image2 \”、\” image \”:\” bai \ ”}> ET”); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data(MNG_USART1); 

memset(MNG_USART1.TX_BUF、0、USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF、 

“ ST <{\” cmd_code \”:\” set_image \”、\” type \”:\” image \”、\” widget \”:\” image3 \”、\” image \”:\” bai \ ”}> ET”); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data(MNG_USART1); 

memset(MNG_USART1.TX_BUF、0、USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF、 

“ ST <{\” cmd_code \”:\” set_image \”、\” type \”:\” image \”、\” widget \”:\” image4 \”、\” image \”:\” bai \ ”}> ET”); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data(MNG_USART1); 

memset(MNG_USART1.TX_BUF、0、USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF、 

“ ST <{\” cmd_code \”:\” set_image \”、\” type \”:\” image \”、\” widget \”:\” image5 \”、\” image \”:\” bai \ ”}> ET”); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data(MNG_USART1); 

memset(MNG_USART1.TX_BUF、0、USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF、 

“ ST <{\” cmd_code \”:\” set_image \”、\” type \”:\” image \”、\” widget \”:\” image6 \”、\” image \”:\” bai \ ”}> ET”); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data(MNG_USART1); 

memset(MNG_USART1.TX_BUF、0、USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF、 

“ ST <{\” cmd_code \”:\” set_image \”、\” type \”:\” image \”、\” widget \”:\” image7 \”、\” image \”:\” bai \ ”}> ET”); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data(MNG_USART1); 

memset(MNG_USART1.TX_BUF、0、USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF、 

“ ST <{\” cmd_code \”:\” set_image \”、\” type \”:\” image \”、\” widget \”:\” image8 \”、\” image \”:\” bai \ ”}> ET”); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data(MNG_USART1); 

memset(MNG_USART1.TX_BUF、0、USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF、 

“ ST <{\” cmd_code \”:\” set_image \”、\” type \”:\” image \”、\” widget \”:\” image9 \”、\” image \”:\” bai \ ”}> ET”); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data(MNG_USART1);

memset(MNG_USART1.TX_BUF、0、USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF、 

“ ST <{\” cmd_code \”:\” set_image \”、\” type \”:\” image \”、\” widget \”:\” image10 \”、\” image \”:\” bai \ ”}> ET”); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data(MNG_USART1); 

memset(MNG_USART1.TX_BUF、0、USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF、 

“ ST <{\” cmd_code \”:\” set_visible \”、\” type \”:\” widget \”、\” widget \”:\” gif4 \”、\” visible \”:false}> ET ”); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data(MNG_USART1); 

memset(MNG_USART1.TX_BUF、0、USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF、 

“ ST <{\” cmd_code \”:\” set_visible \”、\” type \”:\” widget \”、\” widget \”:\” gif5 \”、\” visible \”:false}> ET ”); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data(MNG_USART1); 

memset(MNG_USART1.TX_BUF、0、USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF、 

“ ST <{\” cmd_code \”:\” set_visible \”、\” type \”:\” widget \”、\” widget \”:\” gif6 \”、\” visible \”:false}> ET ”); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data(MNG_USART1); 

memset(MNG_USART1.TX_BUF、0、USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF、 

“ ST <{\” cmd_code \”:\” set_visible \”、\” type \”:\” widget \”、\” widget \”:\” gif7 \”、\” visible \”:false}> ET ”); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data(MNG_USART1); 

memset(MNG_USART1.TX_BUF、0、USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF、 

“ ST <{\” cmd_code \”:\” set_visible \”、\” type \”:\” widget \”、\” widget \”:\” gif8 \”、\” visible \”:false}> ET ”); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data(MNG_USART1); 

memset(MNG_USART1.TX_BUF、0、USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF、 

“ ST <{\” cmd_code \”:\” set_visible \”、\” type \”:\” widget \”、\” widget \”:\” gif9 \”、\” visible \”:false}> ET ”); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data(MNG_USART1); 

memset(MNG_USART1.TX_BUF、0、USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF、 

“ ST <{\” cmd_code \”:\” set_visible \”、\” type \”:\” widget \”、\” widget \”:\” gif10 \”、\” visible \”:false}> ET ”); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data(MNG_USART1); 

memset(MNG_USART1.TX_BUF、0、USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF、 

“ ST <{\” cmd_code \”:\” set_visible \”、\” type \”:\” widget \”、\” widget \”:\” gif11 \”、\” visible \”:false}> ET ”); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data(MNG_USART1); 

// memset(RX3_BUF、0,7); 

memset(MNG_USART1.RX_BUF、0、USART1_RX_LEN); 

破る; 

デフォルト: 

MNG_USART1.RX_OVER_FLG = FALSE; 

破る; 

}

//////////////////////////////////////////////// ////////////////// 

if((quan_hang1 == 3)||(cha_hang1 == 3)) 

memset(MNG_USART1.TX_BUF、0、USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF、 

“ ST <{\” cmd_code \”:\” set_visible \”、\” type \”:\” widget \”、\” widget \”:\” gif4 \”、\” visible \”:true}> ET ”); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data(MNG_USART1); 

quan_hang1=quan_hang2=quan_hang3=cha_hang1=cha_hang2=cha_hang3=0; 

quan_lie1=quan_lie2=quan_lie3=cha_lie1=cha_lie2=cha_lie3=0; 

quan_zuoxia = quan_youxia = cha_zuoxia = cha_youxia = 0; 

}

else if((quan_hang2 == 3)||(cha_hang2 == 3)) 

memset(MNG_USART1.TX_BUF、0、USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF、 

“ ST <{\” cmd_code \”:\” set_visible \”、\” type \”:\” widget \”、\” widget \”:\” gif5 \”、\” visible \”:true}> ET ”);

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data(MNG_USART1); 

quan_hang1=quan_hang2=quan_hang3=cha_hang1=cha_hang2=cha_hang3=0; 

quan_lie1=quan_lie2=quan_lie3=cha_lie1=cha_lie2=cha_lie3=0; 

quan_zuoxia = quan_youxia = cha_zuoxia = cha_youxia = 0; 

}

else if((quan_hang3 == 3)||(cha_hang3 == 3)) 

memset(MNG_USART1.TX_BUF、0、USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF、 

“ ST <{\” cmd_code \”:\” set_visible \”、\” type \”:\” widget \”、\” widget \”:\” gif6 \”、\” visible \”:true}> ET ”); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data(MNG_USART1); 

quan_hang1=quan_hang2=quan_hang3=cha_hang1=cha_hang2=cha_hang3=0; 

quan_lie1=quan_lie2=quan_lie3=cha_lie1=cha_lie2=cha_lie3=0; 

quan_zuoxia = quan_youxia = cha_zuoxia = cha_youxia = 0; 

}

else if((quan_lie1 == 3)||(cha_lie1 == 3)) 

memset(MNG_USART1.TX_BUF、0、USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF、 

“ ST <{\” cmd_code \”:\” set_visible \”、\” type \”:\” widget \”、\” widget \”:\” gif7 \”、\” visible \”:true}> ET ”); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data(MNG_USART1); 

quan_hang1=quan_hang2=quan_hang3=cha_hang1=cha_hang2=cha_hang3=0; 

quan_lie1=quan_lie2=quan_lie3=cha_lie1=cha_lie2=cha_lie3=0; 

quan_zuoxia = quan_youxia = cha_zuoxia = cha_youxia = 0; 

}

else if((quan_lie2 == 3)||(cha_lie2 == 3)) 

memset(MNG_USART1.TX_BUF、0、USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF、 

“ ST <{\” cmd_code \”:\” set_visible \”、\” type \”:\” widget \”、\” widget \”:\” gif8 \”、\” visible \”:true}> ET ”); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data(MNG_USART1); 

quan_hang1=quan_hang2=quan_hang3=cha_hang1=cha_hang2=cha_hang3=0; 

quan_lie1=quan_lie2=quan_lie3=cha_lie1=cha_lie2=cha_lie3=0; 

quan_zuoxia = quan_youxia = cha_zuoxia = cha_youxia = 0; 

}

else if((quan_lie3 == 3)||(cha_lie3 == 3)) 

memset(MNG_USART1.TX_BUF、0、USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF、 

“ ST <{\” cmd_code \”:\” set_visible \”、\” type \”:\” widget \”、\” widget \”:\” gif9 \”、\” visible \”:true}> ET ”); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data(MNG_USART1); 

quan_hang1=quan_hang2=quan_hang3=cha_hang1=cha_hang2=cha_hang3=0; 

quan_lie1=quan_lie2=quan_lie3=cha_lie1=cha_lie2=cha_lie3=0; 

quan_zuoxia = quan_youxia = cha_zuoxia = cha_youxia = 0; 

}

else if((quan_zuoxia == 3)||(cha_zuoxia == 3)) 

memset(MNG_USART1.TX_BUF、0、USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF、 

“ ST <{\” cmd_code \”:\” set_visible \”、\” type \”:\” widget \”、\” widget \”:\” gif11 \”、\” visible \”:true}> ET ”); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data(MNG_USART1); 

quan_hang1=quan_hang2=quan_hang3=cha_hang1=cha_hang2=cha_hang3=0; 

quan_lie1=quan_lie2=quan_lie3=cha_lie1=cha_lie2=cha_lie3=0; 

quan_zuoxia = quan_youxia = cha_zuoxia = cha_youxia = 0; 

}

else if((quan_youxia == 3)||(cha_youxia == 3)) 

memset(MNG_USART1.TX_BUF、0、USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF、 

“ ST <{\” cmd_code \”:\” set_visible \”、\” type \”:\” widget \”、\” widget \”:\” gif10 \”、\” visible \”:true}> ET ”); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data(MNG_USART1); 

quan_hang1=quan_hang2=quan_hang3=cha_hang1=cha_hang2=cha_hang3=0; 

quan_lie1=quan_lie2=quan_lie3=cha_lie1=cha_lie2=cha_lie3=0; 

quan_zuoxia = quan_youxia = cha_zuoxia = cha_youxia = 0; 

MNG_USART1.RX_OVER_FLG = FALSE; 

}

/ **システムクロック構成 

*/

void SystemClock_Config(void) 

RCC_OscInitTypeDef RCC_OscInitStruct; 

RCC_ClkInitTypeDef RCC_ClkInitStruct; 

RCC_PeriphCLKInitTypeDef PeriphClkInit; 

RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; 

RCC_OscInitStruct.HSIState = RCC_HSI_ON; 

RCC_OscInitStruct.HSICalibrationValue = 16; 

RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; 

RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; 

RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL12; 

RCC_OscInitStruct.PLL.PREDIV = RCC_PREDIV_DIV1; 

if(HAL_RCC_OscConfig(&RCC_OscInitStruct)!= HAL_OK) 

Error_Handler(); 

}

RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK 

| RCC_CLOCKTYPE_PCLK1; 

RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; 

RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; 

RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; 

if(HAL_RCC_ClockConfig(&RCC_ClkInitStruct、FLASH_LATENCY_1)!= HAL_OK) 

Error_Handler(); 

}

PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1; 

PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK1; 

if(HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit)!= HAL_OK) 

Error_Handler(); 

}

HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/ 1000); 

HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK); 

/ * SysTick_IRQn割り込み設定* / 

HAL_NVIC_SetPriority(SysTick_IRQn、0、0); 

}

/ **ピン配置構成 

*/

static void MX_GPIO_Init(void) 

GPIO_InitTypeDef GPIO_InitStruct; 

/ * GPIOポートクロックイネーブル* / 

__HAL_RCC_GPIOA_CLK_ENABLE(); 

GPIO_InitStruct.Pin = GPIO_PIN_7; 

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; 

GPIO_InitStruct.Pull = GPIO_PULLDOWN; 

GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; 

HAL_GPIO_Init(GPIOA、&GPIO_InitStruct); 

GPIO_InitStruct.Pin = GPIO_PIN_4; 

GPIO_InitStruct.Mode = GPIO_MODE_INPUT; 

GPIO_InitStruct.Pull = GPIO_PULLUP; 

GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; 

HAL_GPIO_Init(GPIOA、&GPIO_InitStruct); 

}

/ *ユーザーコード開始4 * /

/ *ユーザーコード終了4 * / 

/ **

* @briefこの関数は、エラーが発生した場合に実行されます。 

* @ paramなし 

* @ retvalなし 

*/ 

void Error_Handler(void) 

/ *ユーザーコードの開始Error_Handler * / 

/ *ユーザーは独自の実装を追加して、HALエラーの戻り状態を報告できます* / 

ながら(1) 

{

}

/ *ユーザーコード終了Error_Handler * / 

}

#ifdef USE_FULL_ASSERT 

/ **

* @ briefソースファイルの名前とソース行番号を報告します 

* assert_paramエラーが発生した場所。 

* @param file:ソースファイル名へのポインタ 

* @param line:assert_paramエラー行のソース番号 

* @ retvalなし 

*/ 

void assert_failed(uint8_t * file、uint32_t line) 

/ *ユーザーコード開始6 * / 

/ *ユーザーは独自の実装を追加して、ファイル名と行番号を報告できます。 

例:printf( "間違ったパラメータ値:行%dのファイル%s \ r \ n"、ファイル、行)* / 

/ *ユーザーコード終了6 * / 

}

#endif 

/ **

*@} 

*/ 

/ **

*@} 

*/

/ ************************(C)COPYRIGHT STMicroelectronics *****ファイルの終わり**** /

最終結果は

STONE TFT LCD と STM32 IOT PlatoBlockchain Data Intelligence に基づく三目並べゲーム。 垂直検索。 あい。

出典:プラトンデータインテリジェンス