IOT

משחק טיק-טק מבוסס על STONE TFT LCD ו-STM32

<br> סיכום

טיק-טק-בוהן הוא משחק שמשחקים ברשת של 3 על 3, בדומה לגובאנג. הוא מקבל את שמו מכיוון שהלוח בדרך כלל אינו משרטט גבולות וקווי הרשת מסודרים לתוך טיק-טק. הכלים הדרושים למשחק הם נייר ועט בלבד. לאחר מכן, שני שחקנים המייצגים את O ו-X מתחלפים כדי להשאיר סימנים על הרשת. כל שלושה סימנים יוצרים קו ישר, שהוא המנצח.

מאמר זה נועד להשתמש במיקרו-בקר STM32 ובצג STONE LCD כדי לפתח משחק טיק-טק פשוט.

חומרים הדרושים לניסוי

עקרון המערכת

ציין שההקשה הראשונה על המסך חייבת להיות O, ההקשה השנייה על המסך היא X, ביצעה את המחזור הזה. הגדר 8 מערכים לאחסון המספר של O ו-X בכל שורה, עמודה ואלכסון של כל רשת, כל עוד יש שלושה מאותו סימן הוא הניצחון, אז תהיה תיבה אדומה מהבהבת כדי להוכיח את הניצחון של שורה, עמודה או אלכסון, ולאחר מכן הקש על איפוס כדי להתחיל את המשחק שוב.

להלן תרשים הזרימה:

Tic-tac-toe Game Based on STONE TFT LCD and STM32 IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.

עיצוב חומרה של מערכת STM32 ו-STONE LCD Display System

(א) תצוגת LCD של STONE

  1. עיצוב חומרה של "משחק תקלות".

השתמש בתצוגת STONE LCD של Beijing STONE Technology co., Ltd, הדגם הוא STWI070WT-01, עם תצוגת TFT משולבת ובקר מגע.

Tic-tac-toe Game Based on STONE TFT LCD and STM32 IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
  1.  STVC070WT-01 תכונות מוצר
פרמטר פיזי 
מידהאינץ 7
החלטה800 × RGB × 480
מרווח פיקסל0.0642 (W) × 0.1790 (H) מ"מ
צֶבַע262,144 צבעים (18 סיביות)
אזור הצפייה154.08 (W) × 85.92 (H) מ"מ
ממד תצוגה186.4mmx105.5mm
מימד כולל186.4mmx105.5mmx17.4mm (סוג סטנדרטי)186.4mmx105.5mmx23.8mm (עם יציאת Ethernet)
משקל נטו300g
לְהַצִיג 
סוג תאורה אחוריתלד
בְּהִירוּת300cd/m2 (ניתן לכוון את הבהירות ב-100 רמות)
קונטרסט500:1
חיי תאורה אחוריתשעות 300,000
זווית צפייה70 °/70 °/50 °/70 ° (L/R/U/D)
לוח TFTפאנל תעשייתי כיתתי
מסך מגעמגע עם 4 חוטים / מגע קיבולי / ללא מסך מגע
מצב מסך:דִיגִיטָלי
מעבד 
CPUקליפת A8
קצב רענון1G הרץ
קצב פריימים מקסימלי60 FPS
מִמְשָׁק 
ממשק טורירמת RS232 / RS422 / RS485 / TTL
ממשק Ethernet10M/100M (אופציונלי)
ממשק אלחוטיWi-Fi / Bluetooth (אופציונלי)
הורדת קובץ הפרויקטיציאת USB2.0 או דיסק אחסון U
ספק כוח 
מתח מדורג+12V DC או +5V DC
טווח מתח מותר+7V DC...+28V DC או +5V DC
מקסימום ארעיות מותרות+ 28V
זמן בין שני חולפיםמינימום 50 שניות
נתיך פנימינתיך 2A לשחזור עצמי
צריכת חשמל3.0 W
תנאי הסביבה 
מקסימום טמפרטורת סביבה מותרתOperationStorage-20℃~ +70℃-30℃~ +80℃
לחות יחסיתOperationStorage55℃,85%60℃,90%
טעינת הלםOperationStorage15 גרם/11 אלפיות השנייה 25 גרם/6 שניות
רטטOperationStorage0.035 מ"מ (10 - 58 הרץ)/ 1 גרם (58 - 500 הרץ) 3.5 מ"מ (5 - 8,5 הרץ)/ 1 גרם (8.5 - 500 הרץ)
לחץ ברומטריOperationStorage706 עד 1030 hPa581 עד 1030 hPa
חסינות מפני רעש 
פריקה סטטית (פריקת מגע/פריקת אוויר)EN 61000-4-2 6 kV/8 kV
הקרנת RFEN 61000-4-310 V/m, 80% AM1 kHz
אפנון דופקENV 50204900 MHz ±5 MHz10 V/meff., 50% ED, 200 הרץ
הולכה RFEN 61000-4-6150 kHz – 80 MHz10 V, 80% AM, 1 kHz
הפרעות פרץ קווי אספקה ​​קווי נתונים קווי אותEN 61000-4-42kV2kV1kV
מכשיר תמיכה 
נמל UARTתומך בRS232 / RS422 / RS485 / TTL
יציאת רשתתומך ביציאת Ethernet / Wi-Fi / Bluetooth
זכרון פלאשתמיכה סטנדרטי 256MB, הארכה 1GB או 2GB
זַמזָםתמיכה
RTCתמיכה
יציאת USBתמיכה הורדה מקוונת באמצעות כבל USB
U ממשק דיסק אחסוןSupport.Offline הורדה או העתקת נתוני משתמש
מסך מגעהתנגדות 4 חוטים / קיבולית
גופן וקטורפורמט TTF סטנדרטי
תמונהתמיכה בפורמט PNG/JPG/BMP/SVG/GIF
ממשק אודיותמיכה בפורמט WAV האורך של קובץ שמע בודד אינו מוגבל, תיאורטית עד 4096 קבצי שמע, הספק רמקול הוא 8 אוהם 2 וואט או 4 אוהם 3 וואט
שורת פקודהערכות פקודות מפושטות מאוחדות
זכרון 
זכרון פלאש256MB סטנדרטי, הרחבה 1GB או 2GB
כמות זיכרון לתמונהלפי יכולת התמונה, הצע פורמט "PNG, BMP, JPG, SVG, GIF".

(ב) לוח STM32

באמצעות לוח STM32, השבב של STM32 הוא CKS32F303.

Tic-tac-toe Game Based on STONE TFT LCD and STM32 IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.

משפחת STM32 של ליבות ARM Cortex-M0, M0+, M3, M4 ו-M7 מיועדת ליישומים משובצים הדורשים ביצועים גבוהים, עלות נמוכה וצריכת חשמל נמוכה.

  • ספק כוח 2.0V-3.6V
  • פיני קלט/פלט תואמים 5V
  • מצב שעון בטוח מעולה
  • מצב צריכת חשמל נמוכה עם פונקציית השכמה
  • מתנד RC פנימי
  • מעגל איפוס משובץ
  • טווח טמפרטורות הפעלה.
  • -40°C עד +85°C או 105°C

עיצוב תוכנת מערכת

תהליך הפיתוח של תצוגת STM32 ו-STONE LCD

1: צור את הפרויקט וטען את התמונות הנדרשות לפרויקט.

2: להשתמש בתוכנת Stone-designer כדי ליצור קשרים הקשורים באופן דינמי; הפקדים העיקריים הם: "כפתור", "תמונה";

3: הדמיית תוכנה והידור ליצירת קבצי הפעלה.

4: תצוגת ה-LCD מחוברת למחשב באמצעות USB והעתק את קובץ ההפעלה למסך.

ראשית צור פרויקט חדש כפי שמוצג להלן.

Tic-tac-toe Game Based on STONE TFT LCD and STM32 IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
Tic-tac-toe Game Based on STONE TFT LCD and STM32 IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.

שנית, ייבא את כל התמונות למשאב

Tic-tac-toe Game Based on STONE TFT LCD and STM32 IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.

לאחר מכן, הגדר את פקדי הכפתורים לכל רשת והפוך את הכפתורים לבלתי נראים. 

Tic-tac-toe Game Based on STONE TFT LCD and STM32 IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.

אל תשכח להגדיר את כפתור האיפוס!

האפקט המוגמר מוצג להלן:

Tic-tac-toe Game Based on STONE TFT LCD and STM32 IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.

לאחר מכן, הוסף פקדי תמונה לכל רשת באותו אופן, והגדר את כולם לתמונות לבנות.

לבסוף הוסף את פקד ה-GIF והגדר אותו לבלתי נראה.

החלקים של האפקט המוגמר מוצגים להלן:

Tic-tac-toe Game Based on STONE TFT LCD and STM32 IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
Tic-tac-toe Game Based on STONE TFT LCD and STM32 IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
Tic-tac-toe Game Based on STONE TFT LCD and STM32 IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.
Tic-tac-toe Game Based on STONE TFT LCD and STM32 IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.

תרשים חיבור מעגל

Tic-tac-toe Game Based on STONE TFT LCD and STM32 IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.

שיתוף קוד

/* כולל ———————————————————————*/ 

#include "stm32f0xx_hal.h" 

#include "Uart.h" 

#include "string.h" 

#include "ws2812.h" 

#include "IWDG.h" 

RGB_COLOR USER_RGB_COLOR; 

char unsigned TX_Mode = 1; //סיביות דגל מסוג שידור 1:232 0:TTL 

char לא חתום BLINK_2=0; 

char unsigned RX3_BUF[32]; //מאגר קליטה מותאם אישית בשלוש רמות 

#define BUTTON1 0x81 

#define BUTTON2 0x82 

#define BUTTON3 0x83 

#define BUTTON4 0x84 

#define BUTTON5 0x85 

#define BUTTON6 0x86 

#define BUTTON7 0x87 

#define BUTTON8 0x88 

#define BUTTON9 0x89 

#define BUTTON0 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); 

ריק סטטי MX_GPIO_Init(void); 

int main (חלל) 

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 = BUTTON1; 

}

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

color_buf = BUTTON2; 

}

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

color_buf = BUTTON3; 

}

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

color_buf = BUTTON4; 

}

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

color_buf = BUTTON5; 

}

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

color_buf = BUTTON6; 

}

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

color_buf = BUTTON7; 

}

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

color_buf = BUTTON8; 

}

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

color_buf = BUTTON9; 

}

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

color_buf = BUTTON0; 

}

switch (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 = CLEAR; 

}

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 = CLEAR; 

}

//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 = CLEAR; 

}

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 = CLEAR; 

}

לשבור; 

כפתור מקרה 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 = CLEAR; 

}

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 = CLEAR; 

}

לשבור; 

כפתור מקרה 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 = CLEAR; 

}

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 = CLEAR; 

}

לשבור; 

כפתור מקרה 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 = CLEAR; 

}

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 = CLEAR; 

}

לשבור; 

כפתור מקרה 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 = CLEAR; 

}

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 = CLEAR; 

}

לשבור; 

כפתור מקרה 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 = CLEAR; 

}

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 = CLEAR; 

}

לשבור; 

כפתור מקרה 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 = CLEAR; 

}

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 = CLEAR; 

}

לשבור; 

כפתור מקרה 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 = CLEAR; 

}

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 = CLEAR; 

}

לשבור; 

כפתור מקרה 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; 

לשבור; 

}

//</em></ul></ul><ul> <li> //</em></em> 

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); 

}

/** תצורת Pinout 

*/

ריק סטטי MX_GPIO_Init(void) 

GPIO_InitTypeDef GPIO_InitStruct; 

/* יציאות GPIO Clock Enable */ 

__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 */

/* קוד משתמש END 4 */ 

/ **

* @brief פונקציה זו מבוצעת במקרה של התרחשות שגיאה. 

* @param אין 

* @retval אין 

*/ 

void Error_Handler(void) 

/* קוד משתמש BEGIN Error_Handler */ 

/* המשתמש יכול להוסיף יישום משלו כדי לדווח על מצב החזרת שגיאת HAL */ 

בזמן (1) 

{

}

/* USER CODE END Error_Handler */ 

}

#ifdef USE_FULL_ASSERT 

/ **

* @brief מדווח על שם קובץ המקור ומספר שורת המקור 

* שבו התרחשה שגיאת assert_param. 

* קובץ @param: מצביע לשם קובץ המקור 

* שורת @param: מספר מקור שורת שגיאה assert_param 

* @retval אין 

*/ 

void assert_failed(קובץ uint8_t*, שורה uint32_t) 

/* קוד משתמש התחלה 6 */ 

/* המשתמש יכול להוסיף יישום משלו כדי לדווח על שם הקובץ ומספר השורה, 

למשל: printf("ערך פרמטרים שגויים: קובץ %s בשורה %d\r\n", קובץ, שורה) */ 

/* קוד משתמש END 6 */ 

}

#endif 

/ **

*@} 

*/ 

/ **

*@} 

*/

/************************* (ג) זכויות יוצרים STMicroelectronics *****סוף הקובץ****/

התוצאות הסופיות מראות

Tic-tac-toe Game Based on STONE TFT LCD and STM32 IOT PlatoBlockchain Data Intelligence. Vertical Search. Ai.

מקור: מודיעין נתונים אפלטון