Sommario
Tic-tac-toe è un gioco giocato su una griglia 3 per 3, simile a gobang. Prende il nome perché il tabellone generalmente non disegna bordi e le linee della griglia sono disposte in tris. Gli strumenti necessari per il gioco sono solo carta e penna. Quindi, due giocatori che rappresentano O e X, a turno, lasciano segni sulla griglia. Qualsiasi tre segni formano una linea retta, che è il vincitore.
Questo articolo prevede l'utilizzo del microcontrollore STM32 e del display LCD STONE per sviluppare un semplice gioco tic-tac-toe.
Materiali necessari per l'esperimento
Il principio del sistema
Specificare che il primo tocco sullo schermo deve essere O, il secondo tocco sullo schermo è X, ha eseguito questo ciclo. Imposta 8 array per memorizzare il numero di O e X in ogni riga, colonna e diagonale di ogni griglia, finché ce ne sono tre dello stesso segno è la vittoria, quindi ci sarà una casella rossa lampeggiante per dimostrare la vittoria del riga, colonna o diagonale, quindi tocca reimposta per ricominciare il gioco.
Quello che segue è il diagramma di flusso:
Progettazione hardware del sistema di visualizzazione LCD STM32 e STONE
(A) Display LCD PIETRA
- Design hardware "Tic-tac-toe"
Utilizzare il display LCD STONE di Beijing STONE Technology co., ltd, il modello è STWI070WT-01, con display TFT integrato e controller touch.
- STVC070WT-01 caratteristiche del prodotto
Parametro fisico | |
Taglia | 7 pollici |
Risoluzione | 800 × RGB × 480 |
Spaziatura pixel | 0.0642 (L) × 0.1790 (A) mm |
Colore | 262,144 colori (18 bit) |
Area di visualizzazione | 154.08 (L) × 85.92 (A) mm |
Mostra Dimension | 186.4mmx105.5mm |
Dimensione generale | 186.4 mm x 105.5 mm x 17.4 mm (tipo standard) 186.4 mm x 105.5 mm x 23.8 mm (con porta Ethernet) |
Peso netto | 300 g |
Dsiplay | |
Tipo di retroilluminazione | LED |
Luminosità | 300cd/m2 (la luminosità può essere regolabile in 100 livelli) |
Confrontare | 500:1 |
Vita di retroilluminazione | 300,000 ore |
Angolo di visione | 70°/70°/50°/70° (L/R/U/D) |
Pannello TFT | Un pannello industriale di classe |
Ampio e luminoso | Tocco a 4 fili di resistenza/Touch capacitivo/Senza touch screen |
Modalità schermo: | Digitale |
Processore | |
CPU | Cortex A8 |
Frequenza di aggiornamento | 1G Hz |
Frequenza fotogrammi massima | 60 FPS |
Interfaccia | |
Interfaccia seriale | Livello RS232 / RS422/RS485 / TTL |
Interfaccia Ethernet | 10 M/100 M (opzionale) |
Interfaccia wireless | Wi-Fi/Bluetooth (opzionale) |
Download del file di progetto | Porta USB 2.0 o disco di archiviazione U |
Alimentazione di laboratorio | |
tensione nominale | +12 V CC o +5 V CC |
Intervallo di tensione consentito | +7 V CC…+28 V CC o +5 V CC |
massimo transitori consentiti | + 28V |
Tempo tra due transitori | 50 secondi minimo |
Fusibile interno | Fusibile autoripristinante 2A |
Consumo di energia | 3.0 W |
Condizioni ambientali | |
massimo temperatura ambiente consentitaOperazioneStorage | -20℃~ +70℃-30℃~ +80℃ |
Umidità relativaOperazioneStorage | 55℃,85%60℃,90% |
Carico d'urtoOperazioneStorage | 15 g/11 ms25 g/6 ms |
VibrazioneOperazioneStorage | 0.035 mm (10 – 58 Hz)/ 1 g (58 – 500 Hz) 3.5 mm (5 – 8,5 Hz)/ 1 g (8.5 – 500 Hz) |
Pressione barometricaOperazioneStorage | da 706 a 1030 hPa da 581 a 1030 hPa |
Immunità al rumore | |
Scarico statico (scarico contatto/scarico aria) | EN 61000-4-2 6kV/8kV |
Irradiazione RF | EN 61000-4-310 V/m, 80% AM1 kHz |
Modulazione dell'impulso | ENV 50204900 MHz ±5 MHz10 V/meff., 50% ED, 200 Hz |
Conduzione RF | EN 61000-4-6150 kHz – 80 MHz10 V, 80% AM, 1 kHz |
Interferenza burst Linee di alimentazione Linee dati di processo Linee di segnale | EN 61000-4-42kV2kV1kV |
Dispositivo di supporto | |
Porta UART | SupportoRS232/RS422/RS485/TTL |
Porta di rete | SupportoPorta Ethernet/Wi-Fi/Bluetooth |
Flash Memory | SupportoStandard 256 MB, estensione di 1 GB o 2 GB |
Cicalino | Assistenza |
RTC | Assistenza |
Porta USB | SupportoDownload in linea tramite cavo USB |
Interfaccia disco di archiviazione U | Support.Offline Scarica o copia i dati utente |
Ampio e luminoso | 4 fili di resistenza/capacitivo |
Carattere vettoriale | Formato TTF standard |
Immagine | Supporta il formato PNG/JPG/BMP/SVG/GIF |
Interfaccia Audio | Supporta il formato WAV La lunghezza del singolo file audio non è limitata, teoricamente fino a 4096 file audio, la potenza dell'altoparlante è di 8 ohm 2 watt o 4 ohm 3 watt |
Set di comandi | Set di comandi semplificati unificati |
Memorie | |
Flash Memory | Standard 256 MB, estensione 1 GB o 2 GB |
Quantità di memoria per l'immagine | In base alla capacità dell'immagine, suggerisci il formato "PNG, BMP, JPG, SVG, GIF". |
(B) Scheda STM32
Utilizzando una scheda STM32, il chip dell'STM32 è CKS32F303.
La famiglia STM32 di core ARM Cortex-M0, M0+, M3, M4 e M7 è progettata per applicazioni embedded che richiedono alte prestazioni, basso costo e basso consumo energetico.
- Alimentazione 2.0V-3.6V
- Pin I/O compatibili con 5V
- Eccellente modalità sicura dell'orologio
- Modalità a basso consumo con funzione di sveglia
- Oscillatore RC interno
- Circuito di ripristino integrato
- Intervallo operativo di temperatura.
- da -40°C a +85°C o 105°C
Progettazione del software di sistema
Il processo di sviluppo del display LCD STM32 e STONE
1: creare il progetto e caricare le immagini richieste nel progetto.
2: utilizzare il software Stone-designer per creare relazioni associate dinamicamente; i controlli principali sono: “Pulsante”, “immagine”;
3: simulazione software e compilazione per generare file eseguibili.
4: il display LCD è collegato al PC tramite USB e copia il file eseguibile sullo schermo.
Per prima cosa crea un nuovo progetto come mostrato di seguito.
In secondo luogo, importa tutte le immagini nella risorsa
Quindi, imposta i controlli dei pulsanti su ciascuna griglia e rendi i pulsanti invisibili.
Non dimenticare di impostare il pulsante di ripristino!
L'effetto finito è mostrato di seguito:
Successivamente, aggiungi i controlli dell'immagine a ciascuna griglia allo stesso modo e impostali tutti su immagini bianche.
Infine aggiungi il controllo gif e impostalo su invisibile.
Le parti dell'effetto finito sono mostrate di seguito:
Schema di collegamento del circuito
Condivisione codice
/* Include ——————————————————————*/
#include "stm32f0xx_hal.h"
#includi "Uart.h"
#includi "stringa.h"
#include "ws2812.h"
#includi "IWDG.h"
COLORE_RGB USER_COLORE_RGB;
unsigned char TX_Mode = 1; //Bit flag tipo di trasmissione 1:232 0:TTL
carattere non firmato BLINK_2=0;
carattere non firmato RX3_BUF[32]; //Buffer di ricezione a tre livelli personalizzato
#define PULSANTE1 0x81
#define PULSANTE2 0x82
#define PULSANTE3 0x83
#define PULSANTE4 0x84
#define PULSANTE5 0x85
#define PULSANTE6 0x86
#define PULSANTE7 0x87
#define PULSANTE8 0x88
#define PULSANTE9 0x89
#define PULSANTE0x0A
#define CLEAR 0x8E
senza segno int r_flag1 = 0;
int quan senza segno[4][2]={0};
senza segno int cha [4][2]={0};
senza segno int quan_hang1 = 0;
senza segno int quan_hang2 = 0;
senza segno int quan_hang3 = 0;
int senza segno quan_lie1 = 0;
int senza segno quan_lie2 = 0;
int senza segno quan_lie3 = 0;
senza segno int quan_zuoxia = 0;
int senza segno quan_youxia = 0;
senza segno int cha_hang1 = 0;
senza segno int cha_hang2 = 0;
senza segno int cha_hang3 = 0;
senza segno int cha_lie1 = 0;
senza segno int cha_lie2 = 0;
senza segno int cha_lie3 = 0;
senza segno int cha_zuoxia = 0;
senza segno int cha_youxia = 0; //non firmato int r_flag10 = 0;
void SystemClock_Config(void);
void Error_Handler(void);
vuoto statico MX_GPIO_Init(void);
int main (void)
{
uint8_t color_buf = 0;
//Selezione funzione
/* Reset di tutte le periferiche, Inizializza l'interfaccia Flash e il Systick. */
HAL_Init();
/* Configura l'orologio di sistema */
Orologio_Sistema_Config();
/* Inizializza tutte le periferiche configurate */
MX_GPIO_Init();
Modalità_TX = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_4);
if(modalità_TX)
MX_USART1_UART_Init();
//232 Inizializzazione
altro
MX_USART1_UART_Init2();
//Inizializzazione TTl
while (1)
{
if(TX_Mode!= HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_4))
HAL_NVIC_SystemReset();
//Inversione jumper, riavvio e reinizializzazione
if(MNG_USART1.RX_OVER_FLG ==TRUE)
//
Bit di flag ricezione dati seriali
{
RX3_BUF[0]=MNG_USART1.RX_BUF[7];
//Metodo 2: Ottieni il nome del controllo a lunghezza fissa
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(“pulsante1”,(const char *)RX3_BUF))==0)
//Seleziona controllo
{
color_buf = PULSANTE1;
}
if((strcmp(“pulsante2”,(const char *)RX3_BUF))==0)
{
color_buf = PULSANTE2;
}
if((strcmp(“pulsante3”,(const char *)RX3_BUF))==0)
{
color_buf = PULSANTE3;
}
if((strcmp(“pulsante4”,(const char *)RX3_BUF))==0)
{
color_buf = PULSANTE4;
}
if((strcmp(“pulsante5”,(const char *)RX3_BUF))==0)
{
color_buf = PULSANTE5;
}
if((strcmp(“pulsante6”,(const char *)RX3_BUF))==0)
{
color_buf = PULSANTE6;
}
if((strcmp(“pulsante7”,(const char *)RX3_BUF))==0)
{
color_buf = PULSANTE7;
}
if((strcmp(“pulsante8”,(const char *)RX3_BUF))==0)
{
color_buf = PULSANTE8;
}
if((strcmp(“pulsante9”,(const char *)RX3_BUF))==0)
{
color_buf = PULSANTE9;
}
if((strcmp(“pulsante0”,(const char *)RX3_BUF))==0)
{
color_buf = PULSANTE0;
}
interruttore (color_buf)
{
caso BUTTON1:
//se(r_flag1 == 0)
if((r_flag1 == 0)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
r_bandiera1 ^= 1;
sprintf((carattere *)MNG_USART1.TX_BUF,
“ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image2\”,\”image\”:\”cerchio\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((carattere const *)MNG_USART1.TX_BUF);
USART_TX_Dati(MNG_USART1);
r_bandiera1 ^= 1;
quan_hang1++;
quan_lie1++;
quan_youxia++;
//memset(RX3_BUF,0,7);
//memset(MNG_USART1.RX_BUF,0,USART1_RX_LEN);
color_buf = CANCELLA;
}
else if((r_flag1 == 1)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((carattere *)MNG_USART1.TX_BUF,
“ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image2\”,\”image\”:\”x\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((carattere const *)MNG_USART1.TX_BUF);
USART_TX_Dati(MNG_USART1);
r_bandiera1 = 0;
cha_hang1++;
cha_lie1++;
cha_youxia++;
//memset(RX3_BUF,0,7);
color_buf = CANCELLA;
}
//r_flag1 = 1;
break;
caso BUTTON2:
if((r_flag1 == 0)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((carattere *)MNG_USART1.TX_BUF,
“ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image3\”,\”image\”:\”cerchio\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((carattere const *)MNG_USART1.TX_BUF);
USART_TX_Dati(MNG_USART1);
r_bandiera1 = 1;
quan_hang1++;
quan_lie2++;
//memset(RX3_BUF,0,7);
color_buf = CANCELLA;
}
else if((r_flag1 == 1)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((carattere *)MNG_USART1.TX_BUF,
“ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image3\”,\”image\”:\”x\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((carattere const *)MNG_USART1.TX_BUF);
USART_TX_Dati(MNG_USART1);
r_bandiera1 = 0;
cha_hang1++;
cha_lie2++;
//memset(RX3_BUF,0,7);
color_buf = CANCELLA;
}
break;
caso BUTTON3:
if((r_flag1 == 0)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((carattere *)MNG_USART1.TX_BUF,
“ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image4\”,\”image\”:\”cerchio\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((carattere const *)MNG_USART1.TX_BUF);
USART_TX_Dati(MNG_USART1);
r_bandiera1 = 1;
quan_hang1++;
quan_lie3++;
quan_zuoxia++;
//memset(RX3_BUF,0,7);
color_buf = CANCELLA;
}
else if((r_flag1 == 1)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((carattere *)MNG_USART1.TX_BUF,
“ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image4\”,\”image\”:\”x\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((carattere const *)MNG_USART1.TX_BUF);
USART_TX_Dati(MNG_USART1);
r_bandiera1 = 0;
cha_hang1++;
cha_lie3++;
cha_zuoxia++;
//memset(RX3_BUF,0,7);
color_buf = CANCELLA;
}
break;
caso BUTTON4:
if((r_flag1 == 0)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((carattere *)MNG_USART1.TX_BUF,
“ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image5\”,\”image\”:\”cerchio\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((carattere const *)MNG_USART1.TX_BUF);
USART_TX_Dati(MNG_USART1);
r_bandiera1 = 1;
quan_hang2++;
quan_lie1++;
//memset(RX3_BUF,0,7);
//r_flag10=1;
color_buf = CANCELLA;
}
else if((r_flag1 == 1)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((carattere *)MNG_USART1.TX_BUF,
“ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image5\”,\”image\”:\”x\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((carattere const *)MNG_USART1.TX_BUF);
USART_TX_Dati(MNG_USART1);
r_bandiera1 = 0;
cha_hang2++;
cha_lie1++;
//memset(RX3_BUF,0,7);
color_buf = CANCELLA;
}
break;
caso BUTTON5:
if((r_flag1 == 0)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((carattere *)MNG_USART1.TX_BUF,
“ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image6\”,\”image\”:\”cerchio\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((carattere const *)MNG_USART1.TX_BUF);
USART_TX_Dati(MNG_USART1);
r_bandiera1 = 1;
quan_hang2++;
quan_lie2++;
quan_zuoxia++;
quan_youxia++;
//memset(RX3_BUF,0,7);
color_buf = CANCELLA;
}
else if((r_flag1 == 1)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((carattere *)MNG_USART1.TX_BUF,
“ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image6\”,\”image\”:\”x\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((carattere const *)MNG_USART1.TX_BUF);
USART_TX_Dati(MNG_USART1);
r_bandiera1 = 0;
cha_hang2++;
cha_lie2++;
cha_zuoxia++;
cha_youxia++;
//memset(RX3_BUF,0,7);
color_buf = CANCELLA;
}
break;
caso BUTTON6:
if((r_flag1 == 0)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((carattere *)MNG_USART1.TX_BUF,
“ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image7\”,\”image\”:\”cerchio\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((carattere const *)MNG_USART1.TX_BUF);
USART_TX_Dati(MNG_USART1);
r_bandiera1 = 1;
quan_hang2++;
quan_lie3++;
//memset(RX3_BUF,0,7);
color_buf = CANCELLA;
}
else if((r_flag1 == 1)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((carattere *)MNG_USART1.TX_BUF,
“ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image7\”,\”image\”:\”x\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((carattere const *)MNG_USART1.TX_BUF);
USART_TX_Dati(MNG_USART1);
r_bandiera1 = 0;
cha_hang2++;
cha_lie3++;
//memset(RX3_BUF,0,7);
color_buf = CANCELLA;
}
break;
caso BUTTON7:
if((r_flag1 == 0)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((carattere *)MNG_USART1.TX_BUF,
“ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image8\”,\”image\”:\”cerchio\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((carattere const *)MNG_USART1.TX_BUF);
USART_TX_Dati(MNG_USART1);
r_bandiera1 = 1;
quan_hang3++;
quan_lie1++;
quan_zuoxia++;
//memset(RX3_BUF,0,7);
color_buf = CANCELLA;
}
else if((r_flag1 == 1)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((carattere *)MNG_USART1.TX_BUF,
“ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image8\”,\”image\”:\”x\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((carattere const *)MNG_USART1.TX_BUF);
USART_TX_Dati(MNG_USART1);
r_bandiera1 = 0;
cha_hang3++;
cha_lie1++;
cha_zuoxia++;
//memset(RX3_BUF,0,7);
color_buf = CANCELLA;
}
break;
caso BUTTON8:
if((r_flag1 == 0)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((carattere *)MNG_USART1.TX_BUF,
“ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image9\”,\”image\”:\”cerchio\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((carattere const *)MNG_USART1.TX_BUF);
USART_TX_Dati(MNG_USART1);
r_bandiera1 = 1;
quan_hang3++;
quan_lie2++;
//memset(RX3_BUF,0,7);
color_buf = CANCELLA;
}
else if((r_flag1 == 1)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((carattere *)MNG_USART1.TX_BUF,
“ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image9\”,\”image\”:\”x\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((carattere const *)MNG_USART1.TX_BUF);
USART_TX_Dati(MNG_USART1);
r_bandiera1 = 0;
cha_hang3++;
cha_lie2++;
//memset(RX3_BUF,0,7);
color_buf = CANCELLA;
}
break;
caso BUTTON9:
if((r_flag1 == 0)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((carattere *)MNG_USART1.TX_BUF,
“ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image10\”,\”image\”:\”cerchio\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((carattere const *)MNG_USART1.TX_BUF);
USART_TX_Dati(MNG_USART1);
r_bandiera1 = 1;
quan_hang3++;
quan_lie3++;
quan_youxia++;
//memset(RX3_BUF,0,7);
color_buf = CANCELLA;
}
else if((r_flag1 == 1)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((carattere *)MNG_USART1.TX_BUF,
“ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image10\”,\”image\”:\”x\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((carattere const *)MNG_USART1.TX_BUF);
USART_TX_Dati(MNG_USART1);
r_bandiera1 = 0;
cha_hang3++;
cha_lie3++;
cha_youxia++;
//memset(RX3_BUF,0,7);
color_buf = CANCELLA;
}
break;
caso BUTTON0:
r_bandiera1 = 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((carattere *)MNG_USART1.TX_BUF,
“ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image2\”,\”image\”:\”bai\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((carattere const *)MNG_USART1.TX_BUF);
USART_TX_Dati(MNG_USART1);
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((carattere *)MNG_USART1.TX_BUF,
“ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image3\”,\”image\”:\”bai\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((carattere const *)MNG_USART1.TX_BUF);
USART_TX_Dati(MNG_USART1);
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((carattere *)MNG_USART1.TX_BUF,
“ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image4\”,\”image\”:\”bai\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((carattere const *)MNG_USART1.TX_BUF);
USART_TX_Dati(MNG_USART1);
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((carattere *)MNG_USART1.TX_BUF,
“ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image5\”,\”image\”:\”bai\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((carattere const *)MNG_USART1.TX_BUF);
USART_TX_Dati(MNG_USART1);
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((carattere *)MNG_USART1.TX_BUF,
“ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image6\”,\”image\”:\”bai\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((carattere const *)MNG_USART1.TX_BUF);
USART_TX_Dati(MNG_USART1);
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((carattere *)MNG_USART1.TX_BUF,
“ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image7\”,\”image\”:\”bai\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((carattere const *)MNG_USART1.TX_BUF);
USART_TX_Dati(MNG_USART1);
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((carattere *)MNG_USART1.TX_BUF,
“ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image8\”,\”image\”:\”bai\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((carattere const *)MNG_USART1.TX_BUF);
USART_TX_Dati(MNG_USART1);
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((carattere *)MNG_USART1.TX_BUF,
“ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image9\”,\”image\”:\”bai\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((carattere const *)MNG_USART1.TX_BUF);
USART_TX_Dati(MNG_USART1);
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((carattere *)MNG_USART1.TX_BUF,
“ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image10\”,\”image\”:\”bai\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((carattere const *)MNG_USART1.TX_BUF);
USART_TX_Dati(MNG_USART1);
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((carattere *)MNG_USART1.TX_BUF,
“ST<{\”cmd_code\”:\”set_visible\”,\”type\”:\”widget\”,\”widget\”:\”gif4\”,\”visible\”:false}>ET ”);
MNG_USART1.TX_Byte_Num = strlen((carattere const *)MNG_USART1.TX_BUF);
USART_TX_Dati(MNG_USART1);
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((carattere *)MNG_USART1.TX_BUF,
“ST<{\”cmd_code\”:\”set_visible\”,\”type\”:\”widget\”,\”widget\”:\”gif5\”,\”visible\”:false}>ET ”);
MNG_USART1.TX_Byte_Num = strlen((carattere const *)MNG_USART1.TX_BUF);
USART_TX_Dati(MNG_USART1);
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((carattere *)MNG_USART1.TX_BUF,
“ST<{\”cmd_code\”:\”set_visible\”,\”type\”:\”widget\”,\”widget\”:\”gif6\”,\”visible\”:false}>ET ”);
MNG_USART1.TX_Byte_Num = strlen((carattere const *)MNG_USART1.TX_BUF);
USART_TX_Dati(MNG_USART1);
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((carattere *)MNG_USART1.TX_BUF,
“ST<{\”cmd_code\”:\”set_visible\”,\”type\”:\”widget\”,\”widget\”:\”gif7\”,\”visible\”:false}>ET ”);
MNG_USART1.TX_Byte_Num = strlen((carattere const *)MNG_USART1.TX_BUF);
USART_TX_Dati(MNG_USART1);
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((carattere *)MNG_USART1.TX_BUF,
“ST<{\”cmd_code\”:\”set_visible\”,\”type\”:\”widget\”,\”widget\”:\”gif8\”,\”visible\”:false}>ET ”);
MNG_USART1.TX_Byte_Num = strlen((carattere const *)MNG_USART1.TX_BUF);
USART_TX_Dati(MNG_USART1);
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((carattere *)MNG_USART1.TX_BUF,
“ST<{\”cmd_code\”:\”set_visible\”,\”type\”:\”widget\”,\”widget\”:\”gif9\”,\”visible\”:false}>ET ”);
MNG_USART1.TX_Byte_Num = strlen((carattere const *)MNG_USART1.TX_BUF);
USART_TX_Dati(MNG_USART1);
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((carattere *)MNG_USART1.TX_BUF,
“ST<{\”cmd_code\”:\”set_visible\”,\”type\”:\”widget\”,\”widget\”:\”gif10\”,\”visible\”:false}>ET ”);
MNG_USART1.TX_Byte_Num = strlen((carattere const *)MNG_USART1.TX_BUF);
USART_TX_Dati(MNG_USART1);
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((carattere *)MNG_USART1.TX_BUF,
“ST<{\”cmd_code\”:\”set_visible\”,\”type\”:\”widget\”,\”widget\”:\”gif11\”,\”visible\”:false}>ET ”);
MNG_USART1.TX_Byte_Num = strlen((carattere const *)MNG_USART1.TX_BUF);
USART_TX_Dati(MNG_USART1);
//memset(RX3_BUF,0,7);
memset(MNG_USART1.RX_BUF,0,USART1_RX_LEN);
break;
di default:
MNG_USART1.RX_OVER_FLG = FALSO;
break;
}
//////////////////////////////////////////////// //////////////////
if((quan_hang1==3)||(cha_hang1==3))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((carattere *)MNG_USART1.TX_BUF,
“ST<{\”cmd_code\”:\”set_visible\”,\”type\”:\”widget\”,\”widget\”:\”gif4\”,\”visible\”:true}>ET ”);
MNG_USART1.TX_Byte_Num = strlen((carattere const *)MNG_USART1.TX_BUF);
USART_TX_Dati(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;
}
altrimenti se((quan_hang2==3)||(cha_hang2==3))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((carattere *)MNG_USART1.TX_BUF,
“ST<{\”cmd_code\”:\”set_visible\”,\”type\”:\”widget\”,\”widget\”:\”gif5\”,\”visible\”:true}>ET ”);
MNG_USART1.TX_Byte_Num = strlen((carattere const *)MNG_USART1.TX_BUF);
USART_TX_Dati(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;
}
altrimenti se((quan_hang3==3)||(cha_hang3==3))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((carattere *)MNG_USART1.TX_BUF,
“ST<{\”cmd_code\”:\”set_visible\”,\”type\”:\”widget\”,\”widget\”:\”gif6\”,\”visible\”:true}>ET ”);
MNG_USART1.TX_Byte_Num = strlen((carattere const *)MNG_USART1.TX_BUF);
USART_TX_Dati(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;
}
altrimenti se((quan_lie1==3)||(cha_lie1==3))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((carattere *)MNG_USART1.TX_BUF,
“ST<{\”cmd_code\”:\”set_visible\”,\”type\”:\”widget\”,\”widget\”:\”gif7\”,\”visible\”:true}>ET ”);
MNG_USART1.TX_Byte_Num = strlen((carattere const *)MNG_USART1.TX_BUF);
USART_TX_Dati(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;
}
altrimenti se((quan_lie2==3)||(cha_lie2==3))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((carattere *)MNG_USART1.TX_BUF,
“ST<{\”cmd_code\”:\”set_visible\”,\”type\”:\”widget\”,\”widget\”:\”gif8\”,\”visible\”:true}>ET ”);
MNG_USART1.TX_Byte_Num = strlen((carattere const *)MNG_USART1.TX_BUF);
USART_TX_Dati(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;
}
altrimenti se((quan_lie3==3)||(cha_lie3==3))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((carattere *)MNG_USART1.TX_BUF,
“ST<{\”cmd_code\”:\”set_visible\”,\”type\”:\”widget\”,\”widget\”:\”gif9\”,\”visible\”:true}>ET ”);
MNG_USART1.TX_Byte_Num = strlen((carattere const *)MNG_USART1.TX_BUF);
USART_TX_Dati(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;
}
altrimenti se((quan_zuoxia==3)||(cha_zuoxia==3))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((carattere *)MNG_USART1.TX_BUF,
“ST<{\”cmd_code\”:\”set_visible\”,\”type\”:\”widget\”,\”widget\”:\”gif11\”,\”visible\”:true}>ET ”);
MNG_USART1.TX_Byte_Num = strlen((carattere const *)MNG_USART1.TX_BUF);
USART_TX_Dati(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;
}
altrimenti se((quan_youxia==3)||(cha_youxia==3))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((carattere *)MNG_USART1.TX_BUF,
“ST<{\”cmd_code\”:\”set_visible\”,\”type\”:\”widget\”,\”widget\”:\”gif10\”,\”visible\”:true}>ET ”);
MNG_USART1.TX_Byte_Num = strlen((carattere const *)MNG_USART1.TX_BUF);
USART_TX_Dati(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 = FALSO;
}
}
}
/** Configurazione dell'orologio di sistema
*/
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.PLLSate = 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)
{
Gestore_Errori();
}
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)
{
Gestore_Errori();
}
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1;
PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK1;
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
{
Gestore_Errori();
}
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
/* Configurazione dell'interruzione SysTick_IRQn */
HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}
/** Configurazione piedinatura
*/
vuoto statico MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
/* Abilita orologio porte 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);
}
/* CODICE UTENTE BEGIN 4 */
/* FINE CODICE UTENTE 4 */
/ **
* @brief Questa funzione viene eseguita in caso di errore.
* @param Nessuno
* @retval Nessuno
*/
void Error_Handler(void)
{
/* CODICE UTENTE BEGIN Error_Handler */
/* L'utente può aggiungere la propria implementazione per segnalare lo stato di ritorno dell'errore HAL */
while (1)
{
}
/* FINE CODICE UTENTE Error_Handler */
}
#ifdef USE_FULL_ASSERT
/ **
* @brief Riporta il nome del file sorgente e il numero della riga sorgente
* dove si è verificato l'errore assert_param.
* File @param: puntatore al nome del file sorgente
* Riga @param: numero sorgente della riga di errore assert_param
* @retval Nessuno
*/
void assert_failed (file uint8_t*, riga uint32_t)
{
/* CODICE UTENTE BEGIN 6 */
/* L'utente può aggiungere la propria implementazione per riportare il nome del file e il numero di riga,
es: printf(“Valore parametri errato: file %s sulla riga %d\r\n”, file, riga) */
/* FINE CODICE UTENTE 6 */
}
#endif
/ **
* @}
*/
/ **
* @}
*/
/************************* (C) COPYRIGHT STMicroelectronics *****FINE DEL FILE****/
I risultati finali mostrano
Fonte: Plato Data Intelligence