IOT

Game Tic-tac-toe Berbasis BATU TFT LCD dan STM32

Kesimpulan

Tic-tac-toe adalah permainan yang dimainkan di grid 3 kali 3, mirip dengan gobang. Itu mendapatkan namanya karena papan umumnya tidak menggambar batas dan garis kisi disusun menjadi tic-tac-toe. Alat yang dibutuhkan untuk permainan ini hanya kertas dan pena. Kemudian, dua pemain yang mewakili O dan X bergiliran meninggalkan tanda di grid. Setiap tiga tanda membentuk garis lurus, yang merupakan pemenangnya.

Artikel ini menggunakan mikrokontroler STM32 dan layar LCD BATU untuk mengembangkan permainan tic-tac-toe sederhana.

Bahan yang dibutuhkan untuk percobaan

Prinsip sistem

Tentukan ketukan pertama di layar harus O, ketukan kedua di layar adalah X, telah melakukan siklus ini. Atur 8 array untuk menyimpan jumlah O dan X di setiap baris, kolom dan diagonal setiap grid, selama ada tiga tanda yang sama adalah kemenangan, maka akan ada kotak merah yang berkedip untuk membuktikan kemenangan baris, kolom, atau diagonal, lalu ketuk setel ulang untuk memulai permainan lagi.

Berikut flowchartnya :

Game Tic-tac-toe Berdasarkan STONE TFT LCD dan STM32 IOT PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Desain perangkat keras Sistem Tampilan LCD STM32 dan BATU

(A) layar LCD BATU

  1. Desain perangkat keras “permainan tic-tac-toe”

Gunakan layar LCD BATU dari Beijing STONE Technology co., ltd, modelnya STWI070WT-01, dengan layar TFT terintegrasi dan pengontrol sentuh.

Game Tic-tac-toe Berdasarkan STONE TFT LCD dan STM32 IOT PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.
  1.  STVC070WT-01 Fitur Produk
Parameter Fisik 
Ukuran7 inch
Resolusi800 × RGB × 480
Penempatan Pixel0.0642 (W) × 0.1790 (H) mm
Warna262,144 warna (18 bit)
Area tampilan154.08 (W) × 85.92 (H) mm
Dimensi Tampilan186.4mmx105.5mm
Dimensi keseluruhan186.4mmx105.5mmx17.4mm (Tipe standar) 186.4mmx105.5mmx23.8mm (dengan port Ethernet)
Berat Bersih300g
Display 
Tipe lampu latarLED
Kecerahan300cd/m2 (Kecerahan dapat disesuaikan dalam 100 level)
Kontras500:1
Kehidupan backlight300,000 jam
melihat Sudut70 °/70 °/50 °/70 ° (L/R/U/D)
Panel TFTPanel Industri Kelas
Layar Sentuh4 Sentuhan Resistensi Kawat / Sentuhan Kapasitif / Tanpa Layar Sentuh
Mode layar:Digital
Prosesor 
CPUCortex A8
Refresh Rate1G Hz
Kecepatan Bingkai Maks60 FPS
Antarmuka 
Antarmuka SerialTingkat RS232 / RS422 / RS485 / TTL
Antarmuka Ethernet10M/100M (Opsional)
Antarmuka nirkabelWi-Fi / Bluetooth (Opsional)
Pengunduhan file proyekPort USB2.0 atau Disk penyimpanan U
Sumber Daya listrik 
Nilai tegangan+12V DC atau +5V DC
Rentang tegangan yang diizinkan+7V DC…+28V DC atau +5V DC
Maks. transien yang diizinkan+ 28V
Waktu antara dua transienminimal 50 detik
Sekering Internal2A sekering pemulihan sendiri
Konsumsi daya3.0 W
Kondisi Sekitar 
Maks. suhu lingkungan yang diizinkanOperasiPenyimpanan-20℃~ +70℃ -30℃~ +80℃
Kelembaban relatifOperasiPenyimpanan55℃,85%60%
Pemuatan kejutOperasiPenyimpanan15 g/11 mdtk25 g/6 mdtk
getaranOperasiPenyimpanan0.035 mm (10 – 58 Hz)/ 1 g (58 – 500 Hz)3.5 mm (5 – 8,5 Hz)/ 1 g (8.5 – 500 Hz)
Tekanan barometrikOperasiPenyimpanan706 hingga 1030 hPa581 hingga 1030 hPa
Kekebalan Kebisingan 
Debit statis (debit kontak/debit udara)EN 61000-4-2 6kV/8kV
iradiasi RFEN 61000-4-310 V/m, 80% AM1 kHz
Modulasi pulsaENV 50204900 MHz ±5 MHz10 V/meff., 50% ED, 200 Hz
konduksi RFEN 61000-4-6150 kHz – 80 MHz10 V, 80% AM, 1 kHz
Interferensi burst Jalur suplai Jalur data proses Jalur sinyalEN 61000-4-42kV2kV1kV
Perangkat Pendukung 
Port UARTDukunganRS232 / RS422 / RS485 / TTL
Pelabuhan jaringanMendukung Port Ethernet / Wi-Fi / Bluetooth
Flash MemoryDukunganStandar 256MB, Perpanjang 1GB atau 2GB
BelBantuan
RTCBantuan
Port USBDukungan Unduhan Online Dengan Kabel USB
Antarmuka Disk Penyimpanan UDukungan. Unduh Offline atau Salin Data Pengguna
Layar Sentuh4 Resistensi Kawat / Kapasitif
font vektorFormat TTF Standar
GambarMendukung Format PNG/JPG/BMP/SVG/GIF
Audio InterfaceMendukung format WAV Panjang file audio tunggal tidak terbatas, secara teoritis hingga 4096 file audio, daya speaker 8 ohm 2 watt atau 4 ohm 3 watt
Set PerintahKumpulan Perintah Sederhana yang Disatukan
Memori 
Flash MemoryStandar 256MB, Ekstensi 1GB atau 2GB
Jumlah Memori untuk GambarSesuai dengan kemampuan gambar, Sarankan format "PNG, BMP, JPG, SVG, GIF".

(B) papan STM32

Menggunakan papan STM32, chip STM32 adalah CKS32F303.

Game Tic-tac-toe Berdasarkan STONE TFT LCD dan STM32 IOT PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Keluarga STM32 dari inti ARM Cortex-M0, M0+, M3, M4 dan M7 dirancang untuk aplikasi tertanam yang membutuhkan kinerja tinggi, biaya rendah, dan konsumsi daya rendah.

  • Catu daya 2.0V-3.6V
  • Pin I/O yang kompatibel dengan 5V
  • Mode jam aman yang luar biasa
  • Mode daya rendah dengan fungsi bangun
  • Osilator RC internal
  • Sirkuit reset tertanam
  • Kisaran suhu operasi.
  • -40 °C hingga +85 °C atau 105 °C

Desain perangkat lunak sistem

Proses pengembangan layar LCD STM32 dan BATU

1: buat proyek dan muat gambar yang diperlukan ke dalam proyek.

2: menggunakan perangkat lunak Stone-designer untuk membuat hubungan yang terkait secara dinamis; kontrol utama adalah: "Tombol", "gambar";

3: simulasi dan kompilasi perangkat lunak untuk menghasilkan file yang dapat dieksekusi.

4: layar LCD terhubung ke PC melalui USB dan menyalin file yang dapat dieksekusi ke layar.

Pertama buat proyek baru seperti yang ditunjukkan di bawah ini.

Game Tic-tac-toe Berdasarkan STONE TFT LCD dan STM32 IOT PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.
Game Tic-tac-toe Berdasarkan STONE TFT LCD dan STM32 IOT PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Kedua, impor semua gambar ke dalam sumber daya

Game Tic-tac-toe Berdasarkan STONE TFT LCD dan STM32 IOT PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Kemudian, atur kontrol tombol ke setiap kisi dan buat tombol tidak terlihat. 

Game Tic-tac-toe Berdasarkan STONE TFT LCD dan STM32 IOT PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Jangan lupa untuk mengatur tombol reset!

Efek selesai ditunjukkan di bawah ini:

Game Tic-tac-toe Berdasarkan STONE TFT LCD dan STM32 IOT PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Setelah itu, tambahkan kontrol gambar ke setiap kisi dengan cara yang sama, dan atur semuanya ke gambar putih.

Terakhir tambahkan kontrol gif dan atur menjadi tak terlihat.

Bagian dari efek selesai ditunjukkan di bawah ini:

Game Tic-tac-toe Berdasarkan STONE TFT LCD dan STM32 IOT PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.
Game Tic-tac-toe Berdasarkan STONE TFT LCD dan STM32 IOT PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.
Game Tic-tac-toe Berdasarkan STONE TFT LCD dan STM32 IOT PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.
Game Tic-tac-toe Berdasarkan STONE TFT LCD dan STM32 IOT PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Diagram koneksi sirkuit

Game Tic-tac-toe Berdasarkan STONE TFT LCD dan STM32 IOT PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Berbagi kode

/* Termasuk ———————————————————————*/ 

#sertakan “stm32f0xx_hal.h” 

#sertakan “Uart.h” 

#sertakan “string.h” 

#sertakan “ws2812.h” 

#sertakan “IWDG.h” 

RGB_COLOR PENGGUNA_RGB_COLOR; 

karakter yang tidak ditandatangani TX_Mode = 1; // bit bendera tipe transmisi 1:232 0:TTL 

karakter yang tidak ditandatangani BLINK_2=0; 

karakter RX3_BUF yang tidak ditandatangani[32]; // Penyangga penerimaan tiga tingkat yang disesuaikan 

#tentukan BUTTON1 0x81 

#tentukan BUTTON2 0x82 

#tentukan BUTTON3 0x83 

#tentukan BUTTON4 0x84 

#tentukan BUTTON5 0x85 

#tentukan BUTTON6 0x86 

#tentukan BUTTON7 0x87 

#tentukan BUTTON8 0x88 

#tentukan BUTTON9 0x89 

# tentukan TOMBOL0 0x8A 

#definisikan CLEAR 0x8E 

tidak ditandatangani int r_flag1 = 0; 

tidak ditandatangani int quan[4][2]={0}; 

tidak ditandatangani int cha [4][2]={0}; 

tidak ditandatangani int quan_hang1 = 0; 

tidak ditandatangani int quan_hang2 = 0; 

tidak ditandatangani int quan_hang3 = 0; 

tidak ditandatangani int quan_lie1 = 0; 

tidak ditandatangani int quan_lie2 = 0; 

tidak ditandatangani int quan_lie3 = 0; 

unsigned int quan_zuoxia = 0; 

unsigned int quan_youxia = 0; 

tidak ditandatangani int cha_hang1 = 0; 

tidak ditandatangani int cha_hang2 = 0; 

tidak ditandatangani int cha_hang3 = 0; 

tidak ditandatangani int cha_lie1 = 0; 

tidak ditandatangani int cha_lie2 = 0; 

tidak ditandatangani int cha_lie3 = 0; 

unsigned int cha_zuoxia = 0; 

unsigned int cha_youxia = 0; //tidak ditandatangani int r_flag10 = 0; 

batal SystemClock_Config(batal); 

batal Error_Handler(batal); 

statis batal MX_GPIO_Init(batal); 

int main (void) 

uint8_t color_buf = 0; 

//Pemilihan Fungsi 

/* Reset semua periferal, Menginisialisasi antarmuka Flash dan Systick. */ 

HAL_Init(); 

/* Konfigurasi jam sistem */ 

SystemClock_Config(); 

/* Inisialisasi semua periferal yang dikonfigurasi */ 

MX_GPIO_Init(); 

TX_Mode = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_4); 

jika (TX_Mode) 

MX_USART1_UART_Init(); 

//232 Inisialisasi 

lain 

MX_USART1_UART_Init2(); 

// Inisialisasi TTl 

sementara(1) 

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

HAL_NVIC_SystemReset(); 

//Pembalikan jumper, reboot, dan inisialisasi ulang 

jika(MNG_USART1.RX_OVER_FLG ==BENAR) 

// 

Data serial menerima bit bendera 

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

//Metode 2: Dapatkan nama kontrol panjang tetap 

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(“tombol1”,(konstan karakter *)RX3_BUF))==0) 

//Pilih kontrol

color_buf = TOMBOL1; 

}

if((strcmp(“tombol2”,(konstan karakter *)RX3_BUF))==0) 

color_buf = TOMBOL2; 

}

if((strcmp(“tombol3”,(konstan karakter *)RX3_BUF))==0) 

color_buf = TOMBOL3; 

}

if((strcmp(“tombol4”,(konstan karakter *)RX3_BUF))==0) 

color_buf = TOMBOL4; 

}

if((strcmp(“tombol5”,(konstan karakter *)RX3_BUF))==0) 

color_buf = TOMBOL5; 

}

if((strcmp(“tombol6”,(konstan karakter *)RX3_BUF))==0) 

color_buf = TOMBOL6; 

}

if((strcmp(“tombol7”,(konstan karakter *)RX3_BUF))==0) 

color_buf = TOMBOL7; 

}

if((strcmp(“tombol8”,(konstan karakter *)RX3_BUF))==0) 

color_buf = TOMBOL8; 

}

if((strcmp(“tombol9”,(konstan karakter *)RX3_BUF))==0) 

color_buf = TOMBOL9; 

}

if((strcmp(“tombol0”,(konstan karakter *)RX3_BUF))==0) 

color_buf = TOMBOL0; 

}

beralih (warna_buf) 

kasus BUTTON1: 

//jika(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((karakter *)MNG_USART1.TX_BUF, 

“ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image2\”,\”image\”:\”lingkaran\ ”}>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 = HAPUS; 

}

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

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((karakter *)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 = HAPUS; 

}

//r_flag1 = 1; 

break; 

kasus BUTTON2: 

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

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((karakter *)MNG_USART1.TX_BUF, 

“ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image3\”,\”image\”:\”lingkaran\ ”}>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 = HAPUS; 

}

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

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((karakter *)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 = HAPUS; 

}

break; 

kasus BUTTON3: 

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

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((karakter *)MNG_USART1.TX_BUF, 

“ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image4\”,\”image\”:\”lingkaran\ ”}>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 = HAPUS; 

}

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

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((karakter *)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 = HAPUS; 

}

break; 

kasus BUTTON4: 

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

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((karakter *)MNG_USART1.TX_BUF, 

“ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image5\”,\”image\”:\”lingkaran\ ”}>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 = HAPUS; 

}

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

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((karakter *)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 = HAPUS; 

}

break; 

kasus BUTTON5: 

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

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((karakter *)MNG_USART1.TX_BUF, 

“ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image6\”,\”image\”:\”lingkaran\ ”}>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 = HAPUS; 

}

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

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((karakter *)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 = HAPUS; 

}

break; 

kasus BUTTON6: 

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

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((karakter *)MNG_USART1.TX_BUF, 

“ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image7\”,\”image\”:\”lingkaran\ ”}>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 = HAPUS; 

}

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

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((karakter *)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 = HAPUS; 

}

break; 

kasus BUTTON7: 

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

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((karakter *)MNG_USART1.TX_BUF, 

“ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image8\”,\”image\”:\”lingkaran\ ”}>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 = HAPUS; 

}

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

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((karakter *)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 = HAPUS; 

}

break; 

kasus BUTTON8: 

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

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((karakter *)MNG_USART1.TX_BUF, 

“ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image9\”,\”image\”:\”lingkaran\ ”}>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 = HAPUS; 

}

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

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((karakter *)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 = HAPUS; 

}

break; 

kasus BUTTON9: 

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

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((karakter *)MNG_USART1.TX_BUF, 

“ST<{\”cmd_code\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image10\”,\”image\”:\”lingkaran\ ”}>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 = HAPUS; 

}

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

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((karakter *)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 = HAPUS; 

}

break; 

kasus 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((karakter *)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((karakter *)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((karakter *)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((karakter *)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((karakter *)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((karakter *)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((karakter *)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((karakter *)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((karakter *)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((karakter *)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((karakter *)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((karakter *)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((karakter *)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((karakter *)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((karakter *)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((karakter *)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((karakter *)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; 

default: 

MNG_USART1.RX_OVER_FLG = SALAH; 

break; 

}

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

jika((quan_hang1==3)||(cha_hang1==3)) 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((karakter *)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; 

}

lain jika((quan_hang2==3)||(cha_hang2==3)) 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((karakter *)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; 

}

lain jika((quan_hang3==3)||(cha_hang3==3)) 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((karakter *)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; 

}

lain jika((quan_lie1==3)||(cha_lie1==3)) 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((karakter *)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; 

}

lain jika((quan_lie2==3)||(cha_lie2==3)) 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((karakter *)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; 

}

lain jika((quan_lie3==3)||(cha_lie3==3)) 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((karakter *)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; 

}

lain jika((quan_zuoxia==3)||(cha_zuoxia==3)) 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((karakter *)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; 

}

lain jika((quan_youxia==3)||(cha_youxia==3)) 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((karakter *)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 = SALAH; 

}

/** Konfigurasi Jam Sistem 

*/

batal SystemClock_Config (batal) 

RCC_OscInitTypeDef RCC_OscInitStruct; 

RCC_ClkInitTypeDef RCC_ClkInitStruct; 

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

jika (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) 

Kesalahan_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.APB1CLKDdivider = RCC_HCLK_DIV1; 

jika (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK) 

Kesalahan_Handler(); 

}

PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1; 

PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK1; 

jika (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) 

Kesalahan_Handler(); 

}

HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000); 

HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK); 

/* Konfigurasi interupsi SysTick_IRQn */ 

HAL_NVIC_SetPrioritas(SysTick_IRQn, 0, 0); 

}

/** Konfigurasi Pinout 

*/

statis batal MX_GPIO_Init(batal) 

GPIO_InitTypeDef GPIO_InitStruct; 

/* Aktifkan Jam Port 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); 

}

/* KODE PENGGUNA MULAI 4 */

/* KODE PENGGUNA AKHIR 4 */ 

/ **

* @brief Fungsi ini dijalankan jika terjadi kesalahan. 

* @param Tidak ada 

* @retval Tidak ada 

*/ 

batal Error_Handler(batal) 

/* KODE PENGGUNA BEGIN Error_Handler */ 

/* Pengguna dapat menambahkan implementasinya sendiri untuk melaporkan status pengembalian kesalahan HAL */ 

sementara(1) 

{

}

/* KODE PENGGUNA AKHIR Error_Handler */ 

}

#ifdef USE_FULL_ASSERT 

/ **

* @brief Melaporkan nama file sumber dan nomor baris sumber 

* di mana kesalahan assert_param telah terjadi. 

* @param file: penunjuk ke nama file sumber 

* @param line: assert_param nomor sumber baris kesalahan 

* @retval Tidak ada 

*/ 

batalkan assert_failed (file uint8_t*, baris uint32_t) 

/* KODE PENGGUNA MULAI 6 */ 

/* Pengguna dapat menambahkan implementasinya sendiri untuk melaporkan nama file dan nomor baris, 

mis: printf(“Nilai parameter salah: file %s pada baris %d\r\n”, file, baris) */ 

/* KODE PENGGUNA AKHIR 6 */ 

}

#berakhir jika 

/ **

*@} 

*/ 

/ **

*@} 

*/

/*************************** (C) HAK CIPTA STMikroelektronika *****AKHIR FILE****/

Hasil akhir menunjukkan

Game Tic-tac-toe Berdasarkan STONE TFT LCD dan STM32 IOT PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Sumber: Plato Data Intelligence