久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 1039|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)單人彈球游戲程序Proteus仿真圖分享

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機(jī)源程序如下:

#include <REGX52.H>
#include "Delay.h"
#include "MatrixLED.h"
#include "Timer0Init.h"
#include "StartGame.h"
#include "GAMEOVER.h"
#include "VICTORY.h"

sbit k2=P3^0;                //K2按鍵
sbit k1=P3^1;    //K1按鍵
int Place=3,numt=0,ball_LeftRight=1,ball_UpDown=1,Defeat=0,Victory=0,Score=0,start_flag=0;
unsigned char ball_position=0x80;

int racket[]={224,112,56,28,14,7};//用于表示球拍位置
//分別為1110 0000,0111 0000,0011 1000,0001 1100,0000 1110,0000 0111

void Gameinit()//游戲初始化
{
        Place=3;
        numt=0;
        ball_LeftRight=1;//球的左右移動(dòng)方向
        ball_UpDown=1;//球的上下移動(dòng)方向
        Defeat=0;//失敗標(biāo)志
        Victory=0;//勝利標(biāo)志
        Score=0;//分?jǐn)?shù)
        start_flag=0;
        ball_position=0x80;//球在第8行
}

void Showpicture()//用于顯示點(diǎn)陣屏
{
    unsigned char k=1;
    MatrixLED_ShowColumn(0,racket[Place]);
                for(k=1;k<8;k++)        
                {
                        if(k!=7-numt)                                
                           MatrixLED_ShowColumn(k,0x00);
                        else
                                MatrixLED_ShowColumn(k,ball_position);
                }
}

void Check()//判斷游戲勝利或失敗
{
        if(numt==6)//表示當(dāng)球在第二列時(shí)
        {
           if(ball_position==0x80)//如果球在最上方
                 {
                         if(Place!=0)//球拍位置不是1110 0000則游戲失敗
                         Defeat=1;
                 }
                 if(ball_position==0x20)
                 {
                         if((Place!=0)&&(Place!=1)&&(Place!=2))
                         Defeat=1;
                 }
                 if(ball_position==0x08)
                 {
                         if((Place!=2)&&(Place!=3)&&(Place!=4))
                         Defeat=1;
                 }
                 if(ball_position==0x02)
                 {
                         if((Place!=4)&&(Place!=5))
                         Defeat=1;
                 }
        }
        if(Score==6)//如果分?jǐn)?shù)達(dá)到6分
                Victory=1;        //游戲勝利
}

void BallMove()//球的移動(dòng)
{
        Check();
        numt+=ball_LeftRight;
        if(ball_position==0x80)
        {
                ball_UpDown=1;
        }
        if(ball_position==0x01)
        {
                ball_UpDown=-1;
        }
        if(ball_UpDown==1)
        {
                ball_position=ball_position>>1;
        }
        if(ball_UpDown==-1)
        {
                ball_position=ball_position<<1;
        }
  if(numt==0)
  {
          ball_LeftRight=1;
                Score+=1;
        }               
        if(numt==6)
        {
          ball_LeftRight=-1;
        }
}

void MoveUP()//球拍上移
{
        Place-=1;
        if(Place<0)
                Place=0;
}

void MoveDOWN()//球拍下移
{
        Place+=1;
        if(Place>5)
                Place=5;
}

void main()
{
        MatrixLED_Init();
  while(1)
  {         
     while(start_flag==0)                        //如果K1按鍵按下
           {
                    StartGame(start_flag);
                    start_flag=1;
           }
           Timer0Init();
           while((Defeat==0)&&(Victory==0))
           {
                    Showpicture();
                    if(k1==0)                        //如果K1按鍵按下
                    {
                             Delay(20);
                             while(k1==0);
                             Delay(20);
                                        MoveUP();//拍子上移
              }
               
                    if(k2==0)                        //如果K2按鍵按下
                    {
                             Delay(20);
                             while(k2==0);
                             Delay(20);
           MoveDOWN();//拍子下移
                    }
           }
           if (Defeat==1)//如果游戲失敗
           {
        TR0=0;
                    GAMEOVER(Score);
        Gameinit();
           }
           if (Victory==1)//如果游戲勝利
           {
        TR0=0;
                    VICTORY(Score);
        Gameinit();
           }
   }
}

void Timer0() interrupt 1//定時(shí)器中斷程序
{
        static unsigned int T0Count;
        TL0 = 0x18;                //設(shè)置定時(shí)初值
        TH0 = 0xFC;                //設(shè)置定時(shí)初值
        T0Count++;
        if((T0Count>=300)&&(k1==1)&&(k2==1))        //定時(shí)器分頻,300ms
        {
                T0Count=0;
    BallMove();//每300ms球移動(dòng)一次
        }
}

仿真程序: Simulation.7z (48.94 KB, 下載次數(shù): 7)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 我爱操| 密色视频 | 精品国产成人 | 亚洲品质自拍视频 | av在线一区二区三区 | 成人免费视频 | 国产91综合一区在线观看 | 日本色高清 | 欧美精品在线一区二区三区 | 99国产精品视频免费观看一公开 | 国产视频一区二区在线观看 | 91国内精精品久久久久久婷婷 | 国产毛片毛片 | 九九久久久 | 日韩欧美一区二区三区四区 | 久久精品亚洲精品国产欧美 | 中文字幕一区二区三区四区 | 久久精品日产第一区二区三区 | 精品国产三级 | 日韩欧美国产精品一区二区三区 | 久久久久9999亚洲精品 | 波多野结衣中文视频 | 天天天天天天天干 | 一级毛片免费看 | 国产精品久久久久久妇女 | 亚洲天堂999| 欧美xxxx性| 青青草在线播放 | av黄色在线观看 | 亚洲一区播放 | 精品无码久久久久久国产 | 亚洲aⅴ一区二区 | 91在线精品秘密一区二区 | 国产视频一区在线 | 国产精品久久久久久 | 最新超碰| 日日噜噜夜夜爽爽狠狠 | 欧美日韩久久久 | 日韩欧美一区二区三区四区 | 亚洲黄色成人网 | 日本在线免费视频 |