요약
Tic-tac-toe는 고방과 유사한 3 x 3 그리드에서 진행되는 게임입니다. 보드는 일반적으로 테두리를 그리지 않고 격자선이 틱택토로 배열되어 있기 때문에 이름이 붙여졌습니다. 게임에 필요한 도구는 종이와 펜 뿐입니다. 그런 다음 O와 X를 나타내는 두 명의 플레이어가 번갈아 가며 그리드에 표시를 남깁니다. 세 개의 마크가 직선을 형성하여 승자가 됩니다.
이 기사는 마이크로 컨트롤러 STM32와 STONE LCD 디스플레이를 사용하여 간단한 틱택토 게임을 개발하는 것입니다.
실험에 필요한 재료
시스템 원리
화면의 첫 번째 탭을 O로 지정하고 화면의 두 번째 탭을 X로 지정하고 이 주기를 수행했습니다. 8개의 어레이를 설정하여 각 그리드의 각 행, 열 및 대각선에 O 및 X의 수를 저장합니다. 동일한 마크가 XNUMX개 있는 한 승리하면 빨간색 상자가 깜박이는 상자가 표시되어 승리를 증명합니다. 행, 열 또는 대각선을 누른 다음 재설정을 눌러 게임을 다시 시작합니다.
다음은 순서도입니다.
STM32 및 STONE LCD 디스플레이 시스템 하드웨어 설계
(A) STONE LCD 디스플레이
- "틱택토 게임" 하드웨어 디자인
Beijing STONE Technology co., ltd의 STONE LCD 디스플레이를 사용합니다. 모델은 STWI070WT-01이며 통합 TFT 디스플레이와 터치 컨트롤러가 있습니다.
- STVC070WT-01 제품 특징
물리적 매개 변수 | |
크기 | 7 인치 |
분해능 | 800 × RGB × 480 |
픽셀 간격 | 0.0642 (W) × 0.1790 (H) mm |
색상 | 262,144색(18비트) |
보기 영역 | 154.08 (W) × 85.92 (H) mm |
디스플레이 치수 | 186.4mmx105.5mm |
전반적인 차원 | 186.4mmx105.5mmx17.4mm(표준형)186.4mmx105.5mmx23.8mm(이더넷 포트 포함) |
순 무게 | 300g |
디스플레이 | |
백라이트 유형 | LED |
표면 타입 | 300cd/m2(밝기 100단계 조절 가능) |
대조 | 500:1 |
백라이트 수명 | 300,000 시간 |
시야각 | 70°/70°/50°/70°(L/R/U/D) |
TFT 패널 | A급 산업 패널 |
터치 스크린 | 4 와이어 저항 터치 / 정전 용량 터치 / 터치 스크린 없음 |
스크린 모드: | 디지털 |
프로세서 | |
CPU | 피질 A8 |
재생률 | 1G Hz |
최대 프레임 속도 | 60의 FPS |
인터페이스 | |
직렬 인터페이스 | RS232 / RS422 / RS485 / TTL 레벨 |
이더넷 인터페이스 | 10M/100M(옵션) |
무선 인터페이스 | Wi-Fi/블루투스(옵션) |
프로젝트 파일 다운로드 | USB2.0 포트 또는 U 스토리지 디스크 |
전원 공급 장치 | |
정격 전압 | +12V DC 또는 +5V DC |
허용 전압 범위 | +7V DC… +28V DC 또는 +5V DC |
최대 허용 과도 현상 | + 28V |
두 과도 상태 사이의 시간 | 최소 50초 |
내부 퓨즈 | 2A 자가 복구 퓨즈 |
전력 소비 | 3.0 승 |
주변 조건 | |
최대 허용 주변 온도오퍼레이션스토리지 | -20℃~ +70℃-30℃~ +80℃ |
상대 습도오퍼레이션스토리지 | 55℃,85%60℃,90% |
충격 하중오퍼레이션스토리지 | 15g/11msec25g/6msec |
진동오퍼레이션스토리지 | 0.035mm(10 – 58Hz)/ 1g(58 – 500Hz)3.5mm(5 – 8,5Hz)/ 1g(8.5 – 500Hz) |
기압오퍼레이션스토리지 | 706~1030hPa581~1030hPa |
소음 내성 | |
정전기 방전(접촉 방전/공기 방전) | EN 61000-4-2 6kV/8kV |
RF 조사 | EN 61000-4-310V/m, 80% AM1kHz |
펄스 변조 | ENV 50204900MHz ±5MHz10V/meff., 50% ED, 200Hz |
RF 전도 | EN 61000-4-6150kHz – 80MHz10V, 80% AM, 1kHz |
버스트 간섭공급 라인프로세스 데이터 라인 신호 라인 | EN 61000-4-42kV2kV1kV |
지원 장치 | |
UART 포트 | 지원RS232 / RS422 / RS485 / TTL |
네트워크 포트 | 지원이더넷 포트 / Wi-Fi / 블루투스 |
플래시 메모리 | 지원표준 256MB, 1GB 또는 2GB 확장 |
부저 | 고객 지원 |
RTC | 고객 지원 |
USB 포트 | USB 케이블로 지원온라인 다운로드 |
U 스토리지 디스크 인터페이스 | Support.Offline 사용자 데이터 다운로드 또는 복사 |
터치 스크린 | 4선 저항/용량 |
벡터 글꼴 | 표준 TTF 형식 |
영상 | PNG/JPG/BMP/SVG/GIF 형식 지원 |
오디오 인터페이스 | WAV 형식 지원단일 오디오 파일의 길이는 이론적으로 최대 4096개의 오디오 파일로 제한되지 않으며 스피커 전원은 8옴 2와트 또는 4옴 3와트입니다. |
명령 세트 | 통합 간소화된 명령 세트 |
메모리 | |
플래시 메모리 | 표준 256MB, 확장 1GB 또는 2GB |
이미지의 메모리 양 | 이미지의 능력에 따라 "PNG, BMP, JPG, SVG, GIF" 형식을 제안합니다. |
(B) STM32 보드
STM32 보드를 사용하는 STM32의 칩은 CKS32F303입니다.
ARM Cortex-M32, M0+, M0, M3 및 M4 코어의 STM7 제품군은 고성능, 저비용 및 저전력 소비가 필요한 임베디드 애플리케이션을 위해 설계되었습니다.
- 2.0V-3.6V 전원 공급 장치
- 5V 호환 I/O 핀
- 우수한 안전 시계 모드
- 웨이크업 기능이 있는 저전력 모드
- 내부 RC 발진기
- 임베디드 리셋 회로
- 작동 온도 범위.
- -40°C ~ +85°C 또는 105°C
시스템 소프트웨어 설계
STM32 및 STONE LCD 디스플레이의 개발 과정
1: 프로젝트를 만들고 필요한 그림을 프로젝트에 로드합니다.
2: Stone-designer 소프트웨어를 사용하여 동적으로 연결된 관계를 생성합니다. 주요 컨트롤은 "버튼", "이미지"입니다.
3: 실행 파일을 생성하기 위한 소프트웨어 시뮬레이션 및 컴파일.
4: LCD 디스플레이는 USB를 통해 PC에 연결되고 실행 파일을 화면에 복사합니다.
먼저 아래와 같이 새 프로젝트를 만듭니다.
둘째, 모든 이미지를 리소스로 가져옵니다.
그런 다음 버튼 컨트롤을 각 그리드로 설정하고 버튼을 보이지 않게 만듭니다.
재설정 버튼을 설정하는 것을 잊지 마십시오!
완성된 효과는 아래와 같습니다.
그런 다음 동일한 방식으로 각 그리드에 이미지 컨트롤을 추가하고 모두 흰색 이미지로 설정합니다.
마지막으로 gif 컨트롤을 추가하고 보이지 않게 설정합니다.
완성된 효과의 부분은 다음과 같습니다.
회로 연결 다이어그램
코드 공유
/* 포함 —————————————————————*/
#포함 "stm32f0xx_hal.h"
#include "Uart.h"
#include "문자열.h"
#include "ws2812.h"
#include “IWDG.h”
RGB_COLOR 사용자_RGB_COLOR;
서명되지 않은 문자 TX_Mode = 1; //전송 유형 플래그 비트 1:232 0:TTL
서명되지 않은 문자 BLINK_2=0;
서명되지 않은 문자 RX3_BUF[32]; //맞춤형 XNUMX레벨 수신 버퍼
# 정의 BUTTON1 0x81
# 정의 BUTTON2 0x82
# 정의 BUTTON3 0x83
# 정의 BUTTON4 0x84
# 정의 BUTTON5 0x85
# 정의 BUTTON6 0x86
# 정의 BUTTON7 0x87
# 정의 BUTTON8 0x88
# 정의 BUTTON9 0x89
#define BUTTON0 0x8A
#define 지우기 0x8E
부호 없는 정수 r_flag1 = 0;
부호 없는 정수 quan[4][2]={0};
unsigned int cha [4][2]={0};
부호 없는 정수 quan_hang1 = 0;
부호 없는 정수 quan_hang2 = 0;
부호 없는 정수 quan_hang3 = 0;
부호 없는 정수 quan_lie1 = 0;
부호 없는 정수 quan_lie2 = 0;
부호 없는 정수 quan_lie3 = 0;
부호 없는 정수 quan_zuoxia = 0;
부호 없는 정수 quan_youxia = 0;
부호 없는 int cha_hang1 = 0;
부호 없는 int cha_hang2 = 0;
부호 없는 int cha_hang3 = 0;
부호 없는 int cha_lie1 = 0;
부호 없는 int cha_lie2 = 0;
부호 없는 int cha_lie3 = 0;
부호 없는 int cha_zuoxia = 0;
unsigned int cha_youxia = 0; //부호 없는 int r_flag10 = 0;
무효 SystemClock_Config(무효);
무효 Error_Handler(무효);
정적 무효 MX_GPIO_Init(무효);
int main (void)
{
uint8_t color_buf = 0;
//함수 선택
/* 모든 주변 장치를 재설정하고 플래시 인터페이스와 시스템 스틱을 초기화합니다. */
HAL_초기화();
/* 시스템 클럭 설정 */
SystemClock_Config();
/* 구성된 모든 주변기기 초기화 */
MX_GPIO_초기화();
TX_Mode = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_4);
if(TX_모드)
MX_USART1_UART_Init();
//232 초기화
그렇지 않으면
MX_USART1_UART_Init2();
//TTl 초기화
동안(1)
{
if(TX_Mode!= HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_4))
HAL_NVIC_SystemReset();
//점퍼 반전, 재부팅 및 재초기화
if(MNG_USART1.RX_OVER_FLG ==참)
//
직렬 데이터 수신 플래그 비트
{
RX3_BUF[0]=MNG_USART1.RX_BUF[7];
//방법 2: 고정 길이 컨트롤 이름 가져오기
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("버튼1",(const char *)RX3_BUF))==0)
// 컨트롤 선택
{
color_buf = 버튼1;
}
if((strcmp("버튼2",(const char *)RX3_BUF))==0)
{
color_buf = 버튼2;
}
if((strcmp("버튼3",(const char *)RX3_BUF))==0)
{
color_buf = 버튼3;
}
if((strcmp("버튼4",(const char *)RX3_BUF))==0)
{
color_buf = 버튼4;
}
if((strcmp("버튼5",(const char *)RX3_BUF))==0)
{
color_buf = 버튼5;
}
if((strcmp("버튼6",(const char *)RX3_BUF))==0)
{
color_buf = 버튼6;
}
if((strcmp("버튼7",(const char *)RX3_BUF))==0)
{
color_buf = 버튼7;
}
if((strcmp("버튼8",(const char *)RX3_BUF))==0)
{
color_buf = 버튼8;
}
if((strcmp("버튼9",(const char *)RX3_BUF))==0)
{
color_buf = 버튼9;
}
if((strcmp("버튼0",(const char *)RX3_BUF))==0)
{
color_buf = 버튼0;
}
스위치(color_buf)
{
케이스 BUTTON1:
//if(r_플래그1 == 0)
if((r_flag1 == 0)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
r_플래그1 ^= 1;
sprintf((문자 *)MNG_USART1.TX_BUF,
"ST<{\"cmd_code\":\"set_image\",\"유형\":\"이미지\",\"위젯\":\"이미지2\",\"이미지\":\"원\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_데이터(MNG_USART1);
r_플래그1 ^= 1;
quan_hang1++;
quan_lie1++;
quan_youxia++;
//멤셋(RX3_BUF,0,7);
//멤셋(MNG_USART1.RX_BUF,0,USART1_RX_LEN);
color_buf = 지우기;
}
그렇지 않으면((r_flag1 == 1)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((문자 *)MNG_USART1.TX_BUF,
"ST<{\"cmd_code\":\"set_image\",\"유형\":\"이미지\",\"위젯\":\"이미지2\",\"이미지\":\"x\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_데이터(MNG_USART1);
r_플래그1 = 0;
차_항1++;
cha_lie1++;
cha_youxia++;
//멤셋(RX3_BUF,0,7);
color_buf = 지우기;
}
//r_플래그1 = 1;
하다;
케이스 BUTTON2:
if((r_flag1 == 0)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((문자 *)MNG_USART1.TX_BUF,
"ST<{\"cmd_code\":\"set_image\",\"유형\":\"이미지\",\"위젯\":\"이미지3\",\"이미지\":\"원\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_데이터(MNG_USART1);
r_플래그1 = 1;
quan_hang1++;
quan_lie2++;
//멤셋(RX3_BUF,0,7);
color_buf = 지우기;
}
그렇지 않으면((r_flag1 == 1)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((문자 *)MNG_USART1.TX_BUF,
"ST<{\"cmd_code\":\"set_image\",\"유형\":\"이미지\",\"위젯\":\"이미지3\",\"이미지\":\"x\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_데이터(MNG_USART1);
r_플래그1 = 0;
차_항1++;
cha_lie2++;
//멤셋(RX3_BUF,0,7);
color_buf = 지우기;
}
하다;
케이스 BUTTON3:
if((r_flag1 == 0)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((문자 *)MNG_USART1.TX_BUF,
"ST<{\"cmd_code\":\"set_image\",\"유형\":\"이미지\",\"위젯\":\"이미지4\",\"이미지\":\"원\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_데이터(MNG_USART1);
r_플래그1 = 1;
quan_hang1++;
quan_lie3++;
quan_zuoxia++;
//멤셋(RX3_BUF,0,7);
color_buf = 지우기;
}
그렇지 않으면((r_flag1 == 1)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((문자 *)MNG_USART1.TX_BUF,
"ST<{\"cmd_code\":\"set_image\",\"유형\":\"이미지\",\"위젯\":\"이미지4\",\"이미지\":\"x\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_데이터(MNG_USART1);
r_플래그1 = 0;
차_항1++;
cha_lie3++;
cha_zuoxia++;
//멤셋(RX3_BUF,0,7);
color_buf = 지우기;
}
하다;
케이스 BUTTON4:
if((r_flag1 == 0)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((문자 *)MNG_USART1.TX_BUF,
"ST<{\"cmd_code\":\"set_image\",\"유형\":\"이미지\",\"위젯\":\"이미지5\",\"이미지\":\"원\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_데이터(MNG_USART1);
r_플래그1 = 1;
quan_hang2++;
quan_lie1++;
//멤셋(RX3_BUF,0,7);
//r_flag10=1;
color_buf = 지우기;
}
그렇지 않으면((r_flag1 == 1)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((문자 *)MNG_USART1.TX_BUF,
"ST<{\"cmd_code\":\"set_image\",\"유형\":\"이미지\",\"위젯\":\"이미지5\",\"이미지\":\"x\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_데이터(MNG_USART1);
r_플래그1 = 0;
차_항2++;
cha_lie1++;
//멤셋(RX3_BUF,0,7);
color_buf = 지우기;
}
하다;
케이스 BUTTON5:
if((r_flag1 == 0)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((문자 *)MNG_USART1.TX_BUF,
"ST<{\"cmd_code\":\"set_image\",\"유형\":\"이미지\",\"위젯\":\"이미지6\",\"이미지\":\"원\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_데이터(MNG_USART1);
r_플래그1 = 1;
quan_hang2++;
quan_lie2++;
quan_zuoxia++;
quan_youxia++;
//멤셋(RX3_BUF,0,7);
color_buf = 지우기;
}
그렇지 않으면((r_flag1 == 1)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((문자 *)MNG_USART1.TX_BUF,
"ST<{\"cmd_code\":\"set_image\",\"유형\":\"이미지\",\"위젯\":\"이미지6\",\"이미지\":\"x\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_데이터(MNG_USART1);
r_플래그1 = 0;
차_항2++;
cha_lie2++;
cha_zuoxia++;
cha_youxia++;
//멤셋(RX3_BUF,0,7);
color_buf = 지우기;
}
하다;
케이스 BUTTON6:
if((r_flag1 == 0)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((문자 *)MNG_USART1.TX_BUF,
"ST<{\"cmd_code\":\"set_image\",\"유형\":\"이미지\",\"위젯\":\"이미지7\",\"이미지\":\"원\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_데이터(MNG_USART1);
r_플래그1 = 1;
quan_hang2++;
quan_lie3++;
//멤셋(RX3_BUF,0,7);
color_buf = 지우기;
}
그렇지 않으면((r_flag1 == 1)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((문자 *)MNG_USART1.TX_BUF,
"ST<{\"cmd_code\":\"set_image\",\"유형\":\"이미지\",\"위젯\":\"이미지7\",\"이미지\":\"x\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_데이터(MNG_USART1);
r_플래그1 = 0;
차_항2++;
cha_lie3++;
//멤셋(RX3_BUF,0,7);
color_buf = 지우기;
}
하다;
케이스 BUTTON7:
if((r_flag1 == 0)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((문자 *)MNG_USART1.TX_BUF,
"ST<{\"cmd_code\":\"set_image\",\"유형\":\"이미지\",\"위젯\":\"이미지8\",\"이미지\":\"원\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_데이터(MNG_USART1);
r_플래그1 = 1;
quan_hang3++;
quan_lie1++;
quan_zuoxia++;
//멤셋(RX3_BUF,0,7);
color_buf = 지우기;
}
그렇지 않으면((r_flag1 == 1)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((문자 *)MNG_USART1.TX_BUF,
"ST<{\"cmd_code\":\"set_image\",\"유형\":\"이미지\",\"위젯\":\"이미지8\",\"이미지\":\"x\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_데이터(MNG_USART1);
r_플래그1 = 0;
차_항3++;
cha_lie1++;
cha_zuoxia++;
//멤셋(RX3_BUF,0,7);
color_buf = 지우기;
}
하다;
케이스 BUTTON8:
if((r_flag1 == 0)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((문자 *)MNG_USART1.TX_BUF,
"ST<{\"cmd_code\":\"set_image\",\"유형\":\"이미지\",\"위젯\":\"이미지9\",\"이미지\":\"원\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_데이터(MNG_USART1);
r_플래그1 = 1;
quan_hang3++;
quan_lie2++;
//멤셋(RX3_BUF,0,7);
color_buf = 지우기;
}
그렇지 않으면((r_flag1 == 1)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((문자 *)MNG_USART1.TX_BUF,
"ST<{\"cmd_code\":\"set_image\",\"유형\":\"이미지\",\"위젯\":\"이미지9\",\"이미지\":\"x\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_데이터(MNG_USART1);
r_플래그1 = 0;
차_항3++;
cha_lie2++;
//멤셋(RX3_BUF,0,7);
color_buf = 지우기;
}
하다;
케이스 BUTTON9:
if((r_flag1 == 0)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((문자 *)MNG_USART1.TX_BUF,
"ST<{\"cmd_code\":\"set_image\",\"유형\":\"이미지\",\"위젯\":\"이미지10\",\"이미지\":\"원\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_데이터(MNG_USART1);
r_플래그1 = 1;
quan_hang3++;
quan_lie3++;
quan_youxia++;
//멤셋(RX3_BUF,0,7);
color_buf = 지우기;
}
그렇지 않으면((r_flag1 == 1)&&(MNG_USART1.RX_BUF[14] == 0x02))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((문자 *)MNG_USART1.TX_BUF,
"ST<{\"cmd_code\":\"set_image\",\"유형\":\"이미지\",\"위젯\":\"이미지10\",\"이미지\":\"x\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_데이터(MNG_USART1);
r_플래그1 = 0;
차_항3++;
cha_lie3++;
cha_youxia++;
//멤셋(RX3_BUF,0,7);
color_buf = 지우기;
}
하다;
케이스 BUTTON0:
r_플래그1 = 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((문자 *)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_데이터(MNG_USART1);
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((문자 *)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_데이터(MNG_USART1);
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((문자 *)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_데이터(MNG_USART1);
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((문자 *)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_데이터(MNG_USART1);
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((문자 *)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_데이터(MNG_USART1);
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((문자 *)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_데이터(MNG_USART1);
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((문자 *)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_데이터(MNG_USART1);
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((문자 *)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_데이터(MNG_USART1);
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((문자 *)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_데이터(MNG_USART1);
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((문자 *)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_데이터(MNG_USART1);
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((문자 *)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_데이터(MNG_USART1);
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((문자 *)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_데이터(MNG_USART1);
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((문자 *)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_데이터(MNG_USART1);
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((문자 *)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_데이터(MNG_USART1);
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((문자 *)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_데이터(MNG_USART1);
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((문자 *)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_데이터(MNG_USART1);
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((문자 *)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_데이터(MNG_USART1);
//멤셋(RX3_BUF,0,7);
memset(MNG_USART1.RX_BUF,0,USART1_RX_LEN);
하다;
기본값 :
MNG_USART1.RX_OVER_FLG = 거짓;
하다;
}
////////////////////////////////////////////////// //////////////////
if((quan_hang1==3)||(cha_hang1==3))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((문자 *)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_데이터(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;
}
그렇지 않으면 if((quan_hang2==3)||(cha_hang2==3))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((문자 *)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_데이터(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;
}
그렇지 않으면 if((quan_hang3==3)||(cha_hang3==3))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((문자 *)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_데이터(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;
}
그렇지 않으면 if((quan_lie1==3)||(cha_lie1==3))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((문자 *)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_데이터(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;
}
그렇지 않으면 if((quan_lie2==3)||(cha_lie2==3))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((문자 *)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_데이터(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;
}
그렇지 않으면 if((quan_lie3==3)||(cha_lie3==3))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((문자 *)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_데이터(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;
}
그렇지 않으면 if((quan_zuoxia==3)||(cha_zuoxia==3))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((문자 *)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_데이터(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;
}
그렇지 않으면((quan_youxia==3)||(cha_youxia==3))
{
memset(MNG_USART1.TX_BUF,0,USART1_TX_LEN);
sprintf((문자 *)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_데이터(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 = 거짓;
}
}
}
/** 시스템 시계 구성
*/
무효 SystemClock_Config(무효)
{
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.HSIC캘리브레이션 값 = 16;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLL소스 = 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)
{
오류_핸들러();
}
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)
{
오류_핸들러();
}
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1;
PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK1;
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
{
오류_핸들러();
}
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
/* SysTick_IRQn 인터럽트 설정 */
HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}
/** 핀아웃 구성
*/
정적 무효 MX_GPIO_Init(무효)
{
GPIO_InitTypeDef GPIO_InitStruct;
/* 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);
}
/* 사용자 코드 시작 4 */
/* 사용자 코드 끝 4 */
/ **
* @brief 에러 발생시 실행되는 함수입니다.
* @param 없음
* @retval 없음
*/
무효 Error_Handler(무효)
{
/* 사용자 코드 BEGIN Error_Handler */
/* 사용자는 HAL 오류 반환 상태를 보고하기 위해 자신의 구현을 추가할 수 있습니다. */
동안(1)
{
}
/* 사용자 코드 END Error_Handler */
}
#ifdef USE_FULL_ASSERT
/ **
* @brief 소스 파일의 이름과 소스 라인 번호를 보고합니다.
* assert_param 오류가 발생한 곳.
* @param 파일: 소스 파일 이름에 대한 포인터
* @param 라인: assert_param 오류 라인 소스 번호
* @retval 없음
*/
무효 assert_failed(uint8_t* 파일, uint32_t 행)
{
/* 사용자 코드 시작 6 */
/* 사용자는 파일 이름과 줄 번호를 보고하기 위해 자신의 구현을 추가할 수 있습니다.
ex: printf("잘못된 매개변수 값: file %s on line %d\r\n", file, line) */
/* 사용자 코드 끝 6 */
}
#endif
/ **
* @}
*/
/ **
* @}
*/
/************************ (C) COPYRIGHT STMicroelectronics *****파일 끝****/
최종 결과 표시
출처 : Plato Data Intelligence