总结
井字棋是一种在 3 x 3 网格上玩的游戏,类似于五子棋。 因棋盘一般不画边框,网格线排列成井字棋而得名。 游戏所需的工具只有纸和笔。 然后,代表 O 和 X 的两名玩家轮流在网格上留下标记。 任意三个标记形成一条直线,即为获胜者。
本文是使用单片机STM32和STONE液晶显示器开发一个简单的井字游戏。
实验所需材料
系统原理
指定屏幕第一次敲击必须是O,屏幕第二次敲击是X,一直在做这个循环。 设置8个数组存储每个格子的每行、每列、对角线上的O和X的个数,只要有三个相同的标记就是胜利,那么就会有一个闪烁的红框证明胜利行、列或对角线,然后点击重置重新开始游戏。
以下是流程图:
STM32和STONE液晶显示系统硬件设计
(A) STONE 液晶显示器
- “井字游戏”硬件设计
使用北京斯通科技有限公司的斯通液晶显示器,型号为STWI070WT-01,集成TFT显示屏和触摸控制器。
- STVC070WT-01 产品特点
物理参数 | |
尺寸 | 7英寸 |
分辨率 | 800×RGB×480 |
像素间距 | 0.0642(宽)×0.1790(高)mm |
颜色 | 262,144 色(18 位) |
观赏区 | 154.08(宽)×85.92(高)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°(左/右/上/深) |
TFT面板 | 一流的行业小组 |
触摸屏 | 4线电阻触摸/电容触摸/无触摸屏 |
屏幕模式: | 数字输入型 |
处理器 | |
中央处理器 | 皮质A8 |
刷新率 | 1G赫兹 |
最大帧率 | FPS 60 |
接口 | |
串行接口 | 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.0W 瓦 |
环境条件 | |
最大限度。 允许环境温度操作存储 | -20℃~+70℃-30℃~+80℃ |
相对湿度操作存储 | 55℃,85%60℃,90% |
冲击载荷操作存储 | 15 克/11 毫秒25 克/6 毫秒 |
振动操作存储 | 0.035 毫米(10 – 58 赫兹)/ 1 克(58 – 500 赫兹)3.5 毫米(5 – 8,5 赫兹)/ 1 克(8.5 – 500 赫兹) |
气压操作存储 | 706 至 1030 hPa581 至 1030 hPa |
噪音抗扰度 | |
静电放电(接触放电/空气放电) | EN 61000-4-2 6 千伏/8 千伏 |
射频辐射 | EN 61000-4-310 V/m,80% AM1 kHz |
脉冲调制 | ENV 50204900 MHz ±5 MHz10 V/meff.,50% ED,200 Hz |
射频传导 | EN 61000-4-6150 kHz – 80 MHz10 V,80% AM,1 kHz |
突发干扰电源线过程数据线信号线 | EN 61000-4-42kV2kV1kV |
支持设备 | |
UART端口 | 支持RS232/RS422/RS485/TTL |
网络端口 | 支持以太网端口/Wi-Fi/蓝牙 |
闪存 | 支持标准 256MB,扩展 1GB 或 2GB |
蜂鸣器 | 支持 |
RTC | 支持 |
USB端口 | 通过 USB 数据线支持在线下载 |
U盘接口 | 支持.离线下载或复制用户数据 |
触摸屏 | 4 线电阻/电容 |
矢量字体 | 标准 TTF 格式 |
图片 | 支持PNG/JPG/BMP/SVG/GIF格式 |
音频接口 | 支持WAV格式单个音频文件长度不限,理论上最多4096个音频文件,喇叭功率8欧2瓦或4欧3瓦 |
命令集 | 统一的简化命令集 |
内存 | |
闪存 | 标准 256MB,扩展 1GB 或 2GB |
图像的内存量 | 根据图片的能力,建议“PNG、BMP、JPG、SVG、GIF”格式。 |
(二)STM32板
采用STM32板,STM32的芯片为CKS32F303。
STM32 系列的 ARM Cortex-M0、M0+、M3、M4 和 M7 内核专为需要高性能、低成本和低功耗的嵌入式应用而设计。
- 2.0V-3.6V电源
- 5V 兼容 I/O 引脚
- 优秀的安全时钟模式
- 具有唤醒功能的低功耗模式
- 内部RC振荡器
- 嵌入式复位电路
- 工作温度范围。
- -40°C 至 +85°C 或 105°C
系统软件设计
STM32和STONE液晶显示器的发展历程
1: 创建项目并将所需的图片加载到项目中。
2: 使用 Stone-designer 软件创建动态关联关系; 主要控件有:“按钮”、“图像”;
3: 软件仿真和编译生成可执行文件。
4: LCD 显示器通过 USB 连接到 PC 并将可执行文件复制到屏幕上。
首先创建一个新项目,如下所示。
其次,将所有图片导入资源
然后,为每个网格设置按钮控件并使按钮不可见。
不要忘记设置重置按钮!
完成后的效果如下图:
之后,以相同的方式为每个网格添加图像控件,并将它们全部设置为白色图像。
最后添加gif控件并将其设置为不可见。
部分完成效果如下图:
电路连接图
代码共享
/* 包括————————————————————————*/
#include“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]; //自定义三级接收缓冲区
#定义按钮1 0x81
#定义按钮2 0x82
#定义按钮3 0x83
#定义按钮4 0x84
#定义按钮5 0x85
#定义按钮6 0x86
#定义按钮7 0x87
#定义按钮8 0x88
#定义按钮9 0x89
#定义按钮0 0x8A
#define 清除 0x8E
无符号整数 r_flag1 = 0;
无符号整数全[4][2]={0};
无符号整数 cha [4][2]={0};
无符号整数 quan_hang1 = 0;
无符号整数 quan_hang2 = 0;
无符号整数 quan_hang3 = 0;
无符号整数 quan_lie1 = 0;
无符号整数 quan_lie2 = 0;
无符号整数 quan_lie3 = 0;
unsigned int quan_zuxia = 0;
无符号整型 quan_youxia = 0;
无符号整数 cha_hang1 = 0;
无符号整数 cha_hang2 = 0;
无符号整数 cha_hang3 = 0;
无符号整数 cha_lie1 = 0;
无符号整数 cha_lie2 = 0;
无符号整数 cha_lie3 = 0;
无符号整数 cha_zuoxia = 0;
unsigned int cha_youxia = 0; //无符号整数 r_flag10 = 0;
无效系统时钟配置(无效);
无效错误处理程序(无效);
静态无效MX_GPIO_Init(无效);
int main(void)
{
uint8_t color_buf = 0;
//函数选择
/* 重置所有外设,初始化 Flash 接口和 Systick。 */
HAL_Init();
/* 配置系统时钟 */
系统时钟_配置();
/* 初始化所有配置的外设 */
MX_GPIO_Init();
TX_Mode = HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_4);
如果(TX_Mode)
MX_USART1_UART_Init();
//232 初始化
其他
MX_USART1_UART_Init2();
//TTl初始化
而(1)
{
如果(TX_Mode != HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_4))
HAL_NVIC_SystemReset();
//跳线反转,重启和重新初始化
如果(MNG_USART1.RX_OVER_FLG ==TRUE)
//
串行数据接收标志位
{
RX3_BUF[0]=MNG_USART1.RX_BUF[7];
//方法二:获取定长控件名
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)
//选择控件
{
color_buf = 按钮1;
}
if((strcmp(“button2”,(const char *)RX3_BUF))==0)
{
color_buf = 按钮2;
}
if((strcmp(“button3”,(const char *)RX3_BUF))==0)
{
color_buf = 按钮3;
}
if((strcmp(“button4”,(const char *)RX3_BUF))==0)
{
color_buf = 按钮4;
}
if((strcmp(“button5”,(const char *)RX3_BUF))==0)
{
color_buf = 按钮5;
}
if((strcmp(“button6”,(const char *)RX3_BUF))==0)
{
color_buf = 按钮6;
}
if((strcmp(“button7”,(const char *)RX3_BUF))==0)
{
color_buf = 按钮7;
}
if((strcmp(“button8”,(const char *)RX3_BUF))==0)
{
color_buf = 按钮8;
}
if((strcmp(“button9”,(const char *)RX3_BUF))==0)
{
color_buf = 按钮9;
}
if((strcmp(“button0”,(const char *)RX3_BUF))==0)
{
color_buf = 按钮0;
}
开关 (color_buf)
{
案例按钮1:
//如果(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\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image2\”,\”image\”:\”circle\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1);
r_flag1 ^= 1;
全挂1++;
全烈1++;
全有下++;
//内存设置(RX3_BUF,0,7);
//memset(MNG_USART1.RX_BUF,0,USART1_RX_LEN);
color_buf = 清除;
}
否则 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\”:\”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_游侠++;
//内存设置(RX3_BUF,0,7);
color_buf = 清除;
}
//r_flag1 = 1;
打破;
案例按钮2:
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\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image3\”,\”image\”:\”circle\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1);
r_flag1 = 1;
全挂1++;
全烈2++;
//内存设置(RX3_BUF,0,7);
color_buf = 清除;
}
否则 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\”:\”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++;
//内存设置(RX3_BUF,0,7);
color_buf = 清除;
}
打破;
案例按钮3:
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\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image4\”,\”image\”:\”circle\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1);
r_flag1 = 1;
全挂1++;
全烈3++;
quan_zuxia++;
//内存设置(RX3_BUF,0,7);
color_buf = 清除;
}
否则 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\”:\”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_zuxia++;
//内存设置(RX3_BUF,0,7);
color_buf = 清除;
}
打破;
案例按钮4:
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\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image5\”,\”image\”:\”circle\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1);
r_flag1 = 1;
全挂2++;
全烈1++;
//内存设置(RX3_BUF,0,7);
//r_flag10=1;
color_buf = 清除;
}
否则 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\”:\”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++;
//内存设置(RX3_BUF,0,7);
color_buf = 清除;
}
打破;
案例按钮5:
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\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image6\”,\”image\”:\”circle\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1);
r_flag1 = 1;
全挂2++;
全烈2++;
quan_zuxia++;
全有下++;
//内存设置(RX3_BUF,0,7);
color_buf = 清除;
}
否则 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\”:\”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_zuxia++;
cha_游侠++;
//内存设置(RX3_BUF,0,7);
color_buf = 清除;
}
打破;
案例按钮6:
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\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image7\”,\”image\”:\”circle\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1);
r_flag1 = 1;
全挂2++;
全烈3++;
//内存设置(RX3_BUF,0,7);
color_buf = 清除;
}
否则 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\”:\”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++;
//内存设置(RX3_BUF,0,7);
color_buf = 清除;
}
打破;
案例按钮7:
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\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image8\”,\”image\”:\”circle\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1);
r_flag1 = 1;
全挂3++;
全烈1++;
quan_zuxia++;
//内存设置(RX3_BUF,0,7);
color_buf = 清除;
}
否则 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\”:\”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_zuxia++;
//内存设置(RX3_BUF,0,7);
color_buf = 清除;
}
打破;
案例按钮8:
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\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image9\”,\”image\”:\”circle\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1);
r_flag1 = 1;
全挂3++;
全烈2++;
//内存设置(RX3_BUF,0,7);
color_buf = 清除;
}
否则 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\”:\”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++;
//内存设置(RX3_BUF,0,7);
color_buf = 清除;
}
打破;
案例按钮9:
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\”:\”set_image\”,\”type\”:\”image\”,\”widget\”:\”image10\”,\”image\”:\”circle\ ”}>ET”);
MNG_USART1.TX_Byte_Num = strlen((const char *)MNG_USART1.TX_BUF);
USART_TX_Data(MNG_USART1);
r_flag1 = 1;
全挂3++;
全烈3++;
全有下++;
//内存设置(RX3_BUF,0,7);
color_buf = 清除;
}
否则 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\”:\”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_游侠++;
//内存设置(RX3_BUF,0,7);
color_buf = 清除;
}
打破;
案例按钮0:
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((char *)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((char *)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((char *)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((char *)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((char *)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((char *)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((char *)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((char *)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((char *)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((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);
//内存设置(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((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;
}
否则 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;
}
否则 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;
}
否则 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;
}
否则 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;
}
否则 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;
}
else if((全坐下==3)||(cha_坐下==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((权游侠==3)||(茶游侠==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 = 假;
}
}
}
/** 系统时钟配置
*/
无效系统时钟配置(无效)
{
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;
如果 (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;
如果 (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 */
/* 用户可以添加自己的实现来报告 HAL 错误返回状态 */
而(1)
{
}
/* 用户代码结束 Error_Handler */
}
#ifdef USE_FULL_ASSERT
/ **
* @brief 报告源文件名和源行号
* 发生 assert_param 错误的地方。
* @param file: 指向源文件名的指针
* @param line: assert_param 错误行源码号
* @retval 无
*/
void assert_failed(uint8_t* 文件,uint32_t 行)
{
/* 用户代码开始 6 */
/* 用户可以添加自己的实现来报告文件名和行号,
例如:printf(“错误的参数值:文件 %s 行 %d\r\n”,文件,行)*/
/* 用户代码结束 6 */
}
#ENDIF
/ **
* @}
*/
/ **
* @}
*/
/************************ (C) 版权 STMicroelectronics *****文件结尾****/
最终结果显示
资料来源:柏拉图数据智能