篮球计时计分系统.docx
《篮球计时计分系统.docx》由会员分享,可在线阅读,更多相关《篮球计时计分系统.docx(35页珍藏版)》请在冰点文库上搜索。
篮球计时计分系统
篮球计时计分系统
摘要:
本系统根据篮球比赛过程中计时计分等基本功能设计而成。
在以AT89S52单片机为核心实现计时计分基本功能之外,还增加了比赛过程中常见的双方犯规、失误、篮板等记录,从而使系统更具有高度的应用价值和实用功能。
关键词:
AT89S52、LCD1602、计时、计分、倒计时、复用
一、方案设计思路
1、实现最基本的篮球计分功能,在此功能基础上扩展一个中场分数切换功能。
2、计时——全场计时或者分节计时、进攻24秒、3秒禁区功能。
3、矩阵键盘功能,利用键盘控制分数的加减(+1、+2、+3、-1、中场分数切换),系统的启动、暂停、复位,等等。
并应用键盘中各键的复用进行比赛过程中犯规、失误、篮板等的记录。
4、发光二极管的使用,进行倒计时的报警。
二、设计系统框图
系统框图如上图所示,整个系统采用AT89S52作为中央处理芯片,用于提供时钟、数据处理、显示控制等。
矩阵键盘起到控制倒计时、分数加减、系统的启动、暂停、复位等等。
三、电路实现仿真图及其主要器件性能分析
图表1硬件设计电路
图表1为实现篮球计时计分系统所使用的电子元件芯片及具体的连接电路。
AT89S52单片机内带有程序寄存器,无须外扩程序存储器,外接12MHz晶振电路和复位电路。
按键电路由矩阵键盘组成,由P1口控制,通过按键可进行各种功能的实现。
LCD1602是一款很常用,也很易用的字符液晶显示器。
可以显示2行每行16个字符。
电源范围4.5V-5.5V,数据总线4/8线均可。
四、参考文献
1代启化基于Protues的电路设计与仿真现代电子技术2006
2沈德金单片机实验与实践教程北京航空航天大学出版社2001
3耿长青单片机应用技术北京化工出版社2002
4周立功单片机实验与实践教程2006
5马忠梅单片机C语言Windows环境编程宝典2003
附件:
(程序)
//*************************主程序****************************//
#include"reg52.h"
#include"LCD1602.h"
#include"intrins.h"
unsignedintCount=0;
unsignedchart;
unsignedinta=0;
unsignedintb=0;
intmsec1=0;
intmsec2=0;
intmsec3=0;
intsec=0;
intdao=3;
intmin=12;
intsecond=24;
unsignedintJgeiwei=0;
unsignedintYgeiwei=0;
unsignedintm,m1=0;
unsignedintn,n1=0;
unsignedintx1=0,y1=0,z1=0,s1=0,p1=0;
unsignedintx2=0,y2=0,z2=0,s2=0,p2=0;
unsignedchara1,b1,c1,d1;
unsignedcharTempBuffer[16];
unsignedcharScore[16]={'A','-','0','0','0',':
','0','0','0','-','B','','3',':
','0','0'};
unsignedcharkey;
unsignedchartemp;
unsignedchark;
sbitp20=P2^0;
voidkeyscan();
voiddelay();
voidt0_init();
voidt1_init();
voiduart_init();
voidSdisplay();
voiddisplay1();
voiddisplay2();
voiddisplay3();
voiddisplay4();
voiddisplay5();
voiddisplay6();
voiddisplay7();
voiddisplay8();
voiddisplay9();
voiddisplay10();
voiddisplay11();
voiddisplay12();
voiddisplay13();
voiddisplay14();
voiddisplay15();
voiddisplay16();
voidDelay1ms(unsignedcharcount);
voidDispaly(unsignedchark);
timer0()interrupt1using1
{
TH0=0X0D8;
TL0=0X0F0;
p20=1;
Count++;
if(Count!
=1)
return;
else
{
if(min==12&&sec==0&&msec1==0)
{
min=11;
sec=59;
msec1=99;
}
Count=0;
msec1--;
if(msec1<0)
{
msec1=99;
sec--;
if(sec<0)
{
sec=59;
min--;
if(msec1==99&&sec==60)
{
sec=59;
}
}
}
}
}
timer1()interrupt3using2
{
TH1=0X0D8;
TL1=0X0F0;
p20=1;
Count++;
if(Count!
=1)
return;
else
{
if(msec2==0&&dao==3)
{
dao=2;
msec2=99;
}
Count=0;
msec2--;
if(msec2<0)
{
msec2=99;
dao--;
}
}
}
timer2()interrupt5using3
{
TF2=0;
TH2=0xD8;
TL2=0xF0;
p20=1;
Count++;
if(Count!
=1)
return;
else
{
if(msec3==0&&second==24)
{
second=23;
msec3=99;
}
Count=0;
msec3--;
if(msec3<0)
{
msec3--;
msec3=99;
second--;
}
}
}
voidSdisplay()
{
TempBuffer[15]=(msec3%10)+'0';
TempBuffer[14]=(msec3/10)+'0';
TempBuffer[13]=':
';
TempBuffer[12]=(second%10)+'0';
TempBuffer[11]=(second/10)+'0';
TempBuffer[10]='';
TempBuffer[9]='';
TempBuffer[8]='';
TempBuffer[7]=(msec1%10)+'0';
TempBuffer[6]=(msec1/10)+'0';
TempBuffer[5]=':
';
TempBuffer[4]=(sec%10)+'0';
TempBuffer[3]=(sec/10)+'0';
TempBuffer[2]=':
';
TempBuffer[1]=(min%10)+'0';
TempBuffer[0]=(min/10)+'0';
Score[0]=Score[0];
Score[1]=Score[1];
Score[2]=(Jgeiwei/100)+'0';
m=Jgeiwei%100;
Score[3]=(m/10)+'0';
n=m%10;
Score[4]=(n%10)+'0';
Score[5]=':
';
Score[6]=(Ygeiwei/100)+'0';
m=Ygeiwei%100;
Score[7]=(m/10)+'0';;
n=m%10;
Score[8]=(n%10)+'0';
Score[9]=Score[9];
Score[10]=Score[10];
Score[11]='';
Score[12]=(dao%10)+'0';
Score[13]=':
';
Score[14]=(msec2/10)+'0';
Score[15]=(msec2%10)+'0';
GotoXY(0,0);
Print(&TempBuffer[0]);
GotoXY(0,1);
Print(&Score[0]);
}
voidS1display()
{
TempBuffer[15]='';
TempBuffer[14]='l';
TempBuffer[13]='u';
TempBuffer[12]='o';
TempBuffer[11]='F';
TempBuffer[10]=(m1%10)+'0';
TempBuffer[9]=(m1/10)+'0';
TempBuffer[8]=':
';
TempBuffer[7]='S';
TempBuffer[6]='C';
TempBuffer[5]='I';
TempBuffer[4]='T';
TempBuffer[3]='L';
TempBuffer[2]='E';
TempBuffer[1]='C';
TempBuffer[0]='';
GotoXY(0,0);
Print(&TempBuffer[0]);
Score[0]='';
Score[1]='L';
Score[2]='A';
Score[3]='K';
Score[4]='E';
Score[5]='R';
Score[6]='S';
Score[7]=':
';
Score[8]='';
Score[10]=(n1%10)+'0';
Score[9]=(n1/10)+'0';
Score[11]='F';
Score[12]='o';
Score[13]='u';
Score[14]='l';
Score[15]='';
GotoXY(0,1);
Print(&Score[0]);
}
voidS2display()
{
TempBuffer[15]='S';
TempBuffer[14]='B';
TempBuffer[13]='E';
TempBuffer[12]='R';
TempBuffer[11]=(z1%10)+'0';
TempBuffer[10]=(z1/10)+'0';
TempBuffer[9]=')';
TempBuffer[8]='3';
TempBuffer[7]='(';
TempBuffer[6]=(y1%10)+'0';
TempBuffer[5]=(y1/10)+'0';
TempBuffer[4]='/';
TempBuffer[3]=(x1%10)+'0';
TempBuffer[2]=(x1/10)+'0';
TempBuffer[1]=':
';
TempBuffer[0]='A';
GotoXY(0,0);
Print(&TempBuffer[0]);
Score[15]='';
Score[14]='S';
Score[13]='I';
Score[12]='M';
Score[11]=(p1%10)+'0';
Score[10]=(p1/10)+'0';
Score[9]='';
Score[8]='S';
Score[7]='T';
Score[6]='S';
Score[5]='I';
Score[4]='S';
Score[3]='S';
Score[2]='A';
Score[1]=(s1%10)+'0';
Score[0]=(s1/10)+'0';
GotoXY(0,1);
Print(&Score[0]);
}
voidS3display()
{
TempBuffer[15]='S';
TempBuffer[14]='B';
TempBuffer[13]='E';
TempBuffer[12]='R';
TempBuffer[11]=(z2%10)+'0';
TempBuffer[10]=(z2/10)+'0';
TempBuffer[9]=')';
TempBuffer[8]='3';
TempBuffer[7]='(';
TempBuffer[6]=(y2%10)+'0';
TempBuffer[5]=(y2/10)+'0';
TempBuffer[4]='/';
TempBuffer[3]=(x2%10)+'0';
TempBuffer[2]=(x2/10)+'0';
TempBuffer[1]=':
';
TempBuffer[0]='B';
GotoXY(0,0);
Print(&TempBuffer[0]);
Score[15]='';
Score[14]='S';
Score[13]='I';
Score[12]='M';
Score[11]=(p2%10)+'0';
Score[10]=(p2/10)+'0';
Score[9]='';
Score[8]='S';
Score[7]='T';
Score[6]='S';
Score[5]='I';
Score[4]='S';
Score[3]='S';
Score[2]='A';
Score[1]=(s2%10)+'0';
Score[0]=(s2/10)+'0';
GotoXY(0,1);
Print(&Score[0]);
}
voidclose()
{
if(min==0&&sec==0&&msec1==0)
{
p20=0;
min=12;
sec=0;
msec1=0;
second=24;
msec3=0;
dao=3;
msec2=0;
Sdisplay();
EA=0;
}
if(second==0&&msec3==0||dao==0&&msec2==0)
{
p20=0;
second=24;
msec3=0;
dao=3;
msec2=0;
Sdisplay();
EA=0;
}
}
voidt2_init(void)
{
RCAP2H=0xD8;
RCAP2L=0xF0;
}
main()
{
EA=1;
t0_init();
t1_init();
t2_init();
uart_init();
TR0=0;
ET0=0;
TR1=0;
ET1=0;
TR2=0;
ET2=0;
LCD_Initial();
while
(1)
{
keyscan();
while(a==1)
{
unsignedcharcodeTempBuffer[16]={"NBAFINALS"};
unsignedcharcodeScore[16]={"CELTICS:
LAKERS"};
GotoXY(0,0);
Print(&TempBuffer[0]);
GotoXY(0,1);
Print(&Score[0]);
keyscan();
}
while(a==2)
{
S2display();
keyscan();
}
while(a==3)
{
S3display();
keyscan();
}
while(b==1||b==2)
{
S1display();
keyscan();
}
Sdisplay();
close();
}
}
voiduart_init(void)
{
SCON=0;/*串口工作方式0输出(不允许接收)*/
}
voidt0_init(void)
{
TMOD=0x11;/*T0定时方式1*/
TH0=0xD8;
TL0=0xF0;
}
voidt1_init(void)
{
TMOD=0x11;/*T1定时方式1*/
TH1=0xD8;
TL1=0xF0;
}
voidkeyscan()
{
unsignedcharn;
P1=0xfe;
n=P1;
n&=0xf0;
if(n!
=0xf0){
delay();
P1=0xfe;
n=P1;
n&=0xf0;
if(n!
=0xf0){
switch(n){
case(0xe0):
key=1;break;
case(0xd0):
key=2;break;
case(0xb0):
key=3;break;
case(0x70):
key=4;break;
}
}
}
P1=0xfd;
n=P1;
n&=0xf0;
if(n!
=0xf0){
delay();
P1=0xfd;
n=P1;
n&=0xf0;
if(n!
=0xf0){
switch(n){
case(0xe0):
key=5;break;
case(0xd0):
key=6;break;
case(0xb0):
key=7;break;
case(0x70):
key=8;break;
}
}
}
P1=0xfb;
n=P1;
n&=0xf0;
if(n!
=0xf0){
delay();
P1=0xfb;
n=P1;
n&=0xf0;
if(n!
=0xf0){
switch(n){
case(0xe0):
key=9;break;
case(0xd0):
key=10;break;
case(0xb0):
key=11;break;
case(0x70):
key=12;break;
}
}
}
P1=0xf7;
n=P1;
n&=0xf0;
if(n!
=0xf0){
delay();
P1=0xf7;
n=P1;
n&=0xf0;
if(n!
=0xf0){
switch(n){
case(0xe0):
key=13;break;
case(0xd0):
key=14;break;
case(0xb0):
key=15;break;
case(0x70):
key=16;break;
}
}
}
Dispaly(key);
}
voidDispaly(unsignedchark)
{
if(k==1)
{display1();key=0;}
elseif(k==2)
{display2();key=0;}
elseif(k==3)
{display3();key=0;}
elseif(k==4)
{display4();key=0;}
elseif(k==5)
{display5();key=0;}
elseif(k==6)
{display6();key=0;}
elseif(k==7)
{display7();key=0;}
elseif(k==8)
{display8();key=0;}
elseif(k==9)
{display9();key=0;}
elseif(k==10)
{display10();key=0;}
elseif(k==11)
{display11();key=0;}
elseif(k==12)
{display12();key=0;}
elseif(k==13)
{display13();key=0;}
elseif(k==14)
{display14();key=0;}
elseif(k==15)
{display15();key=0;}
elseif(k==16)
{display16();key=0;}
}
voiddisplay1()
{
EA=1;
ET0=1;
TR0=1;
ET2=1;
TR2=1;
}
voiddisplay2()
{
if(a==0)
{
second=24;
msec3=0;
dao=3;
msec2=0;
Sdisplay();
}
if(a==2)p1++;
Delay1ms(100);
}
voiddisplay3()
{
if(a==0)
{
Jgeiwei++;
second=24;
msec3=0;
dao=3;
msec2=0;
EA=0;
Delay1ms(100);
}
if(a==2)x1++;
Delay1ms(100);
}
voiddisplay4()
{
if(a==0)
{Ygeiwei++;
second=24;
msec3=0;
dao=3;
msec2=0;
EA=0;
Delay1ms(100);
}
if(a==3)x2++;
Delay1ms(100);
}
voiddisplay5()
{
EA=0;
ET0=0;
TR0=0;
ET1=0;
TR1=0;
ET2=0;
TR2=0;
if(b==1)
{
m1++;
Delay1ms(100);
}
if(b==2)
{
n1++;
Delay1ms(100);
}
}
voiddisplay6()
{
if(a==0)
{
a1=Score[0];
b1=Score[1];
c1=Score[9];
d1=Score[10];
}
a++;
if(a==4)
{a=0;
Score[0]=a1;
Score[1]=b1;
Score[9]=c1;
Score[10]=d1;
}
Delay1ms(100);
}
voiddisplay7()
{
if(a==0)
{
Jgeiwei=Jgeiwei+2;
second=24;
msec3=0;
dao=3;
msec2=0;
EA=0;
Delay1ms(100);
}
if(a==2)y1++;
Delay1ms(100);