Підсумки
Крестики-нолики — це гра, в яку грають на сітці 3 на 3, схожа на гобанг. Свою назву він отримав тому, що дошка зазвичай не малює кордонів, а лінії сітки розташовані у хрестики-нулики. Інструменти, необхідні для гри, це лише папір і ручка. Потім два гравці, які представляють О і Х, по черзі залишають сліди на сітці. Будь-які три позначки утворюють пряму лінію, яка є переможцем.
У цій статті використовується мікроконтролер STM32 і РК-дисплей STONE для розробки простої гри в хрестики-нолики.
Матеріали, необхідні для проведення експерименту
Принцип системи
Вкажіть, що перше торкання на екрані має бути O, друге натискання на екрані – X, виконував цей цикл. Встановіть 8 масивів для збереження кількості O та X у кожному рядку, стовпці та діагоналі кожної сітки, якщо є три однакові позначки, це перемога, тоді буде миготіти червоне поле, щоб підтвердити перемогу рядок, стовпець або діагональ, а потім натисніть скинути, щоб знову почати гру.
Нижче наведено блок-схему:
Розробка апаратного забезпечення STM32 і STONE LCD Display System
(A) КАМЕНІ РК-дисплей
- Апаратний дизайн «Гра в хрестики-нолики».
Використовуйте РК-дисплей STONE від Beijing STONE Technology co., ltd, модель STWI070WT-01, з вбудованим TFT-дисплеєм та сенсорним контролером.
- STVC070WT-01 Особливості продукту
Фізичний параметр | |
Розмір | 7 дюйм |
дозвіл | 800×RGB×480 |
Піксельний інтервал | 0.0642(Ш) × 0.1790(В) мм |
Колір | 262,144 18 кольори (XNUMX біт) |
Зона огляду | 154.08(Ш) × 85.92(В) мм |
Розмір дисплея | 186.4mmx105.5mm |
Габаритний розмір | 186.4 мм x 105.5 мм x 17.4 мм (стандартний тип) 186.4 мм x 105.5 мм x 23.8 мм (з портом Ethernet) |
Вага нетто | 300g |
дисплей | |
Тип підсвічування | LED |
Яскравість | 300 кд/м2 (яскравість регулюється на 100 рівнях) |
Контрастність | 500:1 |
Термін служби підсвічування | 300,000 годин |
Кут огляду | 70°/70°/50°/70°(L/R/U/D) |
TFT панель | Промислова панель класу |
Сенсорний екран | 4-провідний опір дотику /ємнісний дотик/ без сенсорного екрана |
Режим екрану: | Digital |
процесор | |
центральний процесор | Cortex A8 |
Частота оновлення | 1G Гц |
Максимальна частота кадрів | 60 FPS |
інтерфейс | |
Послідовний інтерфейс | Рівень RS232 / RS422 / RS485 / TTL |
інтерфейс Ethernet | 10M/100M (необов'язково) |
Бездротовий інтерфейс | Wi-Fi / Bluetooth (необов'язково) |
Завантаження файлу проекту | Порт USB2.0 або U-диск |
джерело живлення | |
Номінальна напруга | +12 В постійного струму або +5 В постійного струму |
Допустимий діапазон напруги | +7 В постійного струму…+28 В постійного струму або +5 В постійного струму |
Макс. допустимі перехідні процеси | + 28V |
Час між двома перехідними процесами | 50 секунд мінімум |
Внутрішній запобіжник | 2A самовідновлювальний запобіжник |
Споживання енергії | 3.0 W |
Умови навколишнього середовища | |
Макс. допустима температура навколишнього середовищаOperationStorage | -20℃~ +70℃-30℃~ +80℃ |
Відносна вологістьOperationStorage | 55 ℃, 85% 60 ℃, 90% |
Ударне навантаженняOperationStorage | 15 г/11 мс25 г/6 мс |
ВібраціяOperationStorage | 0.035 мм (10 – 58 Гц)/ 1 г (58 – 500 Гц) 3.5 мм (5 – 8,5 Гц)/ 1 г (8.5 – 500 Гц) |
Барометричний тискOperationStorage | Від 706 до 1030 гПа 581 до 1030 гПа |
Імунітет до шуму | |
Статичний розряд (контактний розряд/повітряний розряд) | EN 61000-4-2 6 кВ/8 кВ |
РЧ опромінення | EN 61000-4-310 В/м, 80% AM1 кГц |
Імпульсна модуляція | ENV 50204900 МГц ±5 МГц 10 В/мефф., 50% ED, 200 Гц |
РЧ провідність | EN 61000-4-6150 кГц – 80 МГц 10 В, 80% AM, 1 кГц |
Вибухові перешкоди Лінії живлення Лінії даних процесуСигнальні лінії | EN 61000-4-42kV2kV1kV |
Підтримка пристрою | |
Порт UART | Підтримка RS232 / RS422 / RS485 / TTL |
Мережевий порт | Підтримка порту Ethernet / Wi-Fi / Bluetooth |
флеш-пам'ять | Підтримка Стандартний 256 МБ, розширення 1 ГБ або 2 ГБ |
Зумер | Підтримайте |
РТК | Підтримайте |
USB порт | Підтримка онлайн-завантаження через USB-кабель |
U Інтерфейс диска зберігання | Підтримка. Офлайн-завантаження або копіювання даних користувача |
Сенсорний екран | 4 провідний опір / ємнісний |
Векторний шрифт | Стандартний формат TTF |
зображення | Підтримка формату PNG/JPG/BMP/SVG/GIF |
Аудіо інтерфейс | Підтримка формату WAV. Довжина одного аудіофайлу не обмежена, теоретично до 4096 аудіофайлів, потужність динаміків 8 Ом 2 Вт або 4 Ом 3 Вт |
Набір команд | Уніфіковані спрощені набори команд |
пам'ять | |
флеш-пам'ять | Стандартний 256 МБ, розширення 1 ГБ або 2 ГБ |
Обсяг пам'яті для зображення | Відповідно до можливостей зображення, запропонуйте формат «PNG, BMP, JPG, SVG, GIF». |
(B) Плата STM32
Використовуючи плату STM32, мікросхемою STM32 є CKS32F303.
Сімейство ядер ARM Cortex-M32, M0+, M0, M3 і M4 STM7 розроблено для вбудованих програм, які потребують високої продуктивності, низької вартості та низького енергоспоживання.
- Блок живлення 2.0-3.6 В
- 5 В сумісні контакти вводу/виводу
- Відмінний безпечний режим годинника
- Режим низької потужності з функцією пробудження
- Внутрішній RC-генератор
- Вбудована схема скидання
- Діапазон робочих температур.
- -40°C до +85°C або 105°C
Проектування системного програмного забезпечення
Процес розробки STM32 і РК-дисплею STONE
1: створіть проект і завантажте потрібні зображення в проект.
2: використовувати програму Stone-designer для створення динамічно пов'язаних відносин; основні елементи керування: «Кнопка», «Зображення»;
3: програмне моделювання та компіляція для створення виконуваних файлів.
4: РК-дисплей підключається до ПК через USB і копіює виконуваний файл на екран.
Спочатку створіть новий проект, як показано нижче.
По-друге, імпортуйте всі зображення на ресурс
Потім встановіть елементи керування кнопками для кожної сітки та зробіть кнопки невидимими.
Не забудьте встановити кнопку скидання!
Готовий ефект показаний нижче:
Після цього додайте елементи керування зображенням до кожної сітки таким же чином і встановіть для всіх білі зображення.
Нарешті додайте елемент керування gif і встановіть його як невидимий.
Частини готового ефекту показані нижче:
Схема підключення
Спільне використання коду
/* Включає ——————————————————————*/
#include “stm32f0xx_hal.h”
#include “Uart.h”
#include “string.h”
#include “ws2812.h”
#include “IWDG.h”
RGB_COLOR USER_RGB_COLOR;
unsigned char TX_Mode = 1; //Біт прапора типу передачі 1:232 0:TTL
беззнаковий символ BLINK_2=0;
беззнаковий символ RX3_BUF[32]; //Настроюваний трирівневий буфер отримання
#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; //беззнаковий int r_flag10 = 0;
void SystemClock_Config(void);
void Error_Handler(void);
статичний void MX_GPIO_Init(void);
int main (недійсний)
{
uint8_t color_buf = 0;
//Вибір функції
/* Скидання всіх периферійних пристроїв, ініціалізує інтерфейс Flash і Systick. */
HAL_Init();
/* Налаштувати системний годинник */
SystemClock_Config();
/* Ініціалізація всіх налаштованих периферійних пристроїв */
MX_GPIO_Init();
TX_Mode = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_4);
якщо (TX_Mode)
MX_USART1_UART_Init();
//232 Ініціалізація
ще
MX_USART1_UART_Init2();
// Ініціалізація TTl
while (1)
{
if(TX_Mode != HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_4))
HAL_NVIC_SystemReset();
//Зміна перемички, перезавантаження та повторна ініціалізація
if(MNG_USART1.RX_OVER_FLG ==TRUE)
//
Біт прапора отримання послідовних даних
{
RX3_BUF[0]=MNG_USART1.RX_BUF[7];
//Спосіб 2: Отримайте контрольне ім'я фіксованої довжини
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)
//Вибір елемента керування
{
color_buf = КНОПКА1;
}
if((strcmp(“button2”,(const char *)RX3_BUF))==0)
{
color_buf = КНОПКА2;
}
if((strcmp(“button3”,(const char *)RX3_BUF))==0)
{
color_buf = КНОПКА3;
}
if((strcmp(“button4”,(const char *)RX3_BUF))==0)
{
color_buf = КНОПКА4;
}
if((strcmp(“button5”,(const char *)RX3_BUF))==0)
{
color_buf = КНОПКА5;
}
if((strcmp(“button6”,(const char *)RX3_BUF))==0)
{
color_buf = КНОПКА6;
}
if((strcmp(“button7”,(const char *)RX3_BUF))==0)
{
color_buf = КНОПКА7;
}
if((strcmp(“button8”,(const char *)RX3_BUF))==0)
{
color_buf = КНОПКА8;
}
if((strcmp(“button9”,(const char *)RX3_BUF))==0)
{
color_buf = КНОПКА9;
}
if((strcmp(“button0”,(const char *)RX3_BUF))==0)
{
color_buf = КНОПКА0;
}
перемикач (color_buf)
{
випадок BUTTON1:
//if(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((char *)MNG_USART1.TX_BUF,
“ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image2\”,\”image\”:\”коло\ ”}>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;
}
інакше if((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\”,\”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;
break;
випадок BUTTON2:
if((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\”,\”type\”:\”image\”,\”widget\”:\”image3\”,\”image\”:\”коло\ ”}>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;
}
інакше if((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\”,\”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;
}
break;
випадок BUTTON3:
if((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\”,\”type\”:\”image\”,\”widget\”:\”image4\”,\”image\”:\”коло\ ”}>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;
}
інакше if((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\”,\”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;
}
break;
випадок BUTTON4:
if((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\”,\”type\”:\”image\”,\”widget\”:\”image5\”,\”image\”:\”коло\ ”}>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;
}
інакше if((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\”,\”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;
}
break;
випадок BUTTON5:
if((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\”,\”type\”:\”image\”,\”widget\”:\”image6\”,\”image\”:\”коло\ ”}>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;
}
інакше if((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\”,\”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;
}
break;
випадок BUTTON6:
if((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\”,\”type\”:\”image\”,\”widget\”:\”image7\”,\”image\”:\”коло\ ”}>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;
}
інакше if((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\”,\”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;
}
break;
випадок BUTTON7:
if((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\”,\”type\”:\”image\”,\”widget\”:\”image8\”,\”image\”:\”коло\ ”}>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;
}
інакше if((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\”,\”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;
}
break;
випадок BUTTON8:
if((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\”,\”type\”:\”image\”,\”widget\”:\”image9\”,\”image\”:\”коло\ ”}>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;
}
інакше if((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\”,\”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;
}
break;
випадок BUTTON9:
if((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\”,\”type\”:\”image\”,\”widget\”:\”image10\”,\”image\”:\”коло\ ”}>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;
}
інакше if((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\”,\”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;
}
break;
випадок 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((char *)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((char *)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((char *)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((char *)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((char *)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((char *)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((char *)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((char *)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((char *)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((char *)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((char *)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((char *)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((char *)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((char *)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((char *)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((char *)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((char *)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);
break;
за замовчуванням:
MNG_USART1.RX_OVER_FLG = FALSE;
break;
}
////////////////////////////////////////////////// ///////////////////
if((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\”,\”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;
}
інакше if((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\”,\”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;
}
інакше if((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\”,\”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;
}
інакше if((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\”,\”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;
}
інакше if((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\”,\”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;
}
інакше if((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\”,\”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;
}
інакше якщо((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\”,\”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;
}
інакше якщо((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\”,\”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 = FALSE;
}
}
}
/** Конфігурація системного годинника
*/
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.PREDIV = RCC_PREDIV_DIV1;
if (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;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
{
Error_Handler();
}
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1;
PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK1;
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
{
Error_Handler();
}
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
/* Конфігурація переривань SysTick_IRQn */
HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}
/** Конфігурація розведення
*/
static void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
/* Увімкнення годинника портів 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);
}
/* КОД КОРИСТУВАЧА ПОЧАТОК 4 */
/* КОД КОРИСТУВАЧА КІНЕЦЬ 4 */
/ **
* @brief Ця функція виконується у разі виникнення помилки.
* @param Немає
* @retval Немає
*/
void Error_Handler(void)
{
/* КОД КОРИСТУВАЧА BEGIN Error_Handler */
/* Користувач може додати свою власну реалізацію, щоб повідомити про стан повернення помилки HAL */
while (1)
{
}
/* КОДУ КОРИСТУВАЧА END Error_Handler */
}
#ifdef USE_FULL_ASSERT
/ **
* @brief Повідомляє назву вихідного файлу та вихідний номер рядка
* де сталася помилка assert_param.
* @param file: вказівник на назву вихідного файлу
* @param рядок: номер джерела рядка помилки assert_param
* @retval Немає
*/
void assert_failed (файл uint8_t*, рядок uint32_t)
{
/* КОД КОРИСТУВАЧА ПОЧАТОК 6 */
/* Користувач може додати власну реалізацію, щоб повідомити назву файлу та номер рядка,
наприклад: printf("Неправильне значення параметрів: файл %s у рядку %d\r\n", файл, рядок) */
/* КОД КОРИСТУВАЧА КІНЕЦЬ 6 */
}
#endif
/ **
* @}
*/
/ **
* @}
*/
/************************ (C) АВТОРСЬКЕ ПРАВО STMicroelectronics *****КІНЕЦЬ ФАЙЛУ****/
Остаточні результати показують
Джерело: Інформація про дані Платона