最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

基于51单片机的小游戏

来源:动视网 责编:小OO 时间:2025-09-28 00:49:28
文档

基于51单片机的小游戏

仿真图:PCB图:#include#include#include"ours.h"#defineucharunsignedchar#defineSNAKE20//最长蛇身#defineSPEED50//运动速度控制,值越大,则扫描整个蛇身的时间越长,即表现为移动速度慢#defineMQ5进入下一关的加速,pace=pace-MQsbitP3_0=P3^0;//蜂鸣器位外部中断0外部中断1sbitP3_7=P3^7;指示灯位sbitP0_7=P0^7;sbitP0_6=P0^6;sbitP0_5
推荐度:
导读仿真图:PCB图:#include#include#include"ours.h"#defineucharunsignedchar#defineSNAKE20//最长蛇身#defineSPEED50//运动速度控制,值越大,则扫描整个蛇身的时间越长,即表现为移动速度慢#defineMQ5进入下一关的加速,pace=pace-MQsbitP3_0=P3^0;//蜂鸣器位外部中断0外部中断1sbitP3_7=P3^7;指示灯位sbitP0_7=P0^7;sbitP0_6=P0^6;sbitP0_5
仿真图:

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

文档

基于51单片机的小游戏

仿真图:PCB图:#include#include#include"ours.h"#defineucharunsignedchar#defineSNAKE20//最长蛇身#defineSPEED50//运动速度控制,值越大,则扫描整个蛇身的时间越长,即表现为移动速度慢#defineMQ5进入下一关的加速,pace=pace-MQsbitP3_0=P3^0;//蜂鸣器位外部中断0外部中断1sbitP3_7=P3^7;指示灯位sbitP0_7=P0^7;sbitP0_6=P0^6;sbitP0_5
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top