Resumen
Tic-tac-toe es un juego que se juega en una cuadrícula de 3 por 3, similar al gobang. Recibe su nombre porque el tablero generalmente no dibuja bordes y las líneas de la cuadrícula están dispuestas en tic-tac-toe. Las herramientas necesarias para el juego son solo papel y bolígrafo. Luego, dos jugadores que representan a O y X se turnan para dejar marcas en la cuadrícula. Cualesquiera tres marcas forman una línea recta, que es la ganadora.
Este artículo utiliza el microcontrolador STM32 y la pantalla LCD STONE para desarrollar un simple juego de tic-tac-toe.
Materiales necesarios para el experimento
El principio del sistema
Especifique que el primer toque en la pantalla debe ser O, el segundo toque en la pantalla es X, ha estado haciendo este ciclo. Establezca 8 matrices para almacenar el número de O y X en cada fila, columna y diagonal de cada cuadrícula, siempre que haya tres de la misma marca es la victoria, entonces habrá un cuadro rojo parpadeante para demostrar la victoria de la fila, columna o diagonal, y luego toque reiniciar para comenzar el juego nuevamente.
El siguiente es el diagrama de flujo:
Diseño de hardware del sistema de pantalla LCD STM32 y STONE
(A) Pantalla LCD PIEDRA
- Diseño de hardware de "juego de tic-tac-toe"
Utilice la pantalla LCD STONE de Beijing STONE Technology co., Ltd, el modelo es STWI070WT-01, con una pantalla TFT integrada y un controlador táctil.
- STVC070WT-01 Características del producto
Parámetro físico | |
Tamaño | 7 pulgadas |
Resolución | 800 × RGB × 480 |
Espaciado de píxeles | 0.0642 (ancho) × 0.1790 (alto) mm |
Color | 262,144 colores (18 bits) |
Área de visualización | 154.08 (ancho) × 85.92 (alto) mm |
pantalla Dimensión | 186.4mmx105.5mm |
Dimensión total | 186.4 mm x 105.5 mm x 17.4 mm (tipo estándar) 186.4 mm x 105.5 mm x 23.8 mm (con puerto Ethernet) |
Peso neto | 300g |
Pantalla | |
Tipo de luz de fondo | LED |
Brillo | 300 cd/m2 (el brillo se puede ajustar en 100 niveles) |
Comparación | 500:1 |
Vida de luz de fondo | 300,000 horas |
Ángulo de visión | 70 ° / 70 ° / 50 ° / 70 ° (L / R / U / D) |
Panel TFT | Un panel industrial de clase |
Touch Screen | Resistencia táctil de 4 hilos/táctil capacitivo/sin pantalla táctil |
Modo de pantalla: | Recursos |
Procesador | |
CPU | Cortex A8 |
Frecuencia de actualización | 1G Hz |
Frecuencia de imagen máxima | 60 FPS |
Interfaz | |
Interfaz serie | Nivel RS232 / RS422 / RS485 / TTL |
Interfaz Ethernet | 10M / 100M (opcional) |
Interfaz inalámbrica | Wi-Fi / Bluetooth (opcional) |
Descarga de archivos de proyecto | Puerto USB2.0 o disco de almacenamiento U |
Fuente de Energía | |
Tensión nominal | + 12V DC o + 5V DC |
Rango de voltaje admisible | + 7 V CC… + 28 V CC o + 5 V CC |
Max. transitorios permitidos | + 28V |
Tiempo entre dos transitorios | 50 segundos mínimo |
Fusible interno | Fusible de recuperación automática 2A |
Consumo de energía | 3.0 W |
Condiciones ambientales | |
Max. temperatura ambiente permitidaOperaciónAlmacenamiento | -20 ℃ ~ +70 ℃ -30 ℃ ~ +80 ℃ |
Humedad relativaOperaciónAlmacenamiento | 55 ℃, 85 % 60 ℃, 90 % |
Carga de choqueOperaciónAlmacenamiento | 15 g/11 ms25 g/6 ms |
VibraciónOperaciónAlmacenamiento | 0.035 mm (10 – 58 Hz)/ 1 g (58 – 500 Hz) 3.5 mm (5 – 8,5 Hz)/ 1 g (8.5 – 500 Hz) |
Presión barométricaOperaciónAlmacenamiento | 706 a 1030 hPa 581 a 1030 hPa |
Inmunidad al ruido | |
Descarga estática (descarga de contacto/descarga de aire) | EN 61000-4-2 6 kV / 8 kV |
Irradiación RF | EN 61000-4-310 V/m, 80 % AM1 kHz |
Modulación de pulso | ENV 50204900 MHz ±5 MHz10 V/meff., 50% ED, 200 Hz |
Conducción de RF | EN 61000-4-6150 kHz – 80 MHz10 V, 80 % AM, 1 kHz |
Interferencia de ráfaga Líneas de suministro Líneas de datos de proceso Líneas de señal | EN 61000-4-42kV2kV1kV |
Dispositivo de soporte | |
Puerto UART | Soporte RS232 / RS422 / RS485 / TTL |
Puerto de red | Soporte Puerto Ethernet / Wi-Fi / Bluetooth |
Memoria flash | SupportStandard 256MB, Extend 1GB o 2GB |
Zumbador | Soporte |
RTC | Soporte |
Puerto USB | SoporteDescarga en línea por cable USB |
Interfaz de disco de almacenamiento U | Support.Offline Descargar o copiar datos de usuario |
Touch Screen | Resistencia de 4 cables / capacitiva |
Fuente vectorial | Formato TTF estándar |
Imagen | Soporta formato PNG / JPG / BMP / SVG / GIF |
Interfaz de audio | Admite formato WAV La longitud de un solo archivo de audio no está limitada, teóricamente hasta 4096 archivos de audio, la potencia del altavoz es de 8 ohmios 2 vatios o 4 ohmios 3 vatios |
Conjunto de comandos | Conjuntos de comandos unificados y simplificados |
Salud Cerebral | |
Memoria flash | Estándar de 256 MB, extensión de 1 GB o 2 GB |
Cantidad de memoria para imagen | Según la capacidad de la imagen, sugiera el formato “PNG, BMP, JPG, SVG, GIF”. |
(B) Tablero STM32
Usando una placa STM32, el chip del STM32 es CKS32F303.
La familia STM32 de núcleos ARM Cortex-M0, M0 +, M3, M4 y M7 está diseñada para aplicaciones integradas que requieren alto rendimiento, bajo costo y bajo consumo de energía.
- Fuente de alimentación 2.0V-3.6V
- Pines de E / S compatibles con 5V
- Excelente modo de reloj seguro
- Modo de bajo consumo con función de despertador
- Oscilador RC interno
- Circuito de reinicio integrado
- Rango de temperatura de funcionamiento.
- -40 ° C a + 85 ° C o 105 ° C
Diseño de software del sistema
El proceso de desarrollo de la pantalla LCD STM32 y STONE
1: cree el proyecto y cargue las imágenes requeridas en el proyecto.
2: utilizar el software Stone-designer para crear relaciones asociadas dinámicamente; los controles principales son: “Botón”, “imagen”;
3: simulación y compilación de software para generar archivos ejecutables.
4: la pantalla LCD se conecta a la PC a través de USB y copia el archivo ejecutable a la pantalla.
Primero cree un nuevo proyecto como se muestra a continuación.
En segundo lugar, importe todas las imágenes al recurso.
Luego, configure los controles de los botones en cada cuadrícula y haga que los botones sean invisibles.
¡No olvide configurar el botón de reinicio!
El efecto final se muestra a continuación:
Después de eso, agregue controles de imagen a cada cuadrícula de la misma manera y configúrelos a todos en imágenes en blanco.
Finalmente agregue el control gif y configúrelo en invisible.
Las partes del efecto terminado se muestran a continuación:
Diagrama de conexión del circuito
Compartir código
/ * Incluye —————————————————————— * /
#include "stm32f0xx_hal.h"
#include "Uart.h"
#include "string.h"
#include "ws2812.h"
#include "IWDG.h"
RGB_COLOR USUARIO_RGB_COLOR;
carácter sin firmar TX_Mode = 1; // Bandera de tipo de transmisión bit 1: 232 0: TTL
carácter sin firmar BLINK_2 = 0;
carácter sin firmar RX3_BUF [32]; // Búfer de recepción personalizado de tres niveles
#define BOTÓN1 0x81
#define BOTÓN2 0x82
#define BOTÓN3 0x83
#define BOTÓN4 0x84
#define BOTÓN5 0x85
#define BOTÓN6 0x86
#define BOTÓN7 0x87
#define BOTÓN8 0x88
#define BOTÓN9 0x89
#define BOTÓN0 0x8A
#define BORRAR 0x8E
int sin signo r_flag1 = 0;
unsigned int quan [4] [2] = {0};
unsigned int cha [4] [2] = {0};
sin signo int quan_hang1 = 0;
sin signo int quan_hang2 = 0;
sin signo int quan_hang3 = 0;
int sin signo quan_lie1 = 0;
int sin signo quan_lie2 = 0;
int sin signo quan_lie3 = 0;
sin signo int quan_zuoxia = 0;
int sin signo quan_youxia = 0;
sin signo int cha_hang1 = 0;
sin signo int cha_hang2 = 0;
sin signo int cha_hang3 = 0;
int sin signo cha_lie1 = 0;
int sin signo cha_lie2 = 0;
int sin signo cha_lie3 = 0;
int sin signo cha_zuoxia = 0;
unsigned int cha_youxia = 0; // unsigned int r_flag10 = 0;
void SystemClock_Config (void);
void Error_Handler (vacío);
estático vacío MX_GPIO_Init (vacío);
int principal (vacío)
{
uint8_t color_buf = 0;
// Selección de función
/ * Reset de todos los periféricos, Inicializa la interfaz Flash y el Systick. * /
HAL_Init ();
/ * Configurar el reloj del sistema * /
SystemClock_Config ();
/ * Inicializar todos los periféricos configurados * /
MX_GPIO_Init ();
TX_Mode = HAL_GPIO_ReadPin (GPIOA, GPIO_PIN_4);
si (TX_Mode)
MX_USART1_UART_Init ();
// 232 Inicialización
más
MX_USART1_UART_Init2 ();
// Inicialización TTl
mientras (1)
{
si (TX_Mode! = HAL_GPIO_ReadPin (GPIOA, GPIO_PIN_4))
HAL_NVIC_SystemReset ();
// Inversión, reinicio y reinicialización del puente
si (MNG_USART1.RX_OVER_FLG == TRUE)
//
Bit de bandera de recepción de datos en serie
{
RX3_BUF [0] = MNG_USART1.RX_BUF [7];
// Método 2: obtener un nombre de control de longitud fija
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)
// Seleccionar control
{
color_buf = BOTÓN1;
}
if ((strcmp (“button2”, (const char *) RX3_BUF)) == 0)
{
color_buf = BOTÓN2;
}
if ((strcmp (“button3”, (const char *) RX3_BUF)) == 0)
{
color_buf = BOTÓN3;
}
if ((strcmp (“button4”, (const char *) RX3_BUF)) == 0)
{
color_buf = BOTÓN4;
}
if ((strcmp (“button5”, (const char *) RX3_BUF)) == 0)
{
color_buf = BOTÓN5;
}
if ((strcmp (“button6”, (const char *) RX3_BUF)) == 0)
{
color_buf = BOTÓN6;
}
if ((strcmp (“button7”, (const char *) RX3_BUF)) == 0)
{
color_buf = BOTÓN7;
}
if ((strcmp (“button8”, (const char *) RX3_BUF)) == 0)
{
color_buf = BOTÓN8;
}
if ((strcmp (“button9”, (const char *) RX3_BUF)) == 0)
{
color_buf = BOTÓN9;
}
if ((strcmp (“button0”, (const char *) RX3_BUF)) == 0)
{
color_buf = BOTÓN0;
}
cambiar (color_buf)
{
caso BUTTON1:
// 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 ((char *) MNG_USART1.TX_BUF,
“ST <{\” cmd_code \ ”: \” set_image \ ”, \” tipo \ ”: \” imagen \ ”, \” widget \ ”: \” imagen2 \ ”, \” imagen \ ”: \” círculo \ ”}> ET”);
MNG_USART1.TX_Byte_Num = strlen ((carácter constante *) MNG_USART1.TX_BUF);
USART_TX_Data (MNG_USART1);
r_flag1 ^ = 1;
quan_hang1 ++;
quan_lie1 ++;
quan_youxia ++;
// memset (RX3_BUF, 0,7);
//conjunto de memoria(MNG_USART1.RX_BUF,0,USART1_RX_LEN);
color_buf = BORRAR;
}
más si ((r_flag1 == 1) && (MNG_USART1.RX_BUF [14] == 0x02))
{
memset (MNG_USART1.TX_BUF, 0, USART1_TX_LEN);
sprintf ((char *) MNG_USART1.TX_BUF,
“ST <{\” cmd_code \ ”: \” set_image \ ”, \” tipo \ ”: \” imagen \ ”, \” widget \ ”: \” imagen2 \ ”, \” imagen \ ”: \” x \ ”}> ET”);
MNG_USART1.TX_Byte_Num = strlen ((carácter constante *) MNG_USART1.TX_BUF);
USART_TX_Data (MNG_USART1);
r_bandera1 = 0;
cha_hang1 ++;
cha_lie1 ++;
cha_youxia ++;
// memset (RX3_BUF, 0,7);
color_buf = BORRAR;
}
// r_flag1 = 1;
break;
caso BUTTON2:
si ((r_flag1 == 0) && (MNG_USART1.RX_BUF [14] == 0x02))
{
memset (MNG_USART1.TX_BUF, 0, USART1_TX_LEN);
sprintf ((char *) MNG_USART1.TX_BUF,
“ST <{\” cmd_code \ ”: \” set_image \ ”, \” tipo \ ”: \” imagen \ ”, \” widget \ ”: \” imagen3 \ ”, \” imagen \ ”: \” círculo \ ”}> ET”);
MNG_USART1.TX_Byte_Num = strlen ((carácter constante *) MNG_USART1.TX_BUF);
USART_TX_Data (MNG_USART1);
r_bandera1 = 1;
quan_hang1 ++;
quan_lie2 ++;
// memset (RX3_BUF, 0,7);
color_buf = BORRAR;
}
más si ((r_flag1 == 1) && (MNG_USART1.RX_BUF [14] == 0x02))
{
memset (MNG_USART1.TX_BUF, 0, USART1_TX_LEN);
sprintf ((char *) MNG_USART1.TX_BUF,
“ST <{\” cmd_code \ ”: \” set_image \ ”, \” tipo \ ”: \” imagen \ ”, \” widget \ ”: \” imagen3 \ ”, \” imagen \ ”: \” x \ ”}> ET”);
MNG_USART1.TX_Byte_Num = strlen ((carácter constante *) MNG_USART1.TX_BUF);
USART_TX_Data (MNG_USART1);
r_bandera1 = 0;
cha_hang1 ++;
cha_lie2 ++;
// memset (RX3_BUF, 0,7);
color_buf = BORRAR;
}
break;
caso BUTTON3:
si ((r_flag1 == 0) && (MNG_USART1.RX_BUF [14] == 0x02))
{
memset (MNG_USART1.TX_BUF, 0, USART1_TX_LEN);
sprintf ((char *) MNG_USART1.TX_BUF,
“ST <{\” cmd_code \ ”: \” set_image \ ”, \” tipo \ ”: \” imagen \ ”, \” widget \ ”: \” imagen4 \ ”, \” imagen \ ”: \” círculo \ ”}> ET”);
MNG_USART1.TX_Byte_Num = strlen ((carácter constante *) MNG_USART1.TX_BUF);
USART_TX_Data (MNG_USART1);
r_bandera1 = 1;
quan_hang1 ++;
quan_lie3 ++;
quan_zuoxia ++;
// memset (RX3_BUF, 0,7);
color_buf = BORRAR;
}
más si ((r_flag1 == 1) && (MNG_USART1.RX_BUF [14] == 0x02))
{
memset (MNG_USART1.TX_BUF, 0, USART1_TX_LEN);
sprintf ((char *) MNG_USART1.TX_BUF,
“ST <{\” cmd_code \ ”: \” set_image \ ”, \” tipo \ ”: \” imagen \ ”, \” widget \ ”: \” imagen4 \ ”, \” imagen \ ”: \” x \ ”}> ET”);
MNG_USART1.TX_Byte_Num = strlen ((carácter constante *) MNG_USART1.TX_BUF);
USART_TX_Data (MNG_USART1);
r_bandera1 = 0;
cha_hang1 ++;
cha_lie3 ++;
cha_zuoxia ++;
// memset (RX3_BUF, 0,7);
color_buf = BORRAR;
}
break;
caso BUTTON4:
si ((r_flag1 == 0) && (MNG_USART1.RX_BUF [14] == 0x02))
{
memset (MNG_USART1.TX_BUF, 0, USART1_TX_LEN);
sprintf ((char *) MNG_USART1.TX_BUF,
“ST <{\” cmd_code \ ”: \” set_image \ ”, \” tipo \ ”: \” imagen \ ”, \” widget \ ”: \” imagen5 \ ”, \” imagen \ ”: \” círculo \ ”}> ET”);
MNG_USART1.TX_Byte_Num = strlen ((carácter constante *) MNG_USART1.TX_BUF);
USART_TX_Data (MNG_USART1);
r_bandera1 = 1;
quan_hang2 ++;
quan_lie1 ++;
// memset (RX3_BUF, 0,7);
// r_flag10 = 1;
color_buf = BORRAR;
}
más si ((r_flag1 == 1) && (MNG_USART1.RX_BUF [14] == 0x02))
{
memset (MNG_USART1.TX_BUF, 0, USART1_TX_LEN);
sprintf ((char *) MNG_USART1.TX_BUF,
“ST <{\” cmd_code \ ”: \” set_image \ ”, \” tipo \ ”: \” imagen \ ”, \” widget \ ”: \” imagen5 \ ”, \” imagen \ ”: \” x \ ”}> ET”);
MNG_USART1.TX_Byte_Num = strlen ((carácter constante *) MNG_USART1.TX_BUF);
USART_TX_Data (MNG_USART1);
r_bandera1 = 0;
cha_hang2 ++;
cha_lie1 ++;
// memset (RX3_BUF, 0,7);
color_buf = BORRAR;
}
break;
caso BUTTON5:
si ((r_flag1 == 0) && (MNG_USART1.RX_BUF [14] == 0x02))
{
memset (MNG_USART1.TX_BUF, 0, USART1_TX_LEN);
sprintf ((char *) MNG_USART1.TX_BUF,
“ST <{\” cmd_code \ ”: \” set_image \ ”, \” tipo \ ”: \” imagen \ ”, \” widget \ ”: \” imagen6 \ ”, \” imagen \ ”: \” círculo \ ”}> ET”);
MNG_USART1.TX_Byte_Num = strlen ((carácter constante *) MNG_USART1.TX_BUF);
USART_TX_Data (MNG_USART1);
r_bandera1 = 1;
quan_hang2 ++;
quan_lie2 ++;
quan_zuoxia ++;
quan_youxia ++;
// memset (RX3_BUF, 0,7);
color_buf = BORRAR;
}
más si ((r_flag1 == 1) && (MNG_USART1.RX_BUF [14] == 0x02))
{
memset (MNG_USART1.TX_BUF, 0, USART1_TX_LEN);
sprintf ((char *) MNG_USART1.TX_BUF,
“ST <{\” cmd_code \ ”: \” set_image \ ”, \” tipo \ ”: \” imagen \ ”, \” widget \ ”: \” imagen6 \ ”, \” imagen \ ”: \” x \ ”}> ET”);
MNG_USART1.TX_Byte_Num = strlen ((carácter constante *) MNG_USART1.TX_BUF);
USART_TX_Data (MNG_USART1);
r_bandera1 = 0;
cha_hang2 ++;
cha_lie2 ++;
cha_zuoxia ++;
cha_youxia ++;
// memset (RX3_BUF, 0,7);
color_buf = BORRAR;
}
break;
caso BUTTON6:
si ((r_flag1 == 0) && (MNG_USART1.RX_BUF [14] == 0x02))
{
memset (MNG_USART1.TX_BUF, 0, USART1_TX_LEN);
sprintf ((char *) MNG_USART1.TX_BUF,
“ST <{\” cmd_code \ ”: \” set_image \ ”, \” tipo \ ”: \” imagen \ ”, \” widget \ ”: \” imagen7 \ ”, \” imagen \ ”: \” círculo \ ”}> ET”);
MNG_USART1.TX_Byte_Num = strlen ((carácter constante *) MNG_USART1.TX_BUF);
USART_TX_Data (MNG_USART1);
r_bandera1 = 1;
quan_hang2 ++;
quan_lie3 ++;
// memset (RX3_BUF, 0,7);
color_buf = BORRAR;
}
más si ((r_flag1 == 1) && (MNG_USART1.RX_BUF [14] == 0x02))
{
memset (MNG_USART1.TX_BUF, 0, USART1_TX_LEN);
sprintf ((char *) MNG_USART1.TX_BUF,
“ST <{\” cmd_code \ ”: \” set_image \ ”, \” tipo \ ”: \” imagen \ ”, \” widget \ ”: \” imagen7 \ ”, \” imagen \ ”: \” x \ ”}> ET”);
MNG_USART1.TX_Byte_Num = strlen ((carácter constante *) MNG_USART1.TX_BUF);
USART_TX_Data (MNG_USART1);
r_bandera1 = 0;
cha_hang2 ++;
cha_lie3 ++;
// memset (RX3_BUF, 0,7);
color_buf = BORRAR;
}
break;
caso BUTTON7:
si ((r_flag1 == 0) && (MNG_USART1.RX_BUF [14] == 0x02))
{
memset (MNG_USART1.TX_BUF, 0, USART1_TX_LEN);
sprintf ((char *) MNG_USART1.TX_BUF,
“ST <{\” cmd_code \ ”: \” set_image \ ”, \” tipo \ ”: \” imagen \ ”, \” widget \ ”: \” imagen8 \ ”, \” imagen \ ”: \” círculo \ ”}> ET”);
MNG_USART1.TX_Byte_Num = strlen ((carácter constante *) MNG_USART1.TX_BUF);
USART_TX_Data (MNG_USART1);
r_bandera1 = 1;
quan_hang3 ++;
quan_lie1 ++;
quan_zuoxia ++;
// memset (RX3_BUF, 0,7);
color_buf = BORRAR;
}
más si ((r_flag1 == 1) && (MNG_USART1.RX_BUF [14] == 0x02))
{
memset (MNG_USART1.TX_BUF, 0, USART1_TX_LEN);
sprintf ((char *) MNG_USART1.TX_BUF,
“ST <{\” cmd_code \ ”: \” set_image \ ”, \” tipo \ ”: \” imagen \ ”, \” widget \ ”: \” imagen8 \ ”, \” imagen \ ”: \” x \ ”}> ET”);
MNG_USART1.TX_Byte_Num = strlen ((carácter constante *) MNG_USART1.TX_BUF);
USART_TX_Data (MNG_USART1);
r_bandera1 = 0;
cha_hang3 ++;
cha_lie1 ++;
cha_zuoxia ++;
// memset (RX3_BUF, 0,7);
color_buf = BORRAR;
}
break;
caso BUTTON8:
si ((r_flag1 == 0) && (MNG_USART1.RX_BUF [14] == 0x02))
{
memset (MNG_USART1.TX_BUF, 0, USART1_TX_LEN);
sprintf ((char *) MNG_USART1.TX_BUF,
“ST <{\” cmd_code \ ”: \” set_image \ ”, \” tipo \ ”: \” imagen \ ”, \” widget \ ”: \” imagen9 \ ”, \” imagen \ ”: \” círculo \ ”}> ET”);
MNG_USART1.TX_Byte_Num = strlen ((carácter constante *) MNG_USART1.TX_BUF);
USART_TX_Data (MNG_USART1);
r_bandera1 = 1;
quan_hang3 ++;
quan_lie2 ++;
// memset (RX3_BUF, 0,7);
color_buf = BORRAR;
}
más si ((r_flag1 == 1) && (MNG_USART1.RX_BUF [14] == 0x02))
{
memset (MNG_USART1.TX_BUF, 0, USART1_TX_LEN);
sprintf ((char *) MNG_USART1.TX_BUF,
“ST <{\” cmd_code \ ”: \” set_image \ ”, \” tipo \ ”: \” imagen \ ”, \” widget \ ”: \” imagen9 \ ”, \” imagen \ ”: \” x \ ”}> ET”);
MNG_USART1.TX_Byte_Num = strlen ((carácter constante *) MNG_USART1.TX_BUF);
USART_TX_Data (MNG_USART1);
r_bandera1 = 0;
cha_hang3 ++;
cha_lie2 ++;
// memset (RX3_BUF, 0,7);
color_buf = BORRAR;
}
break;
caso BUTTON9:
si ((r_flag1 == 0) && (MNG_USART1.RX_BUF [14] == 0x02))
{
memset (MNG_USART1.TX_BUF, 0, USART1_TX_LEN);
sprintf ((char *) MNG_USART1.TX_BUF,
“ST <{\” cmd_code \ ”: \” set_image \ ”, \” tipo \ ”: \” imagen \ ”, \” widget \ ”: \” imagen10 \ ”, \” imagen \ ”: \” círculo \ ”}> ET”);
MNG_USART1.TX_Byte_Num = strlen ((carácter constante *) MNG_USART1.TX_BUF);
USART_TX_Data (MNG_USART1);
r_bandera1 = 1;
quan_hang3 ++;
quan_lie3 ++;
quan_youxia ++;
// memset (RX3_BUF, 0,7);
color_buf = BORRAR;
}
más si ((r_flag1 == 1) && (MNG_USART1.RX_BUF [14] == 0x02))
{
memset (MNG_USART1.TX_BUF, 0, USART1_TX_LEN);
sprintf ((char *) MNG_USART1.TX_BUF,
“ST <{\” cmd_code \ ”: \” set_image \ ”, \” tipo \ ”: \” imagen \ ”, \” widget \ ”: \” imagen10 \ ”, \” imagen \ ”: \” x \ ”}> ET”);
MNG_USART1.TX_Byte_Num = strlen ((carácter constante *) MNG_USART1.TX_BUF);
USART_TX_Data (MNG_USART1);
r_bandera1 = 0;
cha_hang3 ++;
cha_lie3 ++;
cha_youxia ++;
// memset (RX3_BUF, 0,7);
color_buf = BORRAR;
}
break;
caso BUTTON0:
r_bandera1 = 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 ((char *) MNG_USART1.TX_BUF,
“ST <{\” cmd_code \ ”: \” set_image \ ”, \” tipo \ ”: \” imagen \ ”, \” widget \ ”: \” imagen2 \ ”, \” imagen \ ”: \” bai \ ”}> ET”);
MNG_USART1.TX_Byte_Num = strlen ((carácter constante *) MNG_USART1.TX_BUF);
USART_TX_Data (MNG_USART1);
memset (MNG_USART1.TX_BUF, 0, USART1_TX_LEN);
sprintf ((char *) MNG_USART1.TX_BUF,
“ST <{\” cmd_code \ ”: \” set_image \ ”, \” tipo \ ”: \” imagen \ ”, \” widget \ ”: \” imagen3 \ ”, \” imagen \ ”: \” bai \ ”}> ET”);
MNG_USART1.TX_Byte_Num = strlen ((carácter constante *) MNG_USART1.TX_BUF);
USART_TX_Data (MNG_USART1);
memset (MNG_USART1.TX_BUF, 0, USART1_TX_LEN);
sprintf ((char *) MNG_USART1.TX_BUF,
“ST <{\” cmd_code \ ”: \” set_image \ ”, \” tipo \ ”: \” imagen \ ”, \” widget \ ”: \” imagen4 \ ”, \” imagen \ ”: \” bai \ ”}> ET”);
MNG_USART1.TX_Byte_Num = strlen ((carácter constante *) MNG_USART1.TX_BUF);
USART_TX_Data (MNG_USART1);
memset (MNG_USART1.TX_BUF, 0, USART1_TX_LEN);
sprintf ((char *) MNG_USART1.TX_BUF,
“ST <{\” cmd_code \ ”: \” set_image \ ”, \” tipo \ ”: \” imagen \ ”, \” widget \ ”: \” imagen5 \ ”, \” imagen \ ”: \” bai \ ”}> ET”);
MNG_USART1.TX_Byte_Num = strlen ((carácter constante *) MNG_USART1.TX_BUF);
USART_TX_Data (MNG_USART1);
memset (MNG_USART1.TX_BUF, 0, USART1_TX_LEN);
sprintf ((char *) MNG_USART1.TX_BUF,
“ST <{\” cmd_code \ ”: \” set_image \ ”, \” tipo \ ”: \” imagen \ ”, \” widget \ ”: \” imagen6 \ ”, \” imagen \ ”: \” bai \ ”}> ET”);
MNG_USART1.TX_Byte_Num = strlen ((carácter constante *) MNG_USART1.TX_BUF);
USART_TX_Data (MNG_USART1);
memset (MNG_USART1.TX_BUF, 0, USART1_TX_LEN);
sprintf ((char *) MNG_USART1.TX_BUF,
“ST <{\” cmd_code \ ”: \” set_image \ ”, \” tipo \ ”: \” imagen \ ”, \” widget \ ”: \” imagen7 \ ”, \” imagen \ ”: \” bai \ ”}> ET”);
MNG_USART1.TX_Byte_Num = strlen ((carácter constante *) MNG_USART1.TX_BUF);
USART_TX_Data (MNG_USART1);
memset (MNG_USART1.TX_BUF, 0, USART1_TX_LEN);
sprintf ((char *) MNG_USART1.TX_BUF,
“ST <{\” cmd_code \ ”: \” set_image \ ”, \” tipo \ ”: \” imagen \ ”, \” widget \ ”: \” imagen8 \ ”, \” imagen \ ”: \” bai \ ”}> ET”);
MNG_USART1.TX_Byte_Num = strlen ((carácter constante *) MNG_USART1.TX_BUF);
USART_TX_Data (MNG_USART1);
memset (MNG_USART1.TX_BUF, 0, USART1_TX_LEN);
sprintf ((char *) MNG_USART1.TX_BUF,
“ST <{\” cmd_code \ ”: \” set_image \ ”, \” tipo \ ”: \” imagen \ ”, \” widget \ ”: \” imagen9 \ ”, \” imagen \ ”: \” bai \ ”}> ET”);
MNG_USART1.TX_Byte_Num = strlen ((carácter constante *) MNG_USART1.TX_BUF);
USART_TX_Data (MNG_USART1);
memset (MNG_USART1.TX_BUF, 0, USART1_TX_LEN);
sprintf ((char *) MNG_USART1.TX_BUF,
“ST <{\” cmd_code \ ”: \” set_image \ ”, \” tipo \ ”: \” imagen \ ”, \” widget \ ”: \” imagen10 \ ”, \” imagen \ ”: \” bai \ ”}> ET”);
MNG_USART1.TX_Byte_Num = strlen ((carácter constante *) MNG_USART1.TX_BUF);
USART_TX_Data (MNG_USART1);
memset (MNG_USART1.TX_BUF, 0, USART1_TX_LEN);
sprintf ((char *) MNG_USART1.TX_BUF,
“ST <{\” cmd_code \ ”: \” set_visible \ ”, \” tipo \ ”: \” widget \ ”, \” widget \ ”: \” gif4 \ ”, \” visible \ ”: falso}> ET ”);
MNG_USART1.TX_Byte_Num = strlen ((carácter constante *) MNG_USART1.TX_BUF);
USART_TX_Data (MNG_USART1);
memset (MNG_USART1.TX_BUF, 0, USART1_TX_LEN);
sprintf ((char *) MNG_USART1.TX_BUF,
“ST <{\” cmd_code \ ”: \” set_visible \ ”, \” tipo \ ”: \” widget \ ”, \” widget \ ”: \” gif5 \ ”, \” visible \ ”: falso}> ET ”);
MNG_USART1.TX_Byte_Num = strlen ((carácter constante *) MNG_USART1.TX_BUF);
USART_TX_Data (MNG_USART1);
memset (MNG_USART1.TX_BUF, 0, USART1_TX_LEN);
sprintf ((char *) MNG_USART1.TX_BUF,
“ST <{\” cmd_code \ ”: \” set_visible \ ”, \” tipo \ ”: \” widget \ ”, \” widget \ ”: \” gif6 \ ”, \” visible \ ”: falso}> ET ”);
MNG_USART1.TX_Byte_Num = strlen ((carácter constante *) MNG_USART1.TX_BUF);
USART_TX_Data (MNG_USART1);
memset (MNG_USART1.TX_BUF, 0, USART1_TX_LEN);
sprintf ((char *) MNG_USART1.TX_BUF,
“ST <{\” cmd_code \ ”: \” set_visible \ ”, \” tipo \ ”: \” widget \ ”, \” widget \ ”: \” gif7 \ ”, \” visible \ ”: falso}> ET ”);
MNG_USART1.TX_Byte_Num = strlen ((carácter constante *) MNG_USART1.TX_BUF);
USART_TX_Data (MNG_USART1);
memset (MNG_USART1.TX_BUF, 0, USART1_TX_LEN);
sprintf ((char *) MNG_USART1.TX_BUF,
“ST <{\” cmd_code \ ”: \” set_visible \ ”, \” tipo \ ”: \” widget \ ”, \” widget \ ”: \” gif8 \ ”, \” visible \ ”: falso}> ET ”);
MNG_USART1.TX_Byte_Num = strlen ((carácter constante *) MNG_USART1.TX_BUF);
USART_TX_Data (MNG_USART1);
memset (MNG_USART1.TX_BUF, 0, USART1_TX_LEN);
sprintf ((char *) MNG_USART1.TX_BUF,
“ST <{\” cmd_code \ ”: \” set_visible \ ”, \” tipo \ ”: \” widget \ ”, \” widget \ ”: \” gif9 \ ”, \” visible \ ”: falso}> ET ”);
MNG_USART1.TX_Byte_Num = strlen ((carácter constante *) MNG_USART1.TX_BUF);
USART_TX_Data (MNG_USART1);
memset (MNG_USART1.TX_BUF, 0, USART1_TX_LEN);
sprintf ((char *) MNG_USART1.TX_BUF,
“ST <{\” cmd_code \ ”: \” set_visible \ ”, \” tipo \ ”: \” widget \ ”, \” widget \ ”: \” gif10 \ ”, \” visible \ ”: falso}> ET ”);
MNG_USART1.TX_Byte_Num = strlen ((carácter constante *) MNG_USART1.TX_BUF);
USART_TX_Data (MNG_USART1);
memset (MNG_USART1.TX_BUF, 0, USART1_TX_LEN);
sprintf ((char *) MNG_USART1.TX_BUF,
“ST <{\” cmd_code \ ”: \” set_visible \ ”, \” tipo \ ”: \” widget \ ”, \” widget \ ”: \” gif11 \ ”, \” visible \ ”: falso}> ET ”);
MNG_USART1.TX_Byte_Num = strlen ((carácter constante *) MNG_USART1.TX_BUF);
USART_TX_Data (MNG_USART1);
// memset (RX3_BUF, 0,7);
memset (MNG_USART1.RX_BUF, 0, USART1_RX_LEN);
break;
por defecto:
MNG_USART1.RX_OVER_FLG = FALSO;
break;
}
////////////////////////////////////////////////////// //////////////////
si ((quan_hang1 == 3) || (cha_hang1 == 3))
{
memset (MNG_USART1.TX_BUF, 0, USART1_TX_LEN);
sprintf ((char *) MNG_USART1.TX_BUF,
“ST <{\” cmd_code \ ”: \” set_visible \ ”, \” tipo \ ”: \” widget \ ”, \” widget \ ”: \” gif4 \ ”, \” visible \ ”: true}> ET ”);
MNG_USART1.TX_Byte_Num = strlen ((carácter constante *) 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;
}
más si ((quan_hang2 == 3) || (cha_hang2 == 3))
{
memset (MNG_USART1.TX_BUF, 0, USART1_TX_LEN);
sprintf ((char *) MNG_USART1.TX_BUF,
“ST <{\” cmd_code \ ”: \” set_visible \ ”, \” tipo \ ”: \” widget \ ”, \” widget \ ”: \” gif5 \ ”, \” visible \ ”: true}> ET ”);
MNG_USART1.TX_Byte_Num = strlen ((carácter constante *) 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;
}
más si ((quan_hang3 == 3) || (cha_hang3 == 3))
{
memset (MNG_USART1.TX_BUF, 0, USART1_TX_LEN);
sprintf ((char *) MNG_USART1.TX_BUF,
“ST <{\” cmd_code \ ”: \” set_visible \ ”, \” tipo \ ”: \” widget \ ”, \” widget \ ”: \” gif6 \ ”, \” visible \ ”: true}> ET ”);
MNG_USART1.TX_Byte_Num = strlen ((carácter constante *) 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;
}
más si ((quan_lie1 == 3) || (cha_lie1 == 3))
{
memset (MNG_USART1.TX_BUF, 0, USART1_TX_LEN);
sprintf ((char *) MNG_USART1.TX_BUF,
“ST <{\” cmd_code \ ”: \” set_visible \ ”, \” tipo \ ”: \” widget \ ”, \” widget \ ”: \” gif7 \ ”, \” visible \ ”: true}> ET ”);
MNG_USART1.TX_Byte_Num = strlen ((carácter constante *) 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;
}
más si ((quan_lie2 == 3) || (cha_lie2 == 3))
{
memset (MNG_USART1.TX_BUF, 0, USART1_TX_LEN);
sprintf ((char *) MNG_USART1.TX_BUF,
“ST <{\” cmd_code \ ”: \” set_visible \ ”, \” tipo \ ”: \” widget \ ”, \” widget \ ”: \” gif8 \ ”, \” visible \ ”: true}> ET ”);
MNG_USART1.TX_Byte_Num = strlen ((carácter constante *) 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;
}
más si ((quan_lie3 == 3) || (cha_lie3 == 3))
{
memset (MNG_USART1.TX_BUF, 0, USART1_TX_LEN);
sprintf ((char *) MNG_USART1.TX_BUF,
“ST <{\” cmd_code \ ”: \” set_visible \ ”, \” tipo \ ”: \” widget \ ”, \” widget \ ”: \” gif9 \ ”, \” visible \ ”: true}> ET ”);
MNG_USART1.TX_Byte_Num = strlen ((carácter constante *) 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;
}
más si ((quan_zuoxia == 3) || (cha_zuoxia == 3))
{
memset (MNG_USART1.TX_BUF, 0, USART1_TX_LEN);
sprintf ((char *) MNG_USART1.TX_BUF,
“ST <{\” cmd_code \ ”: \” set_visible \ ”, \” tipo \ ”: \” widget \ ”, \” widget \ ”: \” gif11 \ ”, \” visible \ ”: true}> ET ”);
MNG_USART1.TX_Byte_Num = strlen ((carácter constante *) 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;
}
más si ((quan_youxia == 3) || (cha_youxia == 3))
{
memset (MNG_USART1.TX_BUF, 0, USART1_TX_LEN);
sprintf ((char *) MNG_USART1.TX_BUF,
“ST <{\” cmd_code \ ”: \” set_visible \ ”, \” tipo \ ”: \” widget \ ”, \” widget \ ”: \” gif10 \ ”, \” visible \ ”: true}> ET ”);
MNG_USART1.TX_Byte_Num = strlen ((carácter constante *) 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 = FALSO;
}
}
}
/ ** Configuración del reloj del sistema
*/
void SystemClock_Config (vacío)
{
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);
/ * Configuración de interrupción SysTick_IRQn * /
HAL_NVIC_SetPriority (SysTick_IRQn, 0, 0);
}
/ ** Configuración de pines
*/
vacío estático MX_GPIO_Init (vacío)
{
GPIO_InitTypeDef GPIO_InitStruct;
/ * Activar reloj de puertos 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 y 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 y GPIO_InitStruct);
}
/ * CÓDIGO DE USUARIO COMIENZO 4 * /
/ * CÓDIGO DE USUARIO FIN 4 * /
/ **
* @brief Esta función se ejecuta en caso de que ocurra un error.
* @param Ninguno
* @retval Ninguno
*/
void Error_Handler (vacío)
{
/ * CÓDIGO DE USUARIO COMIENZO Error_Handler * /
/ * El usuario puede agregar su propia implementación para informar el estado de retorno de error HAL * /
mientras (1)
{
}
/ * CÓDIGO DE USUARIO FIN Error_Handler * /
}
#ifdef USE_FULL_ASSERT
/ **
* @brief Informa el nombre del archivo de origen y el número de línea de origen
* donde se ha producido el error assert_param.
* @param file: puntero al nombre del archivo de origen
* @param line: número de fuente de la línea de error assert_param
* @retval Ninguno
*/
void assert_failed (archivo uint8_t *, línea uint32_t)
{
/ * CÓDIGO DE USUARIO COMIENZO 6 * /
/ * El usuario puede agregar su propia implementación para informar el nombre del archivo y el número de línea,
ej .: printf ("Valor de parámetros incorrecto: archivo% s en la línea% d \ r \ n", archivo, línea) * /
/ * CÓDIGO DE USUARIO FIN 6 * /
}
#terminara si
/ **
*@}
*/
/ **
*@}
*/
/ ************************ (C) COPYRIGHT STMicroelectronics ***** FIN DEL ARCHIVO **** /
Los resultados finales muestran
Fuente: Platón Data Intelligence