IOT

Tic-tac-toe-spill basert på STONE TFT LCD og STM32

Oppsummering

Tic-tac-toe er et spill som spilles på et 3 x 3 rutenett, som ligner på gobang. Det har fått navnet sitt fordi brettet vanligvis ikke tegner grenser og rutenettlinjene er ordnet i tic-tac-toe. Verktøyene som trengs for spillet er kun papir og penn. Deretter bytter to spillere som representerer O og X på å legge igjen merker på rutenettet. Eventuelle tre merker danner en rett linje, som er vinneren.

Denne artikkelen skal bruke mikrokontroller STM32 og STONE LCD-skjerm for å utvikle et enkelt tic-tac-toe-spill.

Materialer som kreves for eksperimentet

Systemprinsippet

Spesifiser det første trykket på skjermen må være O, det andre trykket på skjermen er X, har gjort denne syklusen. Sett 8 arrays for å lagre antall O og X i hver rad, kolonne og diagonal i hvert rutenett, så lenge det er tre med samme merke er seieren, så vil det være en blinkende rød boks for å bevise seieren til rad, kolonne eller diagonal, og trykk deretter på tilbakestill for å starte spillet på nytt.

Følgende er flytskjemaet:

STM32 og STONE LCD Display System maskinvaredesign

(A) STONE LCD-skjerm

  1. "Tic-tac-toe game" maskinvaredesign

Bruk STONE LCD-skjerm fra Beijing STONE Technology co., ltd, modellen er STWI070WT-01, med en integrert TFT-skjerm og berøringskontroller.

  1.  STVC070WT-01 Produktfunksjoner
Fysisk Parameter 
Størrelse7 tommers
oppløsning800 x 480 x RGB
Pixelavstand0.0642(B) × 0.1790(H) mm
FARGE262,144 farger (18 bit)
Visningsområdet154.08(B) × 85.92(H) mm
Skjermdimensjon186.4mmx105.5mm
Utvendig mål186.4 mm x 105.5 mm x 17.4 mm (standardtype) 186.4 mm x 105.5 mm x 23.8 mm (med Ethernet-port)
Netto Vekt300g
Vise 
BakgrunnsbelysningstypeLED
Lysstyrke300cd/m2 (Lysstyrken kan justeres i 100 nivåer)
Kontrast500:1
Livets bakgrunnsbelysning300,000 timer
Betraktningsvinkel70 °/70 °/50 °/70 ° (L/R/U/D)
TFT-panelEt klasse industripanel
Touch Screen4 ledningsmotstand berøring / kapasitiv berøring / uten berøringsskjerm
Skjermmodus:Digitalt
prosessor 
prosessorcortex A8
Oppdateringshastighet1G Hz
Maks bildefrekvens60 FPS
Interface 
Serielt grensesnittRS232 / RS422 / RS485 / TTL nivå
Ethernet-grensesnitt10M/100M (valgfritt)
Trådløst grensesnittWi-Fi / Bluetooth (valgfritt)
Last ned prosjektfilUSB2.0-port eller U-lagringsdisk
Strømforsyning 
Merkespenning+12V DC eller +5V DC
Tillatt spenningsområde+7V DC…+28V DC eller +5V DC
Maks. tillatte transienter+ 28V
Tid mellom to transienterMinimum 50 sek
Intern sikring2A selvgjenopprettende sikring
Strømforbruk3.0 W
Omgivelsesforhold 
Maks. tillatt omgivelsestemperaturOperationStorage-20℃~ +70℃-30℃~ +80℃
Relativ fuktighetOperationStorage55℃,85%60℃,90%
SjokklastingOperationStorage15 g/11 msek25 g/6 msek
vibrasjonOperationStorage0.035 mm (10 – 58 Hz)/ 1 g (58 – 500 Hz)3.5 mm (5 – 8,5 Hz)/ 1 g (8.5 – 500 Hz)
Barometrisk trykkOperationStorage706 til 1030 hPa581 til 1030 hPa
Støyimmunitet 
Statisk utladning (kontaktutladning/luftutladning)EN 61000-4-2 6 kV/8 kV
RF-bestrålingEN 61000-4-310 V/m, 80 % AM1 kHz
PulsmodulasjonENV 50204900 MHz ±5 MHz10 V/meff., 50 % ED, 200 Hz
RF-ledningEN 61000-4-6150 kHz – 80 MHz10 V, 80 % AM, 1 kHz
Burst interferens Forsyningslinjer ProsessdatalinjerSignallinjerEN 61000-4-42kV2kV1kV
Støtte enhet 
UART-portStøtter RS232 / RS422 / RS485 / TTL
Network PortStøtte Ethernet-port / Wi-Fi / Bluetooth
FlashminneStøtteStandard 256MB, Utvid 1GB eller 2GB
BuzzerStøtte
RTCStøtte
USB-portSupportOnline nedlasting med USB-kabel
U LagringsdiskgrensesnittSupport.Offline Last ned eller kopier brukerdata
Touch Screen4 ledningsmotstand / kapasitiv
Vector FontStandard TTF-format
BildeStøtte PNG/JPG/BMP/SVG/GIF-format
Audio InterfaceStøtte WAV-format Lengden på en enkelt lydfil er ikke begrenset, teoretisk opp til 4096 lydfiler, høyttalereffekt er 8 ohm 2 watt eller 4 ohm 3 watt
KommandosettUnified Simplified Command Sets
Minne 
FlashminneStandard 256 MB, utvidelse 1 GB eller 2 GB
Minnemengde for bildeForeslå "PNG, BMP, JPG, SVG, GIF"-format i henhold til muligheten til bildet.

(B) STM32-kort

Ved å bruke et STM32-kort er brikken til STM32 CKS32F303.

STM32-familien av ARM Cortex-M0-, M0+-, M3-, M4- og M7-kjerner er designet for innebygde applikasjoner som krever høy ytelse, lave kostnader og lavt strømforbruk.

  • 2.0V-3.6V strømforsyning
  • 5V-kompatible I/O-pinner
  • Utmerket sikker klokkemodus
  • Lavstrømsmodus med vekkefunksjon
  • Intern RC oscillator
  • Innebygd tilbakestillingskrets
  • Driftstemperaturområde.
  • -40°C til +85°C eller 105°C

Design av systemprogramvare

Utviklingsprosessen til STM32 og STONE LCD-skjerm

1: lag prosjektet og last inn de nødvendige bildene i prosjektet.

2: bruke Stone-designer-programvaren til å skape, dynamisk assosierte relasjoner; hovedkontrollene er: "Knapp", "bilde";

3: programvaresimulering og kompilering for å generere kjørbare filer.

4: LCD-skjermen kobles til PC-en via USB og kopier den kjørbare filen til skjermen.

Opprett først et nytt prosjekt som vist nedenfor.

For det andre, importer alle bildene til ressursen

Sett deretter knappekontroller til hvert rutenett og gjør knappene usynlige. 

Ikke glem å stille inn tilbakestillingsknappen!

Den ferdige effekten er vist nedenfor:

Etter det, legg til bildekontroller til hvert rutenett på samme måte, og sett dem alle til hvite bilder.

Til slutt legg til gif-kontrollen og sett den til usynlig.

Delene av ferdig effekt er vist nedenfor:

Kretskoblingsskjema

Kodedeling

/* Inkluderer ———————————————————————*/ 

#include "stm32f0xx_hal.h" 

#include «Uart.h» 

#include "string.h" 

#include "ws2812.h" 

#inkluder «IWDG.h» 

RGB_COLOR USER_RGB_COLOR; 

usignert tegn TX_Mode = 1; //Transmisjonstype flaggbit 1:232 0:TTL 

usignert tegn BLINK_2=0; 

usignert tegn RX3_BUF[32]; //Tilpasset mottaksbuffer på tre nivåer 

#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 

usignert int r_flag1 = 0; 

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

usignert int cha [4][2]={0}; 

usignert int quan_hang1 = 0; 

usignert int quan_hang2 = 0; 

usignert int quan_hang3 = 0; 

usignert int quan_lie1 = 0; 

usignert int quan_lie2 = 0; 

usignert int quan_lie3 = 0; 

usignert int quan_zuoxia = 0; 

usignert int quan_youxia = 0; 

usignert int cha_hang1 = 0; 

usignert int cha_hang2 = 0; 

usignert int cha_hang3 = 0; 

usignert int cha_lie1 = 0; 

usignert int cha_lie2 = 0; 

usignert int cha_lie3 = 0; 

usignert int cha_zuoxia = 0; 

usignert int cha_youxia = 0; //usignert int r_flag10 = 0; 

void SystemClock_Config(void); 

void Error_Handler(void); 

statisk tomrom MX_GPIO_Init(void); 

int main (void) 

uint8_t color_buf = 0; 

//Funksjonsvalg 

/* Tilbakestilling av alle eksterne enheter, Initialiserer Flash-grensesnittet og Systick. */ 

HAL_Init(); 

/* Konfigurer systemklokken */ 

SystemClock_Config(); 

/* Initialiser alle konfigurerte periferiutstyr */ 

MX_GPIO_Init(); 

TX_Mode = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_4); 

if(TX_Mode) 

MX_USART1_UART_Init(); 

//232 Initialisering 

ellers 

MX_USART1_UART_Init2(); 

//TTl Initialisering 

mens (1) 

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

HAL_NVIC_SystemReset(); 

//Jumper reversering, omstart og reinitialisering 

if(MNG_USART1.RX_OVER_FLG ==TRUE) 

// 

Seriell data mottar flaggbit 

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

//Metode 2:Få kontrollnavn med fast lengde 

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) 

//Velg kontroll

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; 

}

bytte (color_buf) 

tilfelle KNAPP1: 

//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\”:\”sett_bilde\”,\”type\”:\”bilde\”,\”widget\”:\”bilde2\”,\”bilde\”:\”sirkel\ ”}>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\”:\”sett_bilde\”,\”type\”:\”bilde\”,\”widget\”:\”bilde2\”,\”bilde\”:\”x\ ”}>ET”); 

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

USART_TX_Data(MNG_USART1); 

r_flagg1 = 0; 

cha_hang1++; 

cha_lie1++; 

cha_youxia++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

//r_flagg1 = 1; 

break; 

tilfelle KNAPP2: 

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\”:\”sett_bilde\”,\”type\”:\”bilde\”,\”widget\”:\”bilde3\”,\”bilde\”:\”sirkel\ ”}>ET”); 

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

USART_TX_Data(MNG_USART1); 

r_flagg1 = 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\”:\”sett_bilde\”,\”type\”:\”bilde\”,\”widget\”:\”bilde3\”,\”bilde\”:\”x\ ”}>ET”); 

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

USART_TX_Data(MNG_USART1); 

r_flagg1 = 0; 

cha_hang1++; 

cha_lie2++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

break; 

tilfelle KNAPP3: 

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\”:\”sett_bilde\”,\”type\”:\”bilde\”,\”widget\”:\”bilde4\”,\”bilde\”:\”sirkel\ ”}>ET”); 

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

USART_TX_Data(MNG_USART1); 

r_flagg1 = 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\”:\”sett_bilde\”,\”type\”:\”bilde\”,\”widget\”:\”bilde4\”,\”bilde\”:\”x\ ”}>ET”); 

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

USART_TX_Data(MNG_USART1); 

r_flagg1 = 0; 

cha_hang1++; 

cha_lie3++; 

cha_zuoxia++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

break; 

tilfelle KNAPP4: 

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\”:\”sett_bilde\”,\”type\”:\”bilde\”,\”widget\”:\”bilde5\”,\”bilde\”:\”sirkel\ ”}>ET”); 

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

USART_TX_Data(MNG_USART1); 

r_flagg1 = 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\”:\”sett_bilde\”,\”type\”:\”bilde\”,\”widget\”:\”bilde5\”,\”bilde\”:\”x\ ”}>ET”); 

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

USART_TX_Data(MNG_USART1); 

r_flagg1 = 0; 

cha_hang2++; 

cha_lie1++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

break; 

tilfelle KNAPP5: 

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\”:\”sett_bilde\”,\”type\”:\”bilde\”,\”widget\”:\”bilde6\”,\”bilde\”:\”sirkel\ ”}>ET”); 

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

USART_TX_Data(MNG_USART1); 

r_flagg1 = 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\”:\”sett_bilde\”,\”type\”:\”bilde\”,\”widget\”:\”bilde6\”,\”bilde\”:\”x\ ”}>ET”); 

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

USART_TX_Data(MNG_USART1); 

r_flagg1 = 0; 

cha_hang2++; 

cha_lie2++; 

cha_zuoxia++; 

cha_youxia++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

break; 

tilfelle KNAPP6: 

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\”:\”sett_bilde\”,\”type\”:\”bilde\”,\”widget\”:\”bilde7\”,\”bilde\”:\”sirkel\ ”}>ET”); 

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

USART_TX_Data(MNG_USART1); 

r_flagg1 = 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\”:\”sett_bilde\”,\”type\”:\”bilde\”,\”widget\”:\”bilde7\”,\”bilde\”:\”x\ ”}>ET”); 

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

USART_TX_Data(MNG_USART1); 

r_flagg1 = 0; 

cha_hang2++; 

cha_lie3++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

break; 

tilfelle KNAPP7: 

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\”:\”sett_bilde\”,\”type\”:\”bilde\”,\”widget\”:\”bilde8\”,\”bilde\”:\”sirkel\ ”}>ET”); 

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

USART_TX_Data(MNG_USART1); 

r_flagg1 = 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\”:\”sett_bilde\”,\”type\”:\”bilde\”,\”widget\”:\”bilde8\”,\”bilde\”:\”x\ ”}>ET”); 

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

USART_TX_Data(MNG_USART1); 

r_flagg1 = 0; 

cha_hang3++; 

cha_lie1++; 

cha_zuoxia++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

break; 

tilfelle KNAPP8: 

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\”:\”sett_bilde\”,\”type\”:\”bilde\”,\”widget\”:\”bilde9\”,\”bilde\”:\”sirkel\ ”}>ET”); 

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

USART_TX_Data(MNG_USART1); 

r_flagg1 = 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\”:\”sett_bilde\”,\”type\”:\”bilde\”,\”widget\”:\”bilde9\”,\”bilde\”:\”x\ ”}>ET”); 

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

USART_TX_Data(MNG_USART1); 

r_flagg1 = 0; 

cha_hang3++; 

cha_lie2++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

break; 

tilfelle KNAPP9: 

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\”:\”sett_bilde\”,\”type\”:\”bilde\”,\”widget\”:\”bilde10\”,\”bilde\”:\”sirkel\ ”}>ET”);

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

USART_TX_Data(MNG_USART1); 

r_flagg1 = 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\”:\”sett_bilde\”,\”type\”:\”bilde\”,\”widget\”:\”bilde10\”,\”bilde\”:\”x\ ”}>ET”); 

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

USART_TX_Data(MNG_USART1); 

r_flagg1 = 0; 

cha_hang3++; 

cha_lie3++; 

cha_youxia++; 

//memset(RX3_BUF,0,7); 

color_buf = CLEAR; 

}

break; 

tilfelle KNAPP0: 

r_flagg1 = 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\”:\”sett_bilde\”,\”type\”:\”bilde\”,\”widget\”:\”bilde2\”,\”bilde\”:\”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\”:\”sett_bilde\”,\”type\”:\”bilde\”,\”widget\”:\”bilde3\”,\”bilde\”:\”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\”:\”sett_bilde\”,\”type\”:\”bilde\”,\”widget\”:\”bilde4\”,\”bilde\”:\”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\”:\”sett_bilde\”,\”type\”:\”bilde\”,\”widget\”:\”bilde5\”,\”bilde\”:\”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\”:\”sett_bilde\”,\”type\”:\”bilde\”,\”widget\”:\”bilde6\”,\”bilde\”:\”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\”:\”sett_bilde\”,\”type\”:\”bilde\”,\”widget\”:\”bilde7\”,\”bilde\”:\”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\”:\”sett_bilde\”,\”type\”:\”bilde\”,\”widget\”:\”bilde8\”,\”bilde\”:\”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\”:\”sett_bilde\”,\”type\”:\”bilde\”,\”widget\”:\”bilde9\”,\”bilde\”:\”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\”:\”sett_bilde\”,\”type\”:\”bilde\”,\”widget\”:\”bilde10\”,\”bilde\”:\”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; 

misligholde: 

MNG_USART1.RX_OVER_FLG = FALSE; 

break; 

}

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

if((quan_hang1==3)||(cha_hang1==3)) 

memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN); 

sprintf((char *)MNG_USART1.TX_BUF, 

“ST<{\”cmd_code\”:\”set_visible\”,\”type\”:\”widget\”,\”widget\”:\”gif4\”,\”visible\”:true}>ET "); 

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

USART_TX_Data(MNG_USART1); 

quan_hang1=quan_hang2=quan_hang3=cha_hang1=cha_hang2=cha_hang3=0; 

quan_lie1=quan_lie2=quan_lie3=cha_lie1=cha_lie2=cha_lie3=0; 

quan_zuoxia=quan_youxia=cha_zuoxia=cha_youxia=0; 

}

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; 

}

annet hvis((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; 

}

/** Systemklokkekonfigurasjon 

*/

void SystemClock_Config(void) 

RCC_OscInitTypeDef RCC_OscInitStruct; 

RCC_ClkInitTypeDef RCC_ClkInitStruct; 

RCC_PeriphCLKInitTypeDef PeriphClkInit; 

RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; 

RCC_OscInitStruct.HSIState = RCC_HSI_ON; 

RCC_OscInitStruct.HSICalibrationValue = 16; 

RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; 

RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; 

RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL12; 

RCC_OscInitStruct.PLL.PREDIV = RCC_PREDIV_DIV1; 

if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) 

Error_Handler(); 

}

RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK 

|RCC_CLOCKTYPE_PCLK1; 

RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; 

RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; 

RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1; 

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

Error_Handler(); 

}

PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1; 

PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK1; 

if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) 

Error_Handler(); 

}

HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000); 

HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK); 

/* SysTick_IRQn avbruddskonfigurasjon */ 

HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); 

}

/** Pinout-konfigurasjon 

*/

statisk void MX_GPIO_Init(void) 

GPIO_InitTypeDef GPIO_InitStruct; 

/* GPIO-porter Klokkeaktivering */ 

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

}

/* BRUKERKODE BEGYNN 4 */

/* BRUKERKODE SLUTT 4 */ 

/ **

* @brief Denne funksjonen utføres i tilfelle feil oppstår. 

* @param Ingen 

* @retval Ingen 

*/ 

void Error_Handler(void) 

/* BRUKERKODE BEGIN Error_Handler */ 

/* Brukeren kan legge til sin egen implementering for å rapportere HAL-feilens returtilstand */ 

mens (1) 

{

}

/* BRUKERKODE END Error_Handler */ 

}

#ifdef USE_FULL_ASSERT 

/ **

* @brief Rapporterer navnet på kildefilen og kildelinjenummeret 

* hvor assert_param-feilen har oppstått. 

* @param fil: peker til kildefilnavnet 

* @param line: assert_param feillinjekildenummer 

* @retval Ingen 

*/ 

void assert_failed (uint8_t*-fil, uint32_t-linje) 

/* BRUKERKODE BEGYNN 6 */ 

/* Brukeren kan legge til sin egen implementering for å rapportere filnavnet og linjenummeret, 

eks: printf(“Feil parameterverdi: fil %s på linje %d\r\n”, fil, linje) */ 

/* BRUKERKODE SLUTT 6 */ 

}

#slutt om 

/ **

* @} 

*/ 

/ **

* @} 

*/

/************************ (C) COPYRIGHT STMicroelectronics *****SLUT PÅ FIL****/

Endelige resultater viser

Kilde: Platon Data Intelligence