乒乓球比赛游戏机上课讲义.ppt
乒乓球比赛游戏机要求:甲乙双方参赛,另有一裁判。用8个LED排成一条直线,以中心为界,两边各代表参赛双方的位置,其中一只点亮LED指示球的当前位置,点亮的LED依次从左到右,或从右到左,其移动速度应该能够调节。当“球”(点亮的那只LED)移动到某方的最后一位时,参赛者应能果断地按下位于自己一方的按钮,表示启动球拍击球,若击中则球向相反方向移动,若未击中,球掉出桌外,则对方得一分。设置自动计分电路,甲乙双方各用两位数码管显示计分,每计满11分为1局。双方各设一个放光二极管表示拥有发球权,每隔2次自动交换发球权,拥有发球权的一方发球才有效。
程序#includereg52.h#defineledP3sbitS1=P1^1; //甲队员sbitS2=P1^0; // 乙队员sbitC1=P1^2; //裁判unsignedchari;voiddelay(intx)//延时10*xms函数{inta,b;for(a=0;ax;a++)for(b=1;b=1200;b++);}voidfangdou(void) //防抖动函数{inti;for(i=0;i2400;i++);}
程序voidzuoyi() //单灯右移{led=0x7f;for(i=0;i=7;i++) { delay(4); //延时500ms led=(led1)|0x80;}}voidyouyi() //单灯右移函数{led=0xfe;for(i=0;i=7;i++) { delay(4); //延时500ms led=(led1)|0x01; }}
程序 { fangdou(); loop2: zuoyi(); if((led=0x7f)(S2==0)) { gotoloop1; } else { led=0x0f; //表示甲方得分有效 delay(50); led=0xff; //led清零 delay(2); P0=DB[count1];//P0口为段接位 count1++; //甲方计分器加“1” if(count112) { P0=0x83; led=0x0f; //表示甲方获胜 } } }
程序 if(S2==0) { fangdou(); loop1: youyi(); if((led=0xfe)(S1==0)) { gotoloop2; } else { led=0xf0; //表示乙方得分有效 delay(50); led=0xff; P2=DB[count2]; count2++; if(count212) { P2=0x83; led=0xf0; }
程序 } } if((C1==0)(S1==1)(S2==1)) //裁判按下 break; //返回重新开始}}