IOT

بازی Tic-tac-toe بر اساس STONE TFT LCD و STM32

خلاصه

Tic-tac-toe یک بازی است که در شبکه 3 در 3 شبیه به gobang انجام می شود. این نام به این دلیل است که تخته معمولاً مرزها را ترسیم نمی کند و خطوط شبکه به صورت tic-tac-toe مرتب شده اند. ابزار مورد نیاز بازی فقط کاغذ و خودکار است. سپس، دو بازیکن به نمایندگی از O و X به نوبت به جای گذاشتن علائم در شبکه. هر سه علامت یک خط مستقیم را تشکیل می دهند که برنده است.

این مقاله استفاده از میکروکنترلر STM32 و صفحه نمایش STONE LCD برای توسعه یک بازی ساده تیک تاک است.

مواد مورد نیاز برای آزمایش

اصل سیستم

مشخص کنید اولین ضربه روی صفحه باید O باشد، ضربه دوم روی صفحه نمایش X است، این چرخه را انجام داده است. 8 آرایه را تنظیم کنید تا تعداد O و X در هر سطر، ستون و مورب هر شبکه ذخیره شود، تا زمانی که سه عدد از همان علامت پیروزی وجود دارد، سپس یک کادر قرمز چشمک زن برای اثبات پیروزی وجود خواهد داشت. ردیف، ستون یا مورب، و سپس روی بازنشانی ضربه بزنید تا بازی دوباره شروع شود.

در زیر نمودار جریان است:

بازی Tic-tac-toe بر اساس STONE TFT LCD و STM32 IOT PlatoBlockchain Intelligence. جستجوی عمودی Ai.

طراحی سخت افزاری STM32 و STONE LCD Display System

(الف) صفحه نمایش LCD STONE

  1. طراحی سخت افزاری “Tic-tac-Toe Game”.

از صفحه نمایش STONE LCD شرکت Beijing STONE Technology Co., ltd استفاده کنید، مدل STWI070WT-01 با نمایشگر TFT و کنترلر لمسی یکپارچه است.

بازی Tic-tac-toe بر اساس STONE TFT LCD و STM32 IOT PlatoBlockchain Intelligence. جستجوی عمودی Ai.
  1.  STVC070WT-01 مشخصات محصول
پارامتر فیزیکی 
اندازه7 اینچ
وضوح800×RGB×480
فاصله پیکسل0.0642 (W) × 0.1790 (H) میلی متر
رنگ262,144 رنگ (18 بیت)
منطقه مشاهده154.08 (W) × 85.92 (H) میلی متر
ابعاد نمایش186.4mmx105.5mm
ابعاد کلی186.4mmx105.5mmx17.4mm (نوع استاندارد) 186.4mmx105.5mmx23.8mm (با درگاه اترنت)
وزن خالص300g
نمایش دادن 
نوع نورپردازیرهبری
روشنایی300cd/m2 (روشنایی در 100 سطح قابل تنظیم است)
کنتراست500:1
عمر نور پس زمینهساعت 300,000
زاویه دید70°/70°/50°/70° (L/R/U/D)
پنل TFTیک پانل صنعت کلاس
صفحه نمایش لمسی4 سیم مقاومت لمسی / لمسی خازنی / بدون صفحه نمایش لمسی
حالت صفحه نمایش:دیجیتال
پردازنده 
پردازندهقشر A8
نرخ تجدید صفحه1G هرتز
حداکثر نرخ فریم60 FPS
رابط 
رابط سریالسطح RS232 / RS422 / RS485 / TTL
رابط اترنت10M/100M (اختیاری)
رابط بی سیمWi-Fi / بلوتوث (اختیاری)
دانلود فایل پروژهپورت USB2.0 یا دیسک ذخیره سازی U
منبع تغذیه 
ولتاژ محاسبه شده+12V DC یا +5V DC
محدوده ولتاژ مجاز+7V DC…+28V DC یا +5V DC
حداکثر گذرای مجاز+ 28V
زمان بین دو گذراحداقل 50 ثانیه
فیوز داخلی2A فیوز خود بازیابی
مصرف برق3.0 W
شرایط محیطی 
حداکثر دمای محیط مجازOperationStorage-20℃℃+70℃-30℃℃+80℃
رطوبت نسبیOperationStorage55 ℃، 85% 60 ℃، 90%
بارگیری شوکOperationStorage15 گرم / 11 میلی ثانیه 25 گرم / 6 میلی ثانیه
ارتعاشOperationStorage0.035 میلی متر (10 - 58 هرتز) / 1 گرم (58 - 500 هرتز) 3.5 میلی متر (5 - 8,5 هرتز) / 1 گرم (8.5 - 500 هرتز)
فشار هواOperationStorage706 تا 1030 hPa581 تا 1030 hPa
ایمنی سر و صدا 
تخلیه استاتیک (تخلیه تماسی/تخلیه هوا)EN 61000-4-2 6 kV/8 kV
تابش RFEN 61000-4-310 V/m، 80% AM1 کیلوهرتز
مدولاسیون پالسENV 50204900 MHz ± 5 MHz10 V/meff.، 50% ED، 200 هرتز
هدایت RFEN 61000-4-6150 کیلوهرتز - 80 مگاهرتز 10 ولت، 80٪ AM، 1 کیلوهرتز
تداخل انفجاری خطوط تامین خطوط داده پردازش خطوط سیگنالEN 61000-4-42kV2kV1kV
دستگاه پشتیبانی 
بندر UARTپشتیبانی RS232 / RS422 / RS485 / TTL
پورت شبکهپشتیبانی از پورت اترنت / وای فای / بلوتوث
حافظه فلشپشتیبانی استاندارد 256 مگابایت، گسترش 1 یا 2 گیگابایت
زنگ اخبارپشتیبــانی
RTCپشتیبــانی
پورت USBپشتیبانی آنلاین دانلود با کابل USB
رابط دیسک ذخیره سازی Uپشتیبانی. دانلود آفلاین یا کپی اطلاعات کاربر
صفحه نمایش لمسی4 سیم مقاومت / خازنی
فونت برداریفرمت استاندارد TTF
تصویرپشتیبانی از فرمت PNG/JPG/BMP/SVG/GIF
صوتی رابطپشتیبانی از فرمت WAV طول فایل صوتی منفرد محدود نیست، از نظر تئوری تا 4096 فایل صوتی، قدرت بلندگو 8 اهم 2 وات یا 4 اهم 3 وات است.
مجموعه فرمانمجموعه دستورات ساده شده یکپارچه
حافظه 
حافظه فلشاستاندارد 256 مگابایت، برنامه افزودنی 1 یا 2 گیگابایتی
مقدار حافظه برای تصویربا توجه به قابلیت تصویر فرمت “PNG, BMP, JPG, SVG, GIF” را پیشنهاد دهید.

(ب) برد STM32

با استفاده از برد STM32، تراشه STM32 CKS32F303 است.

بازی Tic-tac-toe بر اساس STONE TFT LCD و STM32 IOT PlatoBlockchain Intelligence. جستجوی عمودی Ai.

خانواده STM32 از هسته‌های ARM Cortex-M0، M0+، M3، M4 و M7 برای برنامه‌های تعبیه‌شده که نیاز به عملکرد بالا، هزینه کم و مصرف انرژی کم دارند، طراحی شده‌اند.

  • منبع تغذیه 2.0 ولت - 3.6 ولت
  • پین های ورودی/خروجی سازگار با 5 ولت
  • حالت ساعت ایمن عالی
  • حالت کم مصرف با عملکرد بیدار شدن
  • نوسان ساز داخلی RC
  • مدار تنظیم مجدد تعبیه شده
  • محدوده دمای کار
  • -40 درجه سانتی گراد تا +85 درجه سانتی گراد یا 105 درجه سانتی گراد

طراحی نرم افزار سیستم

روند توسعه نمایشگر STM32 و STONE LCD

1: پروژه را ایجاد کنید و تصاویر مورد نیاز را در پروژه بارگذاری کنید.

2: از نرم افزار Stone-designer برای ایجاد روابط مرتبط پویا استفاده کنید. کنترل های اصلی عبارتند از: "دکمه"، "تصویر".

3: شبیه سازی و کامپایل نرم افزار برای تولید فایل های اجرایی.

4: صفحه نمایش LCD از طریق USB به رایانه شخصی متصل می شود و فایل اجرایی را روی صفحه کپی می کند.

ابتدا یک پروژه جدید مطابق شکل زیر ایجاد کنید.

بازی Tic-tac-toe بر اساس STONE TFT LCD و STM32 IOT PlatoBlockchain Intelligence. جستجوی عمودی Ai.
بازی Tic-tac-toe بر اساس STONE TFT LCD و STM32 IOT PlatoBlockchain Intelligence. جستجوی عمودی Ai.

در مرحله دوم، تمام تصاویر را به منبع وارد کنید

بازی Tic-tac-toe بر اساس STONE TFT LCD و STM32 IOT PlatoBlockchain Intelligence. جستجوی عمودی Ai.

سپس، کنترل دکمه ها را روی هر شبکه تنظیم کنید و دکمه ها را نامرئی کنید. 

بازی Tic-tac-toe بر اساس STONE TFT LCD و STM32 IOT PlatoBlockchain Intelligence. جستجوی عمودی Ai.

فراموش نکنید که دکمه تنظیم مجدد را تنظیم کنید!

اثر تمام شده در زیر نشان داده شده است:

بازی Tic-tac-toe بر اساس STONE TFT LCD و STM32 IOT PlatoBlockchain Intelligence. جستجوی عمودی Ai.

پس از آن، کنترل های تصویر را به همین ترتیب به هر شبکه اضافه کنید و همه آنها را روی تصاویر سفید قرار دهید.

در نهایت کنترل gif را اضافه کنید و آن را روی invisible قرار دهید.

بخش های اثر نهایی در زیر نشان داده شده است:

بازی Tic-tac-toe بر اساس STONE TFT LCD و STM32 IOT PlatoBlockchain Intelligence. جستجوی عمودی Ai.
بازی Tic-tac-toe بر اساس STONE TFT LCD و STM32 IOT PlatoBlockchain Intelligence. جستجوی عمودی Ai.
بازی Tic-tac-toe بر اساس STONE TFT LCD و STM32 IOT PlatoBlockchain Intelligence. جستجوی عمودی Ai.
بازی Tic-tac-toe بر اساس STONE TFT LCD و STM32 IOT PlatoBlockchain Intelligence. جستجوی عمودی Ai.

نمودار اتصال مدار

بازی Tic-tac-toe بر اساس STONE TFT LCD و STM32 IOT PlatoBlockchain Intelligence. جستجوی عمودی Ai.

به اشتراک گذاری کد

/* شامل می شود ----------------------*/ 

#include "stm32f0xx_hal.h" 

#include "Uart.h" 

#include "string.h" 

#include "ws2812.h" 

#include "IWDG.h" 

RGB_COLOR USER_RGB_COLOR؛ 

کاراکتر بدون علامت TX_Mode = 1; // نوع انتقال پرچم بیت 1:232 0:TTL 

کاراکتر بدون امضا BLINK_2=0; 

char بدون امضا 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 

int بدون علامت r_flag1 = 0; 

unsigned int quan[4][2]={0}; 

بدون علامت 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; 

بدون علامت int quan_zuoxia = 0; 

بدون علامت int quan_youxia = 0; 

بدون علامت int cha_hang1 = 0; 

بدون علامت int cha_hang2 = 0; 

بدون علامت int cha_hang3 = 0; 

بدون علامت int cha_lie1 = 0; 

بدون علامت int cha_lie2 = 0; 

بدون علامت int cha_lie3 = 0; 

بدون علامت int cha_zuoxia = 0; 

بدون علامت int cha_youxia = 0; //int بدون علامت r_flag10 = 0; 

void SystemClock_Config(void); 

void Error_Handler(void); 

static void MX_GPIO_Init(void); 

int main (void) 

uint8_t color_buf = 0; 

//انتخاب تابع 

/* بازنشانی همه تجهیزات جانبی، رابط Flash و Systick را راه اندازی می کند. */ 

HAL_Init(); 

/* پیکربندی ساعت سیستم */ 

SystemClock_Config(); 

/* راه‌اندازی تمام ابزارهای جانبی پیکربندی شده */ 

MX_GPIO_Init(); 

TX_Mode = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_4)؛ 

if (TX_Mode) 

MX_USART1_UART_Init(); 

//232 مقداردهی اولیه 

دیگر 

MX_USART1_UART_Init2(); 

// TTl مقداردهی اولیه 

در حالی که (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 = BUTTON1; 

}

if((strcmp("button2",(const char *)RX3_BUF))==0) 

color_buf = BUTTON2; 

}

if((strcmp("button3",(const char *)RX3_BUF))==0) 

color_buf = BUTTON3; 

}

if((strcmp("button4",(const char *)RX3_BUF))==0) 

color_buf = BUTTON4; 

}

if((strcmp("button5",(const char *)RX3_BUF))==0) 

color_buf = BUTTON5; 

}

if((strcmp("button6",(const char *)RX3_BUF))==0) 

color_buf = BUTTON6; 

}

if((strcmp("button7",(const char *)RX3_BUF))==0) 

color_buf = BUTTON7; 

}

if((strcmp("button8",(const char *)RX3_BUF))==0) 

color_buf = BUTTON8; 

}

if((strcmp("button9",(const char *)RX3_BUF))==0) 

color_buf = BUTTON9; 

}

if((strcmp("button0",(const char *)RX3_BUF))==0) 

color_buf = BUTTON0; 

}

سوئیچ (color_buf) 

دکمه موردی 1: 

//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\":\"Circle\" "}>ET"); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data (MNG_USART1)؛ 

r_flag1 ^= 1; 

quan_hang1++; 

quan_lie1++; 

quan_youxia++;  

//memset(RX3_BUF,0,7); 

//memset(MNG_USART1.RX_BUF,0,USART1_RX_LEN); 

color_buf = CLEAR; 

}

else if((r_flag1 == 1)&&(MNG_USART1.RX_BUF[14] == 0x02)) 

memset(MNG_USART1.TX_BUF،0،USART1_TX_LEN)؛ 

sprintf((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; 

زنگ تفريح؛ 

دکمه موردی 2: 

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\":\"Circle\" "}>ET"); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data (MNG_USART1)؛ 

r_flag1 = 1; 

quan_hang1++; 

quan_lie2++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

else if((r_flag1 == 1)&&(MNG_USART1.RX_BUF[14] == 0x02)) 

memset(MNG_USART1.TX_BUF،0،USART1_TX_LEN)؛ 

sprintf((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; 

}

زنگ تفريح؛ 

دکمه موردی 3: 

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\":\"Circle\" "}>ET"); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data (MNG_USART1)؛ 

r_flag1 = 1; 

quan_hang1++; 

quan_lie3++; 

quan_zuoxia++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

else if((r_flag1 == 1)&&(MNG_USART1.RX_BUF[14] == 0x02)) 

memset(MNG_USART1.TX_BUF،0،USART1_TX_LEN)؛ 

sprintf((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; 

}

زنگ تفريح؛ 

دکمه موردی 4: 

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\":\"Circle\" "}>ET"); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data (MNG_USART1)؛ 

r_flag1 = 1; 

quan_hang2++; 

quan_lie1++; 

//memset(RX3_BUF,0,7); 

//r_flag10=1; 

color_buf = CLEAR; 

}

else if((r_flag1 == 1)&&(MNG_USART1.RX_BUF[14] == 0x02)) 

memset(MNG_USART1.TX_BUF،0،USART1_TX_LEN)؛ 

sprintf((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; 

}

زنگ تفريح؛ 

دکمه موردی 5: 

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\":\"Circle\" "}>ET"); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data (MNG_USART1)؛ 

r_flag1 = 1; 

quan_hang2++; 

quan_lie2++; 

quan_zuoxia++; 

quan_youxia++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

else if((r_flag1 == 1)&&(MNG_USART1.RX_BUF[14] == 0x02)) 

memset(MNG_USART1.TX_BUF،0،USART1_TX_LEN)؛ 

sprintf((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; 

}

زنگ تفريح؛ 

دکمه موردی 6: 

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\":\"Circle\" "}>ET"); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data (MNG_USART1)؛ 

r_flag1 = 1; 

quan_hang2++; 

quan_lie3++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

else if((r_flag1 == 1)&&(MNG_USART1.RX_BUF[14] == 0x02))

memset(MNG_USART1.TX_BUF،0،USART1_TX_LEN)؛ 

sprintf((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; 

}

زنگ تفريح؛ 

دکمه موردی 7: 

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\":\"Circle\" "}>ET"); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data (MNG_USART1)؛ 

r_flag1 = 1; 

quan_hang3++; 

quan_lie1++; 

quan_zuoxia++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

else if((r_flag1 == 1)&&(MNG_USART1.RX_BUF[14] == 0x02)) 

memset(MNG_USART1.TX_BUF،0،USART1_TX_LEN)؛ 

sprintf((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; 

}

زنگ تفريح؛ 

دکمه موردی 8: 

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\":\"Circle\" "}>ET"); 

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data (MNG_USART1)؛ 

r_flag1 = 1; 

quan_hang3++; 

quan_lie2++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

else if((r_flag1 == 1)&&(MNG_USART1.RX_BUF[14] == 0x02)) 

memset(MNG_USART1.TX_BUF،0،USART1_TX_LEN)؛ 

sprintf((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; 

}

زنگ تفريح؛ 

دکمه موردی 9: 

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\":\"Circle\" "}>ET");

MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF); 

USART_TX_Data (MNG_USART1)؛ 

r_flag1 = 1; 

quan_hang3++; 

quan_lie3++; 

quan_youxia++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

else if((r_flag1 == 1)&&(MNG_USART1.RX_BUF[14] == 0x02)) 

memset(MNG_USART1.TX_BUF،0،USART1_TX_LEN)؛ 

sprintf((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; 

}

زنگ تفريح؛ 

دکمه موردی 0: 

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)؛ 

زنگ تفريح؛ 

پیش فرض: 

MNG_USART1.RX_OVER_FLG = FALSE; 

زنگ تفريح؛ 

}

///////////////////////////////////////////////////////////////////////// ////////////////// 

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; 

}

else 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; 

}

else 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; 

}

else 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; 

}

else 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; 

}

else 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; 

}

else if((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; 

}

else if((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.PLLSمنبع = RCC_PLLSOURCE_HSI; 

RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL12; 

RCC_OscInitStruct.PLL.PREDIV = RCC_PREDIV_DIV1; 

اگر (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; 

اگر (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)؛ 

}

/** پیکربندی Pinout 

*/

استاتیک 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_PULDOWN; 

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) 

/* CODE USER BEGIN Error_Handler */ 

/* کاربر می تواند پیاده سازی خود را برای گزارش وضعیت بازگشت خطای HAL اضافه کند */ 

در حالی که (1) 

{

}

/* USER CODE END Error_Handler */ 

}

#ifdef USE_FULL_ASSERT 

/ **

* @brief نام فایل منبع و شماره خط منبع را گزارش می کند 

* جایی که خطای assert_param رخ داده است. 

* فایل param@: اشاره گر به نام فایل منبع 

* @param line: شماره منبع خط خطا assert_param 

* @retval هیچکدام 

*/ 

void assert_failed(فایل uint8_t*، خط uint32_t) 

/* کد کاربر شروع 6 */ 

/* کاربر می تواند پیاده سازی خود را برای گزارش نام فایل و شماره خط اضافه کند، 

ex: printf("مقدار پارامترهای اشتباه: فایل %s در خط %d\r\n"، فایل، خط) */ 

/* کد کاربر انتهای 6 */ 

}

# اندیف 

/ **

* @} 

*/ 

/ **

* @} 

*/

/************************ (C) حق کپی رایت STMicroelectronics *****پایان فایل****/

نتایج نهایی نشان می دهد

بازی Tic-tac-toe بر اساس STONE TFT LCD و STM32 IOT PlatoBlockchain Intelligence. جستجوی عمودی Ai.

منبع: اطلاعات داده های افلاطون