篮球比赛积分器说明书
中北大学
课程设计说明书
学年第学期
学 院:
电子与计算机科学技术学院
电子科学与技术
林少聪
学 号:
1006044238
专 业:
学 生 姓 名:
课程设计题目:
篮球比赛计分器设计
2013年1月 2日~2013年1月15日
电子科学与技术系机房
文丰 刘文怡
起 迄 日 期: 课程设计地点: 指 导 教 师: 系 主 任:
2013年 1月 15日
摘要
本设计是采用单片机AT89S52作为本设计的核心元件。利用7段共阴LED 作为显示器件。在此设计中共接入了8个7段共阴LED 显示器,其中4个用于记录AB 队的分数,每队2个LED 显示器显示范围可达到0~99分,足够满足赛程需要,另外4个LED 显示器则用来记录赛程时间,其中2个用于显示分钟,2个用于显示秒钟。赛程计时采用倒计时方式。即比赛前将时间设置好,比赛开始时启动计时,直至计时到零为止。计时范围可达到0~99分钟,也完全满足实际赛程的需要。当比赛队A 对得1分时,按下A+1键;得2分时,按下A+2键;得3分时,按下A+3键;当加分出现错误时,可以按A-1键减1分,可以达到调整分数的作用;依照同样的方法可以记录B 对的得分。
采用单片机控制使这个系统按键操作使用简洁,数码管显示,安装方便。解决了篮球比赛计分器的安装问题,节约了线材,适合在各种规模的体育场馆使用,完全可以代替传统的用钟表进行计时的方法,当然稍加改动也可以用于其他球类比赛,是体育器材向智能化发展的一个实例。
本设计可以实现:1、能记录整个赛程的比赛时间
2、能随时刷新甲、乙两队在整个过程中的比分 3、中场交换比赛场地时,能交换甲、乙两队比分的位置
目录
1 概述
1.1设计意义 ............................................ 1 1.2 设计内容 ............................................ 1 1.3 设计任务和要求 ....................................... 1 2 系统总体方案及硬件设计
2.1 AT89S52简介 ......................................... 2 2.2 数码管显示原理 ....................................... 2 2.3 总体方案: .......................................... 3 3 软件设计
3主流程图: ............................................ 4 4、课程设计体会
...................................................5
附1:源程序代码 ......................................................................................................................... 6 附2:系统原理图、PCB 图 ...................................................................................................... 14 附3:Proteus 仿真图 ...............................................15
1 概述
1.1设计意义
体育比赛计分系统是对体育比赛过程中所产生的时间, 比分等数据进行快速采集记录,加工处理,传递利用的信息系统。根据不同运动项目的不同比赛规则要求,体育比赛的计时计分系统包括测量类,评分类,命中类,制胜类得分类等多种类型。
篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计时系统是一种得分类型的系统。篮球比赛的计时系统由计时器等多种电子设备组成,同时,根据目前高水平篮球比赛要求,完善的篮球比赛计时系统设备应能够与现场成绩处理,现场大屏幕,电视转播车等多种设备相联,以便实现高比赛现场感,表演娱乐观众等功能目标。
由于单片机的集成度高,功能强,通用性好,特别是它具有体积小,重量轻,能耗低,价格便宜,可靠性高,抗干扰能力强和使用方便等独特的优点,使单片机迅速得到了推广应用,目前已经成为测量控制应用系统中的优选机种和新电子产品的关键部位。世界各大电气厂家,测控技术企业,机电行业,竞相把单片机应用于产品更新,作为实现数字化,智能化的核心部件。篮球比赛计分器就是以单片机为核心的计时计分系统,由于对于单片机是刚刚学习,对于编程也不是十分熟练,故本次设计的内容相较简单,达不到正式比赛需求,仅供学习之用。 1.2 设计内容
本系统是采用单片机AT89S52作为本设计的核心元件。利用7段共阴LED
作为显示器件。在此设计中共接入了8个7段共阴LED 显示器,其中4个用于记录AB 队的分数,每队2个LED 显示器显示范围可达到0~99分,足够满足赛程需要,另外4个LED 显示器则用来记录赛程时间,其中2个用于显示分钟,2个用于显示秒钟。赛程计时采用到计时方式。即比赛前将时间设置好,比赛开始时启动计时,直至计时到零为止。计时范围可达到0~99分钟,也完全满足实际赛程的需要。
其次,为了配合计时器和计分器校正调整时间和比分,我特定在本设计中设立了11个按键,其中8个用于设置,交换场地,启动和暂停等功能。 1.3 设计任务和要求
任务: 设计一个用于赛场的篮球计时计分器。 要求: 1、能记录整个赛程的比赛时间。
2、能随时刷新甲、乙两队在整个过程中的比分。 3、中场交换比赛场地时,能交换甲、乙两队比分的位置。
2 系统总体方案及硬件设计 2.1 AT89C52简介
单片机是在一块芯片中集成了CPU 、RAM 、ROM 、定时/计数器和多功能I/O口等计算机所需要的基本部件的大规模集成电路。
其以体积小、功能全、性价比高等诸多优点而独具特色,在工业控制、尖端武器、通信设备、家用电器等嵌入式应用领域中独占鳌头。如果说C 语言程序设计课程设计软件设计的基础课,那么单片机以其系统硬件构架完整、价格低廉、学生能动手等特点,成为工科学生硬件设计基础课。
2.2 数码管显示原理
数码管实际上是由7个发光管组成8字形构成的,加上小数点就是8个。我们分别把他命名为A,B,C,D,E,F,G,H 。
图1、 数码管内部结构图
假设我们要显示一个数字2, 那么 A、B 、G 、E 、D 这5个段的发光管亮就可以了,C 、F 、H 不亮,同时由于接法为共阴接法,那么为高电平是亮,低电平是灭。从高往低排列, P1.7-P1.0写成二进制为01011011, 把他转化为16进制则为5BH 。我们可以根据硬件的接线把数码管显示数字编制成一个表格,见下表,以后直接调用就行了。
数码管的接口有静态接口和动态接口两种。静态接口为固定显示方式,无闪烁,其电路可采用一个并行口接一个数码管,数码管的公共端按共阴接GND ,本次课程设计由于所需数码管不多,故可用些种方法接线。这种接法占用接口多,仅能接少量数码管。
动态接口采用各数码管循环轮流显示的方法,当循环显示的频率较高时,利用人眼的暂留特性,看不出闪烁显示现象,这种显示需要一个接口完成字形码
的输出,另一接口完成各数码管的轮流点亮。多位一体的数码管原理和单个的差不多。
2.3 总体方案:
图2、系统总体框图
本系统采用单片机AT89S52作为本设计的核心元件。利用7段共阴LED 作为显示器件。用按键实现加减得分和启动暂停计时等各种功能。
3 软件设计
1. 进入比赛,先设置时间为一节或着半场。默认是12分钟(按下“A+1”进行分钟加1,按下“A-1”进行分钟减1)。按下“START/PAUSE”开始比赛或者暂停。 2. 按下“CHANGFIELD ”交换场地,重新计时。
3、A+1,A+2,A+3,A-1,B+1,B+2,B+3,B-1进行两队分数调整。
4、课程设计体会
通过这两个星期的课程设计,发现了自己的很多不足,自己知识的很多漏洞,看到了自己的实践经验还是比较缺乏,理论联系实际的能力还急需提高。
在这个过程中,我也曾经因为实践经验的缺乏失落过,也曾经仿真成功而热情高涨。通过单片机课程设计,我加深了对单片机理论的理解,学回了怎样将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的不畏困难的挑战精神,从而不断地战胜自己,超越自己,我在这一设计过程中,学会了坚持不懈,不轻易言弃。设计过程,也好比是我们人类成长的历程,常有一些不如意,也许这就是在对我们提出了挑战,勇敢过,也战胜了,胜利的钟声也就一定会为我们而敲响。
此次课程设计充分锻炼了我的设计能力,给我们注入了一些全新的认识,为我以后的设计和实验奠定了基础,也为引导我以理论结合实践起到重要意义。
附1:源程序代码
#include #define uchar unsigned char #define uint unsigned int sbit keyA1=P1^0; sbit keyA2=P1^1; sbit keyA3=P1^2; sbit keyA_1=P1^3; sbit keyB1=P1^4; sbit keyB2=P1^5; sbit keyB3=P1^6; sbit keyB_1=P1^7; sbit keyst=P3^0;
sbit keyEXS=P3^2; sbit keyCHT=P3^3; //uchar 0x8e};
uchar code DIS_BIT[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; uchar cnt;
int n,fen,miao,numa,numb,numc; uchar code DIS_SEG7[]={
void displaytT(int fen,miao,numa,numb) {
code
DIS_SEG7[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,
0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71};
void delayms(uint);
uint fens,feng,miaos,miaog,numas,numag,numbs,numbg; fens=fen/10; feng=fen%10; miaos=miao/10; miaog=miao%10; numas=numa/10; numag=numa%10; numbs=numb/10;
numbg=numb%10;
P0=DIS_SEG7[fens];
P2=DIS_BIT[0];
delayms(1);
P2=0xff;
P0=0xff;
P0=DIS_SEG7[feng];
P2=DIS_BIT[1];
delayms(1);
P2=0xff;
P0=0xff;
P0=DIS_SEG7[miaos];
P2=DIS_BIT[2];
delayms(1);
P2=0xff;
P0=0xff;
P0=DIS_SEG7[miaog];
P2=DIS_BIT[3];
delayms(1);
P2=0xff;
P0=0xff;
P0=DIS_SEG7[numas];
P2=DIS_BIT[4];
delayms(1);
P2=0xff;
P0=0xff;
P0=DIS_SEG7[numag];
P2=DIS_BIT[5];
delayms(1);
P2=0xff;
P0=0xff;
P0=DIS_SEG7[numbs];
P2=DIS_BIT[6];
delayms(1);
P2=0xff;
P0=0xff;
P0=DIS_SEG7[numbg];
P2=DIS_BIT[7];
delayms(1);
P2=0xff;
P0=0xff;
}
void keyscan()
{
if(keyst==0)
{
delayms(10);
if(keyst==0)
{
TR0=~TR0;
while(!keyst);
}
}
if(keyEXS==0)
{
delayms(10);
if(keyEXS==0)
{
numc=numa;
numa=numb;
numb=numc;
while(!keyEXS);
}
}
/* if(keyCHT==0)
{
delayms(10);
if(keyCHT==0)
{
EX1=1;
while(!keyCHT);
}
} */
if(keyA1==0)
{
delayms(10);
if(keyA1==0)
{
numa++;
while(!keyA1);
}
}
if(keyA2==0)
{
delayms(10);
if(keyA2==0)
{
numa=numa+2;
while(!keyA2);
}
}
if(keyA3==0)
{
delayms(10);
if(keyA3==0)
{
numa=numa+3;
while(!keyA3);
}
}
if(keyA_1==0)
{
delayms(10);
if(keyA_1==0)
{
numa--;
while(!keyA_1);
}
}
if(keyB1==0)
{
delayms(10);
if(keyB1==0)
{
numb++;
while(!keyB1);
}
}
if(keyB2==0)
{
delayms(10);
if(keyB2==0)
{
numb=numb+2;
while(!keyB2);
}
}
if(keyB3==0)
{
delayms(10);
if(keyB3==0)
{
numb=numb+3;
while(!keyB3);
}
}
if(keyB_1==0)
{
delayms(10);
if(keyB_1==0)
{
numb--;
while(!keyB_1);
}
}
}
void main()
{
TMOD=0x00;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
EX1=1; //允许使用外中断1
IT1=1; //选择负跳变来触发外中断
ET0=1;
TR0=0;
fen=12;
miao=0;
numa=0;
numb=0;
while(1)
{
keyscan();
displaytT(fen,miao,numa,numb);
}
void delayms(uint xms) //1ms延时
{
uint i,j;
for(i=xms;i>0;i--)
{
for(j=1;j
}
}
void T0_time() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
n++;
if(n==100)
{
n=0;
miao=miao-1;
if(miao
{
miao=59;
fen--;
if(fen
{
fen=12;
miao=0;
TR0=0;
}
}
}
}
void INT_1() interrupt 2
//1s中断
if(keyA1==0)
{
delayms(10);
if(keyA1==0)
{
fen++;
while(!keyA1);
}
}
if(keyA_1==0)
{
delayms(10);
if(keyA_1==0)
{
fen--;
while(!keyA_1);
}
}
}
附2:系统原理图、PCB 图
图4、系统原理图
图5、系统PCB 图pdf 版
图6、系统PCB 图
附3:Proteus 仿真图
图7、Proteus 仿真图