📄 main.c
字号:
Delay_x10ms(1000);
return 1;
}
/////////////////////////////////////
//P2口读数
/////////////////////////////////////
uchar Read_P2()
{
P2=0xFF;
return(P2&0x0F);
}
/////////////////////////////////////
//比赛结果信息显示
/////////////////////////////////////
void infoflash(uchar* a,uchar* b,uchar flag)
{
uchar i;
put_picture_half(Bmp1,R);
LCD_CLR(L);
put_chinese(chinese[20],4,0,0);//甲
put_chinese(chinese[21],6,0,0);//乙
if(flag) put_chinese(chinese[21],0,8,1);
else put_chinese(chinese[20],0,8,1);
put_chinese(chinese[13],0,24,1);put_chinese(chinese[14],0,40,1);//shengli
put_num(num10[1],2,20,1);
put_num(num10[2],2,36,1);
put_num(num10[3],2,52,1);
for(i=0;i<3;i++){
if(a[i]>9)
put_num(num10[1],4,16+i*16,0);//甲
else put_num(num10[0],4,16+i*16,0);
if(a[i]>9)
put_num(num10[a[i]-10],4,16+i*16+8,0);
else put_num(num10[a[i]],4,16+i*16+8,0);
if(b[i]>9)
put_num(num10[1],6,16+i*16,0);//乙
else put_num(num10[0],6,16+i*16,0);
if(b[i]>9)
put_num(num10[b[i]-10],6,16+i*16+8,0);
else put_num(num10[b[i]],6,16+i*16+8,0);}
enter();
}
/////////////////////////////////////
//双打模式控制
/////////////////////////////////////
uchar double_modle_1(uchar send_id)
{
uchar state=0,value;
uchar direction;
put_chinese(chinese[17],4,24,0);//发球
put_chinese(chinese[16],4,40,0);
P3=0xFF;
switch(send_id)
{
case 0://甲1发球
put_num(num10[10],0,53,0);//甲
put_num(num10[11],2,53,0);
put_chinese(chinese[20],4,0,0);
put_num(num10[1],4,16,0);
do
{
button=Read_P2();
pause();
if(pauseflag==EXIT) return 1;
}while(!(button==0x01));
if(moveflag==ENTER) direction=0;
else direction=2;
break;
case 1://甲2发球
put_num(num10[10],0,53,0);//甲
put_num(num10[11],2,53,0);
put_chinese(chinese[20],4,0,0);
put_num(num10[2],4,16,0);
do
{
button=Read_P2();
pause();
if(pauseflag==EXIT) return 1;
}while(!(button==0x02));
if(moveflag==ENTER) direction=6;
else direction=5;
break;
case 2://乙1发球
direction=4;
put_num(num10[10],2,53,0);//乙
put_num(num10[11],0,53,0);
put_chinese(chinese[21],4,0,0);
put_num(num10[1],4,16,0);
do
{
button=Read_P2();
pause();
if(pauseflag==EXIT) return 1;
}while(!(button==0x08));
if(moveflag==UP) direction=1;
else direction=4;
break;
case 3://乙2发球
put_num(num10[10],2,53,0);//乙
put_num(num10[11],0,53,0);
put_chinese(chinese[21],4,0,0);
put_num(num10[2],4,16,0);
do
{
button=Read_P2();
pause();
if(pauseflag==EXIT) return 1;
}while(!(button==0x04));
if(moveflag==UP) direction=7;
else direction=3;
break;
}
while(!state)
{
moveflag=0;
if(direction==1) value=0x01;
else if(direction==0) value=0x08;
else if(direction==6) value=0x04;
else if(direction==7) value=0x02;
switch(direction)
{
case 0:
state=Ball_MoveP(0x03,1,0,speed,value);
switch(state)
{
case 0:
if(moveflag==ENTER) direction=1;
else direction=4;
moveflag=0;
break;
case 2://乙犯规,甲得分
gamenum.mark1++;
put_chinese(chinese[21],6,10,1);//yi
break;
}
break;
case 1:
state=Ball_MoveP(0x03,0,0,speed,value);
switch(state)
{
case 0:
if(moveflag==ENTER) direction=0;
else direction=2;
break;
case 1://甲犯规,乙得分
gamenum.mark2++;
put_chinese(chinese[20],6,10,1);//jia
break;
case 2://乙犯规,甲得分
gamenum.mark1++;
put_chinese(chinese[21],6,10,1);
break;
}
break;
case 2:
state=Ball_MoveRightDown(speed);
switch(state)
{
case 0:
if(moveflag==UP) direction=7;
else direction=3;
break;
case 1://甲犯规,乙得分
gamenum.mark2++;
put_chinese(chinese[20],6,10,1);
break;
case 2://乙犯规,甲得分
gamenum.mark1++;
put_chinese(chinese[21],6,10,1);//yi
break;
}
break;
case 3:
state=Ball_MoveLeftUp(speed);
switch(state)
{
case 0:
if(moveflag==ENTER) direction=0;
else direction=2;
break;
case 1://甲犯规,乙得分
gamenum.mark2++;
put_chinese(chinese[20],6,10,1);
break;
case 2://乙犯规,甲得分
gamenum.mark1++;
put_chinese(chinese[21],6,10,1);
break;
}
break;
case 4:
state=Ball_MoveLeftDown(speed);
switch(state)
{
case 0:
if(moveflag==ENTER) direction=6;
else direction=5;
break;
case 1://甲犯规,乙得分
gamenum.mark2++;
put_chinese(chinese[20],6,10,1);
break;
case 2://乙犯规,甲得分
gamenum.mark1++;
put_chinese(chinese[21],6,10,1);
break;
}
break;
case 5:
state=Ball_MoveRightUp(speed);
switch(state)
{
case 0:
if(moveflag==UP) direction=1;
else direction=4;
break;
case 1://甲犯规,乙得分
gamenum.mark2++;
put_chinese(chinese[20],6,10,1);
break;
case 2://乙犯规,甲得分
gamenum.mark1++;
put_chinese(chinese[21],6,10,1);
break;
}
break;
case 6:
state=Ball_MoveP(0xc0,1,7,speed,value);
switch(state)
{
case 0:
if(moveflag==UP) direction=7;
else direction=3;
break;
case 1://甲犯规,乙得分
gamenum.mark2++;
put_chinese(chinese[20],6,10,1);
break;
case 2://乙犯规,甲得分
gamenum.mark1++;
put_chinese(chinese[21],6,10,1);
break;
}
break;
case 7:
state=Ball_MoveP(0xc0,0,7,speed,value);
switch(state)
{
case 0:
if(moveflag==ENTER) direction=6;
else direction=5;
break;
case 1://甲犯规,乙得分
gamenum.mark2++;
put_chinese(chinese[20],6,10,1);
break;
case 2://乙犯规,甲得分
gamenum.mark1++;
put_chinese(chinese[21],6,10,1);
break;
}
break;
moveflag=0;
}
}
put_chinese(chinese[18],6,26,1);//犯规
put_chinese(chinese[19],6,42,1);
}
/*******************************
单人游戏
********************************/
uchar singlaplay()
{
uchar i,j=0,flag;
uchar a[3]={0,0,0},b[3]={0,0,0};
send_num singlaplay_send={0,0,0};//默认开始甲发球
LCD_CLR(L);LCD_CLR(R);
//画边框
for(i=0;i<8;i++){//球与信息分割线
LCD_WriteData(0xFF,i,63);}
/* for(i=0;i<64;i++){//上线
LCD_WriteData(0x03,0,64+i);}
for(i=0;i<64;i++){//下线
LCD_WriteData(0xc0,7,64+i);}
for(i=0;i<8;i++){
LCD_WriteData(0xFF,i,127);}//右边线 */
put_chinese(chinese[20],0,4,0);//甲
put_chinese(chinese[21],2,4,0);//乙
for(;;){
infodisplay();
for(i=0;i<64;i++){//上线
LCD_WriteData(0x03,0,64+i);}
for(i=0;i<64;i++){//下线
LCD_WriteData(0xc0,7,64+i);}
singlaplay_send=send_ball(singlaplay_send);
if(singla_modle_1(singlaplay_send.send_id)) return 1;;
infodisplay();
//比分局分控制
if((gamenum.mark1>=11)&&((gamenum.mark1-gamenum.mark2)>=2))
{
a[j]=gamenum.mark1;
b[j]=gamenum.mark2;
gamenum.game1++;
gamenum.mark1=0;
gamenum.mark2=0;
singlaplay_send.send1=0;
singlaplay_send.send2=0;
put_chinese(chinese[20],0,64,1);
put_chinese(chinese[13],0,80,1);
enter();LCD_CLR(R);j++;
}
else if((gamenum.mark2>=11)&&((gamenum.mark2-gamenum.mark1)>=2))
{
a[j]=gamenum.mark1;
b[j]=gamenum.mark2;
gamenum.game2++;
gamenum.mark1=0;
gamenum.mark2=0;
singlaplay_send.send1=0;
singlaplay_send.send2=0;
put_chinese(chinese[21],0,64,1);
put_chinese(chinese[13],0,80,1);
enter();LCD_CLR(R);j++;
}
if(gamenum.game2>=2) {flag=1;break;}
else if(gamenum.game1>=2) {flag=0;break;}
}
infoflash(a,b,flag);
Delay_x10ms(1000);
return 1;
}
/////////////////////////////////////
//等待确认
/////////////////////////////////////
void enter()
{
do{
button=P2&0xF0;
}while(!(button==ENTER));
}
/////////////////////////////////////
//击球中断
/////////////////////////////////////
void int0() interrupt 0 using 1
{
P2=0xFF;
buttonplay=1;
button=P2&0x0F;
}
/*******************************
发球控制。换发球每人两个(单打)
********************************/
send_num send_ball(send_num singlaplay_send)
{
if(singlaplay_send.send2==2) {singlaplay_send.send_id=0;singlaplay_send.send2=0;}
if(singlaplay_send.send1==2) {singlaplay_send.send_id=1;singlaplay_send.send1=0;}
if(singlaplay_send.send_id) singlaplay_send.send2++;
else singlaplay_send.send1++;
return singlaplay_send;
}
/*******************************
单人游戏-----
********************************/
uchar singla_modle_1(uchar send_id)
{
uchar state=0;
uchar direction,value;
put_chinese(chinese[17],4,26,0);//发球
put_chinese(chinese[16],4,42,0);
switch(send_id)
{
case 0://甲发球
direction=1;
put_num(num10[10],0,53,0);//甲
put_num(num10[11],2,53,0);
put_chinese(chinese[20],4,10,0);
do//yifa
{
button=Read_P2();
pause();
if(pauseflag==EXIT) return 1;
}while(!(button==0x01));
break;
case 1://乙发球
direction=0;
put_num(num10[10],2,53,0);//乙
put_num(num10[11],0,53,0);
put_chinese(chinese[21],4,10,0);
do//jiafa
{
button=Read_P2();
pause();
if(pauseflag==EXIT) return 1;
}while(!(button==0x08));
break;
}
while(!state)
{
if(direction) value=0x08;
else value=0x01;
state=Ball_MoveP(0x18,direction,3,speed,value);
switch(state)
{
case 0:
if(direction==0) direction=1;
else direction=0;
break;
case 1://甲犯规,乙得分
gamenum.mark2++;
put_chinese(chinese[20],6,10,1);
break;
case 2://乙犯规,甲得分
gamenum.mark1++;
put_chinese(chinese[21],6,10,1);
break;
}
put_chinese(chinese[18],6,26,1);//犯规
put_chinese(chinese[19],6,42,1);
pauseflag=0;
}
return 0;
}
/////////////////////////////////////
//比分实时显示
/////////////////////////////////////
void infodisplay()
{
uchar i;
for(i=0;i<8;i++){
LCD_WriteData(0xFF,i,127);}//右边线
put_num(num10[gamenum.game1],0,24,1);//局分甲
put_num(num10[gamenum.game2],2,24,1);//局分乙
if(gamenum.mark1>9)
put_num(num10[1],0,36,0);
else put_num(num10[0],0,36,0);
if(gamenum.mark1>9)
put_num(num10[gamenum.mark1-10],0,44,0);
else put_num(num10[gamenum.mark1],0,44,0);
if(gamenum.mark2>9)
put_num(num10[1],2,36,0);
else put_num(num10[0],2,36,0);
if(gamenum.mark2>9)
put_num(num10[gamenum.mark2-10],2,44,0);
else put_num(num10[gamenum.mark2],2,44,0);
}
/////////////////////////////////////
//暂停
/////////////////////////////////////
void pause()
{
uchar i;
if(pauseflag==DOWN){
put_picture_half(Bmp1,R);
while(pauseflag==DOWN);
LCD_CLR(R);}
for(i=0;i<8;i++){
LCD_WriteData(0xFF,i,127);}//右边线
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -