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 :
Desain perangkat keras Sistem Tampilan LCD STM32 dan BATU
(A) layar LCD BATU
- 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.
- STVC070WT-01 Fitur Produk
Parameter Fisik | |
Ukuran | 7 inch |
Resolusi | 800 × RGB × 480 |
Penempatan Pixel | 0.0642 (W) × 0.1790 (H) mm |
Warna | 262,144 warna (18 bit) |
Area tampilan | 154.08 (W) × 85.92 (H) mm |
Dimensi Tampilan | 186.4mmx105.5mm |
Dimensi keseluruhan | 186.4mmx105.5mmx17.4mm (Tipe standar) 186.4mmx105.5mmx23.8mm (dengan port Ethernet) |
Berat Bersih | 300g |
Display | |
Tipe lampu latar | LED |
Kecerahan | 300cd/m2 (Kecerahan dapat disesuaikan dalam 100 level) |
Kontras | 500:1 |
Kehidupan backlight | 300,000 jam |
melihat Sudut | 70 °/70 °/50 °/70 ° (L/R/U/D) |
Panel TFT | Panel Industri Kelas |
Layar Sentuh | 4 Sentuhan Resistensi Kawat / Sentuhan Kapasitif / Tanpa Layar Sentuh |
Mode layar: | Digital |
Prosesor | |
CPU | Cortex A8 |
Refresh Rate | 1G Hz |
Kecepatan Bingkai Maks | 60 FPS |
Antarmuka | |
Antarmuka Serial | Tingkat RS232 / RS422 / RS485 / TTL |
Antarmuka Ethernet | 10M/100M (Opsional) |
Antarmuka nirkabel | Wi-Fi / Bluetooth (Opsional) |
Pengunduhan file proyek | Port 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 transien | minimal 50 detik |
Sekering Internal | 2A sekering pemulihan sendiri |
Konsumsi daya | 3.0 W |
Kondisi Sekitar | |
Maks. suhu lingkungan yang diizinkanOperasiPenyimpanan | -20℃~ +70℃ -30℃~ +80℃ |
Kelembaban relatifOperasiPenyimpanan | 55℃,85%60% |
Pemuatan kejutOperasiPenyimpanan | 15 g/11 mdtk25 g/6 mdtk |
getaranOperasiPenyimpanan | 0.035 mm (10 – 58 Hz)/ 1 g (58 – 500 Hz)3.5 mm (5 – 8,5 Hz)/ 1 g (8.5 – 500 Hz) |
Tekanan barometrikOperasiPenyimpanan | 706 hingga 1030 hPa581 hingga 1030 hPa |
Kekebalan Kebisingan | |
Debit statis (debit kontak/debit udara) | EN 61000-4-2 6kV/8kV |
iradiasi RF | EN 61000-4-310 V/m, 80% AM1 kHz |
Modulasi pulsa | ENV 50204900 MHz ±5 MHz10 V/meff., 50% ED, 200 Hz |
konduksi RF | EN 61000-4-6150 kHz – 80 MHz10 V, 80% AM, 1 kHz |
Interferensi burst Jalur suplai Jalur data proses Jalur sinyal | EN 61000-4-42kV2kV1kV |
Perangkat Pendukung | |
Port UART | DukunganRS232 / RS422 / RS485 / TTL |
Pelabuhan jaringan | Mendukung Port Ethernet / Wi-Fi / Bluetooth |
Flash Memory | DukunganStandar 256MB, Perpanjang 1GB atau 2GB |
Bel | Bantuan |
RTC | Bantuan |
Port USB | Dukungan Unduhan Online Dengan Kabel USB |
Antarmuka Disk Penyimpanan U | Dukungan. Unduh Offline atau Salin Data Pengguna |
Layar Sentuh | 4 Resistensi Kawat / Kapasitif |
font vektor | Format TTF Standar |
Gambar | Mendukung Format PNG/JPG/BMP/SVG/GIF |
Audio Interface | Mendukung 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 Perintah | Kumpulan Perintah Sederhana yang Disatukan |
Memori | |
Flash Memory | Standar 256MB, Ekstensi 1GB atau 2GB |
Jumlah Memori untuk Gambar | Sesuai dengan kemampuan gambar, Sarankan format "PNG, BMP, JPG, SVG, GIF". |
(B) papan STM32
Menggunakan papan STM32, chip STM32 adalah CKS32F303.
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.
Kedua, impor semua gambar ke dalam sumber daya
Kemudian, atur kontrol tombol ke setiap kisi dan buat tombol tidak terlihat.
Jangan lupa untuk mengatur tombol reset!
Efek selesai ditunjukkan di bawah ini:
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:
Diagram koneksi sirkuit
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
Sumber: Plato Data Intelligence