IOT

Gra w kółko i krzyżyk oparta na STONE TFT LCD i STM32

Podsumowanie

Kółko i krzyżyk to gra rozgrywana na siatce 3 na 3, podobna do gobang. Ma swoją nazwę, ponieważ plansza generalnie nie rysuje granic, a linie siatki są ułożone w kółko i krzyżyk. Narzędzia potrzebne do gry to tylko papier i długopis. Następnie dwóch graczy reprezentujących O i X na zmianę zostawia ślady na siatce. Trzy dowolne znaki tworzą linię prostą, która jest zwycięzcą.

Ten artykuł dotyczy wykorzystania mikrokontrolera STM32 i wyświetlacza LCD STONE do opracowania prostej gry w kółko i krzyżyk.

Materiały wymagane do eksperymentu

Zasada systemu

Określ, że pierwsze dotknięcie ekranu musi być O, drugie dotknięcie ekranu to X, robi ten cykl. Ustaw 8 tablic do przechowywania liczby O i X w każdym rzędzie, kolumnie i przekątnej każdej siatki, o ile są trzy takie same znaki oznaczające zwycięstwo, wtedy pojawi się migające czerwone pole, potwierdzające zwycięstwo wiersz, kolumnę lub przekątną, a następnie dotknij resetuj, aby ponownie rozpocząć grę.

Poniżej znajduje się schemat blokowy:

Gra w kółko i krzyżyk oparta na STONE TFT LCD i STM32 IOT PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. Aj.

Konstrukcja sprzętowa systemu wyświetlania LCD STM32 i STONE

(A) Kamienny wyświetlacz LCD

  1. Projekt sprzętu „Kółko i krzyżyk”

Użyj wyświetlacza LCD STONE firmy Beijing STONE Technology co., ltd, model to STWI070WT-01, ze zintegrowanym wyświetlaczem TFT i kontrolerem dotykowym.

Gra w kółko i krzyżyk oparta na STONE TFT LCD i STM32 IOT PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. Aj.
  1.  STVC070WT-01 cechy produktu
Parametr fizyczny 
Rozmiar7 cala
Rozkład800 × RGB × 480
Odstępy między pikselami0.0642 (szer.) × 0.1790 (wys.) Mm
Kolor262,144 kolorów (18 bitów)
Przedstawiamy Area154.08 (szer.) × 85.92 (wys.) Mm
Wymiary wyświetlacza186.4mmx105.5mm
Wymiar186.4 mm x 105.5 mm x 17.4 mm (typ standardowy) 186.4 mm x 105.5 mm x 23.8 mm (z portem Ethernet)
Waga netto300g
Wyświetlacz 
Typ podświetleniaDOPROWADZIŁO
Jasność300cd/m2 (jasność można regulować na 100 poziomach)
Kontrast500:1
Podświetlenie życia300,000 godzin
Kąt widzenia70°/70°/50°/70° (L/P/U/D)
Panel TFTPanel branżowy klasy
Ekran dotykowy4-przewodowy opór dotykowy /pojemnościowy dotykowy/bez ekranu dotykowego
Tryb ekranowy:Cyfrowy
Procesor 
CPUCortex A8
Częstotliwość odświeżania1G Hz
Maksymalna liczba klatek na sekundę60 FPS
Interfejs 
Interfejs szeregowyPoziom RS232/RS422/RS485/TTL
Interfejs Ethernet10M/100M (opcjonalnie)
Interfejs bezprzewodowyWi-Fi / Bluetooth (opcjonalnie)
Pobieranie pliku projektuPort USB2.0 lub dysk pamięci U
Zasilacz laboratoryjny 
napięcie znamionowe+12V DC lub +5V DC
Dopuszczalny zakres napięcia+7 V DC…+28 V DC lub +5 V DC
Maks. dopuszczalne stany nieustalone+ 28V
Czas między dwoma transjentamiminimum 50 sekund
Bezpiecznik wewnętrznyBezpiecznik samoregeneracyjny 2A
Pobór energiiW 3.0
Warunki otoczenia 
Maks. dopuszczalna temperatura otoczeniaOperacja Przechowywanie-20℃~ +70℃ -30℃~ +80℃
Wilgotność względnaOperacja Przechowywanie55 ℃, 85% 60 ℃, 90%
Ładowanie szokoweOperacja Przechowywanie15 g/11 ms 25 g/6 ms
WibracjaOperacja Przechowywanie0.035 mm (10 – 58 Hz)/ 1 g (58 – 500 Hz) 3.5 mm (5 – 8,5 Hz)/ 1 g (8.5 – 500 Hz)
Ciśnienie barometryczneOperacja Przechowywanie706 do 1030 hPa 581 do 1030 hPa
Odporność na hałas 
Wyładowanie statyczne (wyładowanie kontaktowe/wyładowanie powietrzne)EN 61000-4-2 6kV/8kV
promieniowanie RFEN 61000-4-310 V/m, 80% AM1 kHz
Modulacja impulsowaENV 50204900 MHz ±5 MHz 10 V/meff., 50% ED, 200 Hz
Przewodzenie RFEN 61000-4-6150 kHz – 80 MHz 10 V, 80% AM, 1 kHz
Zakłócenia impulsowe Linie zasilające Linie danych procesowych Linie sygnałoweEN 61000-4-42kV2kV1kV
Obsługa urządzenia 
Port UARTObsługa RS232 / RS422 / RS485 / TTL
Port sieciowyWsparcie Port Ethernet / Wi-Fi / Bluetooth
Pamięć flashObsługa Standardowa 256 MB, rozszerzona o 1 GB lub 2 GB
BrzęczykWsparcie
RTCWsparcie
Port USBWsparcie Pobieranie online za pomocą kabla USB
Interfejs dysku pamięci masowejWsparcie.Offline Pobierz lub skopiuj dane użytkownika
Ekran dotykowyRezystancja 4 przewodów / pojemnościowa
Czcionka wektorowaStandardowy format TTF
ObrazObsługa formatu PNG/JPG/BMP/SVG/GIF
Interfejs audioObsługa formatu WAV Długość pojedynczego pliku audio nie jest ograniczona, teoretycznie do 4096 plików audio, moc głośników wynosi 8 omów i 2 waty lub 4 omy i 3 waty
Zestaw poleceńUjednolicone uproszczone zestawy poleceń
Pamięć 
Pamięć flashStandardowo 256 MB, rozszerzenie 1 GB lub 2 GB
Ilość pamięci dla obrazuZgodnie z możliwościami obrazu, zasugeruj format „PNG, BMP, JPG, SVG, GIF”.

(B) Płytka STM32

Używając płyty STM32, chip STM32 to CKS32F303.

Gra w kółko i krzyżyk oparta na STONE TFT LCD i STM32 IOT PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. Aj.

Rodzina STM32 rdzeni ARM Cortex-M0, M0+, M3, M4 i M7 została zaprojektowana z myślą o aplikacjach wbudowanych wymagających wysokiej wydajności, niskich kosztów i niskiego zużycia energii.

  • Zasilanie 2.0 V-3.6 V
  • Kołki we/wy kompatybilne z 5 V
  • Doskonały tryb bezpiecznego zegara
  • Tryb niskiego poboru mocy z funkcją budzenia
  • Wewnętrzny oscylator RC
  • Wbudowany obwód resetowania
  • Zakres temperatury pracy.
  • -40°C do +85°C lub 105°C

Projektowanie oprogramowania systemowego

Proces rozwoju wyświetlacza LCD STM32 i STONE

1: utwórz projekt i załaduj wymagane zdjęcia do projektu.

2: używać oprogramowania Stone-designer do tworzenia dynamicznie powiązanych relacji; główne kontrolki to: „Przycisk”, „obraz”;

3: symulacja oprogramowania i kompilacja do generowania plików wykonywalnych.

4: wyświetlacz LCD jest podłączony do komputera przez USB i skopiuj plik wykonywalny na ekran.

Najpierw utwórz nowy projekt, jak pokazano poniżej.

Gra w kółko i krzyżyk oparta na STONE TFT LCD i STM32 IOT PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. Aj.
Gra w kółko i krzyżyk oparta na STONE TFT LCD i STM32 IOT PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. Aj.

Po drugie, zaimportuj wszystkie obrazy do zasobu

Gra w kółko i krzyżyk oparta na STONE TFT LCD i STM32 IOT PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. Aj.

Następnie ustaw kontrolki przycisków dla każdej siatki i spraw, aby przyciski były niewidoczne. 

Gra w kółko i krzyżyk oparta na STONE TFT LCD i STM32 IOT PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. Aj.

Nie zapomnij ustawić przycisku resetowania!

Gotowy efekt pokazano poniżej:

Gra w kółko i krzyżyk oparta na STONE TFT LCD i STM32 IOT PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. Aj.

Następnie dodaj kontrolki obrazu do każdej siatki w ten sam sposób i ustaw je wszystkie na białe obrazy.

Na koniec dodaj kontrolkę gif i ustaw ją na niewidoczną.

Części gotowego efektu pokazano poniżej:

Gra w kółko i krzyżyk oparta na STONE TFT LCD i STM32 IOT PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. Aj.
Gra w kółko i krzyżyk oparta na STONE TFT LCD i STM32 IOT PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. Aj.
Gra w kółko i krzyżyk oparta na STONE TFT LCD i STM32 IOT PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. Aj.
Gra w kółko i krzyżyk oparta na STONE TFT LCD i STM32 IOT PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. Aj.

Schemat połączeń obwodu

Gra w kółko i krzyżyk oparta na STONE TFT LCD i STM32 IOT PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. Aj.

Udostępnianie kodu

/* Obejmuje ——————————————————————*/ 

#dołącz „stm32f0xx_hal.h” 

#dołącz „Uart.h” 

#dołącz „ciąg.h” 

#dołącz „ws2812.h” 

#dołącz „IWDG.h” 

RGB_KOLOR USER_RGB_KOLOR; 

znak bez znaku TX_Mode = 1; //Bit flagi typu transmisji 1:232 0:TTL 

znak bez znaku BLINK_2=0; 

znak bez znaku RX3_BUF[32]; //Dostosowany trzypoziomowy bufor odbioru 

#define PRZYCISK1 0x81 

#define PRZYCISK2 0x82 

#define PRZYCISK3 0x83 

#define PRZYCISK4 0x84 

#define PRZYCISK5 0x85 

#define PRZYCISK6 0x86 

#define PRZYCISK7 0x87 

#define PRZYCISK8 0x88 

#define PRZYCISK9 0x89 

#define PRZYCISK0 0x8A 

#define WYCZYŚĆ 0x8E 

unsigned int r_flag1 = 0; 

bez znaku int quan[4][2]={0}; 

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

bez znaku int quan_hang1 = 0; 

bez znaku int quan_hang2 = 0; 

bez znaku int quan_hang3 = 0; 

bez znaku int quan_lie1 = 0; 

bez znaku int quan_lie2 = 0; 

bez znaku 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; //bez znaku int r_flag10 = 0; 

nieważny SystemClock_Config (nieważny); 

void Obsługa_błędów(unieważnienie); 

statyczna pustka MX_GPIO_Init(pustka); 

int main (void) 

uint8_t kolor_buf = 0; 

//Wybór funkcji 

/* Reset wszystkich urządzeń peryferyjnych, Inicjuje interfejs Flash i Systick. */ 

HAL_Init(); 

/* Skonfiguruj zegar systemowy */ 

Konfiguracja Zegara Systemowego(); 

/* Zainicjuj wszystkie skonfigurowane urządzenia peryferyjne */ 

MX_GPIO_Init(); 

Tryb_TX = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_4); 

jeśli (tryb TX) 

MX_USART1_UART_Init(); 

//232 Inicjalizacja 

więcej 

MX_USART1_UART_Init2(); 

//Inicjalizacja TTl 

póki(1) 

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

HAL_NVIC_SystemReset(); 

//Odwrócenie zworki, ponowne uruchomienie i ponowna inicjalizacja 

jeśli (MNG_USART1.RX_OVER_FLG ==TRUE) 

// 

Bit flagi odbioru danych szeregowych 

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

//Metoda 2: Uzyskaj nazwę kontrolną o stałej długości 

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("przycisk1",(stały znak *)RX3_BUF))==0) 

//Wybierz kontrolę

kolor_buf = PRZYCISK1; 

}

if((strcmp("przycisk2",(stały znak *)RX3_BUF))==0) 

kolor_buf = PRZYCISK2; 

}

if((strcmp("przycisk3",(stały znak *)RX3_BUF))==0) 

kolor_buf = PRZYCISK3; 

}

if((strcmp("przycisk4",(stały znak *)RX3_BUF))==0) 

kolor_buf = PRZYCISK4; 

}

if((strcmp("przycisk5",(stały znak *)RX3_BUF))==0) 

kolor_buf = PRZYCISK5; 

}

if((strcmp("przycisk6",(stały znak *)RX3_BUF))==0) 

kolor_buf = PRZYCISK6; 

}

if((strcmp("przycisk7",(stały znak *)RX3_BUF))==0) 

kolor_buf = PRZYCISK7; 

}

if((strcmp("przycisk8",(stały znak *)RX3_BUF))==0) 

kolor_buf = PRZYCISK8; 

}

if((strcmp("przycisk9",(stały znak *)RX3_BUF))==0) 

kolor_buf = PRZYCISK9; 

}

if((strcmp("przycisk0",(stały znak *)RX3_BUF))==0) 

kolor_buf = PRZYCISK0; 

}

przełącznik (color_buf) 

przypadku PRZYCISK1: 

//if(r_flaga1 == 0) 

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

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

r_flaga1 ^= 1; 

sprintf((znak *)MNG_USART1.TX_BUF, 

„ST<{\”cmd_code\”:\”set_image\”,\”typ\”:\”obraz\”,\”widget\”:\”obraz2\”,\”obraz\”:\”okrąg\ ”}>ET”); 

MNG_USART1.TX_Byte_Num = strlen((stały znak *)MNG_USART1.TX_BUF); 

USART_TX_Data (MNG_USART1); 

r_flaga1 ^= 1; 

quan_hang1++; 

quan_lie1++; 

quan_youxia++;  

//memset(RX3_BUF,0,7); 

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

kolor_buf = WYCZYŚĆ; 

}

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

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((znak *)MNG_USART1.TX_BUF, 

„ST<{\”cmd_code\”:\”set_image\”,\”typ\”:\”obraz\”,\”widget\”:\”obraz2\”,\”obraz\”:\”x\ ”}>ET”); 

MNG_USART1.TX_Byte_Num = strlen((stały znak *)MNG_USART1.TX_BUF); 

USART_TX_Data (MNG_USART1); 

r_flaga1 = 0; 

cha_hang1++; 

cha_lie1++; 

cha_youxia++; 

//memset(RX3_BUF,0,7); 

kolor_buf = WYCZYŚĆ; 

}

//r_flaga1 = 1; 

break; 

przypadku PRZYCISK2: 

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

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((znak *)MNG_USART1.TX_BUF, 

„ST<{\”cmd_code\”:\”set_image\”,\”typ\”:\”obraz\”,\”widget\”:\”obraz3\”,\”obraz\”:\”okrąg\ ”}>ET”); 

MNG_USART1.TX_Byte_Num = strlen((stały znak *)MNG_USART1.TX_BUF); 

USART_TX_Data (MNG_USART1); 

r_flaga1 = 1; 

quan_hang1++; 

quan_lie2++; 

//memset(RX3_BUF,0,7); 

kolor_buf = WYCZYŚĆ; 

}

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

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((znak *)MNG_USART1.TX_BUF, 

„ST<{\”cmd_code\”:\”set_image\”,\”typ\”:\”obraz\”,\”widget\”:\”obraz3\”,\”obraz\”:\”x\ ”}>ET”); 

MNG_USART1.TX_Byte_Num = strlen((stały znak *)MNG_USART1.TX_BUF); 

USART_TX_Data (MNG_USART1); 

r_flaga1 = 0; 

cha_hang1++; 

cha_lie2++; 

//memset(RX3_BUF,0,7); 

kolor_buf = WYCZYŚĆ; 

}

break; 

przypadku PRZYCISK3: 

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

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((znak *)MNG_USART1.TX_BUF, 

„ST<{\”cmd_code\”:\”set_image\”,\”typ\”:\”obraz\”,\”widget\”:\”obraz4\”,\”obraz\”:\”okrąg\ ”}>ET”); 

MNG_USART1.TX_Byte_Num = strlen((stały znak *)MNG_USART1.TX_BUF); 

USART_TX_Data (MNG_USART1); 

r_flaga1 = 1; 

quan_hang1++; 

quan_lie3++; 

quan_zuoxia++; 

//memset(RX3_BUF,0,7); 

kolor_buf = WYCZYŚĆ; 

}

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

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((znak *)MNG_USART1.TX_BUF, 

„ST<{\”cmd_code\”:\”set_image\”,\”typ\”:\”obraz\”,\”widget\”:\”obraz4\”,\”obraz\”:\”x\ ”}>ET”); 

MNG_USART1.TX_Byte_Num = strlen((stały znak *)MNG_USART1.TX_BUF); 

USART_TX_Data (MNG_USART1); 

r_flaga1 = 0; 

cha_hang1++; 

cha_lie3++; 

cha_zuoxia++; 

//memset(RX3_BUF,0,7); 

kolor_buf = WYCZYŚĆ; 

}

break; 

przypadku PRZYCISK4: 

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

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((znak *)MNG_USART1.TX_BUF, 

„ST<{\”cmd_code\”:\”set_image\”,\”typ\”:\”obraz\”,\”widget\”:\”obraz5\”,\”obraz\”:\”okrąg\ ”}>ET”); 

MNG_USART1.TX_Byte_Num = strlen((stały znak *)MNG_USART1.TX_BUF); 

USART_TX_Data (MNG_USART1); 

r_flaga1 = 1; 

quan_hang2++; 

quan_lie1++; 

//memset(RX3_BUF,0,7); 

//r_flaga10=1; 

kolor_buf = WYCZYŚĆ; 

}

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

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((znak *)MNG_USART1.TX_BUF, 

„ST<{\”cmd_code\”:\”set_image\”,\”typ\”:\”obraz\”,\”widget\”:\”obraz5\”,\”obraz\”:\”x\ ”}>ET”); 

MNG_USART1.TX_Byte_Num = strlen((stały znak *)MNG_USART1.TX_BUF); 

USART_TX_Data (MNG_USART1); 

r_flaga1 = 0; 

cha_hang2++; 

cha_lie1++; 

//memset(RX3_BUF,0,7); 

kolor_buf = WYCZYŚĆ; 

}

break; 

przypadku PRZYCISK5: 

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

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((znak *)MNG_USART1.TX_BUF, 

„ST<{\”cmd_code\”:\”set_image\”,\”typ\”:\”obraz\”,\”widget\”:\”obraz6\”,\”obraz\”:\”okrąg\ ”}>ET”); 

MNG_USART1.TX_Byte_Num = strlen((stały znak *)MNG_USART1.TX_BUF); 

USART_TX_Data (MNG_USART1); 

r_flaga1 = 1; 

quan_hang2++; 

quan_lie2++; 

quan_zuoxia++; 

quan_youxia++; 

//memset(RX3_BUF,0,7); 

kolor_buf = WYCZYŚĆ; 

}

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

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((znak *)MNG_USART1.TX_BUF, 

„ST<{\”cmd_code\”:\”set_image\”,\”typ\”:\”obraz\”,\”widget\”:\”obraz6\”,\”obraz\”:\”x\ ”}>ET”); 

MNG_USART1.TX_Byte_Num = strlen((stały znak *)MNG_USART1.TX_BUF); 

USART_TX_Data (MNG_USART1); 

r_flaga1 = 0; 

cha_hang2++; 

cha_lie2++; 

cha_zuoxia++; 

cha_youxia++; 

//memset(RX3_BUF,0,7); 

kolor_buf = WYCZYŚĆ; 

}

break; 

przypadku PRZYCISK6: 

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

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((znak *)MNG_USART1.TX_BUF, 

„ST<{\”cmd_code\”:\”set_image\”,\”typ\”:\”obraz\”,\”widget\”:\”obraz7\”,\”obraz\”:\”okrąg\ ”}>ET”); 

MNG_USART1.TX_Byte_Num = strlen((stały znak *)MNG_USART1.TX_BUF); 

USART_TX_Data (MNG_USART1); 

r_flaga1 = 1; 

quan_hang2++; 

quan_lie3++; 

//memset(RX3_BUF,0,7); 

kolor_buf = WYCZYŚĆ; 

}

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

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((znak *)MNG_USART1.TX_BUF, 

„ST<{\”cmd_code\”:\”set_image\”,\”typ\”:\”obraz\”,\”widget\”:\”obraz7\”,\”obraz\”:\”x\ ”}>ET”); 

MNG_USART1.TX_Byte_Num = strlen((stały znak *)MNG_USART1.TX_BUF); 

USART_TX_Data (MNG_USART1); 

r_flaga1 = 0; 

cha_hang2++; 

cha_lie3++; 

//memset(RX3_BUF,0,7); 

kolor_buf = WYCZYŚĆ; 

}

break; 

przypadku PRZYCISK7: 

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

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((znak *)MNG_USART1.TX_BUF, 

„ST<{\”cmd_code\”:\”set_image\”,\”typ\”:\”obraz\”,\”widget\”:\”obraz8\”,\”obraz\”:\”okrąg\ ”}>ET”); 

MNG_USART1.TX_Byte_Num = strlen((stały znak *)MNG_USART1.TX_BUF); 

USART_TX_Data (MNG_USART1); 

r_flaga1 = 1; 

quan_hang3++; 

quan_lie1++; 

quan_zuoxia++; 

//memset(RX3_BUF,0,7); 

kolor_buf = WYCZYŚĆ; 

}

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

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((znak *)MNG_USART1.TX_BUF, 

„ST<{\”cmd_code\”:\”set_image\”,\”typ\”:\”obraz\”,\”widget\”:\”obraz8\”,\”obraz\”:\”x\ ”}>ET”); 

MNG_USART1.TX_Byte_Num = strlen((stały znak *)MNG_USART1.TX_BUF); 

USART_TX_Data (MNG_USART1); 

r_flaga1 = 0; 

cha_hang3++; 

cha_lie1++; 

cha_zuoxia++; 

//memset(RX3_BUF,0,7); 

kolor_buf = WYCZYŚĆ; 

}

break; 

przypadku PRZYCISK8: 

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

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((znak *)MNG_USART1.TX_BUF, 

„ST<{\”cmd_code\”:\”set_image\”,\”typ\”:\”obraz\”,\”widget\”:\”obraz9\”,\”obraz\”:\”okrąg\ ”}>ET”); 

MNG_USART1.TX_Byte_Num = strlen((stały znak *)MNG_USART1.TX_BUF); 

USART_TX_Data (MNG_USART1); 

r_flaga1 = 1; 

quan_hang3++; 

quan_lie2++; 

//memset(RX3_BUF,0,7); 

kolor_buf = WYCZYŚĆ; 

}

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

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((znak *)MNG_USART1.TX_BUF, 

„ST<{\”cmd_code\”:\”set_image\”,\”typ\”:\”obraz\”,\”widget\”:\”obraz9\”,\”obraz\”:\”x\ ”}>ET”); 

MNG_USART1.TX_Byte_Num = strlen((stały znak *)MNG_USART1.TX_BUF); 

USART_TX_Data (MNG_USART1); 

r_flaga1 = 0; 

cha_hang3++; 

cha_lie2++; 

//memset(RX3_BUF,0,7); 

kolor_buf = WYCZYŚĆ; 

}

break; 

przypadku PRZYCISK9: 

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

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((znak *)MNG_USART1.TX_BUF, 

„ST<{\”cmd_code\”:\”set_image\”,\”typ\”:\”obraz\”,\”widget\”:\”obraz10\”,\”obraz\”:\”okrąg\ ”}>ET”);

MNG_USART1.TX_Byte_Num = strlen((stały znak *)MNG_USART1.TX_BUF); 

USART_TX_Data (MNG_USART1); 

r_flaga1 = 1; 

quan_hang3++; 

quan_lie3++; 

quan_youxia++; 

//memset(RX3_BUF,0,7); 

kolor_buf = WYCZYŚĆ; 

}

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

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((znak *)MNG_USART1.TX_BUF, 

„ST<{\”cmd_code\”:\”set_image\”,\”typ\”:\”obraz\”,\”widget\”:\”obraz10\”,\”obraz\”:\”x\ ”}>ET”); 

MNG_USART1.TX_Byte_Num = strlen((stały znak *)MNG_USART1.TX_BUF); 

USART_TX_Data (MNG_USART1); 

r_flaga1 = 0; 

cha_hang3++; 

cha_lie3++; 

cha_youxia++; 

//memset(RX3_BUF,0,7); 

kolor_buf = WYCZYŚĆ; 

}

break; 

przypadku PRZYCISK0: 

r_flaga1 = 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((znak *)MNG_USART1.TX_BUF, 

„ST<{\”cmd_code\”:\”set_image\”,\”typ\”:\”obraz\”,\”widget\”:\”obraz2\”,\”obraz\”:\”bai\ ”}>ET”); 

MNG_USART1.TX_Byte_Num = strlen((stały znak *)MNG_USART1.TX_BUF); 

USART_TX_Data (MNG_USART1); 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((znak *)MNG_USART1.TX_BUF, 

„ST<{\”cmd_code\”:\”set_image\”,\”typ\”:\”obraz\”,\”widget\”:\”obraz3\”,\”obraz\”:\”bai\ ”}>ET”); 

MNG_USART1.TX_Byte_Num = strlen((stały znak *)MNG_USART1.TX_BUF); 

USART_TX_Data (MNG_USART1); 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((znak *)MNG_USART1.TX_BUF, 

„ST<{\”cmd_code\”:\”set_image\”,\”typ\”:\”obraz\”,\”widget\”:\”obraz4\”,\”obraz\”:\”bai\ ”}>ET”); 

MNG_USART1.TX_Byte_Num = strlen((stały znak *)MNG_USART1.TX_BUF); 

USART_TX_Data (MNG_USART1); 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((znak *)MNG_USART1.TX_BUF, 

„ST<{\”cmd_code\”:\”set_image\”,\”typ\”:\”obraz\”,\”widget\”:\”obraz5\”,\”obraz\”:\”bai\ ”}>ET”); 

MNG_USART1.TX_Byte_Num = strlen((stały znak *)MNG_USART1.TX_BUF); 

USART_TX_Data (MNG_USART1); 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((znak *)MNG_USART1.TX_BUF, 

„ST<{\”cmd_code\”:\”set_image\”,\”typ\”:\”obraz\”,\”widget\”:\”obraz6\”,\”obraz\”:\”bai\ ”}>ET”); 

MNG_USART1.TX_Byte_Num = strlen((stały znak *)MNG_USART1.TX_BUF); 

USART_TX_Data (MNG_USART1); 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((znak *)MNG_USART1.TX_BUF, 

„ST<{\”cmd_code\”:\”set_image\”,\”typ\”:\”obraz\”,\”widget\”:\”obraz7\”,\”obraz\”:\”bai\ ”}>ET”); 

MNG_USART1.TX_Byte_Num = strlen((stały znak *)MNG_USART1.TX_BUF); 

USART_TX_Data (MNG_USART1); 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((znak *)MNG_USART1.TX_BUF, 

„ST<{\”cmd_code\”:\”set_image\”,\”typ\”:\”obraz\”,\”widget\”:\”obraz8\”,\”obraz\”:\”bai\ ”}>ET”); 

MNG_USART1.TX_Byte_Num = strlen((stały znak *)MNG_USART1.TX_BUF); 

USART_TX_Data (MNG_USART1); 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((znak *)MNG_USART1.TX_BUF, 

„ST<{\”cmd_code\”:\”set_image\”,\”typ\”:\”obraz\”,\”widget\”:\”obraz9\”,\”obraz\”:\”bai\ ”}>ET”); 

MNG_USART1.TX_Byte_Num = strlen((stały znak *)MNG_USART1.TX_BUF); 

USART_TX_Data (MNG_USART1);

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((znak *)MNG_USART1.TX_BUF, 

„ST<{\”cmd_code\”:\”set_image\”,\”typ\”:\”obraz\”,\”widget\”:\”obraz10\”,\”obraz\”:\”bai\ ”}>ET”); 

MNG_USART1.TX_Byte_Num = strlen((stały znak *)MNG_USART1.TX_BUF); 

USART_TX_Data (MNG_USART1); 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((znak *)MNG_USART1.TX_BUF, 

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

MNG_USART1.TX_Byte_Num = strlen((stały znak *)MNG_USART1.TX_BUF); 

USART_TX_Data (MNG_USART1); 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((znak *)MNG_USART1.TX_BUF, 

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

MNG_USART1.TX_Byte_Num = strlen((stały znak *)MNG_USART1.TX_BUF); 

USART_TX_Data (MNG_USART1); 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((znak *)MNG_USART1.TX_BUF, 

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

MNG_USART1.TX_Byte_Num = strlen((stały znak *)MNG_USART1.TX_BUF); 

USART_TX_Data (MNG_USART1); 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((znak *)MNG_USART1.TX_BUF, 

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

MNG_USART1.TX_Byte_Num = strlen((stały znak *)MNG_USART1.TX_BUF); 

USART_TX_Data (MNG_USART1); 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((znak *)MNG_USART1.TX_BUF, 

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

MNG_USART1.TX_Byte_Num = strlen((stały znak *)MNG_USART1.TX_BUF); 

USART_TX_Data (MNG_USART1); 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((znak *)MNG_USART1.TX_BUF, 

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

MNG_USART1.TX_Byte_Num = strlen((stały znak *)MNG_USART1.TX_BUF); 

USART_TX_Data (MNG_USART1); 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((znak *)MNG_USART1.TX_BUF, 

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

MNG_USART1.TX_Byte_Num = strlen((stały znak *)MNG_USART1.TX_BUF); 

USART_TX_Data (MNG_USART1); 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((znak *)MNG_USART1.TX_BUF, 

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

MNG_USART1.TX_Byte_Num = strlen((stały znak *)MNG_USART1.TX_BUF); 

USART_TX_Data (MNG_USART1); 

//memset(RX3_BUF,0,7); 

memset(MNG_USART1.RX_BUF,0,USART1_RX_LEN); 

break; 

domyślna: 

MNG_USART1.RX_OVER_FLG = FAŁSZ; 

break; 

}

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

jeśli((quan_hang1==3)||(cha_hang1==3)) 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((znak *)MNG_USART1.TX_BUF, 

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

MNG_USART1.TX_Byte_Num = strlen((stały znak *)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; 

}

inaczej, jeśli((quan_hang2==3)||(cha_hang2==3)) 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((znak *)MNG_USART1.TX_BUF, 

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

MNG_USART1.TX_Byte_Num = strlen((stały znak *)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; 

}

inaczej, jeśli((quan_hang3==3)||(cha_hang3==3)) 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((znak *)MNG_USART1.TX_BUF, 

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

MNG_USART1.TX_Byte_Num = strlen((stały znak *)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; 

}

inaczej, jeśli((quan_lie1==3)||(cha_lie1==3)) 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((znak *)MNG_USART1.TX_BUF, 

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

MNG_USART1.TX_Byte_Num = strlen((stały znak *)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; 

}

inaczej, jeśli((quan_lie2==3)||(cha_lie2==3)) 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((znak *)MNG_USART1.TX_BUF, 

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

MNG_USART1.TX_Byte_Num = strlen((stały znak *)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; 

}

inaczej, jeśli((quan_lie3==3)||(cha_lie3==3)) 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((znak *)MNG_USART1.TX_BUF, 

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

MNG_USART1.TX_Byte_Num = strlen((stały znak *)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; 

}

inaczej, jeśli((quan_zuoxia==3)||(cha_zuoxia==3)) 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((znak *)MNG_USART1.TX_BUF, 

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

MNG_USART1.TX_Byte_Num = strlen((stały znak *)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; 

}

inaczej, jeśli((quan_youxia==3)||(cha_youxia==3)) 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((znak *)MNG_USART1.TX_BUF, 

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

MNG_USART1.TX_Byte_Num = strlen((stały znak *)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 = FAŁSZ; 

}

/** Konfiguracja zegara systemowego 

*/

void SystemClock_Config (nieważny) 

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.PLLStan = RCC_PLL_ON; 

RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; 

RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL12; 

RCC_OscInitStruct.PLL.PREDIV = RCC_PREDIV_DIV1; 

jeśli (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) 

Obsługa_błędów(); 

}

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.APB1CLKDdzielnik = RCC_HCLK_DIV1; 

jeśli (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK) 

Obsługa_błędów(); 

}

PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1; 

PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK1; 

jeśli (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) 

Obsługa_błędów(); 

}

HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000); 

HAL_SYSTICK_CLKSourceConfig (SYSTICK_CLKSOURCE_HCLK); 

/* Konfiguracja przerwań SysTick_IRQn */ 

HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); 

}

/** Konfiguracja pinów 

*/

pusta statyczna MX_GPIO_Init(void) 

GPIO_InitTypeDef GPIO_InitStruct; 

/* Włącz zegar portów GPIO */ 

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

}

/* KOD UŻYTKOWNIKA POCZĄTEK 4 */

/* KOD UŻYTKOWNIKA KONIEC 4 */ 

/ **

* @brief Ta funkcja jest wykonywana w przypadku wystąpienia błędu. 

* @param Brak 

* @retval Brak 

*/ 

void Error_Handler(void) 

/* KOD UŻYTKOWNIKA POCZĄTEK Error_Handler */ 

/* Użytkownik może dodać własną implementację, aby zgłosić stan zwrotu błędu HAL */ 

póki(1) 

{

}

/* KOD UŻYTKOWNIKA KONIEC Error_Handler */ 

}

#ifdef USE_FULL_ASSERT 

/ **

* @brief Podaje nazwę pliku źródłowego i numer wiersza źródłowego 

* gdzie wystąpił błąd attach_param. 

* @param file: wskaźnik do nazwy pliku źródłowego 

* @param line: attach_param numer źródłowy wiersza błędu 

* @retval Brak 

*/ 

void attach_failed (plik uint8_t*, wiersz uint32_t) 

/* KOD UŻYTKOWNIKA POCZĄTEK 6 */ 

/* Użytkownik może dodać własną implementację do raportowania nazwy pliku i numeru wiersza, 

np: printf("Niewłaściwa wartość parametrów: plik %s w wierszu %d\r\n", plik, wiersz) */ 

/* KOD UŻYTKOWNIKA KONIEC 6 */ 

}

#endif 

/ **

* @} 

*/ 

/ **

* @} 

*/

/************************ (C) PRAWA AUTORSKIE STMicroelectronics *****KONIEC DOKUMENTU****/

Ostateczne wyniki pokazują

Gra w kółko i krzyżyk oparta na STONE TFT LCD i STM32 IOT PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. Aj.

Źródło: Plato Data Intelligence