当前位置 博文首页 > 无水wangyang:【嵌入式】用51单片机完成迷宫游戏
本次实验为使用51单片机做出一份游戏来。
目的首先是为了应付期末考试,因此此次实验会有部分不完整之处。
**? 实验特殊说明:
? ? ?此次实验中除用到LCD12864、蓝牙模块外,还会使用蜂鸣器完成启动音乐的播放,以及安卓端的APP的控制(不需要APP的可以在源码中将部分代码注释掉)。
一 实验说明
使用LCD12864完成迷宫游戏的绘制,要求游戏开始时生成迷宫图案,图案中有墙和路,要求入口和出口村子能通行的路。要求玩家从左上角诞生,出口位于右下角,要求使用蓝牙模块完成与单片机的连接,利用自己制作的APP完成对玩家的操控。使用四个独立按键分别控制人在迷宫中“上、下、左、右”行走操作,直至走到出口,游戏胜利。
二 实验要求
三 部分源码
#include <REG52.H>
#include <INTRINS.H>
sbit Beep = P1^5;
#define LCDPORT P0//数据引脚
#define uchar unsigned char
#define uint unsigned int
sbit LCD12864_RS = P2^6; //RS控制引脚
sbit LCD12864_RW = P2^5; //RW控制引脚
sbit LCD12864_EN = P2^7; //EN控制引脚
sbit LCD12864_PSB = P1^2; //模式选择引脚,ST7920控制器,1为8位并行接口,0为串行接口
sbit wela = P2^6;
sbit dula = P2^7;
//开场显示
uchar code welcome[] = {"**迷宫**"};
uchar code tip_one[] = {"任意键启动游戏"};
//闭场显示
uchar code bye[]={"恭喜逃离"};
uchar code tip_two[]={"任意键重启游戏"};
// 对按键进行定义
sbit k1=P3^1; //定义P31口是k1
sbit k2=P3^0;
sbit k3=P3^2;
sbit k4=P3^3;
uint is_Blue=0;//用来记录蓝牙数据
uint numx_up;//记录x轴坐标 player[0][0]/8
uint numy_up;//记录y轴坐标 player[0][1]
uint loca_up=0;//记录当前是x坐标的第几位 (7-player[0][0]%8)
uchar Ordata_up;//用来和数据进行与的值
uint numx_down;//记录x轴坐标 player[0][0]/8
uint numy_down;//记录y轴坐标 player[0][1]
uint loca_down=0;//记录当前是x坐标的第几位 (7-player[0][0]%8)
uchar Ordata_down;//用来和数据进行与的值
uint ok_move=0;//移动允许
uint direct_t=3;
uint is_destination=0;//目的地检测函数,到达目的地 为1,没有 为0;
uint is_open=0;//是否开启游戏函数
uint step=0;//用来记录步数,在LED屏上显示
uint is_stopMusic=0;
unsigned char n=0; //n为节拍常数变量
unsigned char code music_tab[] ={
0xff,
0x39,0x30,0x33,0x30,0x30,0x20,0x30,0x20,0x33,0x20,0x39,0x20,0x33,0x10,
0x30,0x10,0x33,0x20,0x30,0x30,0x40,0x30,0x33,0x20,0x39,0x20,0x40,0x20,0x00,
};
void int0() interrupt 1 //采用中断0 控制节拍
{ TH0=0xd8;
TL0=0xef;
n--;
}
void delay_Sound (unsigned char m) //控制频率延时
{
unsigned i=3*m;
while(--i);
}
void delayMs_Sound(unsigned char a) //豪秒延时子程序
{
while(--a); //采用while(--a) 不要采用while(a--);
}
void LCD12864_Init(void); //LCD12864初始化函数
void LCD12864_WriteInfomation(unsigned char ucData,bit bComOrData); //向LCD12864写入数据,bComOrData为1时写入的是数据,0时写入的是命令
void LCD12864_CheckBusy(void);//忙检测函数
void LCD12864_DisplayImage(unsigned char code *ucImage,uint direction);
void Delay(unsigned int uiCount);
void ronghe();//融合函数
void OpenGame();
void ClearScreen();
void main();
void LEDDisplayTheEnd();
void delay_1(uint i);
void UsartInit();
void Sound()
{
unsigned char p,m; //m为频率常数变量
unsigned char i=0;
TMOD&=0x0f;
TMOD|=0x01;
TH0=0xd8;
TL0=0xef;
IE=0x82;
TR0=0;
play:
while(1)
{
a: p=music_tab[i];
if(p==0x00) { i=0, delayMs_Sound(1000); goto play;} //如果碰到结束符,延时1秒,回到开始再来一遍
else if(p==0xff) { i=i+1;delayMs_Sound(100),TR0=0; goto a;} //若碰到休止符,延时100ms,继续取下一音符
else {m=music_tab[i++], n=music_tab[i++];} //取频率常数 和 节拍常数
TR0=1; //开定时器1
while(n!=0) Beep=~Beep,delay_Sound(m); //等待节拍完成, 通过P1口输出音频(可多声道哦!)
TR0=0; //关定时器1
OpenGame();
if(is_open==1)
{
UsartInit();
is_open=0;
//lcd_init();
is_stopMusic=1;
return;
//break;
}
}
}
unsigned char player[2][2]={//玩家诞生点
0,2,1,3
//120,28,121,29//测试用数据
};
unsigned char code migong[64][16]={//地图
0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x0F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x03,0x00,0xC0,0x00,0x00,0x00,0x33,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x03,0x00,0xC0,0x00,0x00,0x00,0x33,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x03,0x0C,0xCF,0xFC,0xFF,0xFF,0xF3,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x03,0x0C,0xCF,0xFC,0xFF,0xFF,0xF3,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xC0,0x0C,0xCC,0x0C,0xC0,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xC0,0x0C,0xCC,0x0C,0xC0,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xCF,0xFC,0xCC,0xCC,0xCF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xCF,0xFC,0xCC,0xCC,0xCF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xCC,0x3C,0xC0,0xCC,0xCF,0x0C,0x0C,0xCF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xCC,0x3C,0xC0,0xCC,0xCF,0x0C,0x0C,0xCF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xCC,0x30,0xFF,0xCC,0xCC,0x0C,0xCC,0xCF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xCC,0x30,0xFF,0xCC,0xCC,0x0C,0xCC,0xCF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xC0,0x30,0x00,0x0C,0xCC,0xFC,0xCC,0xCF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xC0,0x30,0x00,0x0C,0xCC,0xFC,0xCC,0xCF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0xFF,0xFF,0x0C,0xCC,0xFC,0xCC,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0xFF,0xFF,0x0C,0xCC,0xFC,0xCC,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xC0,0x00,0x00,0x0C,0xCC,0x00,0xCC,0xCF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xC0,0x00,0x00,0x0C,0xCC,0x00,0xCC,0xCF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xC3,0xFF,0x3F,0xFC,0xCC,0xFF,0xCC,0xCF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xC3,0xFF,0x3F,0xFC,0xCC,0xFF,0xCC,0xCF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xC3,0x00,0x00,0x00,0x00,0xC0,0x0C,0xCF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xC3,0x00,0x00,0x00,0x00,0xC0,0x0C,0xCF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xC3,0x3F,0xC3,0xFF,0xC3,0xCF,0x3F,0xCF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xC3,0x3F,0xC3,0xFF,0xC3,0xCF,0x3F,0xCF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xC3,0x30,0xC3,0x03,0x03,0x0C,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xC3,0x30,0xC3,0x03,0x03,0x0C,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xCF,0xF0,0x03,0x33,0x33,0x3C,0x3F,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xCF,0xF0,0x03,0x33,0x33,0x3C,0x3F,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xCC,0x33,0x3F,0x33,0x33,0x30,0x30,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xCC,0x33,0x3F,0x33,0x33,0x30,0x30,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xCC,0x33,0x30,0x33,0x33,0x33,0xF3,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xCC,0x33,0x30,0x33,0x33,0x33,0xF3,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xCC,0x03,0x03,0xF0,0x33,0x00,0x03,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xCC,0x03,0x03,0xF0,0x33,0x00,0x03,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xCC,0xFF,0xFF,0xFC,0xF3,0xFC,0xFF,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xCC,0xFF,0xFF,0xFC,0xF3,0xFC,0xFF,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xCC,0x00,0x00,0x0C,0xF0,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xCC,0x00,0x00,0x0C,0xF0,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xCC,0xFF,0xFF,0xCC,0xF3,0xFF,0xFF,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xCC,0xFF,0xFF,0xCC,0xF3,0xFF,0xFF,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xCC,0xFF,0x00,0xCC,0xF3,0x00,0x00,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xCC,0xFF,0x00,0xCC,0xF3,0x00,0x00,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xC0,0xC0,0x3C,0xCC,0xF3,0x3F,0xFF,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xC0,0xC0,0x3C,0xCC,0xF3,0x3F,0xFF,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0xCF,0xFC,0xCC,0xF3,0x30,0x03,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0xCF,0xFC,0xCC,0xF3,0x30,0x03,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xC0,0x0F,0xF0,0x0C,0xF3,0x33,0xF3,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xC0,0x0F,0xF0,0x0C,0xF3,0x33,0xF3,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xCF,0xFF,0xFF,0xFC,0xF3,0x33,0x33,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xCF,0xFF,0xFF,0xFC,0xF3,0x33,0x33,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xCC,0x00,0x00,0x00,0xF3,0x33,0x03,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xCC,0x00,0x00,0x00,0xF3,0x33,0x03,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xCF,0xFF,0xFF,0xFC,0xF3,0x33,0xFF,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xCF,0xFF,0xFF,0xFC,0xF3,0x33,0xFF,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xCC,0x00,0xC0,0x00,0xF3,0x30,0x00,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xCC,0x00,0xC0,0x00,0xF3,0x30,0x00,0x33,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xCC,0xFF,0xFC,0xFC,0xF3,0x33,0xFF,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xCC,0xFF,0xFC,0xFC,0xF3,0x33,0xFF,0xF3,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xC0,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xC0,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
四? 最终实现
?
完整代码及实验报告,实验录屏请在公众号后台回复:迷宫
获取。
CSDN资源下载链接:https://download.csdn.net/download/weixin_40874586/10977104
如果失效,请在后台留言,12小时之内会回复。
公众号:选甚春秋
?
cs