IOT

Tic-Tac-Toe-Spiel basierend auf STONE TFT LCD und STM32

Zusammenfassung

Tic-Tac-Toe ist ein Spiel, das auf einem 3 x 3 Raster gespielt wird, ähnlich wie Gobang. Es hat seinen Namen, weil das Board im Allgemeinen keine Grenzen zeichnet und die Gitterlinien in Tic-Tac-Toe angeordnet sind. Die für das Spiel benötigten Werkzeuge sind nur Papier und Stift. Dann wechseln sich zwei Spieler, die O und X repräsentieren, ab, um Markierungen auf dem Raster zu hinterlassen. Drei beliebige Markierungen bilden eine gerade Linie, die der Gewinner ist.

Dieser Artikel dient dazu, den Mikrocontroller STM32 und das STONE-LCD-Display zu verwenden, um ein einfaches Tic-Tac-Toe-Spiel zu entwickeln.

Benötigte Materialien für das Experiment

Das Systemprinzip

Geben Sie an, dass das erste Tippen auf dem Bildschirm O sein muss, das zweite Tippen auf dem Bildschirm ist X, hat diesen Zyklus durchgeführt. Stellen Sie 8 Arrays ein, um die Anzahl von O und X in jeder Reihe, Spalte und Diagonale jedes Rasters zu speichern, solange es drei gleiche Zeichen gibt, ist der Sieg, dann wird es ein blinkendes rotes Kästchen geben, um den Sieg des zu beweisen Zeile, Spalte oder Diagonale und tippen Sie dann auf Zurücksetzen, um das Spiel erneut zu starten.

Nachfolgend das Flussdiagramm:

Tic-Tac-Toe-Spiel Basierend auf STONE TFT LCD und STM32 IOT PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Hardwaredesign des STM32- und STONE-LCD-Anzeigesystems

(A) STEIN LCD-Display

  1. „Tic-Tac-Toe-Spiel“-Hardwaredesign

Verwenden Sie das STONE LCD-Display von Beijing STONE Technology Co., Ltd., das Modell ist STWI070WT-01, mit integriertem TFT-Display und Touch-Controller.

Tic-Tac-Toe-Spiel Basierend auf STONE TFT LCD und STM32 IOT PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.
  1.  STVC070WT-01 Produktmerkmale
Physikalischer Parameter 
Größe7 Zoll
Auflösung800 × RGB × 480
Pixelabstand0.0642 (B) × 0.1790 (H) mm
Farbe262,144 Farben (18 Bit)
Sichtfeld154.08 (B) × 85.92 (H) mm
Anzeige Dimension186.4mmx105.5mm
Insgesamt Dimension186.4 mm x 105.5 mm x 17.4 mm (Standardtyp) 186.4 mm x 105.5 mm x 23.8 mm (mit Ethernet-Anschluss)
Nettogewicht300 g
Display 
Hintergrundbeleuchtung TypLED
Brightness300 cd/m2 (Helligkeit kann in 100 Stufen eingestellt werden)
Kontrast-Funktion500:1
Leben bei Hintergrundbeleuchtung300,000 Stunden
Blickwinkel70 ° / 70 ° / 50 ° / 70 ° (L / R / U / D)
TFT-PanelEin Branchenpanel der Extraklasse
Touch-Screen4-Draht-Widerstandsberührung / kapazitive Berührung / ohne Touchscreen
Bildschirmmodus:Digital
Prozessor 
CPUCortex A8
Wiederholfrequenz1G Hz
Maximale Bildrate60 FPS
Schnittstelle 
Serielle SchnittstelleRS232 / RS422 / RS485 / TTL-Pegel
Ethernet-Schnittstelle10M/100M (optional)
Drahtlose SchnittstelleWLAN/Bluetooth (optional)
Projektdatei herunterladenUSB2.0-Port oder U-Speicherdisk
Labor-Stromversorgungen 
Bemessungsspannung+12V DC oder +5V DC
Zulässiger Spannungsbereich+7V DC…+28V DC oder +5V DC
max. zulässige Transienten+ 28V
Zeit zwischen zwei TransientenMindestens 50 Sek.
Interne Sicherung2A Selbstwiederherstellungssicherung
Energieverbrauch3.0 W
Umgebungsbedingungen 
max. zulässige UmgebungstemperaturOperationStorage-20℃~ +70℃-30℃~ +80℃
Relative LuftfeuchteOperationStorage55℃,85%60℃,90%
StoßbelastungOperationStorage15 g/11 ms25 g/6 ms
VibrationOperationStorage0.035 mm (10 – 58 Hz)/ 1 g (58 – 500 Hz)3.5 mm (5 – 8,5 Hz)/ 1 g (8.5 – 500 Hz)
LuftdruckOperationStorage706 bis 1030 hPa581 bis 1030 hPa
Geräuschunempfindlichkeit 
Statische Entladung (Kontaktentladung/Luftentladung)EN 61000-4-2 6 kV/8 kV
HF-BestrahlungEN 61000-4-310 V/m, 80 % AM1 kHz
PulsmodulationENV 50204900 MHz ±5 MHz10 V/meff., 50 % ED, 200 Hz
HF-LeitungEN 61000-4-6150 kHz – 80 MHz10 V, 80 % AM, 1 kHz
Burst-StörungenVersorgungsleitungenProzessdatenleitungenSignalleitungenEN 61000-4-42kV2kV1kV
Unterstützung Gerät 
UART-PortUnterstützt RS232 / RS422 / RS485 / TTL
Netzwerk-PortUnterstützt Ethernet-Port / Wi-Fi / Bluetooth
Flash-SpeicherSupportStandard 256 MB, Erweiterung 1 GB oder 2 GB
SummerUnterstützung
RTCUnterstützung
USB-AnschlussSupportOnline-Download per USB-Kabel
U SpeicherplattenschnittstelleSupport.Offline-Benutzerdaten herunterladen oder kopieren
Touch-Screen4-Draht-Widerstand / kapazitiv
VektorschriftStandard-TTF-Format
BildUnterstützt PNG/JPG/BMP/SVG/GIF-Format
Audio InterfaceUnterstützt das WAV-Format. Die Länge einer einzelnen Audiodatei ist nicht begrenzt, theoretisch bis zu 4096 Audiodateien, die Lautsprecherleistung beträgt 8 Ohm 2 Watt oder 4 Ohm 3 Watt
BefehlssatzEinheitliche vereinfachte Befehlssätze
Memory 
Flash-SpeicherStandard 256 MB, Erweiterung 1 GB oder 2 GB
Speichermenge für BildJe nach Fähigkeit des Bildes schlagen Sie das Format „PNG, BMP, JPG, SVG, GIF“ vor.

(B) STM32-Platine

Bei Verwendung eines STM32-Boards ist der Chip des STM32 CKS32F303.

Tic-Tac-Toe-Spiel Basierend auf STONE TFT LCD und STM32 IOT PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Die STM32-Familie von ARM Cortex-M0-, M0+-, M3-, M4- und M7-Kernen wurde für eingebettete Anwendungen entwickelt, die hohe Leistung, niedrige Kosten und geringen Stromverbrauch erfordern.

  • 2.0V-3.6V Netzteil
  • 5V kompatible I/O-Pins
  • Ausgezeichneter sicherer Uhrmodus
  • Energiesparmodus mit Weckfunktion
  • Interner RC-Oszillator
  • Eingebettete Reset-Schaltung
  • Betriebstemperaturbereich.
  • -40 °C bis +85 °C oder 105 °C

Systemsoftware-Design

Der Entwicklungsprozess von STM32 und STONE LCD-Display

1: Erstellen Sie das Projekt und laden Sie die benötigten Bilder in das Projekt.

2: Verwenden Sie die Stone-Designer-Software, um dynamisch verknüpfte Beziehungen zu erstellen; die wichtigsten Steuerelemente sind: „Schaltfläche“, „Bild“;

3: Softwaresimulation und Kompilierung zur Generierung ausführbarer Dateien.

4: das LCD-Display wird über USB mit dem PC verbunden und die ausführbare Datei auf den Bildschirm kopiert.

Erstellen Sie zunächst wie unten gezeigt ein neues Projekt.

Tic-Tac-Toe-Spiel Basierend auf STONE TFT LCD und STM32 IOT PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.
Tic-Tac-Toe-Spiel Basierend auf STONE TFT LCD und STM32 IOT PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Zweitens importieren Sie alle Bilder in die Ressource

Tic-Tac-Toe-Spiel Basierend auf STONE TFT LCD und STM32 IOT PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Legen Sie dann die Schaltflächensteuerungen auf jedes Raster fest und machen Sie die Schaltflächen unsichtbar. 

Tic-Tac-Toe-Spiel Basierend auf STONE TFT LCD und STM32 IOT PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Vergessen Sie nicht, den Reset-Knopf zu setzen!

Der fertige Effekt ist unten dargestellt:

Tic-Tac-Toe-Spiel Basierend auf STONE TFT LCD und STM32 IOT PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Danach fügen Sie jedem Raster auf die gleiche Weise Bildsteuerelemente hinzu und stellen Sie alle auf weiße Bilder ein.

Fügen Sie schließlich das GIF-Steuerelement hinzu und stellen Sie es auf unsichtbar.

Die Teile des fertigen Effekts sind unten gezeigt:

Tic-Tac-Toe-Spiel Basierend auf STONE TFT LCD und STM32 IOT PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.
Tic-Tac-Toe-Spiel Basierend auf STONE TFT LCD und STM32 IOT PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.
Tic-Tac-Toe-Spiel Basierend auf STONE TFT LCD und STM32 IOT PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.
Tic-Tac-Toe-Spiel Basierend auf STONE TFT LCD und STM32 IOT PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Stromlaufplan

Tic-Tac-Toe-Spiel Basierend auf STONE TFT LCD und STM32 IOT PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Code-Sharing

/* Enthält ———————————————————————*/ 

#include „stm32f0xx_hal.h“ 

#include "Uart.h" 

#include "string.h" 

#include „ws2812.h“ 

#include "IWDG.h" 

RGB_FARBE USER_RGB_FARBE; 

unsigned char TX_Mode = 1; // Übertragungstyp-Flag-Bit 1:232 0:TTL 

unsigniertes Zeichen BLINK_2=0; 

unsigniertes Zeichen RX3_BUF[32]; // Kundenspezifischer dreistufiger Empfangspuffer 

#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 LÖSCHEN 0x8E 

unsigned int r_flag1 = 0; 

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

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

unsigned int quan_hang1 = 0; 

unsigned int quan_hang2 = 0; 

unsigned int quan_hang3 = 0; 

unsigned int quan_lie1 = 0; 

unsigned int quan_lie2 = 0; 

unsigned int quan_lie3 = 0; 

unsigned int quan_zuoxia = 0; 

unsigned int quan_youxia = 0; 

unsigned int cha_hang1 = 0; 

unsigned int cha_hang2 = 0; 

unsigned int cha_hang3 = 0; 

unsigned int cha_lie1 = 0; 

unsigned int cha_lie2 = 0; 

unsigned int cha_lie3 = 0; 

unsigned int cha_zuoxia = 0; 

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

void SystemClock_Config (void); 

void Error_Handler (nichtig); 

statisch leer MX_GPIO_Init(void); 

int Haupt (leer) 

uint8_t color_buf = 0; 

//Funktionsauswahl 

/* Reset aller Peripheriegeräte, Initialisiert die Flash-Schnittstelle und den Systick. */ 

HAL_Init(); 

/* Systemuhr konfigurieren */ 

SystemClock_Config(); 

/* Alle konfigurierten Peripheriegeräte initialisieren */ 

MX_GPIO_Init(); 

TX_Mode = HAL_GPIO_ReadPin (GPIOA, GPIO_PIN_4); 

if(TX_Modus) 

MX_USART1_UART_Init(); 

//232 Initialisierung 

sonst 

MX_USART1_UART_Init2(); 

//TTl-Initialisierung 

während (1) 

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

HAL_NVIC_SystemReset(); 

//Jumper-Umkehrung, Neustart und Neuinitialisierung 

if(MNG_USART1.RX_OVER_FLG ==TRUE) 

// 

Serielles Datenempfangs-Flag-Bit 

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

// Methode 2: Steuernamen mit fester Länge abrufen 

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) 

//Steuerung auswählen

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; 

}

Schalter (color_buf) 

Fall TASTE1: 

//if(r_flag1 == 0) 

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

memset (MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

r_flag1 ^= 1; 

sprintf((char *)MNG_USART1.TX_BUF, 

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

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

USART_TX_Data (MNG_USART1); 

r_flag1 ^= 1; 

quan_hang1++; 

quan_lie1++; 

quan_youxia++;  

// Speichersatz (RX3_BUF,0,7); 

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

color_buf = LÖSCHEN; 

}

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

memset (MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF, 

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

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

USART_TX_Data (MNG_USART1); 

r_flag1 = 0; 

cha_hang1++; 

cha_lie1++; 

cha_youxia++; 

// Speichersatz (RX3_BUF,0,7); 

color_buf = LÖSCHEN; 

}

//r_flag1 = 1; 

break; 

Fall TASTE2: 

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

memset (MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF, 

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

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

USART_TX_Data (MNG_USART1); 

r_flag1 = 1; 

quan_hang1++; 

quan_lie2++; 

// Speichersatz (RX3_BUF,0,7); 

color_buf = LÖSCHEN; 

}

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

memset (MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF, 

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

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

USART_TX_Data (MNG_USART1); 

r_flag1 = 0; 

cha_hang1++; 

cha_lie2++; 

// Speichersatz (RX3_BUF,0,7); 

color_buf = LÖSCHEN; 

}

break; 

Fall TASTE3: 

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

memset (MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF, 

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

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

USART_TX_Data (MNG_USART1); 

r_flag1 = 1; 

quan_hang1++; 

quan_lie3++; 

quan_zuoxia++; 

// Speichersatz (RX3_BUF,0,7); 

color_buf = LÖSCHEN; 

}

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

memset (MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF, 

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

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

USART_TX_Data (MNG_USART1); 

r_flag1 = 0; 

cha_hang1++; 

cha_lie3++; 

cha_zuoxie++; 

// Speichersatz (RX3_BUF,0,7); 

color_buf = LÖSCHEN; 

}

break; 

Fall TASTE4: 

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

memset (MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF, 

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

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

USART_TX_Data (MNG_USART1); 

r_flag1 = 1; 

quan_hang2++; 

quan_lie1++; 

// Speichersatz (RX3_BUF,0,7); 

//r_flag10=1; 

color_buf = LÖSCHEN; 

}

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

memset (MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF, 

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

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

USART_TX_Data (MNG_USART1); 

r_flag1 = 0; 

cha_hang2++; 

cha_lie1++; 

// Speichersatz (RX3_BUF,0,7); 

color_buf = LÖSCHEN; 

}

break; 

Fall TASTE5: 

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

memset (MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF, 

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

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

USART_TX_Data (MNG_USART1); 

r_flag1 = 1; 

quan_hang2++; 

quan_lie2++; 

quan_zuoxia++; 

quan_youxia++; 

// Speichersatz (RX3_BUF,0,7); 

color_buf = LÖSCHEN; 

}

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

memset (MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF, 

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

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

USART_TX_Data (MNG_USART1); 

r_flag1 = 0; 

cha_hang2++; 

cha_lie2++; 

cha_zuoxie++; 

cha_youxia++; 

// Speichersatz (RX3_BUF,0,7); 

color_buf = LÖSCHEN; 

}

break; 

Fall TASTE6: 

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

memset (MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF, 

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

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

USART_TX_Data (MNG_USART1); 

r_flag1 = 1; 

quan_hang2++; 

quan_lie3++; 

// Speichersatz (RX3_BUF,0,7); 

color_buf = LÖSCHEN; 

}

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

memset (MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF, 

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

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

USART_TX_Data (MNG_USART1); 

r_flag1 = 0; 

cha_hang2++; 

cha_lie3++; 

// Speichersatz (RX3_BUF,0,7); 

color_buf = LÖSCHEN; 

}

break; 

Fall TASTE7: 

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

memset (MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF, 

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

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

USART_TX_Data (MNG_USART1); 

r_flag1 = 1; 

quan_hang3++; 

quan_lie1++; 

quan_zuoxia++; 

// Speichersatz (RX3_BUF,0,7); 

color_buf = LÖSCHEN; 

}

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

memset (MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF, 

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

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

USART_TX_Data (MNG_USART1); 

r_flag1 = 0; 

cha_hang3++; 

cha_lie1++; 

cha_zuoxie++; 

// Speichersatz (RX3_BUF,0,7); 

color_buf = LÖSCHEN; 

}

break; 

Fall TASTE8: 

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

memset (MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF, 

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

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

USART_TX_Data (MNG_USART1); 

r_flag1 = 1; 

quan_hang3++; 

quan_lie2++; 

// Speichersatz (RX3_BUF,0,7); 

color_buf = LÖSCHEN; 

}

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

memset (MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF, 

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

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

USART_TX_Data (MNG_USART1); 

r_flag1 = 0; 

cha_hang3++; 

cha_lie2++; 

// Speichersatz (RX3_BUF,0,7); 

color_buf = LÖSCHEN; 

}

break; 

Fall TASTE9: 

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

memset (MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF, 

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

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

USART_TX_Data (MNG_USART1); 

r_flag1 = 1; 

quan_hang3++; 

quan_lie3++; 

quan_youxia++; 

// Speichersatz (RX3_BUF,0,7); 

color_buf = LÖSCHEN; 

}

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

memset (MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF, 

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

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

USART_TX_Data (MNG_USART1); 

r_flag1 = 0; 

cha_hang3++; 

cha_lie3++; 

cha_youxia++; 

// Speichersatz (RX3_BUF,0,7); 

color_buf = LÖSCHEN; 

}

break; 

Fall TASTE0: 

r_flag1 = 0; 

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

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

quan_zuoxia=quan_youxia=cha_zuoxia=cha_youxia=0; 

memset (MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF, 

„ST<{\“cmd_code\“:\“set_image\“,\“type\“:\“image\“,\“widget\“:\“image2\“,\“image\“:\“bai\ ”}>ET”); 

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

USART_TX_Data (MNG_USART1); 

memset (MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF, 

„ST<{\“cmd_code\“:\“set_image\“,\“type\“:\“image\“,\“widget\“:\“image3\“,\“image\“:\“bai\ ”}>ET”); 

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

USART_TX_Data (MNG_USART1); 

memset (MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF, 

„ST<{\“cmd_code\“:\“set_image\“,\“type\“:\“image\“,\“widget\“:\“image4\“,\“image\“:\“bai\ ”}>ET”); 

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

USART_TX_Data (MNG_USART1); 

memset (MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF, 

„ST<{\“cmd_code\“:\“set_image\“,\“type\“:\“image\“,\“widget\“:\“image5\“,\“image\“:\“bai\ ”}>ET”); 

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

USART_TX_Data (MNG_USART1); 

memset (MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF, 

„ST<{\“cmd_code\“:\“set_image\“,\“type\“:\“image\“,\“widget\“:\“image6\“,\“image\“:\“bai\ ”}>ET”); 

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

USART_TX_Data (MNG_USART1); 

memset (MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF, 

„ST<{\“cmd_code\“:\“set_image\“,\“type\“:\“image\“,\“widget\“:\“image7\“,\“image\“:\“bai\ ”}>ET”); 

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

USART_TX_Data (MNG_USART1); 

memset (MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF, 

„ST<{\“cmd_code\“:\“set_image\“,\“type\“:\“image\“,\“widget\“:\“image8\“,\“image\“:\“bai\ ”}>ET”); 

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

USART_TX_Data (MNG_USART1); 

memset (MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF, 

„ST<{\“cmd_code\“:\“set_image\“,\“type\“:\“image\“,\“widget\“:\“image9\“,\“image\“:\“bai\ ”}>ET”); 

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

USART_TX_Data (MNG_USART1);

memset (MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF, 

„ST<{\“cmd_code\“:\“set_image\“,\“type\“:\“image\“,\“widget\“:\“image10\“,\“image\“:\“bai\ ”}>ET”); 

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

USART_TX_Data (MNG_USART1); 

memset (MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF, 

„ST<{\“cmd_code\“:\“set_visible\“,\“type\“:\“widget\“,\“widget\“:\“gif4\“,\“visible\“:false}>ET “); 

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

USART_TX_Data (MNG_USART1); 

memset (MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF, 

„ST<{\“cmd_code\“:\“set_visible\“,\“type\“:\“widget\“,\“widget\“:\“gif5\“,\“visible\“:false}>ET “); 

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

USART_TX_Data (MNG_USART1); 

memset (MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF, 

„ST<{\“cmd_code\“:\“set_visible\“,\“type\“:\“widget\“,\“widget\“:\“gif6\“,\“visible\“:false}>ET “); 

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

USART_TX_Data (MNG_USART1); 

memset (MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF, 

„ST<{\“cmd_code\“:\“set_visible\“,\“type\“:\“widget\“,\“widget\“:\“gif7\“,\“visible\“:false}>ET “); 

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

USART_TX_Data (MNG_USART1); 

memset (MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF, 

„ST<{\“cmd_code\“:\“set_visible\“,\“type\“:\“widget\“,\“widget\“:\“gif8\“,\“visible\“:false}>ET “); 

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

USART_TX_Data (MNG_USART1); 

memset (MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF, 

„ST<{\“cmd_code\“:\“set_visible\“,\“type\“:\“widget\“,\“widget\“:\“gif9\“,\“visible\“:false}>ET “); 

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

USART_TX_Data (MNG_USART1); 

memset (MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF, 

„ST<{\“cmd_code\“:\“set_visible\“,\“type\“:\“widget\“,\“widget\“:\“gif10\“,\“visible\“:false}>ET “); 

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

USART_TX_Data (MNG_USART1); 

memset (MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF, 

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

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

USART_TX_Data (MNG_USART1); 

// Speichersatz (RX3_BUF,0,7); 

memset (MNG_USART1.RX_BUF,0,USART1_RX_LEN); 

break; 

Standard: 

MNG_USART1.RX_OVER_FLG = FALSCH; 

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; 

}

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

}

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

}

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

}

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

}

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

}

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

}

sonst 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 = FALSCH; 

}

/** Konfiguration der Systemuhr 

*/

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.HSCalibrationValue = 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 Interrupt-Konfiguration */ 

HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); 

}

/** Konfiguration der Pinbelegung 

*/

statisches Leerzeichen MX_GPIO_Init(void) 

GPIO_InitTypeDef GPIO_InitStruct; 

/* GPIO-Ports-Takt aktivieren */ 

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

}

/* BENUTZERCODE BEGIN 4 */

/* BENUTZERCODE ENDE 4 */ 

/ **

* @brief Diese Funktion wird im Fehlerfall ausgeführt. 

* @param Keine 

* @retval Keine 

*/ 

void Fehler_Handler(void) 

/* BENUTZERCODE BEGIN Error_Handler */ 

/* Der Benutzer kann seine eigene Implementierung hinzufügen, um den Rückgabestatus des HAL-Fehlers zu melden */ 

während (1) 

{

}

/* BENUTZERCODE END Error_Handler */ 

}

#ifdef USE_FULL_ASSERT 

/ **

* @brief Gibt den Namen der Quelldatei und die Quellzeilennummer aus 

* wo der assert_param-Fehler aufgetreten ist. 

* @param-Datei: Zeiger auf den Quelldateinamen 

* @param-Zeile: assert_param-Fehlerzeilen-Quellennummer 

* @retval Keine 

*/ 

void assert_failed(uint8_t* Datei, uint32_t Zeile) 

/* BENUTZERCODE BEGIN 6 */ 

/* Der Benutzer kann seine eigene Implementierung hinzufügen, um den Dateinamen und die Zeilennummer zu melden, 

ex: printf(“Falscher Parameterwert: Datei %s in Zeile %d\r\n”, Datei, Zeile) */ 

/* BENUTZERCODE ENDE 6 */ 

}

#endif 

/ **

* @} 

*/ 

/ **

* @} 

*/

/************************ (C) COPYRIGHT STMicroelectronics *****ENDE DER DATEI****/

Endergebnis zeigen

Tic-Tac-Toe-Spiel Basierend auf STONE TFT LCD und STM32 IOT PlatoBlockchain Data Intelligence. Vertikale Suche. Ai.

Quelle: Plato Data Intelligence