专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

基于51单片机的双人对战小游戏的实现

作者:佚名   来源:本站原创   点击数:  更新时间:2013年10月20日   【字体:
#include<AT89X52.h>
unsigned char position1=1;//position一共有3种状态,0代表最边上,1代表初始位置,2代表最前的位置
unsigned char position2=1;//position一共有3种状态,0代表最边上,1代表初始位置,2代表最前的位置
unsigned char fist1=0;//1没有出拳
unsigned char fist2=0;//2没有出拳
unsigned char leg1=0;//1没有出脚
unsigned char leg2=0;//2没有出脚

unsigned char count_back1=0;
unsigned char count_back2=0;

unsigned char count_forth1=0;
unsigned char count_forth2=0;

unsigned char time0_count=0;
unsigned char time1_count=0;

unsigned char blood1=7;
unsigned char blood2=7;

unsigned char buff1[16]={0x00,0x18,0x24,0x24,0x18,0x18,0x7E,0x66,//右边小人的初始形态
                                                0x66,0x24,0x3C,0x24,0x24,0x24,0x24,0x00};

unsigned char buff2[16]={0x00,0x18,0x24,0x24,0x18,0x18,0x7E,0x66,//右边小人的初始形态
                                                0x66,0x24,0x3C,0x24,0x24,0x24,0x24,0x00};

//定义两名选手的操作键

//选手1
#define S11 P1_0//向前
#define S12 P1_1//后退
#define S13 P1_2//出拳
#define S14 P1_3//出腿

//选手2
#define S21 P1_4//向前
#define S22 P1_5//向后
#define S23 P1_6//出出
#define S24 P1_7//腿拳

//两个选手的led点阵行扫描使能端
#define A_1 P0_0
#define B_1 P0_1
#define C_1 P0_2
#define D_1 P0_3


//两个选手的2个595使能端
#define SCLK P2_0
#define SI P2_1
#define RCLK P2_2


//当按下S1时 开始游戏,游戏结束时显示哪方获胜,然后按下S2键后重新开始新一轮游戏
#define S1 P2_6
#define S2 P2_7

//第一个人的74HC154区域行选
#define NUMLED1OPEN(); {D_1=0;C_1=0;B_1=0;A_1=0;};
#define NUMLED2OPEN(); {D_1=0;C_1=0;B_1=0;A_1=1;};
#define NUMLED3OPEN(); {D_1=0;C_1=0;B_1=1;A_1=0;};
#define NUMLED4OPEN(); {D_1=0;C_1=0;B_1=1;A_1=1;};
#define NUMLED5OPEN(); {D_1=0;C_1=1;B_1=0;A_1=0;};
#define NUMLED6OPEN(); {D_1=0;C_1=1;B_1=0;A_1=1;};
#define NUMLED7OPEN(); {D_1=0;C_1=1;B_1=1;A_1=0;};
#define NUMLED8OPEN(); {D_1=0;C_1=1;B_1=1;A_1=1;};
#define NUMLED9OPEN(); {D_1=1;C_1=0;B_1=0;A_1=0;};
#define NUMLED10OPEN(); {D_1=1;C_1=0;B_1=0;A_1=1;};
#define NUMLED11OPEN(); {D_1=1;C_1=0;B_1=1;A_1=0;};
#define NUMLED12OPEN(); {D_1=1;C_1=0;B_1=1;A_1=1;};
#define NUMLED13OPEN(); {D_1=1;C_1=1;B_1=0;A_1=0;};
#define NUMLED14OPEN(); {D_1=1;C_1=1;B_1=0;A_1=1;};
#define NUMLED15OPEN(); {D_1=1;C_1=1;B_1=1;A_1=0;};
#define NUMLED16OPEN(); {D_1=1;C_1=1;B_1=1;A_1=1;};

//0是第一个选手的索引表的开始 80是第二个选手开始在表中的位置
#define START1 0
#define START2 80
#define INIT 16//第一个选手从的初始状态在中间 为16
#define JUMP_UP_AND_BACK1 48//向后跳起的缓冲动作的位置
#define JUMP_UP_AND_BACK2 64//向后跳起的缓冲动作的位置
#define BACK 0//在最边后面的状态的位置
#define FORTH 32//在最前面的状态的位置

#define GO 0//游戏的开始画面 然后按S1开始游戏
//#define KO 32
#define P1_WIN 64//显示P1胜利在索引表中的位置
#define P2_WIN 96//显示P2胜利在索引表中的位置

//图像表
//人物的各种形态和位置
unsigned char code role_action[]=
{
0x00,0x0C,0x12,0x12,0x0C,0x0C,0x3F,0x33,//左边小人后退一步的状态0
0x33,0x12,0x1E,0x12,0x12,0x12,0x12,0x00,

0x00,0x18,0x24,0x24,0x18,0x18,0x7E,0x66,//左边小人的初始形态16
0x66,0x24,0x3C,0x24,0x24,0x24,0x24,0x00,

0x00,0x30,0x48,0x48,0x30,0x30,0xFC,0xCC,//左边小人前进一步的状态32
0xCC,0x48,0x78,0x48,0x48,0x48,0x48,0x00,

0x18,0x24,0x24,0x18,0x18,0x66,0x66,0x65,//左边小人向右后方向跳起的动作1 48
0x24,0x3C,0x24,0x12,0x12,0x12,0x00,0x00,

0x0C,0x12,0x12,0x0C,0x0C,0x33,0x33,0x53,//左边小人向右后方向跳起的动作2 64
0x12,0x1E,0x12,0x24,0x24,0x24,0x00,0x00,

0x00,0x30,0x48,0x48,0x30,0x30,0xCC,0xCC,//右边小人后退一步的动作80
0xCC,0x48,0x78,0x48,0x48,0x48,0x48,0x00,

0x00,0x18,0x24,0x24,0x18,0x18,0x7E,0x66,//左边小人的初始形态96
0x66,0x24,0x3C,0x24,0x24,0x24,0x24,0x00,

0x00,0x0C,0x12,0x12,0x0C,0x0C,0x33,0x33,//右边小人前进一步的状态112
0x33,0x12,0x1E,0x12,0x12,0x12,0x12,0x00,

0x18,0x24,0x24,0x18,0x18,0x66,0x66,0xA6,//右边小人向左后方向跳起的动作1 128
0x24,0x3C,0x24,0x48,0x48,0x48,0x00,0x00,

0x30,0x48,0x48,0x30,0x30,0xCC,0xCC,0xCA,//右边小人向左后方向跳起的动作2 144
0x48,0x78,0x48,0x24,0x24,0x24,0x00,0x00


};

//开机画面和结束时显示哪方胜利的索引表
unsigned char code welecome_and_end[]=
{
0x00,0x00,0x00,0x04,0xF9,0xF4,0xF9,0xF4,0x00,0x04,0xF9,0xF4,0xF9,0xF4,0x00,0x00,
0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//GO!!!  0

0x00,0x00,0x22,0x38,0x24,0x44,0x28,0x44,0x30,0x44,0x28,0x44,0x24,0x44,0x22,0x44,
0x22,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x92,0x49,0x45,0x14,0x28,0xA2,0x92,0x49,//KO 32

0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x12,0x51,0x13,0x55,0x12,0x55,0x52,0x54,0xA7,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//P1 WIN 64

0x00,0x00,0x00,0x00,0x00,0x00,0x4A,0x24,0xA2,0x2A,0xAA,0x24,0xAA,0xA2,0xA9,0x4E,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00//P2 WIN  96

};

void delayu(unsigned int time);//延时函数 延时0.1ms

void delay(unsigned int time);//延时函数 延时1ms

void NUMLEDOPEN(int i);//74HC154进行行选择,第i行


void dat_in(unsigned char dat);//将8为数据从597传送过去


void display_one_page();//先加载各方“血”的状态,并显示一张图片,显示人的状态和血的状态
void display_scene(int scene);//显示开机画面和胜负画面的函数
void change_buffer_to1(int position);//修改1的图像状态缓冲 从人物索引表的第position个8位数个开始显示
void change_buffer_to2(int position);//修改2的图像状态缓冲 从人物索引表的第position个8位数个开始显示
void action_back1();//第1个人向后一步 并将position减1 直到它不能后退
void action_back2();//第2个人向后一步 并将position减1 直到它不能后退
void action_forth1();//第1个人向前一步 并将position加1 直到它不能后退
void action_forth2();//第2个人向前一步 并将position加1 直到它不能后退
void fist_change_buff1();//由于1出拳对画面的改动 要调用change_buff1_to_bit(int pos)和change_buff1_to_bit_low(int pos)函数
void leg_change_buff1();//由于1出腿对画面的改动        要调用change_buff1_to_bit(int pos)和change_buff1_to_bit_low(int pos)函数
void fist_change_buff2();//由于2出拳对画面的改动 要调用change_buff1_to_bit(int pos)和change_buff1_to_bit_low(int pos)函数
void leg_change_buff2();//由于2出腿对画面的改动 要调用change_buff1_to_bit(int pos)和change_buff1_to_bit_low(int pos)函数
void change_buff1_to_bit(int pos); //将特定某一位置一
void change_buff2_to_bit(int pos);//将特定某一位置一
void change_buff1_to_bit_low(int pos);//将特定某一位置0
void change_buff2_to_bit_low(int pos);//将特定某一位置0
void action_fist1();//第1个人出拳 并处理减血情况
void action_fist2();//第2个人出拳 并处理减血情况
void action_leg1();//第1个人出腿 并处理减血情况
void action_leg2();//第2个人出腿 并处理减血情况
void scan_key();
//这个是函数的主体部分 分别扫描并处理向后退 向前走 出拳 出腿的动作 当出拳和出腿的时候 开启定时器
//这300ms内记录是否有对方出拳出腿的动作 并按照先扫描向后退 后扫描向前进的顺序 扫描一遍 并处理 如果没有这两个动作 直接返回调用出拳
//否则处理后再出拳 出脚的道理一致
void init_interrupt();//中断位的设置
//开启定两个时器中断 16位模式
void shed_blood1();
//记录流血的数字
void shed_blood2();

void main()
{
        int i;
        while(1)
        {
                if(S1==0)
                {
                        delay(1);
                        if(S1==0)
                        {
                                for(i=0;i<blood1;i++)
                                {
                                        change_buff1_to_bit(120+i);
                                }
                                for(i=0;i<blood2;i++)
                                {
                                        change_buff2_to_bit(120+i);
                                }

                                init_interrupt();
                                scan_key();
                        }
                        while(S2)
                        {
                                if(blood1==0)
                                        display_scene(P2_WIN);
                                else
                                        display_scene(P1_WIN);
                        }
                        blood1=7;
                        blood2=7;
                        if(S2==0)
                        {
                                delay(1);
                                while(S2)
                                {
                                        if(blood1==0)
                                                display_scene(P2_WIN);
                                        else
                                                display_scene(P1_WIN);
                                }
                        }
                       
                }
                else
                {
                        while(S1)
                        {
                                display_scene(GO);
                        }
                }

        }
}

void delayu(unsigned int time)//延时函数 延时0.1ms
{
        unsigned int i,j;
        for(i=0;i<time;i++)
        for(j=0;j<100;j++);//1000次空操作的时间约为1ms
}

void delay(unsigned int time)//延时函数 延时1ms
{
        unsigned int i,j;
        for(i=0;i<time;i++)
        for(j=0;j<1000;j++);//1000次空操作的时间约为1ms
}

void dat_in(unsigned char dat)
{
        unsigned char i;
        for(i=0;i<8;i++)
        {
                SCLK=0;
                if((dat&0X80)!=0)SI=1;
                        else SI=0;
                dat<<=1;
                SCLK=1;
        }
        //RCLK=0;                //dat_out
        //RCLK=1;
}



void NUMLEDOPEN(int i)//74HC154进行行选择,显示第一个人的led区
{
        if(i==0)
        {NUMLED1OPEN();return;}
        if(i==1)
        {NUMLED2OPEN();return;}
        if(i==2)
        {NUMLED3OPEN();return;}
        if(i==3)
        {NUMLED4OPEN();return;}
        if(i==4)
        {NUMLED5OPEN();return;}
        if(i==5)
        {NUMLED6OPEN();return;}
        if(i==6)
        {NUMLED7OPEN();return;}
        if(i==7)
        {NUMLED8OPEN();return;}
        if(i==8)
        {NUMLED9OPEN();return;}
        if(i==9)
        {NUMLED10OPEN();return;}
        if(i==10)
        {NUMLED11OPEN();return;}
        if(i==11)
        {NUMLED12OPEN();return;}
        if(i==12)
        {NUMLED13OPEN();return;}
        if(i==13)
        {NUMLED14OPEN();return;}
        if(i==14)
        {NUMLED15OPEN();return;}
        if(i==15)
        {NUMLED16OPEN();return;}
}


void display_one_page()//显示第i个人的一帧图像
{

        int i;
        for(i=0;i<blood1;i++)
        {
                change_buff1_to_bit(120+i);
        }
        for(i=0;i<blood2;i++)
        {
                change_buff2_to_bit(120+i);
        }
                //NUMLEDOPEN1(1);
        for(i=0;i<16;i++)
        {
                dat_in(0x00);
                dat_in(0x00);
                NUMLEDOPEN(i);
       
                dat_in(buff2[i]);
                dat_in(buff1[i]);
                RCLK=0;                //dat_out
                RCLK=1;
                delayu(1);
        }

}

void display_scene(int scene)//第1个人整体动画的显示函数
{

        int i;
        for(i=0;i<16;i++)
        {
               
                NUMLEDOPEN(i);
       
                dat_in(welecome_and_end[scene+i*2]);
                dat_in(welecome_and_end[scene+i*2+1]);
                RCLK=0;                //dat_out
                RCLK=1;
                delayu(1);
        }
}


void change_buffer_to1(int position)//修改1的图像状态缓冲
{
        int i;
        for(i=0;i<16;i++)
                buff1[i]=role_action[position+i];
}

void change_buffer_to2(int position)//修改2的图像状态缓冲
{
        int i;
                for(i=0;i<16;i++)
                        buff2[i]=role_action[position+i];
}

void action_back1()//第1个人向后一步
{
        int i;
       
        if(position1>0)
        {
        if(position1==2)
        {
                i=15;
                change_buffer_to1(START1+JUMP_UP_AND_BACK2);
                while(i--)
                        display_one_page();
                i=5;
                change_buffer_to1(START1+INIT);
                while(i--)
                        display_one_page();
        }
        else if(position1==1)
        {
                i=15;
                change_buffer_to1(START1+JUMP_UP_AND_BACK2);
                while(i--)
                        display_one_page();
                i=5;
                change_buffer_to1(START1+BACK);
                while(i--)
                        display_one_page();
        }
        position1--;
        }
}

void action_back2()//第2个人向后一步
{
//先显示向后跳起的动作 再显示后退的状态
        int i;
       
        if(position2>0)
        {
        if(position2==2)
        {
                i=15;
                change_buffer_to2(START1+JUMP_UP_AND_BACK1);
                while(i--)
                        display_one_page();
                i=5;
                change_buffer_to2(START2+INIT);
                while(i--)
                        display_one_page();
        }
        else if(position2==1)
        {
                i=15;
                change_buffer_to2(START2+JUMP_UP_AND_BACK2);
                while(i--)
                        display_one_page();
                i=5;
                change_buffer_to2(START2+BACK);
                while(i--)
                        display_one_page();
        }
        position2--;
        }
}

void action_forth1()//第1个人向前一步
{

        int i;

        if(position1<2)
        {
                if(position1==1)
                {
                        i=10;
                        change_buffer_to1(START1+FORTH);
                        while(i--)
                                display_one_page();
                }
                else if(position1==0)
                {
                        i=10;
                        change_buffer_to1(START1+INIT);
                        while(i--)
                                display_one_page();
                }
                position1++;
        }
       
}

void action_forth2()//第2个人向前一步
{
//直接显示向前一步的状态
int i;

        if(position2<2)
        {
                if(position2==1)
                {
                        i=10;
                        change_buffer_to2(START2+FORTH);
                        while(i--)
                                display_one_page();
                }
                else if(position2==0)
                {
                        i=10;
                        change_buffer_to2(START1+INIT);
                        while(i--)
                                display_one_page();
                }
                position2++;
        }
}

void change_buff1_to_bit(int pos)
{
        int p1=pos/8;
        int p2=pos%8;
        unsigned char flag=0x01;
        flag=flag<<p2;
        buff1[p1]=buff1[p1]|flag;
}

void change_buff2_to_bit(int pos)
{
        int p1=pos/8;
        int p2=pos%8;
        unsigned char flag=0x01;
        flag=flag<<p2;
        buff2[p1]=buff2[p1]|flag;
}

void change_buff1_to_bit_low(int pos)
{
        int p1=pos/8;
        int p2=pos%8;
        unsigned char flag=0x01;
        flag=flag<<p2;
        flag=~flag;
        buff1[p1]=buff1[p1]&flag;
}

void change_buff2_to_bit_low(int pos)
{
        int p1=pos/8;
        int p2=pos%8;
        unsigned char flag=0x01;
        flag=flag<<p2;
        flag=~flag;
        buff2[p1]=buff2[p1]&flag;
}



void fist_change_buff1()//由于1出拳对画面的改动
{

        if(position1==0)
        {
                change_buff1_to_bit(54);
                change_buff1_to_bit(55);
                change_buff1_to_bit_low(61);
                change_buff1_to_bit_low(69);
        }
        else if(position1==1)
        {
                change_buff1_to_bit(55);
                change_buff2_to_bit(48);
                change_buff1_to_bit_low(62);
                change_buff1_to_bit_low(70);
        }
        else if(position1==2)
        {
                change_buff2_to_bit(48);
                change_buff2_to_bit(49);
                change_buff1_to_bit_low(63);
                change_buff1_to_bit_low(71);
        }
}
/*
这四个函数仅改变显示缓冲的值
void fist_change_buff1();//由于1出拳对画面的改动

void leg_change_buff1();//由于1出腿对画面的改动

void fist_change_buff2();//由于2出拳对画面的改动

void leg_change_buff2();//由于2出腿对画面的改动
*/

void leg_change_buff1()//由于1出腿对画面的改动
{

        if(position1==0)
        {
                change_buff1_to_bit(85);
                change_buff1_to_bit(86);
                change_buff1_to_bit(87);
                change_buff2_to_bit(80);
                change_buff1_to_bit_low(92);
                change_buff1_to_bit_low(100);
                change_buff1_to_bit_low(108);
                change_buff1_to_bit_low(116);
        }
        else if(position1==1)
        {
                change_buff1_to_bit(86);
                change_buff1_to_bit(87);
                change_buff2_to_bit(80);
                change_buff2_to_bit(81);
                change_buff1_to_bit_low(93);
                change_buff1_to_bit_low(101);
                change_buff1_to_bit_low(109);
                change_buff1_to_bit_low(117);
        }
        else if(position1==2)
        {
                change_buff1_to_bit(87);
                change_buff2_to_bit(80);
                change_buff2_to_bit(81);
                change_buff2_to_bit(82);
                change_buff1_to_bit_low(94);
                change_buff1_to_bit_low(102);
                change_buff1_to_bit_low(110);
                change_buff1_to_bit_low(118);
        }
}

void fist_change_buff2()//由于2出拳对画面的改动
{
        if(position2==0)
        {
                change_buff2_to_bit(48);
                change_buff2_to_bit(49);
                change_buff2_to_bit_low(58);
                change_buff2_to_bit_low(66);
        }
        else if(position2==1)
        {
                change_buff2_to_bit(48);
                change_buff1_to_bit(55);
                change_buff2_to_bit_low(57);
                change_buff2_to_bit_low(65);
        }
        else if(position2==2)
        {
                change_buff1_to_bit(54);
                change_buff1_to_bit(55);
                change_buff2_to_bit_low(56);
                change_buff2_to_bit_low(64);
        }

}

void leg_change_buff2()//由于2出腿对画面的改动
{

        if(position2==0)
        {
                change_buff2_to_bit(80);
                change_buff2_to_bit(81);
                change_buff2_to_bit(82);
                change_buff1_to_bit(87);
                change_buff2_to_bit_low(91);
                change_buff2_to_bit_low(99);
                change_buff2_to_bit_low(107);
                change_buff2_to_bit_low(115);
        }
        else if(position2==1)
        {
                change_buff2_to_bit(80);
                change_buff2_to_bit(81);
                change_buff1_to_bit(86);
                change_buff1_to_bit(87);
                change_buff2_to_bit_low(90);
                change_buff2_to_bit_low(98);
                change_buff2_to_bit_low(106);
                change_buff2_to_bit_low(114);
        }
        else if(position2==2)
        {
                change_buff2_to_bit(80);
                change_buff1_to_bit(85);
                change_buff1_to_bit(86);
                change_buff1_to_bit(87);
                change_buff2_to_bit_low(89);
                change_buff2_to_bit_low(97);
                change_buff2_to_bit_low(105);
                change_buff2_to_bit_low(113);
        }
}

void action_fist1()//第1个人出拳
{
        int i;
        i=5;
        fist_change_buff1();
        shed_blood2();
        while(i--)
        {
                display_one_page();
       
        }
        i=5;
        change_buffer_to1(position1*16);
        change_buffer_to2(position2*16);

}

void action_fist2()//第2个人出拳
{
        int i;
        i=10;
        fist_change_buff2();
        shed_blood1();
        while(i--)
        {
                display_one_page();
               
        }
        change_buffer_to1(position1*16);
        change_buffer_to2(position2*16);
}

void action_leg1()//第1个人出腿
{       
        int i;
        i=10;
        leg_change_buff1();
        shed_blood2();
        while(i--)
        {
                //display_one_page1();
                display_one_page();
        }
        change_buffer_to1(position1*16);
        change_buffer_to2(position2*16);
}

void action_leg2()//第2个人出腿
{
        int i;
        i=10;
        leg_change_buff2();
        shed_blood1();
        while(i--)
        {
               
                display_one_page();
        }
        change_buffer_to1(position1*16);
        change_buffer_to2(position2*16);
}

void init_interrupt()//中断位的设置
{
TMOD=0x11;//定时器T0 T1工作在1模式 16位方式下
TH0=63536/256;//2ms一次定时器中断
TL0=63536%256;
TH1=63536/256;//2ms一次定时器中断
TL1=63536%256;
EA=1;//开总中断
ET0=1;//开定时计数器T0
ET1=1;//开定时计数器T1
}

void scan_key()
{
        while(1)
        {
                if(blood1==0||blood2==0)
                        break;

                while(S11&&S12&&S13&&S14&&S21&&S22&&S23&&S24)
                display_one_page();

                while(S11||S12||S13||S14||S21||S22||S23||S24)
                {
                        delay(1);
                        if(S11&&S12&&S13&&S14&&S21&&S22&&S23&&S24)
                        display_one_page();
                        else
                        break;
                }

                if(S12==0)
                {
                        delay(1);
                        if(S12==0)//1向后的动作
                        {
                       
                                action_back1();
                        }
                }

                if(S22==0)
                {
                        delay(1);
                        if(S22==0)//2向后的动作
                        {
               
                                action_back2();
                        }
                }

                else if(S11==0)
                {
                        delay(1);
                        if(S11==0)//1向前的动作
                        {
                       
                                action_forth1();
                        }
                }

                else if(S21==0)
                {
                        delay(1);
                        if(S21==0)//2向前的动作
                        {
                               
                                action_forth2();
                        }
                }
                else if(S13==0)
                {
               
                        delay(1);
                        if(S13==0)
                        {
                       
                                TR0=1;
                                while(TR0==1)
                                {
                                        display_one_page();
                                        if(S22==0)
                                        {
                               
                                                        delay(1);
                                                        if(S22==0)
                                                        {
                                                                count_back2=1;
                                                        }
                                        }
                                        else if(S21==0)
                                        {
                               
                                                        delay(1);
                                                        if(S21==0)
                                                        {
                                                                count_forth2=1;
                                                        }
                                        }
                                }
                       
                                action_fist1();
                        }
                }
                else if(S23==0)
                {
               
                        delay(1);
                        if(S23==0)
                        {
                       
                                TR1=1;
                                while(TR1==1)
                                {
                                        display_one_page();
                                        if(S12==0)
                                        {
                               
                                                        delay(1);
                                                        if(S12==0)
                                                        {
                                                                count_back1=1;
                                                        }
                                        }
                                        else if(S11==0)
                                        {
                               
                                                        delay(1);
                                                        if(S11==0)
                                                        {
                                                                count_forth1=1;
                                                        }
                                        }
                                }
                       
                                action_fist2();
                        }
                }

                else if(S13==0)
                {
               
                        delay(1);
                        if(S13==0)
                        {
                       
                                TR0=1;
                                while(TR0==1)
                                {
                                        display_one_page();
                                        if(S22==0)
                                        {
                               
                                                        delay(1);
                                                        if(S22==0)
                                                        {
                                                                count_back2=1;
                                                        }
                                        }
                                        else if(S21==0)
                                        {
                               
                                                        delay(1);
                                                        if(S21==0)
                                                        {
                                                                count_forth2=1;
                                                        }
                                        }
                                }
                       
                                action_fist1();
                        }
                }


                else if(S23==0)
                {
               
                        delay(1);
                        if(S23==0)
                        {
                       
                                TR1=1;
                                while(TR1==1)
                                {
                                        display_one_page();
                                        if(S12==0)
                                        {
                               
                                                        delay(1);
                                                        if(S12==0)
                                                        {
                                                                count_back1=1;
                                                        }
                                        }
                                        else if(S11==0)
                                        {
                               
                                                        delay(1);
                                                        if(S11==0)
                                                        {
                                                                count_forth1=1;
                                                        }
                                        }
                                }
                       
                                action_fist2();
                        }
                }


                else if(S14==0)
                {
               
                        delay(1);
                        if(S14==0)
                        {
                       
                                TR0=1;
                                while(TR0==1)
                                {
                                        display_one_page();
                                        if(S22==0)
                                        {
                               
                                                        delay(1);
                                                        if(S22==0)
                                                        {
                                                                count_back2=1;
                                                        }
                                        }
                                        else if(S21==0)
                                        {
                               
                                                        delay(1);
                                                        if(S21==0)
                                                        {
                                                                count_forth2=1;
                                                        }
                                        }
                                }
                                action_leg1();
                        }
                }

                else if(S24==0)
                {
               
                        delay(1);
                        if(S24==0)
                        {
                       
                                TR1=1;
                                while(TR1==1)
                                {
                                        display_one_page();
                                        if(S12==0)
                                        {
                               
                                                        delay(1);
                                                        if(S12==0)
                                                        {
                                                                count_back1=1;
                                                        }
                                        }
                                        else if(S11==0)
                                        {
                               
                                                        delay(1);
                                                        if(S11==0)
                                                        {
                                                                count_forth1=1;
                                                        }
                                        }
                                }
                       
                                action_leg2();
                        }
                }
         }
}

void shed_blood1()
{
        if(position2==1)
        {
                if(position1==2)
                {
                        if(blood1>0)
                                blood1--;
                }
        }
        else if(position2==2)
        {
                if(position1>0)
                {
               
                        if(blood1>0)
                                blood1--;
                }
        }
}

void shed_blood2()
{
        if(position1==1)
        {
                if(position2==2)
                {
                        if(blood2>0)
                                blood2--;
                }
        }
        else if(position1==2)
        {
                if(position2>0)
                {
               
                        if(blood2>0)
                                blood2--;
                }
        }
}


void handle1() interrupt 1
{

        EA=0;
       
        TH0=63536/256;//2ms一次定时器中断
        TL0=63536%256;
        time0_count++;
        if(time0_count==200)
        {
                time0_count=0;
                TR0=0;
                if(count_back2==1)
                {
                        count_back2=0;
                        action_back2();
                }
                else if(count_forth2==1)
                {
                        count_forth2=0;
                        action_forth2();
                }
        }
        EA=1;
}

void handle2() interrupt 3
{

        EA=0;
       
        TH1=63536/256;//2ms一次定时器中断
        TL1=63536%256;
        time1_count++;
        if(time1_count==200)
        {
                time1_count=0;
                TR1=0;
                if(count_back1==1)
                {
                        count_back1=0;
                        action_back1();
                }
                else if(count_forth1==1)
                {
                        count_forth1=0;
                        action_forth1();
                }
        }
        EA=1;       
}
关闭窗口

相关文章