IOT

Tic-tac-toe-spel Baserat på STONE TFT LCD och STM32

Sammanfattning

Tic-tac-toe är ett spel som spelas på ett 3 x 3-rutnät, liknande gobang. Det har fått sitt namn eftersom brädet i allmänhet inte ritar gränser och rutnätslinjerna är ordnade i tic-tac-toe. Verktygen som behövs för spelet är endast papper och penna. Sedan turas två spelare som representerar O och X om att lämna märken på rutnätet. Alla tre markeringar bildar en rak linje, vilket är vinnaren.

Denna artikel är att använda mikrokontroller STM32 och STONE LCD-skärm för att utveckla ett enkelt tic-tac-toe-spel.

Material som krävs för experimentet

Systemprincipen

Ange att det första trycket på skärmen måste vara O, det andra trycket på skärmen är X, har gjort den här cykeln. Ställ in 8 arrayer för att lagra antalet O och X i varje rad, kolumn och diagonal i varje rutnät, så länge det finns tre av samma märke är segern, då kommer det att finnas en blinkande röd ruta för att bevisa segern för rad, kolumn eller diagonal och tryck sedan på återställ för att starta spelet igen.

Följande är flödesschemat:

Tic-tac-toe-spel Baserat på STONE TFT LCD och STM32 IOT PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

STM32 och STONE LCD Display System hårdvarudesign

(A) STONE LCD-display

  1. "Tic-tac-toe-spel" hårdvarudesign

Använd STONE LCD-skärm från Beijing STONE Technology co., ltd, modellen är STWI070WT-01, med en integrerad TFT-skärm och pekkontroll.

Tic-tac-toe-spel Baserat på STONE TFT LCD och STM32 IOT PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.
  1.  STVC070WT-01 Produktfunktioner
Fysisk parameter 
Storlek7 tum
Upplösning800 × RGB × 480
Pixelavstånd0.0642 (B) × 0.1790 (H) mm
Färg262,144 färger (18 bitar)
Visningsområde154.08 (B) × 85.92 (H) mm
Displayens mått186.4mmx105.5mm
Övergripande dimensionen186.4 mm x 105.5 mm x 17.4 mm (standardtyp) 186.4 mm x 105.5 mm x 23.8 mm (med Ethernet-port)
Nettovikt300g
Visa 
Typ av bakgrundsbelysningLED
Ljushet300cd/m2 (Ljusstyrkan kan justeras i 100 nivåer)
Däremot500:1
Bakgrundsbelysningslivet300,000 timmar
Betraktningsvinkel70°/70°/50°/70°(L/R/U/D)
TFT-panelEn klass industripanel
Touch Screen4-trådsmotstånd Touch / Kapacitiv Touch / Utan pekskärm
Skärmläge:Digital
Processorn 
CPUCortex A8
Uppdateringsfrekvens1G Hz
Max bildhastighet60 FPS
Gränssnitt 
Seriellt gränssnittRS232 / RS422 / RS485 / TTL nivå
Ethernet-gränssnitt10M/100M (valfritt)
Trådlöst gränssnittWi-Fi / Bluetooth (valfritt)
Ladda ner projektfilUSB2.0-port eller U-lagringsskiva
Strömförsörjning 
Märkspänning+12V DC eller +5V DC
Tillåtet spänningsområde+7V DC...+28V DC eller +5V DC
Max. tillåtna transienter+ 28V
Tid mellan två transienterMinst 50 sek
Intern säkring2A självåterställningssäkring
Energianvändning3.0 W
Omgivande förhållanden 
Max. tillåten omgivningstemperaturOperationStorage-20℃~ +70℃-30℃~ +80℃
Relativ fuktighetOperationStorage55℃,85%60℃,90%
ChockladdningOperationStorage15 g/11 ms25 g/6 ms
vibrationOperationStorage0.035 mm (10 – 58 Hz)/ 1 g (58 – 500 Hz)3.5 mm (5 – 8,5 Hz)/ 1 g (8.5 – 500 Hz)
BarometertryckOperationStorage706 till 1030 hPa581 till 1030 hPa
Bullerimmunitet 
Statisk urladdning (kontakturladdning/lufturladdning)EN 61000-4-2 6 kV/8 kV
RF-bestrålningEN 61000-4-310 V/m, 80 % AM1 kHz
PulsmoduleringENV 50204900 MHz ±5 MHz10 V/meff., 50 % ED, 200 Hz
RF-ledningEN 61000-4-6150 kHz – 80 MHz10 V, 80 % AM, 1 kHz
BurstinterferensFörsörjningsledningar ProcessdatalinjerSignallinjerEN 61000-4-42kV2kV1kV
Supportenhet 
UART-portStöd RS232 / RS422 / RS485 / TTL
NätverksportStöd Ethernet-port / Wi-Fi / Bluetooth
FlashminneSupportStandard 256MB, förläng 1GB eller 2GB
SummerSupport
RTCSupport
USB-portSupport Onlinenedladdning via USB-kabel
U Gränssnitt för lagringsdiskSupport.Offline Ladda ner eller kopiera användardata
Touch Screen4 tråd motstånd / kapacitiv
Vector teckensnittStandard TTF-format
BildStöd PNG/JPG/BMP/SVG/GIF-format
LjudgränssnittStöd WAV-formatLängden på en enda ljudfil är inte begränsad, teoretiskt upp till 4096 ljudfiler, högtalareffekten är 8 ohm 2 watt eller 4 ohm 3 watt
KommandosetFörenade förenklade kommandouppsättningar
Minne 
FlashminneStandard 256MB, tillägg 1GB eller 2GB
Minnesmängd för bildFöreslå formatet "PNG, BMP, JPG, SVG, GIF", beroende på bildens kapacitet.

(B) STM32-kort

Med ett STM32-kort är chippet på STM32 CKS32F303.

Tic-tac-toe-spel Baserat på STONE TFT LCD och STM32 IOT PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

STM32-familjen av ARM Cortex-M0, M0+, M3, M4 och M7 kärnor är designade för inbyggda applikationer som kräver hög prestanda, låg kostnad och låg strömförbrukning.

  • 2.0V-3.6V strömförsörjning
  • 5V-kompatibla I/O-stift
  • Utmärkt säkert klockläge
  • Lågeffektläge med väckningsfunktion
  • Intern RC-oscillator
  • Inbäddad återställningskrets
  • Drifttemperaturens omfång.
  • -40°C till +85°C eller 105°C

Design av systemprogramvara

Utvecklingsprocessen för STM32 och STONE LCD-display

1: skapa projektet och ladda in de nödvändiga bilderna i projektet.

2: använda programvaran Stone-designer för att skapa, dynamiskt associerade relationer; huvudkontrollerna är: "Knapp", "bild";

3: mjukvarusimulering och kompilering för att generera körbara filer.

4: LCD-skärmen är ansluten till PC:n via USB och kopiera den körbara filen till skärmen.

Skapa först ett nytt projekt som visas nedan.

Tic-tac-toe-spel Baserat på STONE TFT LCD och STM32 IOT PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.
Tic-tac-toe-spel Baserat på STONE TFT LCD och STM32 IOT PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

För det andra, importera alla bilder till resursen

Tic-tac-toe-spel Baserat på STONE TFT LCD och STM32 IOT PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Ställ sedan in knappkontroller för varje rutnät och gör knapparna osynliga. 

Tic-tac-toe-spel Baserat på STONE TFT LCD och STM32 IOT PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Glöm inte att ställa in återställningsknappen!

Den färdiga effekten visas nedan:

Tic-tac-toe-spel Baserat på STONE TFT LCD och STM32 IOT PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Lägg sedan till bildkontroller till varje rutnät på samma sätt och ställ in alla på vita bilder.

Lägg slutligen till gif-kontrollen och ställ in den på osynlig.

Delarna av färdig effekt visas nedan:

Tic-tac-toe-spel Baserat på STONE TFT LCD och STM32 IOT PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.
Tic-tac-toe-spel Baserat på STONE TFT LCD och STM32 IOT PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.
Tic-tac-toe-spel Baserat på STONE TFT LCD och STM32 IOT PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.
Tic-tac-toe-spel Baserat på STONE TFT LCD och STM32 IOT PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Kretskopplingsschema

Tic-tac-toe-spel Baserat på STONE TFT LCD och STM32 IOT PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Koddelning

/* Inkluderar ——————————————————————*/ 

#include "stm32f0xx_hal.h" 

#include "Uart.h" 

#include "string.h" 

#inkludera "ws2812.h" 

#inkludera "IWDG.h" 

RGB_COLOR USER_RGB_COLOR; 

osignerat tecken TX_Mode = 1; //Sändningstyp flaggbit 1:232 0:TTL 

osignerat tecken BLINK_2=0; 

osignerad char RX3_BUF[32]; //Anpassad mottagningsbuffert i tre nivåer 

#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 

osignerad int r_flag1 = 0; 

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

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

osignerad int quan_hang1 = 0; 

osignerad int quan_hang2 = 0; 

osignerad int quan_hang3 = 0; 

osignerad int quan_lie1 = 0; 

osignerad int quan_lie2 = 0; 

osignerad int quan_lie3 = 0; 

osignerad int quan_zuoxia = 0; 

osignerad int quan_youxia = 0; 

osignerad int cha_hang1 = 0; 

osignerad int cha_hang2 = 0; 

osignerad int cha_hang3 = 0; 

osignerad int cha_lie1 = 0; 

osignerad int cha_lie2 = 0; 

osignerad int cha_lie3 = 0; 

osignerad int cha_zuoxia = 0; 

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

void SystemClock_Config(void); 

void Error_Handler(void); 

statisk void MX_GPIO_Init(void); 

int huvud (tomrum) 

uint8_t color_buf = 0; 

//Funktionsval 

/* Återställning av all kringutrustning, Initierar Flash-gränssnittet och Systick. */ 

HAL_Init(); 

/* Konfigurera systemklockan */ 

SystemClock_Config(); 

/* Initiera alla konfigurerade kringutrustning */ 

MX_GPIO_Init(); 

TX_Mode = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_4); 

if(TX_Mode) 

MX_USART1_UART_Init(); 

//232 Initiering 

annars 

MX_USART1_UART_Init2(); 

//TTl Initiering 

medan (1) 

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

HAL_NVIC_SystemReset(); 

//Reversering av bygel, omstart och återinitiering 

if(MNG_USART1.RX_OVER_FLG ==TRUE) 

// 

Seriella data tar emot flaggbit 

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

//Metod 2:Hämta kontrollnamn med fast längd 

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) 

//Välj kontroll

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) 

fall KNAPP1: 

//if(r_flagga1 == 0) 

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

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

r_flagga1 ^= 1; 

sprintf((char *)MNG_USART1.TX_BUF, 

“ST<{\”cmd_code\”:\”set_bild\”,\”typ\”:\”bild\”,\”widget\”:\”bild2\”,\”bild\”:\”cirkel\ ”}>ET”); 

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

USART_TX_Data(MNG_USART1); 

r_flagga1 ^= 1; 

quan_hang1++; 

quan_lie1++; 

quan_youxia++;  

//memset(RX3_BUF,0,7); 

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

color_buf = CLEAR; 

}

annars 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_bild\”,\”typ\”:\”bild\”,\”widget\”:\”bild2\”,\”bild\”:\”x\ ”}>ET”); 

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

USART_TX_Data(MNG_USART1); 

r_flagga1 = 0; 

cha_hang1++; 

cha_lie1++; 

cha_youxia++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

//r_flagga1 = 1; 

break; 

fall KNAPP2: 

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_bild\”,\”typ\”:\”bild\”,\”widget\”:\”bild3\”,\”bild\”:\”cirkel\ ”}>ET”); 

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

USART_TX_Data(MNG_USART1); 

r_flagga1 = 1; 

quan_hang1++; 

quan_lie2++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

annars 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_bild\”,\”typ\”:\”bild\”,\”widget\”:\”bild3\”,\”bild\”:\”x\ ”}>ET”); 

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

USART_TX_Data(MNG_USART1); 

r_flagga1 = 0; 

cha_hang1++; 

cha_lie2++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

break; 

fall KNAPP3: 

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_bild\”,\”typ\”:\”bild\”,\”widget\”:\”bild4\”,\”bild\”:\”cirkel\ ”}>ET”); 

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

USART_TX_Data(MNG_USART1); 

r_flagga1 = 1; 

quan_hang1++; 

quan_lie3++; 

quan_zuoxia++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

annars 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_bild\”,\”typ\”:\”bild\”,\”widget\”:\”bild4\”,\”bild\”:\”x\ ”}>ET”); 

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

USART_TX_Data(MNG_USART1); 

r_flagga1 = 0; 

cha_hang1++; 

cha_lie3++; 

cha_zuoxia++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

break; 

fall KNAPP4: 

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_bild\”,\”typ\”:\”bild\”,\”widget\”:\”bild5\”,\”bild\”:\”cirkel\ ”}>ET”); 

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

USART_TX_Data(MNG_USART1); 

r_flagga1 = 1; 

quan_hang2++; 

quan_lie1++; 

//memset(RX3_BUF,0,7); 

//r_flagga10=1; 

color_buf = CLEAR; 

}

annars 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_bild\”,\”typ\”:\”bild\”,\”widget\”:\”bild5\”,\”bild\”:\”x\ ”}>ET”); 

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

USART_TX_Data(MNG_USART1); 

r_flagga1 = 0; 

cha_hang2++; 

cha_lie1++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

break; 

fall KNAPP5: 

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_bild\”,\”typ\”:\”bild\”,\”widget\”:\”bild6\”,\”bild\”:\”cirkel\ ”}>ET”); 

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

USART_TX_Data(MNG_USART1); 

r_flagga1 = 1; 

quan_hang2++; 

quan_lie2++; 

quan_zuoxia++; 

quan_youxia++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

annars 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_bild\”,\”typ\”:\”bild\”,\”widget\”:\”bild6\”,\”bild\”:\”x\ ”}>ET”); 

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

USART_TX_Data(MNG_USART1); 

r_flagga1 = 0; 

cha_hang2++; 

cha_lie2++; 

cha_zuoxia++; 

cha_youxia++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

break; 

fall KNAPP6: 

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_bild\”,\”typ\”:\”bild\”,\”widget\”:\”bild7\”,\”bild\”:\”cirkel\ ”}>ET”); 

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

USART_TX_Data(MNG_USART1); 

r_flagga1 = 1; 

quan_hang2++; 

quan_lie3++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

annars 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_bild\”,\”typ\”:\”bild\”,\”widget\”:\”bild7\”,\”bild\”:\”x\ ”}>ET”); 

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

USART_TX_Data(MNG_USART1); 

r_flagga1 = 0; 

cha_hang2++; 

cha_lie3++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

break; 

fall KNAPP7: 

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_bild\”,\”typ\”:\”bild\”,\”widget\”:\”bild8\”,\”bild\”:\”cirkel\ ”}>ET”); 

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

USART_TX_Data(MNG_USART1); 

r_flagga1 = 1; 

quan_hang3++; 

quan_lie1++; 

quan_zuoxia++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

annars 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_bild\”,\”typ\”:\”bild\”,\”widget\”:\”bild8\”,\”bild\”:\”x\ ”}>ET”); 

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

USART_TX_Data(MNG_USART1); 

r_flagga1 = 0; 

cha_hang3++; 

cha_lie1++; 

cha_zuoxia++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

break; 

fall KNAPP8: 

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_bild\”,\”typ\”:\”bild\”,\”widget\”:\”bild9\”,\”bild\”:\”cirkel\ ”}>ET”); 

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

USART_TX_Data(MNG_USART1); 

r_flagga1 = 1; 

quan_hang3++; 

quan_lie2++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

annars 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_bild\”,\”typ\”:\”bild\”,\”widget\”:\”bild9\”,\”bild\”:\”x\ ”}>ET”); 

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

USART_TX_Data(MNG_USART1); 

r_flagga1 = 0; 

cha_hang3++; 

cha_lie2++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

break; 

fall KNAPP9: 

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_bild\”,\”typ\”:\”bild\”,\”widget\”:\”bild10\”,\”bild\”:\”cirkel\ ”}>ET”);

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

USART_TX_Data(MNG_USART1); 

r_flagga1 = 1; 

quan_hang3++; 

quan_lie3++; 

quan_youxia++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

annars 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_bild\”,\”typ\”:\”bild\”,\”widget\”:\”bild10\”,\”bild\”:\”x\ ”}>ET”); 

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

USART_TX_Data(MNG_USART1); 

r_flagga1 = 0; 

cha_hang3++; 

cha_lie3++; 

cha_youxia++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

break; 

fall KNAPP0: 

r_flagga1 = 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\”,\”typ\”:\”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\”,\”typ\”:\”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\”,\”typ\”:\”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\”,\”typ\”:\”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\”,\”typ\”:\”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\”,\”typ\”:\”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\”,\”typ\”:\”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\”,\”typ\”:\”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\”,\”typ\”:\”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\”,\”typ\”:\”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\”,\”typ\”:\”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\”,\”typ\”:\”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\”,\”typ\”:\”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\”,\”typ\”:\”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\”,\”typ\”:\”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\”,\”typ\”:\”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\”,\”typ\”:\”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); 

break; 

default: 

MNG_USART1.RX_OVER_FLG = FALSK; 

break; 

}

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

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\”,\”typ\”:\”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; 

}

annars 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\”,\”typ\”:\”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; 

}

annars 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\”,\”typ\”:\”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\”,\”typ\”:\”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\”,\”typ\”:\”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\”,\”typ\”:\”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; 

}

annat om((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\”,\”typ\”:\”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\”,\”typ\”:\”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 = FALSK; 

}

/** Systemklockkonfiguration 

*/

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

HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); 

}

/** Pinout-konfiguration 

*/

statiskt tomrum MX_GPIO_Init(void) 

GPIO_InitTypeDef GPIO_InitStruct; 

/* GPIO-portar Klockaktivering */ 

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

}

/* ANVÄNDARKOD BÖRJAN 4 */

/* ANVÄNDARKOD SLUT 4 */ 

/ **

* @brief Denna funktion exekveras i händelse av fel. 

* @param Ingen 

* @retval Ingen 

*/ 

void Error_Handler(void) 

/* ANVÄNDARKOD BEGIN Error_Handler */ 

/* Användaren kan lägga till sin egen implementering för att rapportera HAL-felreturtillståndet */ 

medan (1) 

{

}

/* ANVÄNDARKOD END Error_Handler */ 

}

#ifdef USE_FULL_ASSERT 

/ **

* @brief Rapporterar namnet på källfilen och källradens nummer 

* där assert_param-felet har inträffat. 

* @param fil: pekare till källfilens namn 

* @param line: assert_param fellinjes källnummer 

* @retval Ingen 

*/ 

void assert_failed (uint8_t* fil, uint32_t line) 

/* ANVÄNDARKOD BÖRJAN 6 */ 

/* Användaren kan lägga till sin egen implementering för att rapportera filnamn och radnummer, 

ex: printf(“Fel parametervärde: fil %s på rad %d\r\n”, fil, rad) */ 

/* ANVÄNDARKOD SLUT 6 */ 

}

#endif 

/ **

* @} 

*/ 

/ **

* @} 

*/

/************************ (C) COPYRIGHT STMicroelectronics *****SLUT PÅ FIL****/

Slutresultaten visar

Tic-tac-toe-spel Baserat på STONE TFT LCD och STM32 IOT PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Källa: Plato Data Intelligence