IOT

Tic-tac-toe spil baseret på STONE TFT LCD og STM32

Resumé

Tic-tac-toe er et spil, der spilles på et 3 gange 3 gitter, der ligner gobang. Det har fået sit navn, fordi brættet generelt ikke tegner grænser, og gitterlinjerne er arrangeret i tic-tac-toe. De nødvendige værktøjer til spillet er kun papir og pen. Derefter skiftes to spillere, der repræsenterer O og X, til at efterlade mærker på gitteret. Alle tre mærker danner en lige linje, som er vinderen.

Denne artikel skal bruge mikrocontroller STM32 og STONE LCD-skærm til at udvikle et simpelt tic-tac-toe-spil.

Materialer, der kræves til eksperimentet

Systemprincippet

Angiv, at det første tryk på skærmen skal være O, det andet tryk på skærmen er X, har udført denne cyklus. Indstil 8 arrays for at gemme antallet af O og X i hver række, kolonne og diagonal i hvert gitter, så længe der er tre af det samme mærke er sejren, så vil der være en blinkende rød boks for at bevise sejren for række, kolonne eller diagonal, og tryk derefter på nulstil for at starte spillet igen.

Følgende er flowdiagrammet:

Tic-tac-toe-spil baseret på STONE TFT LCD og STM32 IOT PlatoBlockchain Data Intelligence. Lodret søgning. Ai.

STM32 og STONE LCD Display System hardware design

(A) STONE LCD-skærm

  1. "Tic-tac-toe game" hardwaredesign

Brug STONE LCD-skærm fra Beijing STONE Technology co., ltd, modellen er STWI070WT-01, med et integreret TFT-display og touch-controller.

Tic-tac-toe-spil baseret på STONE TFT LCD og STM32 IOT PlatoBlockchain Data Intelligence. Lodret søgning. Ai.
  1.  STVC070WT-01 produktegenskaber
Fysisk Parameter 
Størrelse7 inch
Løsning800 × RGB × 480
Pixel-afstand0.0642 (B) × 0.1790 (H) mm
Farve262,144 farver (18 bit)
Viewing Area154.08 (B) × 85.92 (H) mm
Skærmdimension186.4mmx105.5mm
Samlet dimension186.4 mmx105.5 mmx17.4 mm (Standardtype) 186.4 mmx105.5 mmx23.8 mm (med Ethernet-port)
Nettovægt300g
Skærm 
BaggrundsbelysningstypeLED
Lysstyrke300cd/m2 (Lysstyrken kan justeres i 100 niveauer)
Kontrast500:1
Baggrundsbelysningsliv300,000 timer
Betragtningsvinkel70°/70°/50°/70°(L/R/U/D)
TFT-panelEt klasse industripanel
Touch Screen4 ledningsmodstand berøring / kapacitiv berøring / uden berøringsskærm
Skærmtilstand:Digital
Processor 
CPUCortex A8
Opdateringshastighed1G Hz
Max billedhastighed60 FPS
grænseflade 
Seriel grænsefladeRS232 / RS422 / RS485 / TTL niveau
Ethernet-interface10M/100M (valgfrit)
Trådløs grænsefladeWi-Fi / Bluetooth (valgfrit)
Download af projektfilUSB2.0-port eller U-lagringsdisk
Strømforsyning 
mærkespænding+12V DC eller +5V DC
Tilladt spændingsområde+7V DC…+28V DC eller +5V DC
Maks. tilladte transienter+ 28V
Tid mellem to transienter50 sek minimum
Intern sikring2A selvgendannelsessikring
Strømforbrug3.0 W
Omgivende forhold 
Maks. tilladte omgivelsestemperaturOperationStorage-20℃~ +70℃-30℃~ +80℃
Relativ fugtighedOperationStorage55℃,85%60℃,90%
ChokbelastningOperationStorage15 g/11 msek25 g/6 msek
VibrationOperationStorage0.035 mm (10 – 58 Hz)/ 1 g (58 – 500 Hz) 3.5 mm (5 – 8,5 Hz)/ 1 g (8.5 – 500 Hz)
Barometrisk trykOperationStorage706 til 1030 hPa581 til 1030 hPa
Støjimmunitet 
Statisk udladning (kontaktudledning/luftudledning)EN 61000-4-2 6 kV/8 kV
RF-bestrålingEN 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
BurstinterferensForsyningslinjerProcesdatalinjerSignallinjerEN 61000-4-42kV2kV1kV
Support Device 
UART-portUnderstøtter RS232 / RS422 / RS485 / TTL
NetværksportUnderstøtter Ethernet-port / Wi-Fi / Bluetooth
Flash-hukommelseSupportStandard 256MB, Udvid 1GB eller 2GB
BuzzerSupport
RTCSupport
USB-portSupportOnline download via USB-kabel
U Storage Disk InterfaceSupport.Offline Download eller kopier brugerdata
Touch Screen4 ledningsmodstand / kapacitiv
Vektor skrifttypeStandard TTF-format
BilledeUnderstøtter PNG/JPG/BMP/SVG/GIF-format
Audio InterfaceUnderstøttelse af WAV-formatLængden af ​​en enkelt lydfil er ikke begrænset, teoretisk op til 4096 lydfiler, højttalereffekt er 8 ohm 2 watt eller 4 ohm 3 watt
KommandosætUnified Simplified Command Sets
Hukommelse 
Flash-hukommelseStandard 256 MB, udvidelse 1 GB eller 2 GB
Hukommelsesmængde for billedeForeslå "PNG, BMP, JPG, SVG, GIF" format i henhold til billedets kapacitet.

(B) STM32-kort

Ved at bruge et STM32-kort er chippen på STM32 CKS32F303.

Tic-tac-toe-spil baseret på STONE TFT LCD og STM32 IOT PlatoBlockchain Data Intelligence. Lodret søgning. Ai.

STM32-familien af ​​ARM Cortex-M0, M0+, M3, M4 og M7 kerner er designet til indlejrede applikationer, der kræver høj ydeevne, lave omkostninger og lavt strømforbrug.

  • 2.0V-3.6V strømforsyning
  • 5V kompatible I/O ben
  • Fremragende sikker urtilstand
  • Laveffekttilstand med vækkefunktion
  • Intern RC oscillator
  • Indbygget nulstillingskredsløb
  • Driftstemperaturområde.
  • -40°C til +85°C eller 105°C

System software design

Udviklingsprocessen for STM32 og STONE LCD-skærm

1: opret projektet og indlæs de nødvendige billeder i projektet.

2: bruge Stone-designer-softwaren til at skabe, dynamisk associerede relationer; de vigtigste kontroller er: "Knap", "billede";

3: softwaresimulering og kompilering for at generere eksekverbare filer.

4: LCD-skærmen er forbundet til pc'en via USB og kopier den eksekverbare fil til skærmen.

Opret først et nyt projekt som vist nedenfor.

Tic-tac-toe-spil baseret på STONE TFT LCD og STM32 IOT PlatoBlockchain Data Intelligence. Lodret søgning. Ai.
Tic-tac-toe-spil baseret på STONE TFT LCD og STM32 IOT PlatoBlockchain Data Intelligence. Lodret søgning. Ai.

For det andet skal du importere alle billederne til ressourcen

Tic-tac-toe-spil baseret på STONE TFT LCD og STM32 IOT PlatoBlockchain Data Intelligence. Lodret søgning. Ai.

Indstil derefter knapkontrol til hvert gitter og gør knapperne usynlige. 

Tic-tac-toe-spil baseret på STONE TFT LCD og STM32 IOT PlatoBlockchain Data Intelligence. Lodret søgning. Ai.

Glem ikke at indstille nulstillingsknappen!

Den færdige effekt er vist nedenfor:

Tic-tac-toe-spil baseret på STONE TFT LCD og STM32 IOT PlatoBlockchain Data Intelligence. Lodret søgning. Ai.

Derefter skal du tilføje billedkontroller til hvert gitter på samme måde og indstille dem alle til hvide billeder.

Tilføj endelig gif-kontrollen og indstil den til usynlig.

Delene af færdig effekt er vist nedenfor:

Tic-tac-toe-spil baseret på STONE TFT LCD og STM32 IOT PlatoBlockchain Data Intelligence. Lodret søgning. Ai.
Tic-tac-toe-spil baseret på STONE TFT LCD og STM32 IOT PlatoBlockchain Data Intelligence. Lodret søgning. Ai.
Tic-tac-toe-spil baseret på STONE TFT LCD og STM32 IOT PlatoBlockchain Data Intelligence. Lodret søgning. Ai.
Tic-tac-toe-spil baseret på STONE TFT LCD og STM32 IOT PlatoBlockchain Data Intelligence. Lodret søgning. Ai.

Kredskoblingsdiagram

Tic-tac-toe-spil baseret på STONE TFT LCD og STM32 IOT PlatoBlockchain Data Intelligence. Lodret søgning. Ai.

Kodedeling

/* Inkluderer ———————————————————————*/ 

#include "stm32f0xx_hal.h" 

#include "Uart.h" 

#include "string.h" 

#include "ws2812.h" 

#inkluder "IWDG.h" 

RGB_COLOR USER_RGB_COLOR; 

usigneret tegn TX_Mode = 1; //Transmissionstype flagbit 1:232 0:TTL 

usigneret tegn BLINK_2=0; 

usigneret tegn RX3_BUF[32]; //Tilpasset modtagebuffer på tre niveauer 

#define KNAP1 0x81 

#define KNAP2 0x82 

#define KNAP3 0x83 

#define KNAP4 0x84 

#define KNAP5 0x85 

#define KNAP6 0x86 

#define KNAP7 0x87 

#define KNAP8 0x88 

#define KNAP9 0x89 

#define KNAP0 0x8A 

#define CLEAR 0x8E 

usigneret int r_flag1 = 0; 

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

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

usigneret int quan_hang1 = 0; 

usigneret int quan_hang2 = 0; 

usigneret int quan_hang3 = 0; 

usigneret int quan_lie1 = 0; 

usigneret int quan_lie2 = 0; 

usigneret int quan_lie3 = 0; 

usigneret int quan_zuoxia = 0; 

usigneret int quan_youxia = 0; 

usigneret int cha_hang1 = 0; 

usigneret int cha_hang2 = 0; 

usigneret int cha_hang3 = 0; 

usigneret int cha_lie1 = 0; 

usigneret int cha_lie2 = 0; 

usigneret int cha_lie3 = 0; 

usigneret int cha_zuoxia = 0; 

usigneret int cha_youxia = 0; //usigneret int r_flag10 = 0; 

void SystemClock_Config(void); 

void Error_Handler(void); 

statisk void MX_GPIO_Init(void); 

int main (void) 

uint8_t color_buf = 0; 

//Funktionsvalg 

/* Nulstilling af alle perifere enheder, Initialiserer Flash-grænsefladen og Systick. */ 

HAL_Init(); 

/* Konfigurer systemuret */ 

SystemClock_Config(); 

/* Initialiser alle konfigurerede ydre enheder */ 

MX_GPIO_Init(); 

TX_Mode = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_4); 

if(TX_Mode) 

MX_USART1_UART_Init(); 

//232 Initialisering 

andet 

MX_USART1_UART_Init2(); 

//TTl Initialisering 

mens (1) 

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

HAL_NVIC_SystemReset(); 

//Jumper reversering, genstart og geninitialisering 

if(MNG_USART1.RX_OVER_FLG ==TRUE) 

// 

Seriel data modtager flagbit 

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

//Metode 2:Hent kontrolnavn med fast længde 

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ælg kontrol

color_buf = KNAP1; 

}

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

color_buf = KNAP2; 

}

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

color_buf = KNAP3; 

}

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

color_buf = KNAP4; 

}

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

color_buf = KNAP5; 

}

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

color_buf = KNAP6; 

}

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

color_buf = KNAP7; 

}

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

color_buf = KNAP8; 

}

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

color_buf = KNAP9; 

}

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

color_buf = KNAP0; 

}

switch (color_buf) 

sag KNAP1: 

//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_kode\":\"sæt_billede\",\"type\":\"billede\",\"widget\":\"billede2\",\"billede\":\"cirkel\ ”}>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 = RYD; 

}

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_kode\":\"sæt_billede\",\"type\":\"billede\",\"widget\":\"billede2\",\"billede\":\"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 = RYD; 

}

//r_flag1 = 1; 

break; 

sag KNAP2: 

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_kode\":\"sæt_billede\",\"type\":\"billede\",\"widget\":\"billede3\",\"billede\":\"cirkel\ ”}>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 = RYD; 

}

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_kode\":\"sæt_billede\",\"type\":\"billede\",\"widget\":\"billede3\",\"billede\":\"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 = RYD; 

}

break; 

sag KNAP3: 

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_kode\":\"sæt_billede\",\"type\":\"billede\",\"widget\":\"billede4\",\"billede\":\"cirkel\ ”}>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 = RYD; 

}

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_kode\":\"sæt_billede\",\"type\":\"billede\",\"widget\":\"billede4\",\"billede\":\"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 = RYD; 

}

break; 

sag KNAP4: 

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_kode\":\"sæt_billede\",\"type\":\"billede\",\"widget\":\"billede5\",\"billede\":\"cirkel\ ”}>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 = RYD; 

}

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_kode\":\"sæt_billede\",\"type\":\"billede\",\"widget\":\"billede5\",\"billede\":\"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 = RYD; 

}

break; 

sag KNAP5: 

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_kode\":\"sæt_billede\",\"type\":\"billede\",\"widget\":\"billede6\",\"billede\":\"cirkel\ ”}>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 = RYD; 

}

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_kode\":\"sæt_billede\",\"type\":\"billede\",\"widget\":\"billede6\",\"billede\":\"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 = RYD; 

}

break; 

sag KNAP6: 

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_kode\":\"sæt_billede\",\"type\":\"billede\",\"widget\":\"billede7\",\"billede\":\"cirkel\ ”}>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 = RYD; 

}

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_kode\":\"sæt_billede\",\"type\":\"billede\",\"widget\":\"billede7\",\"billede\":\"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 = RYD; 

}

break; 

sag KNAP7: 

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_kode\":\"sæt_billede\",\"type\":\"billede\",\"widget\":\"billede8\",\"billede\":\"cirkel\ ”}>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 = RYD; 

}

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_kode\":\"sæt_billede\",\"type\":\"billede\",\"widget\":\"billede8\",\"billede\":\"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 = RYD; 

}

break; 

sag KNAP8: 

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_kode\":\"sæt_billede\",\"type\":\"billede\",\"widget\":\"billede9\",\"billede\":\"cirkel\ ”}>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 = RYD; 

}

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_kode\":\"sæt_billede\",\"type\":\"billede\",\"widget\":\"billede9\",\"billede\":\"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 = RYD; 

}

break; 

sag KNAP9: 

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_kode\":\"sæt_billede\",\"type\":\"billede\",\"widget\":\"billede10\",\"billede\":\"cirkel\ ”}>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 = RYD; 

}

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_kode\":\"sæt_billede\",\"type\":\"billede\",\"widget\":\"billede10\",\"billede\":\"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 = RYD; 

}

break; 

sag KNAP0: 

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_kode\":\"sæt_billede\",\"type\":\"billede\",\"widget\":\"billede2\",\"billede\":\"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_kode\":\"sæt_billede\",\"type\":\"billede\",\"widget\":\"billede3\",\"billede\":\"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_kode\":\"sæt_billede\",\"type\":\"billede\",\"widget\":\"billede4\",\"billede\":\"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_kode\":\"sæt_billede\",\"type\":\"billede\",\"widget\":\"billede5\",\"billede\":\"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_kode\":\"sæt_billede\",\"type\":\"billede\",\"widget\":\"billede6\",\"billede\":\"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_kode\":\"sæt_billede\",\"type\":\"billede\",\"widget\":\"billede7\",\"billede\":\"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_kode\":\"sæt_billede\",\"type\":\"billede\",\"widget\":\"billede8\",\"billede\":\"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_kode\":\"sæt_billede\",\"type\":\"billede\",\"widget\":\"billede9\",\"billede\":\"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_kode\":\"sæt_billede\",\"type\":\"billede\",\"widget\":\"billede10\",\"billede\":\"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); 

break; 

Standard: 

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\”,\”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 = FALSK; 

}

/** Systemurkonfiguration 

*/

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

HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); 

}

/** Pinout-konfiguration 

*/

statisk tomrum MX_GPIO_Init(void) 

GPIO_InitTypeDef GPIO_InitStruct; 

/* GPIO-porte Ur Aktiver */ 

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

}

/* BRUGERKODE START 4 ​​*/

/* BRUGERKODE SLUT 4 */ 

/ **

* @brief Denne funktion udføres i tilfælde af fejl. 

* @param Ingen 

* @retval Ingen 

*/ 

void Error_Handler(void) 

/* BRUGERKODE BEGIN Error_Handler */ 

/* Brugeren kan tilføje sin egen implementering for at rapportere HAL-fejlens returtilstand */ 

mens (1) 

{

}

/* BRUGERKODE END Error_Handler */ 

}

#ifdef USE_FULL_ASSERT 

/ **

* @brief Rapporterer navnet på kildefilen og kildelinjenummeret 

* hvor assert_param fejlen er opstået. 

* @param fil: peger på kildefilens navn 

* @param linje: assert_param fejl linje kildenummer 

* @retval Ingen 

*/ 

void assert_failed (uint8_t* fil, uint32_t linje) 

/* BRUGERKODE START 6 ​​*/ 

/* Brugeren kan tilføje sin egen implementering for at rapportere filnavnet og linjenummeret, 

eks: printf(“Forkert parameterværdi: fil %s på linje %d\r\n”, fil, linje) */ 

/* BRUGERKODE SLUT 6 */ 

}

#Afslut Hvis 

/ **

* @} 

*/ 

/ **

* @} 

*/

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

De endelige resultater viser

Tic-tac-toe-spil baseret på STONE TFT LCD og STM32 IOT PlatoBlockchain Data Intelligence. Lodret søgning. Ai.

Kilde: Platon Data Intelligence