IOT

Παιχνίδι Tic-tac-toe Βασισμένο σε STONE TFT LCD και STM32

Χαρακτηριστικά

Το Tic-tac-toe είναι ένα παιχνίδι που παίζεται σε πλέγμα 3 επί 3, παρόμοιο με το gobang. Πήρε το όνομά του επειδή ο πίνακας γενικά δεν σχεδιάζει σύνορα και οι γραμμές πλέγματος είναι διατεταγμένες σε tic-tac-toe. Τα εργαλεία που χρειάζονται για το παιχνίδι είναι μόνο χαρτί και στυλό. Στη συνέχεια, δύο παίκτες που εκπροσωπούν το Ο και το Χ εναλλάσσονται για να αφήσουν σημάδια στο πλέγμα. Οποιαδήποτε τρία σημάδια σχηματίζουν μια ευθεία γραμμή, η οποία είναι ο νικητής.

Αυτό το άρθρο πρόκειται να χρησιμοποιήσει τον μικροελεγκτή STM32 και την οθόνη STONE LCD για να αναπτύξει ένα απλό παιχνίδι τικ-τακ.

Υλικά που απαιτούνται για το πείραμα

Η αρχή του συστήματος

Καθορίστε το πρώτο πάτημα στην οθόνη πρέπει να είναι O, το δεύτερο πάτημα στην οθόνη είναι X, έχει κάνει αυτόν τον κύκλο. Ορίστε 8 πίνακες για να αποθηκεύσετε τον αριθμό των O και X σε κάθε γραμμή, στήλη και διαγώνιο κάθε πλέγματος, εφόσον υπάρχουν τρεις από το ίδιο σημάδι είναι η νίκη, τότε θα υπάρχει ένα κόκκινο πλαίσιο που αναβοσβήνει για να αποδείξει τη νίκη του γραμμή, στήλη ή διαγώνιο και, στη συνέχεια, πατήστε επαναφορά για να ξεκινήσει ξανά το παιχνίδι.

Ακολουθεί το διάγραμμα ροής:

Παιχνίδι Tic-tac-toe Βασισμένο σε STONE TFT LCD και STM32 IOT PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Σχεδιασμός υλικού STM32 και STONE LCD Display System

(Α) Οθόνη LCD STONE

  1. Σχεδιασμός υλικού «Tic-tac-toe game».

Χρησιμοποιήστε οθόνη STONE LCD της Beijing STONE Technology co., ltd, το μοντέλο είναι STWI070WT-01, με ενσωματωμένη οθόνη TFT και ελεγκτή αφής.

Παιχνίδι Tic-tac-toe Βασισμένο σε STONE TFT LCD και STM32 IOT PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.
  1.  STVC070WT-01 Χαρακτηριστικά Προϊόντος
Φυσική παράμετρος 
Μέγεθος7 ιντσών
Ανάλυση800 × RGB × 480
Απόσταση Pixel0.0642 (Π) × 0.1790 (Υ) mm
Χρώμα262,144 χρώματα (18 bit)
Περιοχή προβολής154.08 (Π) × 85.92 (Υ) mm
Εμφάνιση Διάσταση186.4mmx105.5mm
Συνολική διάσταση186.4mmx105.5mmx17.4mm (Τυπικός τύπος) 186.4mmx105.5mmx23.8mm (με θύρα Ethernet)
Καθαρό βάρος300g
Display 
Τύπος οπίσθιου φωτισμούLED
Λάμψη300cd/m2 (Η φωτεινότητα μπορεί να ρυθμιστεί σε 100 επίπεδα)
Αντίθεση500:1
Ζωή οπίσθιου φωτισμού300,000 ώρες
Οπτική γωνία70°/70°/50°/70° (L/R/U/D)
Πίνακας TFTΈνα Class Industry Panel
Οθόνη αφής4 Wire Resistance Touch /Capacitive Touch/ Χωρίς Οθόνη Αφής
Λειτουργία οθόνης:Ψηφιακό
Επεξεργαστής 
CPUCortex A8
Ρυθμός ανανέωσης1G Hz
Μέγιστος ρυθμός καρέ60 FPS
περιβάλλον λειτουργίας 
Σειριακή διασύνδεσηΕπίπεδο RS232 / RS422 / RS485 / TTL
Διεπαφή Ethernet10M/100M (Προαιρετικό)
Ασύρματη διεπαφήWi-Fi / Bluetooth (Προαιρετικό)
Λήψη αρχείου έργουΘύρα USB2.0 ή δίσκος αποθήκευσης U
Τροφοδοσία 
Μετρημένη ηλεκτρική τάση+12V DC ή +5V DC
Επιτρεπόμενο εύρος τάσης+7V DC…+28V DC ή +5V DC
Μέγιστη. επιτρεπτά παροδικά+ 28V
Χρόνος μεταξύ δύο μεταβατικών50 δευτερόλεπτα τουλάχιστον
Εσωτερική ασφάλεια2Ασφάλεια αυτο-ανάκτησης
Κατανάλωση ενέργειας3.0 W
Συνθήκες περιβάλλοντος 
Μέγιστη. επιτρεπόμενη θερμοκρασία περιβάλλοντοςOperationStorage-20℃~ +70℃-30℃~ +80℃
Σχετική υγρασίαOperationStorage55℃,85%60℃,90%
Φόρτωση σοκOperationStorage15 g/11 msec25 g/6 msec
δόνησηOperationStorage0.035 mm (10 – 58 Hz)/ 1 g (58 – 500 Hz) 3.5 mm (5 – 8,5 Hz)/ 1 g (8.5 – 500 Hz)
Βαρομετρική πίεσηOperationStorage706 έως 1030 hPa581 έως 1030 hPa
Ανοσία θορύβου 
Στατική εκκένωση (εκκένωση επαφής/εκκένωση αέρα)EN 61000-4-2 6 kV/8 kV
Ακτινοβολία RFEN 61000-4-310 V/m, 80% AM1 kHz
Διαμόρφωση παλμούENV 50204900 MHz ±5 MHz10 V/meff., 50% ED, 200 Hz
Αγωγή ραδιοσυχνοτήτωνEN 61000-4-6150 kHz – 80 MHz10 V, 80% AM, 1 kHz
Παρεμβολή ριπής Γραμμές τροφοδοσίας Επεξεργασία γραμμών δεδομένων Γραμμές σήματοςEN 61000-4-42kV2kV1kV
Συσκευή υποστήριξης 
Θύρα UARTΥποστήριξη RS232 / RS422 / RS485 / TTL
Θύρα δικτύουΥποστήριξη Θύρα Ethernet / Wi-Fi / Bluetooth
Flash MemoryΥποστήριξη Standard 256MB, Extend 1GB ή 2GB
ΒομβητήςΥποστήριξη
RTCΥποστήριξη
Θύρα USBΥποστήριξη Online Λήψη με καλώδιο USB
U Storage Disk InterfaceΥποστήριξη.Λήψη εκτός σύνδεσης ή Αντιγραφή δεδομένων χρήστη
Οθόνη αφής4 Αντίσταση καλωδίων / Χωρητική
Διανυσματική γραμματοσειράΤυπική μορφή TTF
ΕικόναΥποστήριξη μορφής PNG/JPG/BMP/SVG/GIF
Audio InterfaceΥποστήριξη μορφής WAVΤο μήκος ενός μεμονωμένου αρχείου ήχου δεν είναι περιορισμένο, θεωρητικά έως 4096 αρχεία ήχου, η ισχύς του ηχείου είναι 8 ohms 2 watt ή 4 ohms 3 watts
Σετ εντολώνΕνοποιημένα Απλοποιημένα Σύνολα Εντολών
Μνήμη 
Flash MemoryΤυπικό 256 MB, επέκταση 1 GB ή 2 GB
Ποσό μνήμης για εικόναΑνάλογα με τη δυνατότητα της εικόνας, προτείνετε μορφή «PNG, BMP, JPG, SVG, GIF».

(Β) πλακέτα STM32

Χρησιμοποιώντας μια πλακέτα STM32, το τσιπ του STM32 είναι CKS32F303.

Παιχνίδι Tic-tac-toe Βασισμένο σε STONE TFT LCD και STM32 IOT PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Η οικογένεια πυρήνων STM32 ARM Cortex-M0, M0+, M3, M4 και M7 έχει σχεδιαστεί για ενσωματωμένες εφαρμογές που απαιτούν υψηλή απόδοση, χαμηλό κόστος και χαμηλή κατανάλωση ενέργειας.

  • Τροφοδοτικό 2.0V-3.6V
  • Καρφίτσες I/O συμβατές με 5V
  • Εξαιρετική ασφαλής λειτουργία ρολογιού
  • Λειτουργία χαμηλής ισχύος με λειτουργία αφύπνισης
  • Εσωτερικός ταλαντωτής RC
  • Ενσωματωμένο κύκλωμα επαναφοράς
  • Εύρος θερμοκρασίας λειτουργίας.
  • -40°C έως +85°C ή 105°C

Σχεδιασμός λογισμικού συστήματος

Η διαδικασία ανάπτυξης της οθόνης STM32 και STONE LCD

1: δημιουργήστε το έργο και φορτώστε τις απαιτούμενες εικόνες στο έργο.

2: χρησιμοποιήστε το λογισμικό Stone-designer για να δημιουργήσετε δυναμικά συσχετισμένες σχέσεις. τα κύρια στοιχεία ελέγχου είναι: "Κουμπί", "εικόνα";

3: προσομοίωση και μεταγλώττιση λογισμικού για τη δημιουργία εκτελέσιμων αρχείων.

4: η οθόνη LCD συνδέεται στον υπολογιστή μέσω USB και αντιγράφει το εκτελέσιμο αρχείο στην οθόνη.

Πρώτα δημιουργήστε ένα νέο έργο όπως φαίνεται παρακάτω.

Παιχνίδι Tic-tac-toe Βασισμένο σε STONE TFT LCD και STM32 IOT PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.
Παιχνίδι Tic-tac-toe Βασισμένο σε STONE TFT LCD και STM32 IOT PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Δεύτερον, εισάγετε όλες τις εικόνες στον πόρο

Παιχνίδι Tic-tac-toe Βασισμένο σε STONE TFT LCD και STM32 IOT PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Στη συνέχεια, ρυθμίστε τα κουμπιά ελέγχου σε κάθε πλέγμα και κάντε τα κουμπιά αόρατα. 

Παιχνίδι Tic-tac-toe Βασισμένο σε STONE TFT LCD και STM32 IOT PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Μην ξεχάσετε να ρυθμίσετε το κουμπί επαναφοράς!

Το τελικό αποτέλεσμα φαίνεται παρακάτω:

Παιχνίδι Tic-tac-toe Βασισμένο σε STONE TFT LCD και STM32 IOT PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Μετά από αυτό, προσθέστε στοιχεία ελέγχου εικόνας σε κάθε πλέγμα με τον ίδιο τρόπο και ορίστε τα όλα σε λευκές εικόνες.

Τέλος, προσθέστε το στοιχείο ελέγχου gif και ορίστε το σε αόρατο.

Τα μέρη του τελικού εφέ φαίνονται παρακάτω:

Παιχνίδι Tic-tac-toe Βασισμένο σε STONE TFT LCD και STM32 IOT PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.
Παιχνίδι Tic-tac-toe Βασισμένο σε STONE TFT LCD και STM32 IOT PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.
Παιχνίδι Tic-tac-toe Βασισμένο σε STONE TFT LCD και STM32 IOT PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.
Παιχνίδι Tic-tac-toe Βασισμένο σε STONE TFT LCD και STM32 IOT PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Διάγραμμα σύνδεσης κυκλώματος

Παιχνίδι Tic-tac-toe Βασισμένο σε STONE TFT LCD και STM32 IOT PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Κοινή χρήση κώδικα

/* Περιλαμβάνει ———————————————————————*/ 

#include "stm32f0xx_hal.h" 

#include "Uart.h" 

#include "string.h" 

#include "ws2812.h" 

#include "IWDG.h" 

RGB_COLOR USER_RGB_COLOR; 

ανυπόγραφο char TX_Mode = 1; //Τύπος μετάδοσης bit flag 1:232 0:TTL 

ανυπόγραφο χαρακτήρα BLINK_2=0; 

ανυπόγραφο char RX3_BUF[32]; //Προσαρμοσμένο buffer λήψης τριών επιπέδων 

#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 

ανυπόγραφο int r_flag1 = 0; 

ανυπόγραφο int quan[4][2]={0}; 

ανυπόγραφο int cha [4][2]={0}; 

ανυπόγραφο int quan_hang1 = 0; 

ανυπόγραφο int quan_hang2 = 0; 

ανυπόγραφο int quan_hang3 = 0; 

ανυπόγραφο int quan_lie1 = 0; 

ανυπόγραφο int quan_lie2 = 0; 

ανυπόγραφο int quan_lie3 = 0; 

ανυπόγραφο int quan_zuoxia = 0; 

ανυπόγραφο int quan_youxia = 0; 

ανυπόγραφο int cha_hang1 = 0; 

ανυπόγραφο int cha_hang2 = 0; 

ανυπόγραφο int cha_hang3 = 0; 

ανυπόγραφο int cha_lie1 = 0; 

ανυπόγραφο int cha_lie2 = 0; 

ανυπόγραφο int cha_lie3 = 0; 

ανυπόγραφο int cha_zuoxia = 0; 

ανυπόγραφο int cha_youxia = 0; //unsigned int r_flag10 = 0; 

void SystemClock_Config(void); 

void Error_Handler(void); 

static void MX_GPIO_Init(void); 

int main (void) 

uint8_t color_buf = 0; 

//Επιλογή συνάρτησης 

/* Επαναφορά όλων των περιφερειακών, Εκκινεί τη διεπαφή Flash και το Systick. */ 

HAL_Init(); 

/* Διαμόρφωση του ρολογιού συστήματος */ 

SystemClock_Config(); 

/* Αρχικοποίηση όλων των διαμορφωμένων περιφερειακών */ 

MX_GPIO_Init(); 

TX_Mode = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_4); 

if (TX_Mode) 

MX_USART1_UART_Init(); 

//232 Αρχικοποίηση 

αλλιώς 

MX_USART1_UART_Init2(); 

//TTl Αρχικοποίηση 

ενώ (1) 

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

HAL_NVIC_SystemReset(); 

//Αντιστροφή jumper, επανεκκίνηση και επανεκκίνηση 

if(MNG_USART1.RX_OVER_FLG ==TRUE) 

// 

Τα σειριακά δεδομένα λαμβάνουν bit σημαίας 

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

//Μέθοδος 2: Λήψη ονόματος ελέγχου σταθερού μήκους 

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

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

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

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

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

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

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

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

//Επιλογή ελέγχου

color_buf = BUTTON1; 

}

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

color_buf = BUTTON2; 

}

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

color_buf = BUTTON3; 

}

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

color_buf = BUTTON4; 

}

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

color_buf = BUTTON5; 

}

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

color_buf = BUTTON6; 

}

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

color_buf = BUTTON7; 

}

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

color_buf = BUTTON8; 

}

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

color_buf = BUTTON9; 

}

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

color_buf = BUTTON0; 

}

διακόπτης (color_buf) 

ΚΟΥΜΠΙ θήκης 1: 

//if(r_flag1 == 0) 

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

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

r_flag1 ^= 1; 

sprintf((χαρ *)MNG_USART1.TX_BUF, 

"ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget":\"image2",\"image":\"circle\" "}>ET"); 

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

USART_TX_Data(MNG_USART1); 

r_flag1 ^= 1; 

quan_hang1++; 

quan_lie1++; 

quan_youxia++;  

//memset(RX3_BUF,0,7); 

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

color_buf = CLEAR; 

}

αλλιώς if((r_flag1 == 1)&&(MNG_USART1.RX_BUF[14] == 0x02)) 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((χαρ *)MNG_USART1.TX_BUF, 

"ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget":\"image2\",\"image\":\"x\ "}>ET"); 

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

USART_TX_Data(MNG_USART1); 

r_flag1 = 0; 

cha_hang1++; 

cha_lie1++; 

cha_youxia++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

//r_flag1 = 1; 

σπάσει? 

ΚΟΥΜΠΙ θήκης 2: 

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

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((χαρ *)MNG_USART1.TX_BUF, 

"ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget":\"image3",\"image":\"circle\" "}>ET"); 

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

USART_TX_Data(MNG_USART1); 

r_flag1 = 1; 

quan_hang1++; 

quan_lie2++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

αλλιώς if((r_flag1 == 1)&&(MNG_USART1.RX_BUF[14] == 0x02)) 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((χαρ *)MNG_USART1.TX_BUF, 

"ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget":\"image3\",\"image\":\"x\ "}>ET"); 

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

USART_TX_Data(MNG_USART1); 

r_flag1 = 0; 

cha_hang1++; 

cha_lie2++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

σπάσει? 

ΚΟΥΜΠΙ θήκης 3: 

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

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((χαρ *)MNG_USART1.TX_BUF, 

"ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget":\"image4",\"image":\"circle\" "}>ET"); 

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

USART_TX_Data(MNG_USART1); 

r_flag1 = 1; 

quan_hang1++; 

quan_lie3++; 

quan_zuoxia++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

αλλιώς if((r_flag1 == 1)&&(MNG_USART1.RX_BUF[14] == 0x02)) 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((χαρ *)MNG_USART1.TX_BUF, 

"ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget":\"image4\",\"image\":\"x\ "}>ET"); 

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

USART_TX_Data(MNG_USART1); 

r_flag1 = 0; 

cha_hang1++; 

cha_lie3++; 

cha_zuoxia++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

σπάσει? 

ΚΟΥΜΠΙ θήκης 4: 

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

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((χαρ *)MNG_USART1.TX_BUF, 

"ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget":\"image5",\"image":\"circle\" "}>ET"); 

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

USART_TX_Data(MNG_USART1); 

r_flag1 = 1; 

quan_hang2++; 

quan_lie1++; 

//memset(RX3_BUF,0,7); 

//r_flag10=1; 

color_buf = CLEAR; 

}

αλλιώς if((r_flag1 == 1)&&(MNG_USART1.RX_BUF[14] == 0x02)) 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((χαρ *)MNG_USART1.TX_BUF, 

"ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget":\"image5\",\"image\":\"x\ "}>ET"); 

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

USART_TX_Data(MNG_USART1); 

r_flag1 = 0; 

cha_hang2++; 

cha_lie1++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

σπάσει? 

ΚΟΥΜΠΙ θήκης 5: 

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

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((χαρ *)MNG_USART1.TX_BUF, 

"ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget":\"image6",\"image":\"circle\" "}>ET"); 

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

USART_TX_Data(MNG_USART1); 

r_flag1 = 1; 

quan_hang2++; 

quan_lie2++; 

quan_zuoxia++; 

quan_youxia++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

αλλιώς if((r_flag1 == 1)&&(MNG_USART1.RX_BUF[14] == 0x02)) 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((χαρ *)MNG_USART1.TX_BUF, 

"ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget":\"image6\",\"image\":\"x\ "}>ET"); 

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

USART_TX_Data(MNG_USART1); 

r_flag1 = 0; 

cha_hang2++; 

cha_lie2++; 

cha_zuoxia++; 

cha_youxia++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

σπάσει? 

ΚΟΥΜΠΙ θήκης 6: 

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

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((χαρ *)MNG_USART1.TX_BUF, 

"ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget":\"image7",\"image":\"circle\" "}>ET"); 

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

USART_TX_Data(MNG_USART1); 

r_flag1 = 1; 

quan_hang2++; 

quan_lie3++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

αλλιώς if((r_flag1 == 1)&&(MNG_USART1.RX_BUF[14] == 0x02))

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((χαρ *)MNG_USART1.TX_BUF, 

"ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget":\"image7\",\"image\":\"x\ "}>ET"); 

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

USART_TX_Data(MNG_USART1); 

r_flag1 = 0; 

cha_hang2++; 

cha_lie3++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

σπάσει? 

ΚΟΥΜΠΙ θήκης 7: 

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

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((χαρ *)MNG_USART1.TX_BUF, 

"ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget":\"image8",\"image":\"circle\" "}>ET"); 

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

USART_TX_Data(MNG_USART1); 

r_flag1 = 1; 

quan_hang3++; 

quan_lie1++; 

quan_zuoxia++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

αλλιώς if((r_flag1 == 1)&&(MNG_USART1.RX_BUF[14] == 0x02)) 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((χαρ *)MNG_USART1.TX_BUF, 

"ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget":\"image8\",\"image\":\"x\ "}>ET"); 

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

USART_TX_Data(MNG_USART1); 

r_flag1 = 0; 

cha_hang3++; 

cha_lie1++; 

cha_zuoxia++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

σπάσει? 

ΚΟΥΜΠΙ θήκης 8: 

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

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((χαρ *)MNG_USART1.TX_BUF, 

"ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget":\"image9",\"image":\"circle\" "}>ET"); 

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

USART_TX_Data(MNG_USART1); 

r_flag1 = 1; 

quan_hang3++; 

quan_lie2++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

αλλιώς if((r_flag1 == 1)&&(MNG_USART1.RX_BUF[14] == 0x02)) 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((χαρ *)MNG_USART1.TX_BUF, 

"ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget":\"image9\",\"image\":\"x\ "}>ET"); 

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

USART_TX_Data(MNG_USART1); 

r_flag1 = 0; 

cha_hang3++; 

cha_lie2++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

σπάσει? 

ΚΟΥΜΠΙ θήκης 9: 

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

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((χαρ *)MNG_USART1.TX_BUF, 

"ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget":\"image10",\"image":\"circle\" "}>ET");

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

USART_TX_Data(MNG_USART1); 

r_flag1 = 1; 

quan_hang3++; 

quan_lie3++; 

quan_youxia++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

αλλιώς if((r_flag1 == 1)&&(MNG_USART1.RX_BUF[14] == 0x02)) 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((χαρ *)MNG_USART1.TX_BUF, 

"ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget":\"image10\",\"image\":\"x\ "}>ET"); 

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

USART_TX_Data(MNG_USART1); 

r_flag1 = 0; 

cha_hang3++; 

cha_lie3++; 

cha_youxia++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

σπάσει? 

ΚΟΥΜΠΙ θήκης 0: 

r_flag1 = 0; 

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

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

quan_zuoxia=quan_youxia=cha_zuoxia=cha_youxia=0; 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((χαρ *)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((χαρ *)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((χαρ *)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((χαρ *)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((χαρ *)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((χαρ *)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((χαρ *)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((χαρ *)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((χαρ *)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((χαρ *)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((χαρ *)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((χαρ *)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((χαρ *)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((χαρ *)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((χαρ *)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((χαρ *)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((χαρ *)MNG_USART1.TX_BUF, 

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

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

USART_TX_Data(MNG_USART1); 

//memset(RX3_BUF,0,7); 

memset(MNG_USART1.RX_BUF,0,USART1_RX_LEN); 

σπάσει? 

προεπιλογή: 

MNG_USART1.RX_OVER_FLG = FALSE; 

σπάσει? 

}

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

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

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((χαρ *)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; 

}

αλλιώς if((quan_hang2==3)||(cha_hang2==3)) 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((χαρ *)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; 

}

αλλιώς if((quan_hang3==3)||(cha_hang3==3)) 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((χαρ *)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; 

}

αλλιώς if((quan_lie1==3)||(cha_lie1==3)) 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((χαρ *)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; 

}

αλλιώς if((quan_lie2==3)||(cha_lie2==3)) 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((χαρ *)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; 

}

αλλιώς if((quan_lie3==3)||(cha_lie3==3)) 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((χαρ *)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; 

}

αλλιώς εάν((quan_zuoxia==3)||(cha_zuoxia==3)) 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((χαρ *)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; 

}

αλλιώς if((quan_youxia==3)||(cha_youxia==3)) 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((χαρ *)MNG_USART1.TX_BUF, 

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

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

USART_TX_Data(MNG_USART1); 

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

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

quan_zuoxia=quan_youxia=cha_zuoxia=cha_youxia=0; 

MNG_USART1.RX_OVER_FLG = FALSE; 

}

/** Διαμόρφωση ρολογιού συστήματος 

*/

void SystemClock_Config(void) 

RCC_OscInitTypeDef RCC_OscInitStruct; 

RCC_ClkInitTypeDef RCC_ClkInitStruct; 

RCC_PeriphCLKInitTypeDef PeriphClkInit; 

RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; 

RCC_OscInitStruct.HSIState = RCC_HSI_ON; 

RCC_OscInitStruct.HSICcalibrationValue = 16; 

RCC_OscInitStruct.PLL.PLLSκατάσταση = RCC_PLL_ON; 

RCC_OscInitStruct.PLL.PLLSπηγή = RCC_PLLSOURCE_HSI; 

RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL12; 

RCC_OscInitStruct.PLL.PREDIV = RCC_PREDIV_DIV1; 

if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) 

Error_Handler(); 

}

RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK 

|RCC_CLOCKTYPE_PCLK1; 

RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; 

RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; 

RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; 

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

Error_Handler(); 

}

PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1; 

PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK1; 

if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) 

Error_Handler(); 

}

HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000); 

HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK); 

/* Διαμόρφωση διακοπής SysTick_IRQn */ 

HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); 

}

/** Ρύθμιση παραμέτρων Pinout 

*/

static void MX_GPIO_Init(void) 

GPIO_InitTypeDef GPIO_InitStruct; 

/* GPIO Ports Clock Enable */ 

__HAL_RCC_GPIOA_CLK_ENABLE(); 

GPIO_InitStruct.Pin = GPIO_PIN_7; 

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP ; 

GPIO_InitStruct.Pull = GPIO_PULLDOWN; 

GPIO_InitStruct.Speed ​​= GPIO_SPEED_FREQ_HIGH; 

HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); 

GPIO_InitStruct.Pin = GPIO_PIN_4; 

GPIO_InitStruct.Mode = GPIO_MODE_INPUT; 

GPIO_InitStruct.Pull = GPIO_PULLUP; 

GPIO_InitStruct.Speed ​​= GPIO_SPEED_FREQ_HIGH; 

HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); 

}

/* ΚΩΔΙΚΟΣ ΧΡΗΣΤΗ ΑΡΧΗ 4 */

/* ΚΩΔΙΚΟΣ ΧΡΗΣΤΗ ΤΕΛΟΣ 4 */ 

/ **

* @brief Αυτή η λειτουργία εκτελείται σε περίπτωση εμφάνισης σφάλματος. 

* @param Κανένα 

* @retval Κανένα 

*/ 

void Error_Handler(void) 

/* ΚΩΔΙΚΟΣ ΧΡΗΣΤΗ BEGIN Error_Handler */ 

/* Ο χρήστης μπορεί να προσθέσει τη δική του υλοποίηση για να αναφέρει την κατάσταση επιστροφής σφάλματος HAL */ 

ενώ (1) 

{

}

/* ΚΩΔΙΚΟΣ ΧΡΗΣΤΗ ΤΕΛΟΣ Error_Handler */ 

}

#ifdef USE_FULL_ASSERT 

/ **

* @brief Αναφέρει το όνομα του αρχείου προέλευσης και τον αριθμό γραμμής πηγής 

* όπου παρουσιάστηκε το σφάλμα assert_param. 

* Αρχείο @param: δείκτης στο όνομα του αρχείου προέλευσης 

* Γραμμή @param: αριθμός πηγής γραμμής σφάλματος assert_param 

* @retval Κανένα 

*/ 

void assert_failed(αρχείο uint8_t*, γραμμή uint32_t) 

/* ΚΩΔΙΚΟΣ ΧΡΗΣΤΗ ΑΡΧΗ 6 */ 

/* Ο χρήστης μπορεί να προσθέσει τη δική του υλοποίηση για να αναφέρει το όνομα του αρχείου και τον αριθμό γραμμής, 

π.χ: printf("Λάθος τιμή παραμέτρων: αρχείο %s στη γραμμή %d\r\n", αρχείο, γραμμή) */ 

/* ΚΩΔΙΚΟΣ ΧΡΗΣΤΗ ΤΕΛΟΣ 6 */ 

}

#endif 

/ **

* @} 

*/ 

/ **

* @} 

*/

/************************ (Γ) ΠΝΕΥΜΑΤΙΚΑ ΔΙΚΑΙΩΜΑΤΑ STMicroelectronics *****END OF FILE****/

Τα τελικά αποτελέσματα δείχνουν

Παιχνίδι Tic-tac-toe Βασισμένο σε STONE TFT LCD και STM32 IOT PlatoBlockchain Data Intelligence. Κάθετη αναζήτηση. Ολα συμπεριλαμβάνονται.

Πηγή: Intelligence Data Intelligence