{ //调用延时子程序 实现消除按键抖动功能,即,当 delay(1); //检测到按键按下时候,延时,按键仍按下,说明按键 if(RXD==0) //确实按下,非抖动,甲队对应加分 { while(RXD==0); x++;
}
}
if(TXD==0) { delay(1); if(TXD==0) {
while(TXD==0); y++;
}
} }
void keyjianfen1()
if(WR==0) { delay(1); if(WR==0) { while(WR==0); x--;
}
} if(RD==0) { delay(1);
//同理,检测乙队加分按键时候按下,并加分 //减分按键检测子程序,其基本算法及功能与加{
//相同 32
if(RD==0) {
while(RD==0); y--;
}
} }
void key2()
{
if(INT0==0)
{ delay(10);
if(INT0==0) { chuzanting==0; zanting=1; n++;
if(n==60)
{ m++; n=1;
}
} } if(INT1==0) { delay(10); if(INT1==0) {
chuzanting==0;
//显示时间调整程序,即回表和快表
//在比赛中有时经常需要回表,故写此程序 //回表子程序,检测到INT0按下时,使时间回倒// chuzanting==0; zanting=1;为附加变量,当回表按键 //松开时,表暂停,这两个变量用来调用暂停 //快表子程序,检测到INT1按下时,使倒计加快, //通常情况下与回表子程序配合使用,即当回表 //回过的时候,按此键调整时间 // chuzanting==0; zanting=1;作用同上 33
zanting=1; n--; }
} }
void shijian() / /该程序使回表和快表按键松开时候能自动暂停 {
if(zanting==1&&INT0==1&&INT1==1&&chuzanting==0 ) {
EA=0; // zanting==1&&INT0==1&&INT1==1&&chuzanting==0作用为
zanting=0; //当按键松开的时候,调用暂停程序条件
chuzanting=0; //zanting=0;chuzanting=0,初始化,以便下次回表和快表
while(1) //按键松开时候仍能调用暂停程序
{
display(m,n,x,y);
if(P1_0==0) //检测暂停键按下,开中断,跳出暂停 {
delay(1); if(P1_0==0) {
while(P1_0==0); EA=1; break; } } } } }
void key3()
//半场交换场地时自动交换双方比赛分数子程序{
int temp; //定义中间变量temp,检测到有按键按下时候 if(zidong==1&&jie==1) //交换甲队,乙队比赛分数
34
{
temp=x; // zidong==1&&jie==1是判断半场的条件 // y=temp; display(m,n,x,y); zidong=0;
bujin=0;
} }
void key4() //比赛暂停子程序 {
if(P1_0==0) //检测到暂停按键按下时候,令EA=0关闭中断 {
delay(1); //同通过死循环程序while(1),不断刷新数码管 if(P1_0==0) //当暂停键再次按下时候,开中断,以使比赛时间 { //继续倒计时,由于在暂停的时候,程序处于死循 while(P1_0==0);
EA=0; //无法回到主程序,故主程序中检测按键按下的 while(1) //无法回到主程序,即实现了暂停时,除了暂停键
{ //其他按键按下均无效
display(m,n,x,y); if(P1_0==0)
{ //当暂停键再次按下时候,EA=1开中断,计时数码管 delay(1); //继续倒计时,同时通过break语句,跳出死循环 if(P1_0==0) {
while(P1_0==0); EA=1; break; } }
35