Rezumat
Tic-tac-toe este un joc jucat pe o grilă de 3 pe 3, similar cu gobang. Își primește numele deoarece tabla nu desenează, în general, granițe, iar liniile grilei sunt aranjate în tic-tac-toe. Instrumentele necesare pentru joc sunt doar hârtie și stilou. Apoi, doi jucători care reprezintă O și X lasă pe rând semne pe grilă. Oricare trei semne formează o linie dreaptă, care este câștigătoare.
Acest articol este de a folosi microcontrolerul STM32 și afișajul STONE LCD pentru a dezvolta un joc simplu tic-tac-toe.
Materiale necesare experimentului
Principiul sistemului
Specificați prima atingere pe ecran trebuie să fie O, a doua atingere pe ecran este X, a făcut acest ciclu. Setați 8 matrice pentru a stoca numărul de O și X în fiecare rând, coloană și diagonală a fiecărei grile, atâta timp cât există trei de aceeași marcă este victoria, atunci va exista o casetă roșie intermitentă pentru a dovedi victoria. rând, coloană sau diagonală, apoi atingeți resetare pentru a începe din nou jocul.
Următoarea este diagrama fluxului:
Design hardware STM32 și STONE LCD Display System
(A) Afișaj LCD STONE
- Design hardware „Joc tic-tac-toe”.
Utilizați afișajul STONE LCD de la Beijing STONE Technology co., Ltd, modelul este STWI070WT-01, cu afișaj TFT integrat și controler tactil.
- STVC070WT-01 caracteristicile produsului
Parametru fizic | |
Mărimea | 7 inch |
Rezoluţie | 800 × 480 × RGB |
Spațiu pixeli | 0.0642 (W) × 0.1790 (H) mm |
Culori | 262,144 culori (18 biți) |
Zona de vizualizare | 154.08 (W) × 85.92 (H) mm |
Dimensiunea afișajului | 186.4mmx105.5mm |
Dimensiuni generale | 186.4 mm x 105.5 mm x 17.4 mm (tip standard) 186.4 mm x 105.5 mm x 23.8 mm (cu port Ethernet) |
Greutate Netă | 300g |
Afişa | |
Tip de iluminare din spate | LED-uri |
Strălucire | 300cd/m2 (luminozitatea poate fi reglabilă în 100 de niveluri) |
Contrast | 500:1 |
Viața de fundal | 300,000 oră |
Unghi de vizualizare | 70°/70°/50°/70° (L/R/U/D) |
Panou TFT | Un panel al industriei de clasă |
Touch Screen | Rezistență la atingere cu 4 fire / Atingere capacitivă / Fără ecran tactil |
Modul ecran: | Digital |
procesor | |
Procesor | Cortex A8 |
Rată de reîmprospătare | 1G Hz |
Rata maximă de cadre | 60 FPS |
interfaţă | |
Interfață serială | Nivel RS232 / RS422 / RS485 / TTL |
Interfață Ethernet | 10M/100M (Opțional) |
Interfață wireless | Wi-Fi / Bluetooth (Opțional) |
Descărcare fișier proiect | Port USB2.0 sau disc de stocare U |
Alimentare electrică | |
Tensiune nominală | +12V DC sau +5V DC |
Domeniul de tensiune admisibil | +7V DC...+28V DC sau +5V DC |
Max. tranzitorii admisibile | + 28V |
Timpul dintre două tranzitorii | 50 de secunde minim |
Siguranță internă | Siguranță cu auto-recuperare 2A |
Consumul de energie | 3.0 W |
Conditii ambientale | |
Max. temperatura ambientală admisăOperațiune Stocare | -20℃~ +70℃-30℃~ +80℃ |
Umiditate relativăOperațiune Stocare | 55℃,85%60℃,90% |
Încărcare de șocOperațiune Stocare | 15 g/11 msec25 g/6 msec |
VibrațieOperațiune Stocare | 0.035 mm (10 – 58 Hz)/ 1 g (58 – 500 Hz) 3.5 mm (5 – 8,5 Hz)/ 1 g (8.5 – 500 Hz) |
Presiune barometricăOperațiune Stocare | 706 până la 1030 hPa581 până la 1030 hPa |
Imunitate la zgomot | |
Descărcare statică (descărcare prin contact/descărcare în aer) | EN 61000-4-2 6 kV/8 kV |
iradiere RF | EN 61000-4-310 V/m, 80% AM1 kHz |
Modulația pulsului | ENV 50204900 MHz ±5 MHz10 V/meff., 50% ED, 200 Hz |
Conducție RF | EN 61000-4-6150 kHz – 80 MHz10 V, 80% AM, 1 kHz |
Interferență în explozie Linii de alimentare Linii de date de proces Linii de semnal | EN 61000-4-42kV2kV1kV |
Dispozitiv de asistență | |
Portul UART | Suport RS232 / RS422 / RS485 / TTL |
Portul de rețea | Suport Ethernet / Wi-Fi / Bluetooth |
Memorie flash | Suport Standard 256 MB, Extend 1 GB sau 2 GB |
Sirenă | Suport |
RTC | Suport |
Port USB | Asistență Descărcare online prin cablu USB |
U Interfața discului de stocare | Asistență. Descărcați sau copiați datele utilizatorului offline |
Touch Screen | 4 fire de rezistență / capacitiv |
Font vectorial | Format TTF standard |
Imagine | Suport format PNG/JPG/BMP/SVG/GIF |
Interfata audio | Suport format WAV Lungimea unui singur fișier audio nu este limitată, teoretic până la 4096 fișiere audio, puterea difuzorului este de 8 ohmi 2 wați sau 4 ohmi 3 wați |
Set de comenzi | Seturi de comenzi simplificate unificate |
Memorie | |
Memorie flash | Standard 256 MB, extensie 1 GB sau 2 GB |
Cantitatea de memorie pentru imagine | În funcție de capacitatea imaginii, sugerați formatul „PNG, BMP, JPG, SVG, GIF”. |
(B) Placă STM32
Folosind o placă STM32, cipul STM32 este CKS32F303.
Familia STM32 de nuclee ARM Cortex-M0, M0+, M3, M4 și M7 este proiectată pentru aplicații încorporate care necesită performanță ridicată, costuri reduse și consum redus de energie.
- Sursa de alimentare 2.0V-3.6V
- Pini I/O compatibili cu 5V
- Mod excelent ceas sigur
- Mod de putere redusă cu funcție de trezire
- Oscilator RC intern
- Circuit de resetare încorporat
- Gama de temperatură de funcționare.
- -40°C până la +85°C sau 105°C
Proiectare software de sistem
Procesul de dezvoltare a afișajului LCD STM32 și STONE
1: creați proiectul și încărcați imaginile necesare în proiect.
2: utilizați software-ul Stone-designer pentru a crea relații asociate dinamic; comenzile principale sunt: „Buton”, „imagine”;
3: simulare software și compilare pentru a genera fișiere executabile.
4: display-ul LCD este conectat la PC prin USB și copiați fișierul executabil pe ecran.
Mai întâi creați un nou proiect, așa cum se arată mai jos.
În al doilea rând, importați toate imaginile în resursă
Apoi, setați butoanele de control pentru fiecare grilă și faceți butoanele invizibile.
Nu uitați să setați butonul de resetare!
Efectul final este prezentat mai jos:
După aceea, adăugați comenzi de imagine la fiecare grilă în același mod și setați-le pe toate la imagini albe.
În cele din urmă adăugați controlul gif și setați-l la invizibil.
Părțile efectului finit sunt prezentate mai jos:
Schema de conectare a circuitului
Distribuie codul
/* Include ——————————————————————*/
#include „stm32f0xx_hal.h”
#include „Uart.h”
#include „string.h”
#include „ws2812.h”
#include „IWDG.h”
RGB_COLOR USER_RGB_COLOR;
caracter nesemnat TX_Mode = 1; //Tip de transmisie bit de semnalizare 1:232 0:TTL
caracter nesemnat BLINK_2=0;
caracter nesemnat RX3_BUF[32]; //Buffer de primire cu trei niveluri personalizat
#define BUTTON1 0x81
#define BUTTON2 0x82
#define BUTTON3 0x83
#define BUTTON4 0x84
#define BUTTON5 0x85
#define BUTTON6 0x86
#define BUTTON7 0x87
#define BUTTON8 0x88
#define BUTTON9 0x89
#define BUTTON0 0x8A
#define CLEAR 0x8E
unsigned int r_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(void);
static void MX_GPIO_Init(void);
int principal (void)
{
uint8_t color_buf = 0;
//Selectarea funcției
/* Resetarea tuturor perifericelor, Inițializează interfața Flash și Systick-ul. */
HAL_Init();
/* Configurați ceasul sistemului */
SystemClock_Config();
/* Inițializați toate perifericele configurate */
MX_GPIO_Init();
TX_Mode = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_4);
if(TX_Mode)
MX_USART1_UART_Init();
//232 Inițializare
altfel
MX_USART1_UART_Init2();
//TTl Inițializare
în timp ce (1)
{
if(TX_Mode != HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_4))
HAL_NVIC_SystemReset();
//Inversarea jumperului, repornirea și reinițializarea
if(MNG_USART1.RX_OVER_FLG ==TRUE)
//
Bit de semnalizare de primire a datelor seriale
{
RX3_BUF[0]=MNG_USART1.RX_BUF[7];
//Metoda 2: Obțineți numele de control al lungimii fixe
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)
//Selectați controlul
{
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;
}
comutare (color_buf)
{
caz BUTTON1:
//dacă(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((car *)MNG_USART1.TX_BUF,
„ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image2\”,\”image\”:\”cerc\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1);
r_flag1 ^= 1;
quan_hang1++;
quan_lie1++;
quan_youxia++;
//memset(RX3_BUF,0,7);
//memset(MNG_USART1.RX_BUF,0,USART1_RX_LEN);
color_buf = CLEAR;
}
else if((r_flag1 == 1)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((car *)MNG_USART1.TX_BUF,
„ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image2\”,\”image\”:\”x\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1);
r_flag1 = 0;
cha_hang1++;
cha_lie1++;
cha_youxia++;
//memset(RX3_BUF,0,7);
color_buf = CLEAR;
}
//r_flag1 = 1;
rupe;
caz BUTTON2:
if((r_flag1 == 0)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((car *)MNG_USART1.TX_BUF,
„ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image3\”,\”image\”:\”cerc\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1);
r_flag1 = 1;
quan_hang1++;
quan_lie2++;
//memset(RX3_BUF,0,7);
color_buf = CLEAR;
}
else if((r_flag1 == 1)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((car *)MNG_USART1.TX_BUF,
„ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image3\”,\”image\”:\”x\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1);
r_flag1 = 0;
cha_hang1++;
cha_lie2++;
//memset(RX3_BUF,0,7);
color_buf = CLEAR;
}
rupe;
caz BUTTON3:
if((r_flag1 == 0)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((car *)MNG_USART1.TX_BUF,
„ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image4\”,\”image\”:\”cerc\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1);
r_flag1 = 1;
quan_hang1++;
quan_lie3++;
quan_zuoxia++;
//memset(RX3_BUF,0,7);
color_buf = CLEAR;
}
else if((r_flag1 == 1)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((car *)MNG_USART1.TX_BUF,
„ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image4\”,\”image\”:\”x\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1);
r_flag1 = 0;
cha_hang1++;
cha_lie3++;
cha_zuoxia++;
//memset(RX3_BUF,0,7);
color_buf = CLEAR;
}
rupe;
caz BUTTON4:
if((r_flag1 == 0)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((car *)MNG_USART1.TX_BUF,
„ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image5\”,\”image\”:\”cerc\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1);
r_flag1 = 1;
quan_hang2++;
quan_lie1++;
//memset(RX3_BUF,0,7);
//r_flag10=1;
color_buf = CLEAR;
}
else if((r_flag1 == 1)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((car *)MNG_USART1.TX_BUF,
„ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image5\”,\”image\”:\”x\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1);
r_flag1 = 0;
cha_hang2++;
cha_lie1++;
//memset(RX3_BUF,0,7);
color_buf = CLEAR;
}
rupe;
caz BUTTON5:
if((r_flag1 == 0)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((car *)MNG_USART1.TX_BUF,
„ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image6\”,\”image\”:\”cerc\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1);
r_flag1 = 1;
quan_hang2++;
quan_lie2++;
quan_zuoxia++;
quan_youxia++;
//memset(RX3_BUF,0,7);
color_buf = CLEAR;
}
else if((r_flag1 == 1)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((car *)MNG_USART1.TX_BUF,
„ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image6\”,\”image\”:\”x\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1);
r_flag1 = 0;
cha_hang2++;
cha_lie2++;
cha_zuoxia++;
cha_youxia++;
//memset(RX3_BUF,0,7);
color_buf = CLEAR;
}
rupe;
caz BUTTON6:
if((r_flag1 == 0)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((car *)MNG_USART1.TX_BUF,
„ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image7\”,\”image\”:\”cerc\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1);
r_flag1 = 1;
quan_hang2++;
quan_lie3++;
//memset(RX3_BUF,0,7);
color_buf = CLEAR;
}
else if((r_flag1 == 1)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((car *)MNG_USART1.TX_BUF,
„ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image7\”,\”image\”:\”x\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1);
r_flag1 = 0;
cha_hang2++;
cha_lie3++;
//memset(RX3_BUF,0,7);
color_buf = CLEAR;
}
rupe;
caz BUTTON7:
if((r_flag1 == 0)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((car *)MNG_USART1.TX_BUF,
„ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image8\”,\”image\”:\”cerc\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1);
r_flag1 = 1;
quan_hang3++;
quan_lie1++;
quan_zuoxia++;
//memset(RX3_BUF,0,7);
color_buf = CLEAR;
}
else if((r_flag1 == 1)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((car *)MNG_USART1.TX_BUF,
„ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image8\”,\”image\”:\”x\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1);
r_flag1 = 0;
cha_hang3++;
cha_lie1++;
cha_zuoxia++;
//memset(RX3_BUF,0,7);
color_buf = CLEAR;
}
rupe;
caz BUTTON8:
if((r_flag1 == 0)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((car *)MNG_USART1.TX_BUF,
„ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image9\”,\”image\”:\”cerc\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1);
r_flag1 = 1;
quan_hang3++;
quan_lie2++;
//memset(RX3_BUF,0,7);
color_buf = CLEAR;
}
else if((r_flag1 == 1)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((car *)MNG_USART1.TX_BUF,
„ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image9\”,\”image\”:\”x\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1);
r_flag1 = 0;
cha_hang3++;
cha_lie2++;
//memset(RX3_BUF,0,7);
color_buf = CLEAR;
}
rupe;
caz BUTTON9:
if((r_flag1 == 0)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((car *)MNG_USART1.TX_BUF,
„ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image10\”,\”image\”:\”cerc\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1);
r_flag1 = 1;
quan_hang3++;
quan_lie3++;
quan_youxia++;
//memset(RX3_BUF,0,7);
color_buf = CLEAR;
}
else if((r_flag1 == 1)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((car *)MNG_USART1.TX_BUF,
„ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image10\”,\”image\”:\”x\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1);
r_flag1 = 0;
cha_hang3++;
cha_lie3++;
cha_youxia++;
//memset(RX3_BUF,0,7);
color_buf = CLEAR;
}
rupe;
caz BUTTON0:
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((car *)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((car *)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((car *)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((car *)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((car *)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((car *)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((car *)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((car *)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((car *)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((car *)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((car *)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((car *)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((car *)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((car *)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((car *)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((car *)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((car *)MNG_USART1.TX_BUF,
„ST<{\”cmd_code\”:\”set_visible\”,\”type\”:\”widget\”,\”widget\”:\”gif11\”,\”visible\”:false}>ET ”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1);
//memset(RX3_BUF,0,7);
memset(MNG_USART1.RX_BUF,0,USART1_RX_LEN);
rupe;
implicit:
MNG_USART1.RX_OVER_FLG = FALS;
rupe;
}
////////////////////////////////////////////////// //////////////////
if((quan_hang1==3)||(cha_hang1==3))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((car *)MNG_USART1.TX_BUF,
„ST<{\”cmd_code\”:\”set_visible\”,\”type\”:\”widget\”,\”widget\”:\”gif4\”,\”visible\”:true}>ET ”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1);
quan_hang1=quan_hang2=quan_hang3=cha_hang1=cha_hang2=cha_hang3=0;
quan_lie1=quan_lie2=quan_lie3=cha_lie1=cha_lie2=cha_lie3=0;
quan_zuoxia=quan_youxia=cha_zuoxia=cha_youxia=0;
}
else if((quan_hang2==3)||(cha_hang2==3))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((car *)MNG_USART1.TX_BUF,
„ST<{\”cmd_code\”:\”set_visible\”,\”type\”:\”widget\”,\”widget\”:\”gif5\”,\”visible\”:true}>ET ”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1);
quan_hang1=quan_hang2=quan_hang3=cha_hang1=cha_hang2=cha_hang3=0;
quan_lie1=quan_lie2=quan_lie3=cha_lie1=cha_lie2=cha_lie3=0;
quan_zuoxia=quan_youxia=cha_zuoxia=cha_youxia=0;
}
else if((quan_hang3==3)||(cha_hang3==3))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((car *)MNG_USART1.TX_BUF,
„ST<{\”cmd_code\”:\”set_visible\”,\”type\”:\”widget\”,\”widget\”:\”gif6\”,\”visible\”:true}>ET ”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1);
quan_hang1=quan_hang2=quan_hang3=cha_hang1=cha_hang2=cha_hang3=0;
quan_lie1=quan_lie2=quan_lie3=cha_lie1=cha_lie2=cha_lie3=0;
quan_zuoxia=quan_youxia=cha_zuoxia=cha_youxia=0;
}
else if((quan_lie1==3)||(cha_lie1==3))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((car *)MNG_USART1.TX_BUF,
„ST<{\”cmd_code\”:\”set_visible\”,\”type\”:\”widget\”,\”widget\”:\”gif7\”,\”visible\”:true}>ET ”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1);
quan_hang1=quan_hang2=quan_hang3=cha_hang1=cha_hang2=cha_hang3=0;
quan_lie1=quan_lie2=quan_lie3=cha_lie1=cha_lie2=cha_lie3=0;
quan_zuoxia=quan_youxia=cha_zuoxia=cha_youxia=0;
}
else if((quan_lie2==3)||(cha_lie2==3))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((car *)MNG_USART1.TX_BUF,
„ST<{\”cmd_code\”:\”set_visible\”,\”type\”:\”widget\”,\”widget\”:\”gif8\”,\”visible\”:true}>ET ”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1);
quan_hang1=quan_hang2=quan_hang3=cha_hang1=cha_hang2=cha_hang3=0;
quan_lie1=quan_lie2=quan_lie3=cha_lie1=cha_lie2=cha_lie3=0;
quan_zuoxia=quan_youxia=cha_zuoxia=cha_youxia=0;
}
else if((quan_lie3==3)||(cha_lie3==3))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((car *)MNG_USART1.TX_BUF,
„ST<{\”cmd_code\”:\”set_visible\”,\”type\”:\”widget\”,\”widget\”:\”gif9\”,\”visible\”:true}>ET ”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1);
quan_hang1=quan_hang2=quan_hang3=cha_hang1=cha_hang2=cha_hang3=0;
quan_lie1=quan_lie2=quan_lie3=cha_lie1=cha_lie2=cha_lie3=0;
quan_zuoxia=quan_youxia=cha_zuoxia=cha_youxia=0;
}
else if((quan_zuoxia==3)||(cha_zuoxia==3))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((car *)MNG_USART1.TX_BUF,
„ST<{\”cmd_code\”:\”set_visible\”,\”type\”:\”widget\”,\”widget\”:\”gif11\”,\”visible\”:true}>ET ”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1);
quan_hang1=quan_hang2=quan_hang3=cha_hang1=cha_hang2=cha_hang3=0;
quan_lie1=quan_lie2=quan_lie3=cha_lie1=cha_lie2=cha_lie3=0;
quan_zuoxia=quan_youxia=cha_zuoxia=cha_youxia=0;
}
else if((quan_youxia==3)||(cha_youxia==3))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((car *)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 = FALS;
}
}
}
/** Configurarea ceasului sistemului
*/
void SystemClock_Config(void)
{
RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_ClkInitTypeDef RCC_ClkInitStruct;
RCC_PeriphCLKInitTypeDef PeriphClkInit;
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.HSICalibrationValue = 16;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL12;
RCC_OscInitStruct.PLL.PREDV = RCC_PREDIV_DIV1;
dacă (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;
dacă (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
{
Error_Handler();
}
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1;
PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK1;
dacă (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
{
Error_Handler();
}
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
/* Configurarea întreruperii SysTick_IRQn */
HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}
/** Configurație pinout
*/
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
/* Activare ceas porturi 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);
}
/* COD UTILIZATOR ÎNCEPE 4 */
/* COD UTILIZATOR END 4 */
/ **
* @brief Această funcție este executată în cazul apariției unei erori.
* @param Nici unul
* @retval Nici unul
*/
void Error_Handler(void)
{
/* COD UTILIZATOR BEGIN Error_Handler */
/* Utilizatorul își poate adăuga propria implementare pentru a raporta starea de returnare a erorii HAL */
în timp ce (1)
{
}
/* COD UTILIZATOR END Error_Handler */
}
#ifdef USE_FULL_ASSERT
/ **
* @brief Raportează numele fișierului sursă și numărul liniei sursă
* unde a apărut eroarea assert_param.
* Fișier @param: indicator către numele fișierului sursă
* @param line: numărul sursei liniei de eroare assert_param
* @retval Nici unul
*/
void assert_failed (fișier uint8_t*, linie uint32_t)
{
/* COD UTILIZATOR ÎNCEPE 6 */
/* Utilizatorul își poate adăuga propria implementare pentru a raporta numele fișierului și numărul rândului,
ex: printf(„Valoare greșită a parametrilor: fișier %s pe linia %d\r\n”, fișier, linie) */
/* COD UTILIZATOR END 6 */
}
#endif
/ **
* @}
*/
/ **
* @}
*/
/************************ (C) COPYRIGHT STMicroelectronics *****SFÂRȘIT FIȘIER****/
Rezultatele finale arată
Sursa: Plato Data Intelligence