081、STM32项目分享开源:推箱子游戏系统

目录

一、项目成品图片

二、项目功能简介

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

六、项目实验效果 ​

七、项目包含内容

​​