#include <reg52.h>
#include <intrins.h>
#include <demo.h>
#define uchar unsigned char
#define uint unsigned int
sbit player1=P3^0;//玩家1计数
sbit player2=P3^1;//玩家2计数
sbit button1=P3^4;//复位--开始按钮
sbit button2=P3^2;//玩家1
sbit button3=P3^3;//玩家2
sbit button4=P3^7;//预设按键
sbit bee=P3^5;//指示灯
sbit numer=P3^6;//预设值
uchar temp1,temp2,a,b,num;
uchar n,m,c;//c=预设值
uchar y;//标志位 y
uint n1,n2;
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//段码表段位,共阳数码管显示0到9
/*********************************************/
void delay(uchar z)//延时
{
uchar i;
while(z--)
for(i=0;i<120;i++);
}
void disp()//控制数码管
{
if(n>9)
{
n=9;
}
if(m>9)
{
m=9;
}
if(c>9)
{
c=9;
}
if(c<0)
{
c=0;
}
player1=1;
P1=table[n];
delay(10);
player1=0;
player2=1;
P1=table[m];
delay(10);
player2=0;
numer=1;
P1=table[c];
delay(10);
numer=0;
}
void key_init()
{
yushe();//预设
if(button1==0)//按下开始按钮;端口P0,P2赋初值
{
buzzer();
while(!button1);//类似于消除抖动,保证只执行一次
temp1=0xef;
temp2=0xff;
P0=temp1;
P2=temp2;
y=1;
}
if(button2==0&&y==1)//玩家1按下
{
while(!button2);
delay(5);
if(temp1!=0xef&&temp2==0xfe)//重新赋值
{
temp2=0xff;
P2=temp2;
temp1=0x7f;
P0=temp1;
}
else
{
temp1=_cror_(temp1,1);
P0=temp1;
}
}
if(button3==0&&y==1)//玩家2
{
while(!button3);
delay(5);
if(temp2==0xff&&P0==0x7f)//判断是否在初始位置
{
temp1=0xff;
P0=temp1;
temp2=0xfe;
P2=temp2;
}
else
{
temp1=_crol_(temp1,1);
P0=temp1;
}
}
if(P0==0xfe&&y==1)//判断是否到最左
{
bee=0;
y=0;
n++;
while(button1!=0&&n==c)
{
shanliang();
}
}
if(P2==0xfe&&y==1)//判断是否到最右
{
bee=0;
y=0;
m++;
while(button1!=0&&m==c)
{
shanliang();
}
}
}
void init()
{
P0=0xef;
n1=0;
n2=0;
num=0;
n=0;
m=0;
bee=1;
numer=0;
c=0;
}
void buzzer()//指示灯闪亮
{
bee=0;
delay(2000);
bee=1;
delay(2000);
bee=0;
delay(2000);
bee=1;
delay(2000);
bee=0;
delay(2000);
bee=1;
}
void yushe()//预设比分
{
if(button4==0)
{
delay(1000);
if(button4==0)//长按
{
while(!button4);
c--;
}
else //点按
{
while(!button4);
c++;
}
}
}
void shanliang()
{
P0=0xaa;
P2=0xf1;
delay(100);
P0=0x55;
P2=0x00;
delay(100);
}