×
单片机 > 单片机程序设计 > 详情

51单片机的跳一跳小游戏 源程序

发布时间:2020-12-24 发布时间:
|

这段时间学习了LCD12864的无字库使用方法,借此设计了一个单片机跳一跳小游戏
主要功能:控制火材人跳动,判断是否跳在地板上。

不多说直接上图:

仿真原理图如下
总电图图
 


游戏电路图:
 


LED控制电路图:
 


蜂鸣器电路图:
 


总流程图:
 


游戏界面:
 

单片机源程序如下:

#include "main.h"

unsigned char BGM_choose=1;

//人物,地板的信息

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

extern unsigned char mosaic_j1[3];

extern unsigned char mosaic_width1[3];

extern unsigned char mosaic_j2[3];

extern unsigned char mosaic_width2[3];

extern unsigned char NPC_page,NPC_column; 

extern bit NPC_xuli_judge; //判断递增与递减

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


void main()

{

unsigned char i=NOSURE;

LCD12864_winit();           //LCD12864初始化

TOOL_randInit();             //随机数初始化

BGM_init();           //BGM初始化


show_start();                     //开始界面

//按键按下进入游戏

while(!KEY_Scan()==KEY0SURE);

                  

show_youxi();                     //游戏界面


//显示火材人

NPC_page=diban_fir-1;

NPC_column=mosaic_j1[show_judgewei(diban_fir)];

show_NPC(NPC_page,NPC_column,NPC_huo); 

//游戏BGM

BGM_choose=2;

        

while(1)

{

        BGM_choose=2;

if(KEY_Scan()==LONGTIME_START)

{

  show_NPC(NPC_page,NPC_column,NPC_dun);             //火材人蹲

  if(KEY0_CLR)

  {

     i=LONGTIME_START;

     while(i!=NOSURE)

         {

           if(i==KEY0_LSURE)

           {

            if(NPC_xuli_judge)   {show_NPC_xuli(xuli_inc);}                 //火材人蓄力

                              else                 {show_NPC_xuli(xuli_desc);}   

           }         

           i=KEY_Scanlongtime();

         } 

          show_NPC(NPC_page,NPC_column,NPC_disp);  //火材人消失

          NPC_move();                                                                        //火材人位置移动

          show_NPC(NPC_page,NPC_column,NPC_huo);   //火材人显示

          show_NPC_xuli(xuli_disp);                                   //火材人蓄力消失

          if(!game_judge())                                                       //游戏结束判断

          {

                BGM_choose=3;                      //BGM3

          game_over();                       //游戏结束显示

          while(KEY_Scan()==NOSURE);

          show_youxi();                                   //游戏界面刷新


                                       //显示火材人

    NPC_page=diban_fir-1;

    NPC_column=mosaic_j1[show_judgewei(diban_fir)];

    show_NPC(NPC_page,NPC_column,NPC_huo);

          }


  }

  else {show_NPC(NPC_page,NPC_column,NPC_huo);}

}    

}

}



//BGM

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

//BGM初始化

void BGM_init()

{

    TMOD=0x21;        //设置定时器0 16位计数

    TL0 =(-1000)%256;                //设置定时初值

    TH0 =(-1000)/256;                //设置定时初值

    EA=1;ET0=1;TR0=1;

          BGM=0;BGM1=0;

}


void BGM_time0(void) interrupt 1

{

        static unsigned char count=0;

  if(BGM_choose==1)           //游戏开始

        {

          TL0 =(-30000)%256;                //设置定时初值

    TH0 =(-30000)/256;                //设置定时初值

                count++;

                if(count==10){BGM=0;BGM1=1;}

          if(count==30){BGM=1;BGM1=0;}

                if(count==38){BGM=0;BGM1=1;}

                if(count==40){BGM=0;BGM1=0;}

                if(count==50){BGM=0;BGM1=0;count=0;}

        }                

  if(BGM_choose==2)           //游戏

        {

          TL0 =(-20000)%256;                //设置定时初值

    TH0 =(-20000)/256;                //设置定时初值

                count++;

                if(count==10){BGM=0;BGM1=1;}

                if(count==20){BGM=1;BGM1=0;count=0;}

        }        

        

         if(BGM_choose==3)           //游戏结束

        {

          TL0 =(-50000)%256;                //设置定时初值

    TH0 =(-50000)/256;                //设置定时初值

                count++;

                if(count==10){BGM=0;BGM1=1;}

                if(count==20){BGM=0;BGM1=0;count=0;}

        }

}


关键字:51单片机  跳一跳小游戏  源程序

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32单片机的复用端口初始化的步骤及方法