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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 871|回復: 0
打印 上一主題 下一主題
收起左側

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

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


單片機源程序如下:

#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;//球的左右移動方向
        ball_UpDown=1;//球的上下移動方向
        Defeat=0;//失敗標志
        Victory=0;//勝利標志
        Score=0;//分數
        start_flag=0;
        ball_position=0x80;//球在第8行
}

void Showpicture()//用于顯示點陣屏
{
    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)//表示當球在第二列時
        {
           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)//如果分數達到6分
                Victory=1;        //游戲勝利
}

void BallMove()//球的移動
{
        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//定時器中斷程序
{
        static unsigned int T0Count;
        TL0 = 0x18;                //設置定時初值
        TH0 = 0xFC;                //設置定時初值
        T0Count++;
        if((T0Count>=300)&&(k1==1)&&(k2==1))        //定時器分頻,300ms
        {
                T0Count=0;
    BallMove();//每300ms球移動一次
        }
}

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

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91九色婷婷 | 国产激情在线 | 久久成人免费视频 | 久久久久精 | 国产日韩免费视频 | 午夜丁香视频在线观看 | 欧美日韩视频 | 天天看天天爽 | 黄色免费在线观看网址 | 亚洲精品在线视频 | 久精品久久 | 中文字字幕一区二区三区四区五区 | 亚洲三区视频 | 婷婷激情在线 | 国产自产21区| 国产精品欧美一区二区三区不卡 | 欧美一二区 | 久久久久国产精品午夜一区 | 免费精品视频 | 亚洲免费人成在线视频观看 | 欧美性视频在线播放 | 在线中文视频 | 欧美亚洲国产一区二区三区 | 97精品久久 | 一区二区三区视频在线观看 | 一区二区三区视频在线观看 | 99热在线播放 | 婷婷福利视频导航 | 亚洲午夜视频在线观看 | 日韩欧美一区二区三区 | 99久久中文字幕三级久久日本 | 一级片视频免费 | 中文字幕一区在线观看视频 | 高清成人免费视频 | 蜜桃av鲁一鲁一鲁一鲁 | 亚洲国产精品va在线看黑人 | 男女下面一进一出网站 | 九九久久免费视频 | 九九福利 | 影音先锋中文字幕在线观看 | 久久综合久 |