目录
一、项目成品图片
二、项目功能简介
1.主要器件组成
2.功能详解介绍
三、项目原理图设计
四、项目PCB硬件设计
项目PCB图
五、项目程序设计
六、项目实验效果 编辑
七、项目包含内容
一、项目成品图片

哔哩哔哩视频链接:
https://www.bilibili.com/video/BV1hwVV6xEAC/?spm_id_from=333.1387.upload.video_card.click
资料分享看文章末尾
二、项目功能简介
1.主要器件组成
本设计由STM32F103C8T6单片机+LCD屏幕电路+蜂鸣器电路+按键电路+电源电路组成。
2.功能详解
1、设计内容:本课题旨在设计并实现一款基于单片机的推箱子游戏系统。该系统以单片机为核心控
制器,通过按键输入控制游戏角色移动,在屏幕上显示游戏地图与状态信息,并完成推
动箱子至目标点的核心逻辑。设计要求实现完整的游戏流程,包括系统初始化、多关卡
切换、实时状态显示、通关判定及声光提示等功能。
2、屏幕显示:系统上电后能自动进入游戏初始化界面,显示欢迎信息与关卡选择菜单
3、按键推动箱子:通过独立的上下左右方向按键,实现游戏角色在预设地图内的精准移动,并能根
据规则推动箱子。
4、多关卡设计:具备多关卡设计,至少预存3个以上不同难度的游戏地图数据,通关后可自动或
手动进入下一关卡。
5、游戏界面:游戏界面需实时显示当前关卡、玩家移动步数等关键信息。
6、胜利提醒:电路连接可靠,实物系统运行稳定,提供良好的交互体验。
三、项目原理图设计

四、项目PCB硬件设计


五、项目程序设计
#include "stm32f10x.h"
#include "delay.h"
#include "sys.h"
#include "lcd.h"
#include "sokoban.h"
#include "led.h"
#include "key.h"
#include "stack.h"
/****************破晓电子工作室*******************
*** 破晓单片机
*** 项目:STM32推箱子游戏系统
*** BILIBILI:破晓单片机
*** 小红书:破晓单片机
*** 授权IP:破晓单片机
*** 淘宝:破晓单片机
*** 淘宝:破晓电子
*** 版本:V01.01
*** MCU:STM32F103C8T6
******************破晓单片机***********************/
//显示界面
CaiDanJieGouTi KeyTab[SIZE_CAIDAN]=
{
{0 ,0 ,0 ,0 ,0 ,Main_Menu0},
{1 ,1 ,1 ,1 ,1 ,Main_Menu1},
{2 ,2 ,2 ,2 ,2 ,Main_Menu2},
{3 ,3 ,3 ,3 ,3 ,Main_Menu3},
{4 ,4 ,4 ,4 ,4 ,Main_Menu4},
{5 ,5 ,5 ,5 ,5 ,Main_Menu5},
{6 ,6 ,6 ,6 ,6 ,Main_Menu6},
{7 ,7 ,7 ,7 ,7 ,Main_Menu7},
{8 ,8 ,8 ,8 ,8 ,Main_Menu8},
} ;
//传感器变量声明
typedef struct
{
u8 value;
u8 levelfalg;
u8 xP, yP;
u8 length, height, DNum;
u8 offset_L, offset_H;
}SensorModulesValue;
typedef struct
{
uint16_t level;
uint16_t levelxz;
}SensorThresholdValue;
typedef struct
{
uint8_t pedometer;
}DriveFlag;
int main(void)
{
delay_init();
LCD_Init();
LED_Init();
BEEP_Off();
LCD_Fill(0,0,128,160,BLACK);
Key_init();
while(1)
{
if(mode==0)
{
value = KEY_Scan(0);
if(value == KEY_X_PRES)
{
if(levelxz<10)
levelxz++;
}
if(value == KEY_Y_PRES)
{
if(levelxz>0)
levelxz--;
}
if(value == KEY_J_PRES)
{
mode=1;levelfalg=1;
LCD_Fill(0,0,128,160,BLACK);
}
LCD_ShowString(0,0,"Welcome to play ",RED,BLACK,16,0);
LCD_ShowString(0,16,"Sokoban! ",RED,BLACK,16,0);
LCD_ShowChinese(0,32,"关卡选择",RED,BLACK,16,0);
LCD_ShowIntNum(72,32,levelxz,4,RED,BLACK,16);
}
else
{
GenerateMap();
while(!Prog()); //ÓÎÏ·½øÐÐÖÐ
if(mode==1)
{
//ʤÀûÏÔʾ£¨3s£©
level++;
LCD_Fill(0,0,128,160,BLACK);
BEEP_On();
LCD_ShowChinese(38,72,"太棒啦!",RED,BLACK,16,0);
delay_ms(3000);
BEEP_Off();
LCD_Fill(0,0,128,160,BLACK);
}
else
{
LCD_Fill(0,0,128,160,BLACK);
delay_ms(1000);
}
}
}
}
六、项目实验效果
七、项目包含内容