IOT

Tic-tac-toe-peli Perustuu STONE TFT LCD:hen ja STM32:een

Yhteenveto

Tic-tac-toe on peli, jota pelataan 3 x 3 -ruudukossa, joka muistuttaa gobangia. Se saa nimensä, koska taulu ei yleensä piirrä rajoja ja ruudukon viivat on järjestetty tic-tac-toe-muotoon. Peliin tarvittavat työkalut ovat vain paperi ja kynä. Sitten kaksi pelaajaa, jotka edustavat O:ta ja X:ää, vuorottelevat jättääkseen merkkejä ruudukkoon. Mitkä tahansa kolme pistettä muodostavat suoran viivan, joka on voittaja.

Tässä artikkelissa käytetään mikro-ohjainta STM32 ja STONE LCD-näyttöä yksinkertaisen tic-tac-toe-pelin kehittämiseen.

Kokeeseen tarvittavat materiaalit

Järjestelmän periaate

Määritä, että näytön ensimmäisen napautuksen on oltava O, toisen kosketuksen näytöllä on X, on tehnyt tämän syklin. Aseta 8 taulukkoa tallentamaan O:n ja X:n lukumäärät jokaiselle riville, sarakkeelle ja diagonaalille kunkin ruudukon kullekin riville, sarakkeelle ja diagonaalille, kunhan voitto on kolme samaa merkkiä, silloin näkyy vilkkuva punainen laatikko todistamaan ruudukon voiton. rivi, sarake tai diagonaali ja napauta sitten nollaa aloittaaksesi pelin uudelleen.

Seuraava on vuokaavio:

Tic-tac-toe-peli Perustuu STONE TFT LCD:hen ja STM32 IOT PlatoBlockchain Data Intelligenceen. Pystysuuntainen haku. Ai.

STM32 ja STONE LCD Display System -laitteiston suunnittelu

(A) STONE LCD-näyttö

  1. "Tic-tac-toe-peli" -laitteistosuunnittelu

Käytä Beijing STONE Technology co., ltd:n STONE LCD-näyttöä, malli on STWI070WT-01, integroidulla TFT-näytöllä ja kosketusohjaimella.

Tic-tac-toe-peli Perustuu STONE TFT LCD:hen ja STM32 IOT PlatoBlockchain Data Intelligenceen. Pystysuuntainen haku. Ai.
  1.  STVC070WT-01 Tuotteen ominaisuudet
Fyysinen parametri 
Koko7 tuumaa
päätöslauselma800 x RGB x 480
Pikseliväli0.0642 (L) × 0.1790 (K) mm
Väri262,144 väriä (18 bittiä)
Katselualue154.08 (L) × 85.92 (K) mm
Näytön mitat186.4mmx105.5mm
Ulkomitat186.4 mm x 105.5 mm x 17.4 mm (vakiotyyppi) 186.4 mm x 105.5 mm x 23.8 mm (Ethernet-portilla)
Nettopaino300g
näyttö 
Taustavalon tyyppiLED
Kirkkaus300 cd/m2 (kirkkautta voidaan säätää 100 eri tasolle)
Kontrasti500:1
Taustavalon elämä300,000 tuntia
Katselukulma70°/70°/50°/70° (L/R/U/D)
TFT-paneeliLuokan teollisuuspaneeli
Kosketusnäyttö4 Johdinvastuskosketus /Kapasitiivinen kosketus/ Ilman kosketusnäyttöä
Näyttötila:Digitaalinen
Suoritin 
prosessoriCortex A8
Virkistystaajuus1G Hz
Suurin kuvanopeus60 FPS
liitäntä 
SarjaliitäntäRS232 / RS422 / RS485 / TTL-taso
Ethernet-liitäntä10M/100M (valinnainen)
Langaton käyttöliittymäWi-Fi / Bluetooth (valinnainen)
Projektitiedoston latausUSB2.0-portti tai U-tallennuslevy
Virtalähde 
Nimellisjännite+12V DC tai +5V DC
Sallittu jännitealue+7V DC…+28V DC tai +5V DC
Max. sallitut transientit+ 28V
Kahden transientin välinen aika50 sekuntia vähintään
Sisäinen sulake2A itsepalautuva sulake
Tehon kulutus3.0 W
Ympäristön olosuhteet 
Max. sallittu ympäristön lämpötilaOperationStorage-20℃~ +70℃-30℃~ +80℃
Ilman suhteellinen kosteusOperationStorage55 ℃, 85 % 60 ℃, 90 %
ShokkilatausOperationStorage15 g/11 ms 25 g/6 ms
VärähtelyOperationStorage0.035 mm (10 - 58 Hz) / 1 g (58 - 500 Hz) 3.5 mm (5 - 8,5 Hz) / 1 g (8.5 - 500 Hz)
IlmanpaineOperationStorage706 - 1030 hPa581 - 1030 hPa
Melun immuniteetti 
Staattinen purkaus (kosketuspurkaus/ilmapurkaus)EN 61000-4-2 6 kV/8 kV
RF-säteilyEN 61000-4-310 V/m, 80 % AM1 kHz
PulssimodulaatioENV 50204900 MHz ±5 MHz10 V/meff., 50 % ED, 200 Hz
RF johtuminenEN 61000-4-6150 kHz – 80 MHz 10 V, 80 % AM, 1 kHz
PurskehäiriöTyölinjatProsessoi datalinjatSignaalijohdotEN 61000-4-42kV2kV1kV
Tukilaite 
UART-porttiTuki RS232 / RS422 / RS485 / TTL
VerkkoporttiTukiEthernet-portti / Wi-Fi / Bluetooth
Flash-muistiTuki Standard 256 Mt, laajenna 1 Gt tai 2 Gt
SummeriTuki
RTCTuki
USB-porttiTuki Online-latauksella USB-kaapelilla
U Tallennuslevyn käyttöliittymäSupport.Offline Lataa tai kopioi käyttäjätiedot
Kosketusnäyttö4 johdinvastus / kapasitiivinen
VektorifonttiNormaali TTF-muoto
KuvaTukee PNG/JPG/BMP/SVG/GIF-muotoa
Audio InterfaceTuki WAV-muotoa Yhden äänitiedoston pituus ei ole rajoitettu, teoriassa jopa 4096 äänitiedostoa, kaiuttimen teho on 8 ohmia 2 wattia tai 4 ohmia 3 wattia
KomentosarjaYhdistetyt yksinkertaistetut komentosarjat
Muisti 
Flash-muistiVakio 256 Mt, laajennus 1 Gt tai 2 Gt
Kuvan muistin määräEhdota "PNG, BMP, JPG, SVG, GIF" -muotoa kuvan ominaisuuksien mukaan.

(B) STM32-kortti

Käyttämällä STM32-korttia STM32:n siru on CKS32F303.

Tic-tac-toe-peli Perustuu STONE TFT LCD:hen ja STM32 IOT PlatoBlockchain Data Intelligenceen. Pystysuuntainen haku. Ai.

ARM Cortex-M32-, M0+-, M0-, M3- ja M4-ytimien STM7-perhe on suunniteltu sulautettuihin sovelluksiin, jotka vaativat korkeaa suorituskykyä, alhaisia ​​kustannuksia ja alhaista virrankulutusta.

  • 2.0V-3.6V virtalähde
  • 5V yhteensopivat I/O-nastat
  • Erinomainen turvallinen kellotila
  • Pienitehoinen tila herätystoiminnolla
  • Sisäinen RC-oskillaattori
  • Sisäänrakennettu nollauspiiri
  • Käyttölämpötila.
  • -40°C - +85°C tai 105°C

Järjestelmäohjelmistojen suunnittelu

STM32:n ja STONE LCD-näytön kehitysprosessi

1: luo projekti ja lataa tarvittavat kuvat projektiin.

2: käytä Stone-designer-ohjelmistoa dynaamisesti liittyvien suhteiden luomiseen; pääohjaimet ovat: “Button”, “image”;

3: ohjelmistosimulaatio ja käännös suoritettavien tiedostojen luomiseksi.

4: LCD-näyttö liitetään tietokoneeseen USB:n kautta ja kopioi suoritettava tiedosto näytölle.

Luo ensin uusi projekti alla olevan kuvan mukaisesti.

Tic-tac-toe-peli Perustuu STONE TFT LCD:hen ja STM32 IOT PlatoBlockchain Data Intelligenceen. Pystysuuntainen haku. Ai.
Tic-tac-toe-peli Perustuu STONE TFT LCD:hen ja STM32 IOT PlatoBlockchain Data Intelligenceen. Pystysuuntainen haku. Ai.

Toiseksi tuo kaikki kuvat resurssiin

Tic-tac-toe-peli Perustuu STONE TFT LCD:hen ja STM32 IOT PlatoBlockchain Data Intelligenceen. Pystysuuntainen haku. Ai.

Aseta sitten painikeohjaimet kuhunkin ruudukkoon ja tee painikkeet näkymättömiksi. 

Tic-tac-toe-peli Perustuu STONE TFT LCD:hen ja STM32 IOT PlatoBlockchain Data Intelligenceen. Pystysuuntainen haku. Ai.

Älä unohda asettaa nollauspainiketta!

Valmis vaikutus näkyy alla:

Tic-tac-toe-peli Perustuu STONE TFT LCD:hen ja STM32 IOT PlatoBlockchain Data Intelligenceen. Pystysuuntainen haku. Ai.

Lisää sen jälkeen kuvaohjaimet jokaiseen ruudukkoon samalla tavalla ja aseta ne kaikki valkoisiksi kuviksi.

Lisää lopuksi gif-säädin ja aseta se näkymättömäksi.

Valmiin tehosteen osat on esitetty alla:

Tic-tac-toe-peli Perustuu STONE TFT LCD:hen ja STM32 IOT PlatoBlockchain Data Intelligenceen. Pystysuuntainen haku. Ai.
Tic-tac-toe-peli Perustuu STONE TFT LCD:hen ja STM32 IOT PlatoBlockchain Data Intelligenceen. Pystysuuntainen haku. Ai.
Tic-tac-toe-peli Perustuu STONE TFT LCD:hen ja STM32 IOT PlatoBlockchain Data Intelligenceen. Pystysuuntainen haku. Ai.
Tic-tac-toe-peli Perustuu STONE TFT LCD:hen ja STM32 IOT PlatoBlockchain Data Intelligenceen. Pystysuuntainen haku. Ai.

Piirin kytkentäkaavio

Tic-tac-toe-peli Perustuu STONE TFT LCD:hen ja STM32 IOT PlatoBlockchain Data Intelligenceen. Pystysuuntainen haku. Ai.

Koodin jakaminen

/* Sisältää ——————————————————————*/ 

#include "stm32f0xx_hal.h" 

#include "Uart.h" 

#include "string.h" 

#include "ws2812.h" 

#include "IWDG.h" 

RGB_COLOR USER_RGB_COLOR; 

allekirjoittamaton merkki TX_Mode = 1; //Lähetystyypin lippubitti 1:232 0:TTL 

allekirjoittamaton merkki BLINK_2=0; 

unsigned char RX3_BUF[32]; //Mukautettu kolmitasoinen vastaanottopuskuri 

#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_lippu1 = 0; 

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

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

allekirjoittamaton int cha_lie1 = 0; 

allekirjoittamaton int cha_lie2 = 0; 

allekirjoittamaton int cha_lie3 = 0; 

unsigned int cha_zuoxia = 0; 

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

void SystemClock_Config(void); 

void Error_Handler(void); 

staattinen void MX_GPIO_Init(void); 

int main (tyhjä) 

uint8_t color_buf = 0; 

//Toiminnon valinta 

/* Kaikkien oheislaitteiden nollaus, alustaa Flash-liitännän ja Systickin. */ 

HAL_Init(); 

/* Määritä järjestelmän kello */ 

SystemClock_Config(); 

/* Alusta kaikki määritetyt oheislaitteet */ 

MX_GPIO_Init(); 

TX_Mode = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_4); 

jos(TX_Mode) 

MX_USART1_UART_Init(); 

//232 Alustus 

muu 

MX_USART1_UART_Init2(); 

//TTl Alustus 

kun (1) 

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

HAL_NVIC_SystemReset(); 

//Jumperin peruutus, uudelleenkäynnistys ja uudelleenalustus 

if(MNG_USART1.RX_OVER_FLG ==TOSI) 

// 

Sarjadatan vastaanottolippubitti 

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

//Menetelmä 2: Hanki kiinteäpituinen ohjausobjektin nimi 

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) 

//Valitse ohjausobjekti

color_buf = PAINIKE1; 

}

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

color_buf = PAINIKE2; 

}

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

color_buf = PAINIKE3; 

}

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

color_buf = PAINIKE4; 

}

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

color_buf = PAINIKE5; 

}

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

color_buf = PAINIKE6; 

}

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

color_buf = PAINIKE7; 

}

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

color_buf = PAINIKE8; 

}

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

color_buf = PAINIKE9; 

}

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

color_buf = PAINIKE0; 

}

kytkin (color_buf) 

kotelo BUTTON1: 

//jos(r_lippu1 == 0) 

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

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

r_lippu1 ^= 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_lippu1 ^= 1; 

quan_hang1++; 

quan_lie1++; 

quan_youxia++;  

//memset(RX3_BUF,0,7); 

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

color_buf = TYHJENNÄ; 

}

else if((r_lippu1 == 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_lippu1 = 0; 

cha_hang1++; 

cha_lie1++; 

cha_youxia++; 

//memset(RX3_BUF,0,7); 

color_buf = TYHJENNÄ; 

}

//r_lippu1 = 1; 

break; 

kotelo BUTTON2: 

if((r_lippu1 == 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_lippu1 = 1; 

quan_hang1++; 

quan_lie2++; 

//memset(RX3_BUF,0,7); 

color_buf = TYHJENNÄ; 

}

else if((r_lippu1 == 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_lippu1 = 0; 

cha_hang1++; 

cha_lie2++; 

//memset(RX3_BUF,0,7); 

color_buf = TYHJENNÄ; 

}

break; 

kotelo BUTTON3: 

if((r_lippu1 == 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_lippu1 = 1; 

quan_hang1++; 

quan_lie3++; 

quan_zuoxia++; 

//memset(RX3_BUF,0,7); 

color_buf = TYHJENNÄ; 

}

else if((r_lippu1 == 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_lippu1 = 0; 

cha_hang1++; 

cha_lie3++; 

cha_zuoxia++; 

//memset(RX3_BUF,0,7); 

color_buf = TYHJENNÄ; 

}

break; 

kotelo BUTTON4: 

if((r_lippu1 == 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_lippu1 = 1; 

quan_hang2++; 

quan_lie1++; 

//memset(RX3_BUF,0,7); 

//r_lippu10=1; 

color_buf = TYHJENNÄ; 

}

else if((r_lippu1 == 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_lippu1 = 0; 

cha_hang2++; 

cha_lie1++; 

//memset(RX3_BUF,0,7); 

color_buf = TYHJENNÄ; 

}

break; 

kotelo BUTTON5: 

if((r_lippu1 == 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_lippu1 = 1; 

quan_hang2++; 

quan_lie2++; 

quan_zuoxia++; 

quan_youxia++; 

//memset(RX3_BUF,0,7); 

color_buf = TYHJENNÄ; 

}

else if((r_lippu1 == 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_lippu1 = 0; 

cha_hang2++; 

cha_lie2++; 

cha_zuoxia++; 

cha_youxia++; 

//memset(RX3_BUF,0,7); 

color_buf = TYHJENNÄ; 

}

break; 

kotelo BUTTON6: 

if((r_lippu1 == 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_lippu1 = 1; 

quan_hang2++; 

quan_lie3++; 

//memset(RX3_BUF,0,7); 

color_buf = TYHJENNÄ; 

}

else if((r_lippu1 == 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_lippu1 = 0; 

cha_hang2++; 

cha_lie3++; 

//memset(RX3_BUF,0,7); 

color_buf = TYHJENNÄ; 

}

break; 

kotelo BUTTON7: 

if((r_lippu1 == 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_lippu1 = 1; 

quan_hang3++; 

quan_lie1++; 

quan_zuoxia++; 

//memset(RX3_BUF,0,7); 

color_buf = TYHJENNÄ; 

}

else if((r_lippu1 == 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_lippu1 = 0; 

cha_hang3++; 

cha_lie1++; 

cha_zuoxia++; 

//memset(RX3_BUF,0,7); 

color_buf = TYHJENNÄ; 

}

break; 

kotelo BUTTON8: 

if((r_lippu1 == 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_lippu1 = 1; 

quan_hang3++; 

quan_lie2++; 

//memset(RX3_BUF,0,7); 

color_buf = TYHJENNÄ; 

}

else if((r_lippu1 == 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_lippu1 = 0; 

cha_hang3++; 

cha_lie2++; 

//memset(RX3_BUF,0,7); 

color_buf = TYHJENNÄ; 

}

break; 

kotelo BUTTON9: 

if((r_lippu1 == 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_lippu1 = 1; 

quan_hang3++; 

quan_lie3++; 

quan_youxia++; 

//memset(RX3_BUF,0,7); 

color_buf = TYHJENNÄ; 

}

else if((r_lippu1 == 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_lippu1 = 0; 

cha_hang3++; 

cha_lie3++; 

cha_youxia++; 

//memset(RX3_BUF,0,7); 

color_buf = TYHJENNÄ; 

}

break; 

kotelo BUTTON0: 

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

break; 

default: 

MNG_USART1.RX_OVER_FLG = EPÄTOSI; 

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 = EPÄTOSI; 

}

/** Järjestelmän kellon asetukset 

*/

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.AHBCLKJakaja = RCC_SYSCLK_DIV1; 

RCC_ClkInitStruct.APB1CLKJakaja = 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-keskeytysmääritys */ 

HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); 

}

/** Pinout-kokoonpano 

*/

staattinen void MX_GPIO_Init(tyhjä) 

GPIO_InitTypeDef GPIO_InitStruct; 

/* GPIO-porttien kello käytössä */ 

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

}

/* KÄYTTÄJÄKOODI ALKA 4 */

/* KÄYTTÄJÄKOODIN LOPPU 4 */ 

/ **

* @lyhyt Tämä toiminto suoritetaan, jos tapahtuu virhe. 

* @param Ei mitään 

* @retval Ei mitään 

*/ 

void Error_Handler(void) 

/* USER CODE BEGIN Error_Handler */ 

/* Käyttäjä voi lisätä oman toteutuksensa raportoimaan HAL-virheen palautustilan */ 

kun (1) 

{

}

/* KÄYTTÄJÄKOODIN LOPPU Error_Handler */ 

}

#ifdef USE_FULL_ASSERT 

/ **

* @brief Ilmoittaa lähdetiedoston nimen ja lähderivin numeron 

* missä assert_param-virhe on tapahtunut. 

* @param-tiedosto: osoitin lähdetiedoston nimeen 

* @param line: assert_param -virheen rivin lähdenumero 

* @retval Ei mitään 

*/ 

void assert_failed(uint8_t* tiedosto, uint32_t rivi) 

/* KÄYTTÄJÄKOODI ALKA 6 */ 

/* Käyttäjä voi lisätä oman toteutuksen raportoimaan tiedostonimen ja rivinumeron, 

esim: printf("Väärä parametriarvo: tiedosto %s rivillä %d\r\n", tiedosto, rivi) */ 

/* KÄYTTÄJÄKOODIN LOPPU 6 */ 

}

#endif 

/ **

* @} 

*/ 

/ **

* @} 

*/

/************************ (C) TEKIJÄNOIKEUDET STMicroelectronics *****TIEDOSTON LOPPU****/

Lopulliset tulokset näyttävät

Tic-tac-toe-peli Perustuu STONE TFT LCD:hen ja STM32 IOT PlatoBlockchain Data Intelligenceen. Pystysuuntainen haku. Ai.

Lähde: Platon Data Intelligence