Résumé
Tic-tac-toe est un jeu qui se joue sur une grille de 3 par 3, similaire au gobang. Il tire son nom du fait que le tableau ne dessine généralement pas de bordures et que les lignes de la grille sont disposées en tic-tac-toe. Les outils nécessaires au jeu ne sont que du papier et un stylo. Ensuite, deux joueurs représentant O et X se relaient pour laisser des marques sur la grille. Toutes les trois marques forment une ligne droite, qui est le gagnant.
Cet article consiste à utiliser le microcontrôleur STM32 et l'écran LCD STONE pour développer un jeu de morpion simple.
Matériel nécessaire à l'expérimentation
Le principe du système
Spécifiez que le premier appui sur l'écran doit être O, le deuxième appui sur l'écran est X, a fait ce cycle. Définissez 8 tableaux pour stocker le nombre de O et X dans chaque ligne, colonne et diagonale de chaque grille, tant qu'il y en a trois de la même marque, c'est la victoire, alors il y aura une case rouge clignotante pour prouver la victoire du ligne, colonne ou diagonale, puis appuyez sur réinitialiser pour recommencer le jeu.
Voici l'organigramme :
Conception matérielle du système d'affichage LCD STM32 et STONE
(A) Écran LCD PIERRE
- Conception matérielle « jeu de morpion »
Utilisez l'écran LCD STONE de Beijing STONE Technology co., ltd, le modèle est STWI070WT-01, avec un écran TFT intégré et un contrôleur tactile.
- STVC070WT-01 les caractéristiques du produit
Paramètre physique | |
Taille | 7 cm |
Résolution | 800 × RVB × 480 |
Espacement des pixels | 0.0642 (L) × 0.1790 (H) mm |
Couleur | 262,144 couleurs (18 bits) |
Zone de visualisation | 154.08 (L) × 85.92 (H) mm |
Affichage Dimension | 186.4mmx105.5mm |
Dimension globale | 186.4 mm x 105.5 mm x 17.4 mm (type standard) 186.4 mm x 105.5 mm x 23.8 mm (avec port Ethernet) |
Poids net | 300 g |
Commande | |
type de rétroéclairage | DEL |
Luminosité | 300cd/m2 (la luminosité peut être réglable sur 100 niveaux) |
Comparaison | 500:1 |
Durée de vie du rétroéclairage | 300,000 heures |
Angle de vision | 70°/70°/50°/70° (L/R/U/D) |
Panneau TFT | Un panel industriel de classe |
Écran tactile | Résistance tactile à 4 fils/tactile capacitif/sans écran tactile |
Mode écran: | Ressources |
Processeur | |
Processeur | Cortex A8 |
Verversingssnelheid | 1G Hz |
Fréquence d'images maximale | FPS 60 |
Interfaces | |
Interface série | Niveau RS232 / RS422 / RS485 / TTL |
interface Ethernet | 10M/100M (facultatif) |
Interface sans fil | Wi-Fi/Bluetooth (en option) |
Téléchargement du fichier de projet | Port USB2.0 ou disque de stockage U |
Alimentation | |
Tension nominale | +12V CC ou +5V CC |
Plage de tension admissible | +7V CC…+28V CC ou +5V CC |
Max. transitoires admissibles | + 28V |
Temps entre deux transitoires | 50 secondes minimum |
Fusible interne | Fusible à récupération automatique 2A |
Consommation d'énergie | 3.0 W |
Conditions ambiantes | |
Max. température ambiante admissibleOpérationStockage | -20 ℃ ~ +70 ℃ -30 ℃ ~ +80 ℃ |
Humidité relativeOpérationStockage | 55℃,85%60℃,90% |
Charge de chocOpérationStockage | 15 g/11 ms25 g/6 ms |
VibrationOpérationStockage | 0.035 mm (10 – 58 Hz)/ 1 g (58 – 500 Hz)3.5 mm (5 – 8,5 Hz)/ 1 g (8.5 – 500 Hz) |
Pression barométriqueOpérationStockage | 706 à 1030 hPa581 à 1030 hPa |
Immunité au bruit | |
Décharge statique (décharge de contact/décharge d'air) | EN 61000-4-2 6kV/8kV |
Irradiation RF | EN 61000-4-310 V/m, 80 % AM1 kHz |
Modulation d'impulsions | ENV 50204900 MHz ±5 MHz10 V/meff., 50 % ED, 200 Hz |
conduction RF | EN 61000-4-6150 kHz – 80 MHz10 V, 80 % AM, 1 kHz |
Interférences en rafaleLignes d'alimentationLignes de données de processusLignes de signal | EN 61000-4-42kV2kV1kV |
Dispositif d'assistance | |
Port UART | Prise en chargeRS232/RS422/RS485/TTL |
Port Réseau | Prise en charge du port Ethernet/Wi-Fi/Bluetooth |
Mémoire flash | SupportStandard 256 Mo, Extension 1 Go ou 2 Go |
Alerte Sonore | Assistance |
RTC | Assistance |
Port USB | Support Téléchargement en ligne par câble USB |
Interface de disque de stockage U | Support.Offline Télécharger ou copier les données utilisateur |
Écran tactile | Résistance à 4 fils / capacitif |
Police vectorielle | Format TTF standard |
Image(s) | Prise en charge des formats PNG/JPG/BMP/SVG/GIF |
Interface Audio | Prise en charge du format WAVLa longueur d'un seul fichier audio n'est pas limitée, théoriquement jusqu'à 4096 fichiers audio, la puissance du haut-parleur est de 8 ohms 2 watts ou 4 ohms 3 watts |
Jeu de commandes | Ensembles de commandes simplifiés unifiés |
Mémoire | |
Mémoire flash | 256 Mo standard, extension 1 Go ou 2 Go |
Quantité de mémoire pour l'image | Selon la capacité de l'image, suggérez le format "PNG, BMP, JPG, SVG, GIF". |
(B) Carte STM32
En utilisant une carte STM32, la puce du STM32 est CKS32F303.
La famille STM32 de cœurs ARM Cortex-M0, M0+, M3, M4 et M7 est conçue pour les applications embarquées nécessitant des performances élevées, un faible coût et une faible consommation d'énergie.
- Alimentation 2.0V-3.6V
- Broches E/S compatibles 5V
- Excellent mode d'horloge de sécurité
- Mode faible consommation avec fonction réveil
- Oscillateur RC interne
- Circuit de réinitialisation intégré
- Plage de température de fonctionnement.
- -40°C à +85°C ou 105°C
Conception du logiciel système
Le processus de développement des écrans LCD STM32 et STONE
1: créez le projet et chargez les images requises dans le projet.
2: utiliser le logiciel Stone-designer pour créer des relations associées dynamiquement ; les contrôles principaux sont : « Bouton », « Image » ;
3: simulation et compilation de logiciels pour générer des fichiers exécutables.
4: l'écran LCD est connecté au PC via USB et copie le fichier exécutable à l'écran.
Créez d'abord un nouveau projet comme indiqué ci-dessous.
Deuxièmement, importez toutes les images dans la ressource
Ensuite, définissez des commandes de bouton sur chaque grille et rendez les boutons invisibles.
N'oubliez pas de régler le bouton de réinitialisation !
L'effet fini est montré ci-dessous :
Après cela, ajoutez des contrôles d'image à chaque grille de la même manière et définissez-les tous sur des images blanches.
Enfin, ajoutez le contrôle gif et définissez-le sur invisible.
Les parties de l'effet fini sont indiquées ci-dessous :
Schéma de connexion du circuit
Partage de Code
/* Comprend ——————————————————————*/
#include "stm32f0xx_hal.h"
#include "Uart.h"
#include "chaîne.h"
#inclure "ws2812.h"
#inclure "IWDG.h"
RVB_COLOR USER_RGB_COLOR ;
caractère non signé TX_Mode = 1 ; //Bit indicateur de type de transmission 1:232 0:TTL
caractère non signé BLINK_2=0 ;
caractère non signé RX3_BUF[32] ; //Tampon de réception personnalisé à trois niveaux
#définir BOUTON1 0x81
#définir BOUTON2 0x82
#définir BOUTON3 0x83
#définir BOUTON4 0x84
#définir BOUTON5 0x85
#définir BOUTON6 0x86
#définir BOUTON7 0x87
#définir BOUTON8 0x88
#définir BOUTON9 0x89
#définir BOUTON0 0x8A
#define EFFACER 0x8E
entier non signé r_flag1 = 0 ;
entier non signé quan[4][2]={0} ;
int cha non signé [4][2]={0};
entier non signé quan_hang1 = 0 ;
entier non signé quan_hang2 = 0 ;
entier non signé quan_hang3 = 0 ;
entier non signé quan_lie1 = 0;
entier non signé quan_lie2 = 0;
entier non signé quan_lie3 = 0;
int non signé quan_zuoxia = 0;
int non signé quan_youxia = 0;
int non signé cha_hang1 = 0;
int non signé cha_hang2 = 0;
int non signé cha_hang3 = 0;
int non signé cha_lie1 = 0;
int non signé cha_lie2 = 0;
int non signé cha_lie3 = 0;
int non signé cha_zuoxia = 0;
int non signé cha_youxia = 0; //entier non signé r_flag10 = 0;
void SystemClock_Config(void);
void Error_Handler(void);
vide statique MX_GPIO_Init(void);
int main (vide)
{
uint8_t color_buf = 0 ;
//Sélection de fonction
/* Reset de tous les périphériques, Initialise l'interface Flash et le Systick. */
HAL_Init();
/* Configurer l'horloge système */
SystemClock_Config();
/* Initialiser tous les périphériques configurés */
MX_GPIO_Init();
TX_Mode = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_4) ;
si(Mode_TX)
MX_USART1_UART_Init();
//232 Initialisation
d'autre
MX_USART1_UART_Init2();
//Initialisation TTl
tandis que(1)
{
si(TX_Mode != HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_4))
HAL_NVIC_SystemReset();
//Inversion du cavalier, redémarrage et réinitialisation
si(MNG_USART1.RX_OVER_FLG ==TRUE)
//
Bit indicateur de réception de données série
{
RX3_BUF[0]=MNG_USART1.RX_BUF[7] ;
//Méthode 2 : Obtenir un nom de contrôle de longueur 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("bouton1",(const char *)RX3_BUF))==0)
//Sélectionner le champ
{
color_buf = BOUTON1;
}
if((strcmp("bouton2",(const char *)RX3_BUF))==0)
{
color_buf = BOUTON2;
}
if((strcmp("bouton3",(const char *)RX3_BUF))==0)
{
color_buf = BOUTON3;
}
if((strcmp("bouton4",(const char *)RX3_BUF))==0)
{
color_buf = BOUTON4;
}
if((strcmp("bouton5",(const char *)RX3_BUF))==0)
{
color_buf = BOUTON5;
}
if((strcmp("bouton6",(const char *)RX3_BUF))==0)
{
color_buf = BOUTON6;
}
if((strcmp("bouton7",(const char *)RX3_BUF))==0)
{
color_buf = BOUTON7;
}
if((strcmp("bouton8",(const char *)RX3_BUF))==0)
{
color_buf = BOUTON8;
}
if((strcmp("bouton9",(const char *)RX3_BUF))==0)
{
color_buf = BOUTON9;
}
if((strcmp("bouton0",(const char *)RX3_BUF))==0)
{
color_buf = BOUTON0;
}
commutateur (color_buf)
{
cas BOUTON1 :
//si(r_flag1 == 0)
si((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\”:\”circle\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((car const *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1) ;
r_flag1 ^= 1 ;
quan_hang1++;
quan_lie1++;
quan_youxia++;
//jemset(RX3_BUF,0,7) ;
//jemset(MNG_USART1.RX_BUF,0,USART1_RX_LEN);
color_buf = EFFACER;
}
sinon si((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((car const *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1) ;
r_flag1 = 0 ;
cha_hang1++ ;
cha_lie1++;
cha_youxia++ ;
//jemset(RX3_BUF,0,7) ;
color_buf = EFFACER;
}
//r_flag1 = 1 ;
break;
cas BOUTON2 :
si((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\”:\”circle\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((car const *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1) ;
r_flag1 = 1 ;
quan_hang1++;
quan_lie2++;
//jemset(RX3_BUF,0,7) ;
color_buf = EFFACER;
}
sinon si((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((car const *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1) ;
r_flag1 = 0 ;
cha_hang1++ ;
cha_lie2++;
//jemset(RX3_BUF,0,7) ;
color_buf = EFFACER;
}
break;
cas BOUTON3 :
si((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\”:\”circle\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((car const *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1) ;
r_flag1 = 1 ;
quan_hang1++;
quan_lie3++;
quan_zuoxia++;
//jemset(RX3_BUF,0,7) ;
color_buf = EFFACER;
}
sinon si((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((car const *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1) ;
r_flag1 = 0 ;
cha_hang1++ ;
cha_lie3++;
cha_zuoxia++ ;
//jemset(RX3_BUF,0,7) ;
color_buf = EFFACER;
}
break;
cas BOUTON4 :
si((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\”:\”circle\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((car const *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1) ;
r_flag1 = 1 ;
quan_hang2++;
quan_lie1++;
//jemset(RX3_BUF,0,7) ;
//r_flag10=1 ;
color_buf = EFFACER;
}
sinon si((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((car const *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1) ;
r_flag1 = 0 ;
cha_hang2++ ;
cha_lie1++;
//jemset(RX3_BUF,0,7) ;
color_buf = EFFACER;
}
break;
cas BOUTON5 :
si((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\”:\”circle\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((car const *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1) ;
r_flag1 = 1 ;
quan_hang2++;
quan_lie2++;
quan_zuoxia++;
quan_youxia++;
//jemset(RX3_BUF,0,7) ;
color_buf = EFFACER;
}
sinon si((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((car const *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1) ;
r_flag1 = 0 ;
cha_hang2++ ;
cha_lie2++;
cha_zuoxia++ ;
cha_youxia++ ;
//jemset(RX3_BUF,0,7) ;
color_buf = EFFACER;
}
break;
cas BOUTON6 :
si((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\”:\”circle\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((car const *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1) ;
r_flag1 = 1 ;
quan_hang2++;
quan_lie3++;
//jemset(RX3_BUF,0,7) ;
color_buf = EFFACER;
}
sinon si((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((car const *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1) ;
r_flag1 = 0 ;
cha_hang2++ ;
cha_lie3++;
//jemset(RX3_BUF,0,7) ;
color_buf = EFFACER;
}
break;
cas BOUTON7 :
si((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\”:\”circle\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((car const *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1) ;
r_flag1 = 1 ;
quan_hang3++;
quan_lie1++;
quan_zuoxia++;
//jemset(RX3_BUF,0,7) ;
color_buf = EFFACER;
}
sinon si((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((car const *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1) ;
r_flag1 = 0 ;
cha_hang3++ ;
cha_lie1++;
cha_zuoxia++ ;
//jemset(RX3_BUF,0,7) ;
color_buf = EFFACER;
}
break;
cas BOUTON8 :
si((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\”:\”circle\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((car const *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1) ;
r_flag1 = 1 ;
quan_hang3++;
quan_lie2++;
//jemset(RX3_BUF,0,7) ;
color_buf = EFFACER;
}
sinon si((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((car const *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1) ;
r_flag1 = 0 ;
cha_hang3++ ;
cha_lie2++;
//jemset(RX3_BUF,0,7) ;
color_buf = EFFACER;
}
break;
cas BOUTON9 :
si((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\”:\”circle\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((car const *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1) ;
r_flag1 = 1 ;
quan_hang3++;
quan_lie3++;
quan_youxia++;
//jemset(RX3_BUF,0,7) ;
color_buf = EFFACER;
}
sinon si((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((car const *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1) ;
r_flag1 = 0 ;
cha_hang3++ ;
cha_lie3++;
cha_youxia++ ;
//jemset(RX3_BUF,0,7) ;
color_buf = EFFACER;
}
break;
cas BOUTON0 :
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((car const *)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((car const *)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((car const *)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((car const *)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((car const *)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((car const *)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((car const *)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((car const *)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((car const *)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((car const *)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((car const *)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((car const *)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((car const *)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((car const *)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((car const *)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((car const *)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((car const *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1) ;
//jemset(RX3_BUF,0,7) ;
memset(MNG_USART1.RX_BUF,0,USART1_RX_LEN);
break;
par défaut:
MNG_USART1.RX_OVER_FLG = FAUX ;
break;
}
//////////////////////////////////////////////////// ////////////////////
si((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((car const *)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 ;
}
sinon si((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((car const *)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 ;
}
sinon si((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((car const *)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 ;
}
sinon si((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((car const *)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 ;
}
sinon si((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((car const *)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 ;
}
sinon si((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((car const *)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 ;
}
sinon si((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((car const *)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 ;
}
sinon si((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((car const *)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 = FAUX ;
}
}
}
/** Configuration de l'horloge système
*/
annuler SystemClock_Config (annuler)
{
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.PREDIV = RCC_PREDIV_DIV1 ;
si (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 ;
si (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
{
Error_Handler();
}
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1 ;
PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK1 ;
si (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
{
Error_Handler();
}
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
/* Configuration des interruptions SysTick_IRQn */
HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}
/** Configuration du brochage
*/
vide statique MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct ;
/* Activation de l'horloge des ports 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);
}
/* CODE UTILISATEUR DEBUT 4 */
/* CODE UTILISATEUR FIN 4 */
/ **
* @brief Cette fonction est exécutée en cas d'occurrence d'erreur.
* @param Aucun
* @retval Aucun
*/
annuler Error_Handler (annuler)
{
/* CODE UTILISATEUR COMMENCE Error_Handler */
/* L'utilisateur peut ajouter sa propre implémentation pour signaler l'état de retour d'erreur HAL */
tandis que(1)
{
}
/* CODE UTILISATEUR FIN Error_Handler */
}
#ifdef USE_FULL_ASSERT
/ **
* @brief Rapporte le nom du fichier source et le numéro de ligne source
* où l'erreur assert_param s'est produite.
* @param file : pointeur vers le nom du fichier source
* @param line : numéro de source de la ligne d'erreur assert_param
* @retval Aucun
*/
void assert_failed (fichier uint8_t*, ligne uint32_t)
{
/* CODE UTILISATEUR DEBUT 6 */
/* L'utilisateur peut ajouter sa propre implémentation pour rapporter le nom du fichier et le numéro de ligne,
ex : printf(« Valeur des paramètres erronée : fichier %s à la ligne %d\r\n », fichier, ligne) */
/* CODE UTILISATEUR FIN 6 */
}
#endif
/ **
* @}
*/
/ **
* @}
*/
/************************ (C) COPYRIGHT STMicroelectronics *****FIN DU FICHIER****/
Les résultats finaux montrent
Source : Platon Data Intelligence