IOT

STONE TFT LCD ve STM32 Tabanlı Tic-tac-toe Oyunu

Özet

Tic-tac-toe, gobang'a benzer şekilde 3'e 3 ızgarada oynanan bir oyundur. Adını, tahtanın genellikle sınır çizmemesi ve ızgara çizgilerinin tic-tac-toe şeklinde düzenlenmesi nedeniyle alır. Oyun için gerekli olan araçlar sadece kağıt ve kalemdir. Ardından, O ve X'i temsil eden iki oyuncu sırayla ızgarada işaretler bırakır. Herhangi bir üç işaret, kazanan olan düz bir çizgi oluşturur.

Bu makale, basit bir tic-tac-toe oyunu geliştirmek için mikrodenetleyici STM32 ve STONE LCD ekranını kullanmaktır.

Deney için gerekli malzemeler

sistem prensibi

Ekrana ilk dokunuşun O olması gerektiğini belirtin, ikinci dokunuş X ise bu döngüyü yapıyor. Aynı işaretin üçü zafer olduğu sürece, her bir ızgaranın her satırında, sütununda ve köşegeninde O ve X sayısını saklamak için 8 dizi ayarlayın, o zaman zaferi kanıtlamak için yanıp sönen kırmızı bir kutu olacaktır. satır, sütun veya köşegen ve ardından oyunu yeniden başlatmak için sıfırla öğesine dokunun.

Aşağıdaki akış şemasıdır:

STONE TFT LCD ve STM32 IOT PlatoBlockchain Veri Zekasına Dayalı Tic-tac-toe Oyunu. Dikey Arama. Ai.

STM32 ve STONE LCD Ekran Sistemi donanım tasarımı

(A) TAŞ LCD ekran

  1. "Tic-tac-toe oyunu" donanım tasarımı

Beijing STONE Technology co., ltd'nin STONE LCD ekranını kullanın, model STWI070WT-01, entegre TFT ekran ve dokunmatik kontrolör ile.

STONE TFT LCD ve STM32 IOT PlatoBlockchain Veri Zekasına Dayalı Tic-tac-toe Oyunu. Dikey Arama. Ai.
  1.  STVC070WT-01 Ürün Özellikleri
Fiziksel Parametre 
beden7 inç
çözüm800×RGB×480
Piksel Aralığı0.0642 (G) × 0.1790 (Y) mm
Renk262,144 renk (18 bit)
Görüş alanı154.08 (G) × 85.92 (Y) mm
Ekran Boyut186.4mmx105.5mm
Genel boyut186.4mmx105.5mmx17.4mm(Standart tip)186.4mmx105.5mmx23.8mm(Ethernet portlu)
Net ağırlık300g
ekran 
Arka Işık TürüLED
Parlaklık300cd/m2(Parlaklık 100 kademede ayarlanabilir)
Kontrast500:1
Arka ışık ömrü300,000 saat
Görüş açısı70°/70°/50°/70°(Sol/Sağ/U/D)
TFT PaneliA Sınıfı Endüstri Paneli
Dokunmatik Ekran4 Telli Dirençli Dokunmatik / Kapasitif Dokunmatik / Dokunmatik Ekransız
Ekran modu:Dijital
İşlemci 
işlemciCortex A8
Yenileme Hızı1G Hz
Maksimum çerçeve hızı60 FPS
arayüzey 
Seri ArabirimRS232 / RS422 / RS485 / TTL seviyesi
Ethernet arayüzü10M/100M (Opsiyonel)
Kablosuz arayüzWi-Fi / Bluetooth (Opsiyonel)
Proje dosyası indiriliyorUSB2.0 bağlantı noktası veya U depolama Diski
Power Supply 
Anma gerilimi+12V DC veya +5V DC
İzin verilen voltaj aralığı+7V DC…+28V DC veya +5V DC
Maks. izin verilen geçici olaylar+ 28V
İki geçici olay arasındaki süreen az 50 saniye
Dahili Sigorta2A kendini kurtarma sigortası
Güç tüketimi3.0 W
Çevre koşulları 
Maks. izin verilen ortam sıcaklığıOperasyonDepolama-20℃~ +70℃ -30℃~ +80℃
Bağıl nemOperasyonDepolama55℃,%85℃,60%
Şok yüklemeOperasyonDepolama15 g/11 msn25 g/6 msn
titreşimOperasyonDepolama0.035 mm (10 – 58 Hz)/ 1 gr (58 – 500 Hz)3.5 mm (5 – 8,5 Hz)/ 1 gr (8.5 – 500 Hz)
Barometrik basınçOperasyonDepolama706 ila 1030 hPa581 ila 1030 hPa
Gürültü Bağışıklığı 
Statik deşarj (temas deşarjı/hava deşarjı)EN 61000-4-2 6kV/8kV
RF ışınlamasıEN 61000-4-310 V/m, %80 AM1 kHz
Darbe modülasyonuENV 50204900 MHz ±5 MHz10 V/meff., %50 ED, 200 Hz
RF iletimiEN 61000-4-6150 kHz – 80 MHz10 V, %80 AM, 1 kHz
Patlama girişimiTedarik hatlarıProses veri hatlarıSinyal hatlarıEN 61000-4-42kV2kV1kV
Destek cihazı 
UART Bağlantı NoktasıDestekRS232 / RS422 / RS485 / TTL
Ağ Bağlantı NoktasıDestekEthernet Bağlantı Noktası / Wi-Fi / Bluetooth
Flash BellekSupportStandart 256MB, 1GB veya 2GB Genişletin
BuzzerDestek
RTCDestek
USB bağlantı noktasıDestekÇevrimiçi USB Kablosu ile İndirme
U Depolama Diski ArayüzüSupport.Offline Kullanıcı Verilerini İndirin veya Kopyalayın
Dokunmatik Ekran4 Telli Direnç / Kapasitif
vektör yazı tipiStandart TTF Formatı
ResimPNG/JPG/BMP/SVG/GIF Formatını Destekleyin
Ses ArabirimiDestek WAV formatıTek ses dosyasının uzunluğu sınırlı değildir, teorik olarak 4096 ses dosyasına kadar, hoparlör gücü 8 ohm 2 watt veya 4 ohm 3 watt
Komut SetiBirleşik Basitleştirilmiş Komut Kümeleri
Bellek 
Flash BellekStandart 256MB, Uzantı 1GB veya 2GB
Görüntü için Bellek MiktarıGörüntünün özelliğine göre “PNG, BMP, JPG, SVG, GIF” biçimini önerin.

(B) STM32 kartı

Bir STM32 kartı kullanarak, STM32'nin çipi CKS32F303'tür.

STONE TFT LCD ve STM32 IOT PlatoBlockchain Veri Zekasına Dayalı Tic-tac-toe Oyunu. Dikey Arama. Ai.

ARM Cortex-M32, M0+, M0, M3 ve M4 çekirdeklerinden oluşan STM7 ailesi, yüksek performans, düşük maliyet ve düşük güç tüketimi gerektiren gömülü uygulamalar için tasarlanmıştır.

  • 2.0V-3.6V güç kaynağı
  • 5V uyumlu G/Ç pinleri
  • Mükemmel güvenli saat modu
  • Uyandırma fonksiyonlu düşük güç modu
  • Dahili RC osilatörü
  • Gömülü sıfırlama devresi
  • Çalışma sıcaklığı aralığı.
  • -40°C ila +85°C veya 105°C

Sistem yazılımı tasarımı

STM32 ve STONE LCD ekranın geliştirme süreci

1: projeyi oluşturun ve gerekli resimleri projeye yükleyin.

2: Dinamik olarak ilişkili ilişkiler oluşturmak için Stone-designer yazılımını kullanın; ana kontroller şunlardır: “Düğme”, “görüntü”;

3: yürütülebilir dosyalar oluşturmak için yazılım simülasyonu ve derleme.

4: LCD ekran USB üzerinden PC'ye bağlanır ve yürütülebilir dosyayı ekrana kopyalar.

İlk önce aşağıda gösterildiği gibi yeni bir proje oluşturun.

STONE TFT LCD ve STM32 IOT PlatoBlockchain Veri Zekasına Dayalı Tic-tac-toe Oyunu. Dikey Arama. Ai.
STONE TFT LCD ve STM32 IOT PlatoBlockchain Veri Zekasına Dayalı Tic-tac-toe Oyunu. Dikey Arama. Ai.

İkinci olarak, tüm görüntüleri kaynağa aktarın

STONE TFT LCD ve STM32 IOT PlatoBlockchain Veri Zekasına Dayalı Tic-tac-toe Oyunu. Dikey Arama. Ai.

Ardından, düğme kontrollerini her bir ızgaraya ayarlayın ve düğmeleri görünmez yapın. 

STONE TFT LCD ve STM32 IOT PlatoBlockchain Veri Zekasına Dayalı Tic-tac-toe Oyunu. Dikey Arama. Ai.

Sıfırlama düğmesini ayarlamayı unutmayın!

Bitmiş etki aşağıda gösterilmiştir:

STONE TFT LCD ve STM32 IOT PlatoBlockchain Veri Zekasına Dayalı Tic-tac-toe Oyunu. Dikey Arama. Ai.

Bundan sonra, her bir ızgaraya aynı şekilde görüntü kontrolleri ekleyin ve hepsini beyaz görüntülere ayarlayın.

Son olarak gif kontrolünü ekleyin ve görünmez olarak ayarlayın.

Bitmiş efektin bölümleri aşağıda gösterilmiştir:

STONE TFT LCD ve STM32 IOT PlatoBlockchain Veri Zekasına Dayalı Tic-tac-toe Oyunu. Dikey Arama. Ai.
STONE TFT LCD ve STM32 IOT PlatoBlockchain Veri Zekasına Dayalı Tic-tac-toe Oyunu. Dikey Arama. Ai.
STONE TFT LCD ve STM32 IOT PlatoBlockchain Veri Zekasına Dayalı Tic-tac-toe Oyunu. Dikey Arama. Ai.
STONE TFT LCD ve STM32 IOT PlatoBlockchain Veri Zekasına Dayalı Tic-tac-toe Oyunu. Dikey Arama. Ai.

Devre bağlantı şeması

STONE TFT LCD ve STM32 IOT PlatoBlockchain Veri Zekasına Dayalı Tic-tac-toe Oyunu. Dikey Arama. Ai.

Kod paylaşımı

/* İçerir ----------------------*/ 

#include “stm32f0xx_hal.h” 

#include “Uart.h” 

#include “dize.h” 

# “ws2812.h”yi dahil et 

# “IWDG.h”yi dahil et 

RGB_COLOR KULLANICI_RGB_COLOR; 

imzasız karakter TX_Mode = 1; // İletim tipi bayrak biti 1:232 0:TTL 

imzasız karakter BLINK_2=0; 

imzasız karakter RX3_BUF[32]; //Özelleştirilmiş üç seviyeli alma arabelleği 

#define DÜĞME1 0x81 

#define DÜĞME2 0x82 

#define DÜĞME3 0x83 

#define DÜĞME4 0x84 

#define DÜĞME5 0x85 

#define DÜĞME6 0x86 

#define DÜĞME7 0x87 

#define DÜĞME8 0x88 

#define DÜĞME9 0x89 

#define DÜĞME0 0x8A 

#define TEMİZLE 0x8E 

imzasız int r_flag1 = 0; 

imzasız int quan[4][2]={0}; 

imzasız int cha [4]][2]={0}; 

imzasız int quan_hang1 = 0; 

imzasız int quan_hang2 = 0; 

imzasız int quan_hang3 = 0; 

imzasız int quan_lie1 = 0; 

imzasız int quan_lie2 = 0; 

imzasız int quan_lie3 = 0; 

imzasız int quan_zuoxia = 0; 

imzasız int quan_youxia = 0; 

imzasız int cha_hang1 = 0; 

imzasız int cha_hang2 = 0; 

imzasız int cha_hang3 = 0; 

imzasız int cha_lie1 = 0; 

imzasız int cha_lie2 = 0; 

imzasız int cha_lie3 = 0; 

imzasız int cha_zuoxia = 0; 

imzasız int cha_youxia = 0; //imzasız int r_flag10 = 0; 

geçersiz SystemClock_Config(void); 

geçersiz Error_Handler(void); 

statik boşluk MX_GPIO_Init(void); 

int main (void) 

uint8_t color_buf = 0; 

//Fonksiyon Seçimi 

/* Tüm çevre birimlerinin sıfırlanması, Flash arayüzünü ve Systick'i başlatır. */ 

HAL_Init(); 

/* Sistem saatini yapılandır */ 

SystemClock_Config(); 

/* Tüm yapılandırılmış çevre birimlerini başlat */ 

MX_GPIO_Init(); 

TX_Modu = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_4); 

eğer(TX_Modu) 

MX_USART1_UART_Init(); 

//232 Başlatma 

başka 

MX_USART1_UART_Init2(); 

//TTl Başlatma 

süre(1) 

if(TX_Mode != HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_4)) 

HAL_NVIC_SystemReset(); 

//Jumper ters çevirme, yeniden başlatma ve yeniden başlatma 

if(MNG_USART1.RX_OVER_FLG ==DOĞRU) 

// 

Seri veri bayrak biti alır 

RX3_BUF[0]=MNG_USART1.RX_BUF[7]; 

//Yöntem 2:Sabit uzunlukta kontrol adı alın 

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) 

//Kontrol seç

color_buf = DÜĞME1; 

}

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

color_buf = DÜĞME2; 

}

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

color_buf = DÜĞME3; 

}

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

color_buf = DÜĞME4; 

}

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

color_buf = DÜĞME5; 

}

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

color_buf = DÜĞME6; 

}

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

color_buf = DÜĞME7; 

}

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

color_buf = DÜĞME8; 

}

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

color_buf = DÜĞME9; 

}

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

color_buf = DÜĞME0; 

}

geçiş (color_buf) 

durum 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\":\"daire\ ”}>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 = SİL; 

}

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 = SİL; 

}

//r_flag1 = 1; 

break; 

durum 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\":\"daire\ ”}>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 = SİL; 

}

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 = SİL; 

}

break; 

durum 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\":\"daire\ ”}>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 = SİL; 

}

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 = SİL; 

}

break; 

durum 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\":\"daire\ ”}>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 = SİL; 

}

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 = SİL; 

}

break; 

durum 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\":\"daire\ ”}>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 = SİL; 

}

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 = SİL; 

}

break; 

durum 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\":\"daire\ ”}>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 = SİL; 

}

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 = SİL; 

}

break; 

durum 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\":\"daire\ ”}>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 = SİL; 

}

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 = SİL; 

}

break; 

durum 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\":\"daire\ ”}>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 = SİL; 

}

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 = SİL; 

}

break; 

durum 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\":\"daire\ ”}>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 = SİL; 

}

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 = SİL; 

}

break; 

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

Varsayılan: 

MNG_USART1.RX_OVER_FLG = YANLIŞ; 

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; 

}

başka 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; 

}

başka 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; 

}

başka 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; 

}

başka 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; 

}

başka 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; 

}

başka 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; 

}

başka 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 = YANLIŞ; 

}

/** Sistem Saati Yapılandırması 

*/

geçersiz SystemClock_Config(void) 

RCC_OscInitTypeDef RCC_OscInitStruct; 

RCC_ClkInitTypeDef RCC_ClkInitStruct; 

RCC_PeriphCLKInitTypeDef PeriphClkInit; 

RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; 

RCC_OscInitStruct.HSISState = RCC_HSI_ON; 

RCC_OscInitStruct.HSICalibrationValue = 16; 

RCC_OscInitStruct.PLL.PLLSState = 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 kesme yapılandırması */ 

HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); 

}

/** Pinout Yapılandırması 

*/

statik boşluk MX_GPIO_Init(void) 

GPIO_InitTypeDef GPIO_InitStruct; 

/* GPIO Bağlantı Noktaları Saat Etkin */ 

__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); 

}

/* KULLANICI KODU BAŞLIYOR 4 */

/* KULLANICI KODU SON 4 */ 

/ **

* @brief Bu işlev, hata oluşması durumunda yürütülür. 

* @param Yok 

* @retval Yok 

*/ 

geçersiz Error_Handler(void) 

/* KULLANICI KODU BAŞLA Error_Handler */ 

/* Kullanıcı, HAL hata dönüş durumunu bildirmek için kendi uygulamasını ekleyebilir */ 

süre(1) 

{

}

/* KULLANICI KODU SON Error_Handler */ 

}

#ifdef USE_FULL_ASSERT 

/ **

* @brief Kaynak dosyanın adını ve kaynak satır numarasını bildirir 

* assert_param hatasının oluştuğu yer. 

* @param dosyası: kaynak dosya adına işaretçi 

* @param satırı: assert_param hata satırı kaynak numarası 

* @retval Yok 

*/ 

void assert_failed(uint8_t* dosyası, uint32_t satırı) 

/* KULLANICI KODU BAŞLIYOR 6 */ 

/* Kullanıcı, dosya adını ve satır numarasını bildirmek için kendi uygulamasını ekleyebilir, 

örn: printf(“Yanlış parametre değeri: %s dosyası %d\r\n satırında”, dosya, satır) */ 

/* KULLANICI KODU SON 6 */ 

}

#endif 

/ **

* @} 

*/ 

/ **

* @} 

*/

/**************************** (C) TELİF HAKKI STMicroelectronics *****DOSYA SONU****/

Nihai sonuçlar gösteriliyor

STONE TFT LCD ve STM32 IOT PlatoBlockchain Veri Zekasına Dayalı Tic-tac-toe Oyunu. Dikey Arama. Ai.

Kaynak: Plato Data Intelligence