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:
Konstrukcja sprzętowa systemu wyświetlania LCD STM32 i STONE
(A) Kamienny wyświetlacz LCD
- 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.
- STVC070WT-01 cechy produktu
Parametr fizyczny | |
Rozmiar | 7 cala |
Rozkład | 800 × RGB × 480 |
Odstępy między pikselami | 0.0642 (szer.) × 0.1790 (wys.) Mm |
Kolor | 262,144 kolorów (18 bitów) |
Przedstawiamy Area | 154.08 (szer.) × 85.92 (wys.) Mm |
Wymiary wyświetlacza | 186.4mmx105.5mm |
Wymiar | 186.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 netto | 300g |
Wyświetlacz | |
Typ podświetlenia | DOPROWADZIŁO |
Jasność | 300cd/m2 (jasność można regulować na 100 poziomach) |
Kontrast | 500:1 |
Podświetlenie życia | 300,000 godzin |
Kąt widzenia | 70°/70°/50°/70° (L/P/U/D) |
Panel TFT | Panel branżowy klasy |
Ekran dotykowy | 4-przewodowy opór dotykowy /pojemnościowy dotykowy/bez ekranu dotykowego |
Tryb ekranowy: | Cyfrowy |
Procesor | |
CPU | Cortex A8 |
Częstotliwość odświeżania | 1G Hz |
Maksymalna liczba klatek na sekundę | 60 FPS |
Interfejs | |
Interfejs szeregowy | Poziom RS232/RS422/RS485/TTL |
Interfejs Ethernet | 10M/100M (opcjonalnie) |
Interfejs bezprzewodowy | Wi-Fi / Bluetooth (opcjonalnie) |
Pobieranie pliku projektu | Port 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 transjentami | minimum 50 sekund |
Bezpiecznik wewnętrzny | Bezpiecznik samoregeneracyjny 2A |
Pobór energii | W 3.0 |
Warunki otoczenia | |
Maks. dopuszczalna temperatura otoczeniaOperacja Przechowywanie | -20℃~ +70℃ -30℃~ +80℃ |
Wilgotność względnaOperacja Przechowywanie | 55 ℃, 85% 60 ℃, 90% |
Ładowanie szokoweOperacja Przechowywanie | 15 g/11 ms 25 g/6 ms |
WibracjaOperacja Przechowywanie | 0.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 Przechowywanie | 706 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 RF | EN 61000-4-310 V/m, 80% AM1 kHz |
Modulacja impulsowa | ENV 50204900 MHz ±5 MHz 10 V/meff., 50% ED, 200 Hz |
Przewodzenie RF | EN 61000-4-6150 kHz – 80 MHz 10 V, 80% AM, 1 kHz |
Zakłócenia impulsowe Linie zasilające Linie danych procesowych Linie sygnałowe | EN 61000-4-42kV2kV1kV |
Obsługa urządzenia | |
Port UART | Obsługa RS232 / RS422 / RS485 / TTL |
Port sieciowy | Wsparcie Port Ethernet / Wi-Fi / Bluetooth |
Pamięć flash | Obsługa Standardowa 256 MB, rozszerzona o 1 GB lub 2 GB |
Brzęczyk | Wsparcie |
RTC | Wsparcie |
Port USB | Wsparcie Pobieranie online za pomocą kabla USB |
Interfejs dysku pamięci masowej | Wsparcie.Offline Pobierz lub skopiuj dane użytkownika |
Ekran dotykowy | Rezystancja 4 przewodów / pojemnościowa |
Czcionka wektorowa | Standardowy format TTF |
Obraz | Obsługa formatu PNG/JPG/BMP/SVG/GIF |
Interfejs audio | Obsł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ęć flash | Standardowo 256 MB, rozszerzenie 1 GB lub 2 GB |
Ilość pamięci dla obrazu | Zgodnie 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.
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.
Po drugie, zaimportuj wszystkie obrazy do zasobu
Następnie ustaw kontrolki przycisków dla każdej siatki i spraw, aby przyciski były niewidoczne.
Nie zapomnij ustawić przycisku resetowania!
Gotowy efekt pokazano poniżej:
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:
Schemat połączeń obwodu
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ą
Źródło: Plato Data Intelligence