视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
基于51单片机的小游戏
2025-09-28 00:49:28 责编:小OO
文档
仿真图:

PCB图:

#include

#include

#include"ours.h"

#define uchar unsigned char

#define SNAKE 20 //最长蛇身

#define SPEED 50 //运动速度控制,值越大,则扫描整个蛇

     身的时间越长,即表现为移动速度慢

#define MQ 5 进入下一关的加速,pace=pace-MQ

sbit P3_0=P3^0; 

//蜂鸣器位  外部中断0  外部中断1

sbit P3_7=P3^7;  指示灯位 

sbit P0_7=P0^7;sbit P0_6=P0^6;sbit P0_5=P0^5;sbit P0_4=P0^4; 

//暂停   增关卡,加速 减关卡,退出  加速    

//do            

sbit P0_2=P0^2;sbit P0_1=P0^1;sbit P0_3=P0^3;sbit P0_0=P0^0;

/左    下   右   上

/         退出

sbit P2_7=P2^7;sbit P2_6=P2^6;sbit P2_5=P2^5;sbit P2_4=P2^4;

sbit P2_3=P2^3;sbit P2_2=P2^2;sbit P2_1=P2^1;sbit P2_0=P2^0;

uchar x[SNAKE+1];  蛇身的坐标 行

u蛇身的坐标 列

uchar n,i,pace,xz;  当前蛇长,通用变量,当前速度,选择游戏标志

char bdata guanqia;  定义关卡,可谓寻址,便于控制指示灯

sbit guanqia_0=guanqia^0;sbit guanqia_1=guanqia^1;sbit guanqia_2=guanqia^2; 

c移动方向,同直角坐标系,addx为横向,addy为纵向

bit again,out;  再次产生果实变量,停止播放音乐变量

bit pause=0;  暂停变量,1为暂停

uchar tone_H,tone_L;//定时器初值,用来控制音调

uchar ym;   选择音乐 

uchar wait;   用于判断是否已经开始游戏

void display(uchar ); 声明显示函数

void display_p(uchar); 暂停时调用该函数显示

bit knock();   声明撞击函数

void key_press();  声明按键函数

void play1(unsigned int);

void play(uchar *,uchar *);

/**************************************************************

  判断是否碰撞,是则返回1,否则返回0

**************************************************************/

bit knock()  

{

 撞墙

  撞自己

}

/**************************************************************

  键位处理

**************************************************************/

void key_press()  

{

  上

  下

  左

  右

  左上

  右上

  左下

  右下

       暂停

   

    按住暂停键不放且没有退出游戏请求

}

/*********************************************************

显示函数,按点从头到尾扫描,周期为SNAKE,扫描k个周期运动一格

**********************************************************/

void display(uchar k)     显示k次

{

     扫描整个虚拟蛇身

      灭灯

   按点依次显示

     显示延时1ms

   键位处理

       判断是否退出游戏

 

}

/*********暂停时调用该函数显示,以防闪烁*******************/

void display_p(uchar k)     显示k次

{

     扫描整个虚拟蛇身

      灭灯

   按点依次显示

     显示延时1ms

 

}

/*****外部中断1,用于切换游戏,xz=0为贪吃蛇,xz=1为电子琴******/

void my_int1(void) interrupt 2

{ 去抖动

  游戏开始前,用于选择游戏

 

   共有两个游戏,所以xz只能为0或1

   游戏已开始(只在电子琴里有效)

    停止播放音乐

  直到松开按键,才跳出中断,以防xz连续变化

}

/**************************************************************

*******  主程序 

***************************************************************/

void main(void)

{    开总中断

    开外部中断0

    开外部中断1

/***********************************************************************

***************** 贪吃蛇 

************************************************************************/

   初始化游戏**********************/

  初始化虚拟蛇身

  初始化虚拟蛇身

        n=3;                           //初始蛇身长为n-1

  初始蛇头位置

  初始蛇尾位置

  初始位移偏移

       给运动速度赋初值

  产生果实*******************************/

       

   产生随机果实

  

     判断是否与蛇身重叠

   

       若重叠则再次产生

  等待开始游戏,贪吃蛇开始前可选关****************/

      第一关

  显示关卡

      等待选择游戏

       等待选择游戏

    如果xz=1,则进入电子琴

    显示贪吃蛇初始位置

   如果按上或右键,则开始游

   选关******************************************/

    增关卡

     去抖动

   

     最大到7关

     

      将其值用发光二极管以二进制的形式显示出来

      加速

    

    

     直到松开按键才跳出,以防连续增加关卡

   

  

    减关卡

   

   

     

     

      

    

    

   

  

 

 

  贪吃蛇游戏正在运行**************************/

  

     游戏已开始,wait置0

   判断是否碰撞

   显示部分************************/

   判断是否速度运动

   当P0^4或P0^6被按下时加速运动

    判断是否退出

   判断是否吃东西,及进入下一关**************/

  如果吃到

           蛇身加1

      如果进入下一关

        蛇身长从2开始

      运动加速,关卡加1

    

     将关卡的值用三个指示灯显示出来

      初始化虚拟蛇身

     初始化虚拟蛇身

   

  

     产生随机果实

    

        判断是否与蛇身重叠

    

         若重叠则再次产生

          

   判断蛇身是否移动**********************/

         如果不暂停

   

     蛇身从尾到头移动

     蛇头移动1格

  

         

 

/*******************************************************************

***************  电子琴 

********************************************************************/

DZQ:while(1)

 

    启用定时器0中断

   定时器0工作在方式1

   选择音乐及退出播放位无效

  等待开始游戏********************************/

 

    等待选择游戏

    点亮点阵

    关闭指示灯

  

   个键随便按一个则开始电子琴

   如果xz=0,则进入贪吃蛇游戏

 

  电子琴正在运行*********************/

 

     游戏已开始,wait置0

   开指示灯

    如果按下P0^0则退出电子琴

      如果有音乐请求

    选择音乐,最多7首

   

   

   

   

   

   

   

  

  

   

   

   

   

   

   

   

  

 

}

/****自己弹奏时调用该函数***********/

void play1(x)

 

 

 

 

 

 

}

/****播放音乐时调用该函数*******************/

void play(uchar *song,uchar *beat)

{

 

 

 

 

 

 

 

 

}

/****定时器0中断用于产生声******/

void tone_timer(void) interrupt 1

{

}

/****外部中断0,用于控制播放那个曲子*****/

void my_int0(void) interrupt 0

{    如果有选择

    则将其值赋给ym

}

 ours库函数

#define uchar unsigned char

/******判断具体的亮点****************/

unsigned char mux(unsigned char temp)  

{

 

 

 

 

 

 

 

 

    

}

/*******************************************

************** 延时函数  

********************************************/

void delay1ms(int x)  //延时1ms

{

 

}

void delay10ms(int x) //延时10ms

{

 

}

/**********节拍延时函数**************/

void beat_125ms(uchar x) //延时125ms

{

 

}

/*******************************************************************

****************乐谱************************************************

*********************************************************************/

unsigned int code tone[]={1012,

956, 852, 759, 716, 638, 568, 506,  478,  中音

1低音

478, 426, 379, 358, 319, 284, 253,  233 };   高音

//dao ruai mi  fa   sao  la   xi    

//song为乐谱,当出现50时表示结束;beat为节奏(以0.125秒为单位),

/*************画心*************/

uchar code song1[]={

3,5,  6,6,21,7,6,5,  2,3,3,3,5,  6,6,7,21,5,21,22,

22,23,23,25,23,  23,22,21,22,21,7,  21,22,7,5,6,3,5,  6,6,23,22,21,7,

5,6,6,3,4,5,  6,6,21,7,6,5,6,  3,3,3,3,5,  6,6,7,21,5,21,22, 

22,23,23,25,23,  23,22,21,22,21,7,  21,22,7,5,6,3,5,  6,6,23,22,21,7,

5,6,6,25,23,  23,22,21,22,22,25,  23,23,23,25,23,  23,22,21,22,25,26,  

22,23,23,25,23,  23,22,21,22,21,7,  21,22,7,5,6,3,5,  6,6,23,22,21,7,

5,6,6,50};

uchar code beat1[]={

4,4,  8,4,4,4,4,8,  6,2,16,4,4,  8,4,4,4,4,4,4,

4,4,16,4,4,  8,4,4,8,4,4,  4,4,4,4,8,4,4,  8,4,4,4,4,8,

6,2,6,4,4,4,  8,4,4,4,4,4,4,  4,4,8,4,4,  8,4,4,4,4,4,4,

4,4,16,4,4,  8,4,4,8,4,4,  4,4,4,4,8,4,4,  8,4,4,4,4,8,

6,2,18,4,4,  8,4,4,8,4,4,  4,4,8,4,4,  8,4,4,4,4,8,

6,2,16,4,4,  8,4,4,8,4,4,  4,4,4,4,8,4,4,  8,4,4,4,4,8,

6,2,24,4};

/***********梁祝*********************/

uchar code song2[]={

7,6,7,  5,6,4,3,  2,3,4,3,5,3,  2,3,5,2,3,4,3,2,

1,5,  17,2,16,1,  15,16,1,  15,  

13,15,16,  1,2,16,1,15,  5,21,6,5,3,5,  2, 

2,3,17,16,  15,16,1,2,  13,1,16,15,16,1,  15,  

3,5,17,2,  16,1,15,  13,15,13,15,16,17,2,  16,15,16,

1,2,5,3,  2,3,2,1,16,15,  13,1,  16,1,16,15,13,15,16,1,

15,3,5,  2,3,2,1,17,16,  15,50};

uchar code beat2[]={

4,4,4,  6,2,4,4,  2,2,2,2,6,2,  2,2,2,2,2,2,2,2,

12,4,  4,4,4,4,  12,2,2,  16,  

8,6,2,  6,2,2,2,4,  6,2,2,2,2,2,  16,  

6,2,4,4,  6,2,4,4,  4,4,2,2,2,2,  16,

6,2,4,4,  2,2,8,  2,4,2,2,2,2,2,  12,2,2,

6,2,4,4,  4,2,2,4,2,2,  8,8,  3,1,2,2,2,2,2,2,

12,2,2,  2,2,2,2,4,4,  16,2};

/***********兄弟无数*******************/

uchar code song3[]={

6,6,5,6,0,  3,7,21,7,6,0,  7,6,7,5,3,0,  2,2,1,2,3,0,

6,5,6,5,3,7,6,  5,6,4,3,2,1,2,  6,5,6,5,3,7,6,  5,6,4,3,2,1,2,  

3,21,21,7,22,  7,6,6,3,5,  3,4,3,2,1,2,3,5,  2,

22,22,6,  21,7,0,  7,7,6,6,2,5,6,  6,3,

22,22,6,  21,7,0,  7,7,6,6,2,0,22,  7,6,6,

7,7,7,6,3,6,4,3,  2,  3,22,7,6,5,6,7,7,  22,0,

22,23,6,6,

50};

uchar code beat3[]={

8,8,4,4,8,  8,4,4,4,4,8,  8,4,4,4,4,8,  8,4,4,4,4,8,

6,2,4,4,4,8,4,  6,2,4,4,4,4,8,  6,2,4,4,4,8,4,  6,2,4,4,4,4,8,

4,8,4,8,8,  4,4,4,4,16,  6,2,4,4,4,4,4,4,  24,

24,4,4,  16,8,8,  8,4,4,4,4,4,4,  8,24,

24,4,4,  16,8,8,  8,4,4,4,4,4,4,  4,4,24,

6,2,4,4,4,4,4,4,  24,  6,2,4,4,4,4,4,4,  24,8,

2,2,4,24,

4};

/*************伤不起******************/

uchar code song4[]={

6,6,5,3,3,  6,6,5,3,3,  6,21,3,5,5,  3,2,3,3,

6,6,5,3,3,  6,6,5,3,3,  5,3,5,7,7,  7,5,6,6,

5,6,6,6,5,3,  5,6,6,6,  5,6,6,6,21,6,6,  5,6,5,3,3,

6,6,2,3,2,2,1,  16,2,3,2,  5,5,5,5,5,5,6,  7,6,7,

5,6,6,6,5,3,  5,6,6,6,  5,6,6,6,21,6,  5,6,5,3,3,

6,6,2,3,2,2,1,  16,2,3,2,  5,5,5,5,5,6,  7,7,6,7,

21,7,6,6,5,3,  5,6,7,6,6,  21,6,21,6,21,6,21,22,  3,3,3,2,3,

22,22,22,21,22,6,21,  22,23,22,21,22,7,  7,7,7,7,22,22,22,23,  7,3,5,6,6,

21,7,6,6,5,3,  5,6,7,6,6,  21,6,21,6,21,6,21,22,  3,3,3,2,3,

22,22,22,21,22,6,21,  22,23,22,21,22,7,  7,7,7,7,22,22,22,23,  7,3,5,6,6,

50};

uchar code beat4[]={

4,2,4,2,4,  4,2,4,2,4,  4,2,4,2,4,  4,2,2,8,

4,2,4,2,4,  4,2,4,2,4,  4,2,4,2,4,  4,2,2,8,

2,2,4,4,2,2,  2,2,4,6,  2,2,2,2,4,2,2,  2,2,2,2,6,

2,2,2,2,4,2,2,  4,2,2,6,  2,2,2,2,4,2,2,  4,4,6,

2,2,4,4,2,2,  2,2,4,6,  2,2,2,2,4,4,  2,2,2,2,6,

2,2,2,2,4,2,2,  4,2,2,6,  2,2,2,2,4,4,  2,2,4,6, 

4,2,2,4,2,2,  4,2,2,4,2,  2,2,2,2,2,2,2,2,  2,2,2,2,6,

2,2,2,2,4,2,2,  2,2,2,2,6,2,  2,2,2,2,2,2,2,2,  2,2,2,2,6,

4,2,2,4,2,2,  4,2,2,6,2,  2,2,2,2,2,2,2,2,  2,2,2,2,6,

2,2,2,2,4,2,2,  2,2,2,2,6,2,  2,2,2,2,2,2,2,2,  2,2,2,2,6,

4};

/**************兰若词******************/

uchar code song5[]={

16,17,1,  3,17,1,  16,16,16,17,1,  4,17,1,

16,16,17,1,3,  2,2,2,1,  2,2,3,4,2,  3,3,

16,17,1,  3,17,1,  16,16,16,17,1,  4,1,1,

16,16,17,1,3,  2,2,2,1,  2,1,2,3,15,  16,16,

3,5,6,7,  21,7,6,5,3,  6,5,3,2,1,  2,3,5,2,

3,3,5,  6,5,6,5,  6,7,21,7,6,5,  6,6,

6,3,5,6,7,  21,7,6,5,3,  6,5,3,2,1,  2,3,5,2,

3,2,1,  16,3,2,1,  16,3,2,3,5,  6,6,

50};

uchar code beat5[]={

3,3,3,  9,6,3,  6,3,3,3,3,  9,6,3,  

6,3,3,3,3,  9,3,3,3,  6,3,3,3,3,  9,9,

3,3,3,  9,6,3,  6,3,3,3,3,  9,6,3,

6,3,3,3,3,  9,3,3,3,  6,3,3,3,3,  9,9, 

2,2,2,2,  3,3,3,6,3,  3,3,3,6,3,  6,3,6,3,

9,3,3,  6,3,6,3,  3,3,3,3,3,3,  9,9,

9,2,2,2,2,  3,3,3,6,3,  3,3,3,6,3,  6,3,6,3,

9,3,3,  6,3,6,3,  6,3,3,3,3,  9,9, 

4};

/***************二泉映月*******************/

uchar code song6[]={

6,5,6,4,3, 2,2,3,1,1,2,  3,5,6,5,6,5,6,21,  5,3,5,5,3,2,6,5,6,1,2,

3,5,2,3,5,21,6,2,3,5,  1,21,6,21,23,23,22,  21,6,21,22,23,23,22,21,21,6,21,22,23, 5,5,3,5,6,5,6,21,

5,3,5,5,21,6,6,5,6,5,5,  3,5,3,4,3,5,2,3,2,1,16,1,16,  1,1,2,3,5,1,2,5,3,6,  5,

21,6,21,23,23,22,  21,6,21,22,23,23,22,21,21,6,21,22,23,  5,3,5,3,5,  6,21,21,3,5,3,5,6,5,21,6,

5,3,5,5,21,6,6,5,6,5,5,  3,5,3,4,3,5,2,3,2,1,16,1,16,  1,16,1,2,3,5,1,2,5,3,5,6,  5,3,5,5,6,5,5,3,5,

6,

6,6,6,5,6,21,  5,3,5,5,21,6,6,5,6,5,5,  3,15,3,4,3,5,2,3,2,1,16,1,16,  1,16,1,2,3,5,1,2,5,3,5,6,

5,

50};

uchar code beat6[]={

8,2,2,2,2,  16,6,2,4,2,2,  12,4,4,4,2,2,2,2,  6,2,4,2,2,4,4,2,2,2,2,

12,4,3,1,2,2,2,2,2,2,  16,4,2,2,4,2,2,  12,4,3,1,2,2,4,6,4,2,2,2,2,  16,4,2,2,2,2,2,2,

6,2,2,4,2,4,4,2,2,2,2,  6,2,3,1,2,2,3,1,2,2,2,2,4,  8,6,2,2,2,4,2,2,2,2,  16,

4,2,2,4,2,2,  6,2,3,1,2,2,4,2,2,2,2,2,2,  16,2,2,2,2,  8,4,4,3,1,2,2,2,2,2,2,

6,2,2,4,2,4,4,2,2,2,2,  6,2,3,1,2,2,2,2,2,2,2,2,4,  6,2,6,2,2,2,4,3,1,2,2,2,  12,4,4,2,2,2,2,2,2,  

16,

4,4,2,2,2,2,  6,2,2,4,2,4,4,2,2,2,2,  6,2,3,1,2,2,3,1,2,2,2,2,4,  6,2,6,2,2,2,4,3,1,2,1,1,

16,

4};

/***********土耳其进行曲***********/

uchar code song7[]={

7,6,5,6,  21,0,22,21,7,21,  23,0,24,23,22,23,  27,26,25,26,27,26,25,26,28,26,28,

27,26,25,26,  27,26,25,26,  27,26,25,24,  23,

21,22,  23,21,22,  23,22,21,7,  6,7,21,22,

7,5,21,22,23,21,22,  23,22,21,7,  6,22,7,5,  21,

23,24,23,22,  21,22,21,7,6,21,7,6,  5,6,7,5,3,4,5,3,6,5,7,6,21,7,21,22,  23,22,23,22,23,24,23,22,

21,22,21,7,6,21,7,6,  5,6,7,6,3,4,5,3,  4,5,6,4,2,3,4,2,  3,

5,4,3,2,  1,2,3,4,5,6,7,21,21,7,6,5,4,3,2,  1,2,3,4,5,6,7,21,  21,22,5,4,3,2,

1,2,3,4,5,6,7,21,  21,7,6,5,4,3,2,  3,5,1,3,2,4,7,2,  1,23,24,23,22,

21,22,21,7,6,21,7,6,5,6,7,5,3,4,5,3,  6,5,6,7,21,7,21,22,23,22,23,22,23,22,23,21,  24,23,24,23,24,23,24,23,  24,23,22,21,7,21,2,7,

21,22,23,6,5,6,7,5,  6,

50};

uchar code beat7[]={

1,1,1,1,  2,2,1,1,1,1,  2,2,1,1,1,1,  1,1,1,1,1,1,1,1,4,2,2,

2,2,2,2,  2,2,2,2,  2,2,2,2,  4,

2,2,  4,2,2,  2,2,2,2,  2,2,2,2,

2,2,2,2,4,2,2,  2,2,2,2,  2,2,2,2,  4,

1,1,1,1,  1,1,1,1,1,1,1,1,  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,  1,1,1,1,1,1,1,1,

1,1,1,1,1,1,1,1,  1,1,1,1,1,1,1,1,  1,1,1,1,1,1,1,1,  4,

1,1,1,1,  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,  1,1,1,1,1,1,1,1,  2,2,1,1,1,1,  

1,1,1,1,1,1,1,1,  1,1,1,1,1,1,1,  1,1,1,1,1,1,1,1,  4,1,1,1,1,

1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,  1,1,1,1,1,1,1,1,  1,1,1,1,1,1,1,1,

4};下载本文

显示全文
专题