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
- "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.
- STVC070WT-01 Produktfunksjoner
Fysisk Parameter | |
Størrelse | 7 tommers |
oppløsning | 800 x 480 x RGB |
Pixelavstand | 0.0642(B) × 0.1790(H) mm |
FARGE | 262,144 farger (18 bit) |
Visningsområdet | 154.08(B) × 85.92(H) mm |
Skjermdimensjon | 186.4mmx105.5mm |
Utvendig mål | 186.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 Vekt | 300g |
Vise | |
Bakgrunnsbelysningstype | LED |
Lysstyrke | 300cd/m2 (Lysstyrken kan justeres i 100 nivåer) |
Kontrast | 500:1 |
Livets bakgrunnsbelysning | 300,000 timer |
Betraktningsvinkel | 70 °/70 °/50 °/70 ° (L/R/U/D) |
TFT-panel | Et klasse industripanel |
Touch Screen | 4 ledningsmotstand berøring / kapasitiv berøring / uten berøringsskjerm |
Skjermmodus: | Digitalt |
prosessor | |
prosessor | cortex A8 |
Oppdateringshastighet | 1G Hz |
Maks bildefrekvens | 60 FPS |
Interface | |
Serielt grensesnitt | RS232 / RS422 / RS485 / TTL nivå |
Ethernet-grensesnitt | 10M/100M (valgfritt) |
Trådløst grensesnitt | Wi-Fi / Bluetooth (valgfritt) |
Last ned prosjektfil | USB2.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 transienter | Minimum 50 sek |
Intern sikring | 2A selvgjenopprettende sikring |
Strømforbruk | 3.0 W |
Omgivelsesforhold | |
Maks. tillatt omgivelsestemperaturOperationStorage | -20℃~ +70℃-30℃~ +80℃ |
Relativ fuktighetOperationStorage | 55℃,85%60℃,90% |
SjokklastingOperationStorage | 15 g/11 msek25 g/6 msek |
vibrasjonOperationStorage | 0.035 mm (10 – 58 Hz)/ 1 g (58 – 500 Hz)3.5 mm (5 – 8,5 Hz)/ 1 g (8.5 – 500 Hz) |
Barometrisk trykkOperationStorage | 706 til 1030 hPa581 til 1030 hPa |
Støyimmunitet | |
Statisk utladning (kontaktutladning/luftutladning) | EN 61000-4-2 6 kV/8 kV |
RF-bestråling | EN 61000-4-310 V/m, 80 % AM1 kHz |
Pulsmodulasjon | ENV 50204900 MHz ±5 MHz10 V/meff., 50 % ED, 200 Hz |
RF-ledning | EN 61000-4-6150 kHz – 80 MHz10 V, 80 % AM, 1 kHz |
Burst interferens Forsyningslinjer ProsessdatalinjerSignallinjer | EN 61000-4-42kV2kV1kV |
Støtte enhet | |
UART-port | Støtter RS232 / RS422 / RS485 / TTL |
Network Port | Støtte Ethernet-port / Wi-Fi / Bluetooth |
Flashminne | StøtteStandard 256MB, Utvid 1GB eller 2GB |
Buzzer | Støtte |
RTC | Støtte |
USB-port | SupportOnline nedlasting med USB-kabel |
U Lagringsdiskgrensesnitt | Support.Offline Last ned eller kopier brukerdata |
Touch Screen | 4 ledningsmotstand / kapasitiv |
Vector Font | Standard TTF-format |
Bilde | Støtte PNG/JPG/BMP/SVG/GIF-format |
Audio Interface | Stø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 |
Kommandosett | Unified Simplified Command Sets |
Minne | |
Flashminne | Standard 256 MB, utvidelse 1 GB eller 2 GB |
Minnemengde for bilde | Foreslå "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