资源描述:
《基于C51单片机的篮球计分器设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、基于C51单片机的篮球计分器设计题目要求:1.设计一款能够显示篮球比分的记分牌;2.通过加分按钮可以给A队,或B队加分;3.设计对调功能,更换场地后,AB队分数互换;仿真截图:完整源代码:#includecodeunsignedseg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//分别对应数码管显示字形0-9intm=15,n=00,x=0,y=0,jie=2,bujin=1,zanting=0,chuzantin
2、g=0;//初始化,m、n为分、秒计时x、y为A、B两队分数,其余为中间变量sbitA_add=P3^0;//A队加分按钮sbitB_add=P3^1;//B队加分按钮sbitTime_add=P3^2;//时间加按钮sbitTime_sub=P3^3;//时间减按钮sbitA_sub=P3^4;//A队减分按钮sbitB_sub=P3^5;//B队减分按钮sbitpause=P3^6;//暂停、启动按钮sbitchange=P3^7;//换场地按钮voidkeyScan();//按键扫描函数vo
3、iddelay(intt)//延时子程序,通过参数t,可以调整暂停时间{while(t--){unsignedinti;for(i=0;i<200;i++);//设置变量i的变化范围,能调整延时的单位时间长度,i越小,延时单位时间越短,精度越高}}voiddisplay(intm,intn,intx,inty)//数码管动态刷新显示程序{if(jie==1&&bujin!=2)//中间变量jie=1时,为上半场,对p1赋值P1=0xbf;//p1=0xbf,即p1=1011111B,点亮上半场对应
4、指示灯P2=0xfe;//数码管动态刷新显示程序p2=11111110,i为分钟P0=seg[m/10];//刷新显示时间显示分钟十位,调用延时程序delay(1);//延时数码管的点亮P2=0xff;P0=0;P2=0xfd;//同理,分钟个位并延时点亮P0=seg[m%10];delay(1);P2=0xff;P0=0;P2=0xfb;//秒钟十位P0=seg[n/10];delay(1);P0=0;P2=0xff;P2=0xf7;//秒钟个位P0=seg[n%10];delay(1);P0=
5、0;P2=0xff;P2=0xef;//A队分数十位P0=seg[x/10];delay(1);P2=0xff;P0=0;P2=0xdf;//A队分数个位P0=seg[x%10];delay(10);P2=0xff;P0=0;P2=0xbf;//B队分数十位P0=seg[y/10];delay(1);P0=0;P2=0xff;P2=0x7f;//B队分数个位P0=seg[y%10];delay(1);P0=0;P2=0xff;}voidt0(void)interrupt1//调用定时器T0基本计时
6、单位秒中断{inti;TH0=0xb1;//利用定时器T0,送入计数初值TH0,TL0TL0=0x10;//定时器定时单位为20msi++;if(i==50)//利用中间变量i,令i的值为5050*20ms=1秒{if(n==0)//分钟与秒时间的调整当秒减到0后分钟减1{n=60;if(m>0)m--;}n--;//实现1秒计时i=0;}}voidmain()//主程序{TMOD=0x01;//设置定时器工作方式EA=1;ET0=1;TH0=0xb1;//定时计送计数初值,EA=1,开中断p3口
7、电平拉高TL0=0x10;//p1-0x7f,上半场指示灯点亮TR0=1;P3=0xff;P1=0x7f;while(1)//通过while(1),反复调用循环体内子程序{display(m,n,x,y);//调用动态刷新显示程序keyScan();//按键处理函数if(m<=0&&n<=0)//时间结束了{ET0=0;//关闭中断,停止计时TR0=0;}}}voidkeyScan()//按键扫描函数{inttemp;//中间变量temp,检测到有按键按下时交换A,B两队分数if(A_add==0
8、)//当检测到A队加分按键按下,对应加分{delay(1);//调用延时子程序,实现按键抖动功能,即当检测到按键按下时,延时,按键仍按下,说明非抖动,A队对应加分if(A_add==0){x++;}}if(B_add==0)//B队加分键被按下{delay(1);if(B_add==0){y++;}}if(A_sub==0)//A队减分{delay(1);if(A_sub==0){if(x>=1)x--;}}if(B_sub==0)//B队减分{delay(1);if(B_sub=