篮球计分器任务书.docx
《篮球计分器任务书.docx》由会员分享,可在线阅读,更多相关《篮球计分器任务书.docx(25页珍藏版)》请在冰豆网上搜索。
![篮球计分器任务书.docx](https://file1.bdocx.com/fileroot1/2022-11/23/9a9edf52-9c41-4392-943b-df48cf23e405/9a9edf52-9c41-4392-943b-df48cf23e4051.gif)
篮球计分器任务书
设计题目:
篮球计分计时器
班级:
指导老师:
组长:
小组成员:
日期:
年月日
组长:
组员:
:
在此次设计中主要负责:
系统整体方案选择和软件总体设计
:
在此次设计中主要负责:
硬件设计(时钟电路、报警模块、按键模块、复位电路等)
:
在此次设计中主要负责:
显示模块的设计和该模块程序设计
:
在此次设计中主要负责:
程序的编制和上机调试工作
:
在此次设计中主要负责:
资料的借阅搜集和程序编制
:
在此次设计中主要负责:
Proteus软件仿真与构图
摘要
单片机,亦称单片微电脑或单片微型计算机。
它是把中央处理器(CPU)、随机存取存储器(RAM)、只读存储器(ROM)、输入/输出端口(I/0)等主要计算机功能部件都集成在一块集成电路芯片上的微型计算机。
本设计是基于8051单片机的篮球计时计分器,利用7段共阳LED作为显示器件。
在此设计中共接入了两个个四位一体7段共阳LED显示器,分别用来用来记录赛程时间和甲乙两队的比分,其中记录时间的LED中2位用于显示分钟,2位用于显示秒钟,后者用于记录甲乙队的分数,每队显示范围可达到0~99分。
赛程计时采用倒计时方式,比赛开始时启动计时,直至计时到零为止。
其次,为了配合计时器和计分器校正调整时间和比分,我们特定在本设计中设立了12个按键,用于设置,调整时间,启动,调整分数和暂停等功能。
采用单片机控制是这个系统按键操作使用简洁,LED显示,安装方便。
主控芯片采用8051单片机,采用汇编语言进行编程,编程后利用KeiluVision3来进行编译,再生成的HEX文件装入芯片中,采用Proteus软件来仿真,检验功能是否能够正常实现。
目录
1绪论4
2系统总体方案及硬件设计6
2.1总体方案:
6
2.2硬件原理图:
7
3软件设计13
3.1软件设计总体方案:
13
3.2程序设计:
15
4Proteus软件仿真22
5课程设计体会25
附1源程序代码另附
附2系统原理图另附
1、绪论
当前,在世界范围内,一个以微电子技术,计算机和通信技术为先导的,以信息技术和信息产业为中心的信息革命方兴未艾。
而计算机技术怎样与实际应用更有效地结合并有效地发挥其作用是科学界最热门的话题,也是当今计算机应用中空前活跃的领域。
篮球比赛计分计时器是为了解决比赛计分计时的问题,此装置利用了单片机8051完成比赛的计时计分的功能。
本文详细的介绍了系统硬件与软件的设计过程,采用该装置可根据实际情况进行比分修改和显示,具有功耗低,可靠性,安全性以及成本低等特点。
体育比赛计分系统是对体育过程中所产生的比分进行快速采集记录,加工处理,传递利用的信息系统。
根据不同运动项目的不同比赛规则要求,体育比赛的计分系统包括测量类,评分类,命中类,制胜类,得分类等多种类型。
篮球比赛是根据运动队在规定的比赛时间里得分多少来决定胜负的,因此,篮球比赛的计分系统是一种得分类型的系统。
篮球比赛的计分系统由计分器等多种电子设备组成,同时,根据目前高水平篮球比赛的要求,完善的篮球比赛计分系统设备应能与现场成绩处理,现场大屏幕,电视转播车等多种设备相连,以便实现高比赛现场感等功能目标。
由于单片机的集成度高,功能强,通用性好,特别是它具有体积小,重量轻,能耗低,价格便宜,可靠性高,抗干扰能力强和使用方便等独特的优点,使单片机迅速得到了推广应用,目前已经成为测量控制应用系统中优选机种和新电子产品的关键部位。
世界各大电气厂家,测控技术行业,机电行业,竞相把单片机应用于产品更新,作为实现数字化,智能化的核心部件,篮球计分计时器就是以单片机为核心的计分计时系统。
本系统采用单片机8051作为核心元件,利用7段共阴LED作为显示器件,在此设计中接入两个4位7段共阴LED显示器,其中一个用于记录时间,一个用于记录两队的分数。
其次,为了配合计时器和计分器校正调整时间和比分,我特定在本设计中设立了11个按键,其中8个用于设置,交换场地,启动和暂停等功能。
设计任务:
设计一个用于赛场的篮球计时计分器。
任务要求:
1、能显示2个队的当前比分;
2、根据各自得分情况进行加1、2、3分;
3、显示当前进攻队的进攻时间倒计;
4、计时归零时候鸣响。
2、系统总体方案及硬件设计
2.1总体方案:
篮球计时计分器主要包括单片机控制系统、计时显示模块、计分显示模块、定时报警,按键控制键盘模块。
通过这几个模块的协调工作就可以完成相应的计时计分控制和显示功能。
这四个模块的相互连接如下图(图1)所示:
图1系统结构图
本系统采用单片机8051作为本设计的核心元件。
利用7段共阳LED作为显示器件。
在此设计中共接入了2个4位7段共阳LED显示器,其中1个用于记录AB队的分数,显示器显示范围可达到0~99分,足够满足赛程需要,另外1个LED显示器则用来记录赛程时间。
赛程计时采用倒计时方式。
即比赛前将时间设置好,比赛开始时启动计时,直至计时到零为止。
计时范围可达到0~99分钟,也完全满足实际赛程的需要。
其次,为了配合计时器和计分器校正调整时间和比分,我们特定在本设计中设立了11个按键,其中8个用于设置,交换场地,启动和暂停,调时等功能。
2.2硬件原理图:
2.2.1时钟电路模块
时钟电路在单片机系统中起着非常重要的作用,是保证系统正常工作的基础。
在一个单片机应用系统中,时钟是保障系统正常工作的基准振荡定时信号,主要由晶振和外围电路组成,晶振频率的大小决定了单片机系统工作的快慢。
为达到振荡周期是12MHZ的要求,这里要采用12MHZ的晶振,另外有两个30P的电容,两晶振引脚分别连到XTAL1和XTAL2振荡脉冲输入引脚。
具体连接图如
图3所示:
图3晶振电路
2.2.2复位电路模块
复位是单片微机的初始化操作,其主要功能是把PC初始化为0000H,使单片微机从0000H单元开始执行程序。
除进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,可以按复位键以重新启动,也可以通过监视定时器来强迫复位。
RST引脚是复位信号的输入端。
实际应用中,复位操作有两种基本的形式:
一种是上电复位,另一种是按键复位,上电复位要求接通电源后,单片机自动实现复位操作,如下图所示:
按键复位是在接通电源的条件下,在单片机运行期间,用按钮开关操作使单片机复位,根据本设计的需要在比赛开始时按下复位键使系统恢复初始状态,实现对上一场比分的清零操作,开始对新一场比赛进行计分,电路图如下:
复位电路在这里采用的是上电+按钮复位电路形式,具体连接电路如图4
图4复位电路
2.2.3显示模块
显示器的显示原理:
根据设计特点,此显示选择是动态LED显示,所谓动态显示就是一位一位的轮流点亮显示器的各个位(扫描),对于显示器的每一位而言,每隔一段时间点亮一次,虽然在同一时刻只有一位显示器在工作,但由于人眼的视觉暂留效应和发光二极管熄灭的余辉,我们看到的却是多个字符“同时”显示,显示器亮度既与点亮时的通道电流有关,也与点亮时间长短和时间间隔有关,调整电流和时间参数即可实现亮度较高稳定的显示。
共阴极LED:
所有发光二极管阴极共连后接到引脚G,G叫为控制端,用于控制LED是否点亮。
若G脚接地则LED被点亮;若G脚接TTL高电平,则它熄灭。
本设计采用共阳极数码显示器,通常,共阳极接高电平,其它管脚接段驱动电路输出端。
当某段驱动电路的输出端为低电平时,该端所连接的字符导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。
同样,要求段驱动电路能提供额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。
本次设计在显示模块用到的是两个4位一体共阳极数码管,共有8个代码输入口和8个位选输入口,采用排阻提供上拉电流数码管,以保证有足够大的电流点亮数码管,采用动态驱动,使各位数码管逐个轮流受控显示,这就是动态驱动,由于扫描速度极快,显示效果与静态驱动相同,其具体图形如下图5图6所示
图5
图6
2.2.4报警模块
蜂鸣器通过一PNP三极管进行驱动,如图触发信号有基极引入。
(图7)
图7
R5电阻的功能是:
保护三极管,起到限流作用
三极管的功能则是三极管在这只作开关作用也就是饱和(开),截止(关)。
3软件设计
在设计程序之前,我们首先要对单片机应用系统预完成的任务进行深入的分析,明确系统的设计任务、功能要求和技术指标。
其次,要对系统的硬件资源和工作环境进行分析。
这是单片机应用系统程序设计的基础和条件。
3.1软件总体设计方案
本次单片机课程设计软件设计部分采用模块化程序设计,程序部分由主程序、T0中断程序、扫描显示子程序、计时加(减)1秒的子程序、暂停子程序、延时子程序等组成.其程序流程图如图9图10。
图9主程序流程图
图10扫描刷新显示子程序流程图
3.2程序设计
软件设计部分采用模块化程序设计,用汇编语言编写。
Keil是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。
另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。
在开发大型软件时更能体现高级语言的优势。
程序部分由主程序、T0中断程序、扫描显示子程序、计时加(减)1秒的子程序、暂停子程序、延时子程序等组成。
3.2.1主程序
ORG0000H
LJMPMAIN
ORG0003H
LJMPCHANGE;CHANGE为INT0中断0003H为INT0中断的入口地址;
ORG000BH
LJMPTIME;TIME为T0中断,000BH为T0中断的入口地址;
ORG0013H
LJMPTIAOSHI;TIAOSHI为INT1中断,0013H为INT1中断的入口地址;
MAIN:
MOVSP,#50H;数据指针赋值;
MOVTCON,#04H;INT1为负边沿触发;
MOV20H,#00H;秒
MOV21H,#0CH;分
MOV22H,#00H;;;;;;;;;A队分数;;;;;;;;;;;;;;;;;
MOV23H,#00H;;;;;;;;;;B队分数;;;;;;;;;;;
MOV24H,#02H;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV25H,#01H
MOV26H,#0CH;;;;;;;;;;;分钟定时区,起始定时12分钟;;
MOV30H,#00H;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV31H,#00H;;;;;;;;;时间缓冲区;;;;;;;;;;
MOV32H,#02H;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV33H,#01H;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV34H,#00H;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV35H,#00H;;;;;;;;分数显示缓冲区;;;;;;;
MOV36H,#00H;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV37H,#00H;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOVTMOD,#01H;定时器方式控制寄存器,为方式1工作,16位计数器;
MOVTH0,#03CH
MOVTL0,#0B0H;在方式1下,定时50毫秒;
MOVIE,#10000111B;开中断EA=1,EX1=1,ET0=1,EX0=1,开INT0,T0,INT1;
MOVIP,#05H;设置中断优先级INT0,INT1,T0,T1;
MOVR2,#0AH
START:
LCALLDISPT;调用时间显示程序;
LCALLDISPF;调用比分显示程序;
JNBP1.0,PP1;A队加一分
JNBP1.1,PP2;A队加两分
JNBP1.2,PP3;A队加三分
JNBP1.3,PP4;A队减一分
JNBP1.4,PP55;B队加一分
JNBP1.5,PP66;B队加两分
JNBP1.6,PP77;B队加三分
JNBP1.7,PP88;B队减一分
JBP3.0,START
LCALLDELAY;调用延时程序;
JBP3.0,START
STOP1:
JNBP3.0,STOP1
LCALLDELAY
JNBP3.0,STOP1
CPLTR0;按键奇数次开始,偶数次暂停,TR0为T0计数器的启停位;
LJMPSTART
PP55:
LJMPPP5
PP66:
LJMPPP6
PP77:
LJMPPP7
PP88:
LJMPPP8
PP1:
LCALLDELAY;;;;;A队加1;;;;;;;;;;;;
JBP1.0,PPB
STOP11:
JNBP1.0,STOP11
LCALLDELAY
JNBP1.0,STOP11
INC22H
MOVA,22H
LJMPSTOREA
PP2:
LCALLDELAY
JBP1.1,PPB
STOP22:
JNBP1.1,STOP22;;;;A队加2;;;;;;;;;;;;;;
LCALLDELAY
JNBP1.1,STOP22
MOVA,22H
ADDA,#02
MOV22H,A
LJMPSTOREA
PP3:
LCALLDELAY;;;;;;A队加3;;;;;;;;;;;
JBP1.2,PPB
STOP33:
JNBP1.2,STOP33
LCALLDELAY
JNBP1.2,STOP33
MOVA,22H
ADDA,#03
MOV22H,A
LJMPSTOREA
PP4:
LCALLDELAY;;;;;A队减1;;;;;;;;;;
JBP1.3,PPB
STOP44:
JNBP1.3,STOP44
LCALLDELAY
JNBP1.3,STOP44
DEC22H
MOVA,22H
STOREA:
MOVB,#0AH;;;;将A队的分数转化为十进制数,34H显示个位,35H显示十位;
DIVAB
MOV34H,B
MOV35H,A
PPB:
LJMPSTART
PP5:
LCALLDELAY;;B队加1;;;;;
JBP1.4,PPC
STOP55:
JNBP1.4,STOP55
LCALLDELAY
JNBP1.4,STOP55
INC23H
MOVA,23H
LJMPSTOREB
PP6:
LCALLDELAY;;;B队加2;;;;;;
JBP1.5,PPC
STOP66:
JNBP1.5,STOP66
LCALLDELAY
JNBP1.5,STOP66
MOVA,23H
ADDA,#02
MOV23H,A
LJMPSTOREB
PP7:
LCALLDELAY;;;;B队加3;;;;;;
JBP1.6,PPC
STOP77:
JNBP1.6,STOP77
LCALLDELAY
JNBP1.6,STOP77
MOVA,23H
ADDA,#03
MOV23H,A
LJMPSTOREA
PP8:
LCALLDELAY;;;;B队减1;;;;;;
JBP1.7,PPC
STOP88:
JNBP1.7,STOP88
LCALLDELAY
JNBP1.7,STOP88
DEC23H
MOVA,23H
STOREB:
MOVB,#0AH;;;;;;;将A队的分数转化为十进制数,36H显示个位,37H显示十位;
DIVAB
MOV36H,B
MOV37H,A
PPC:
LJMPSTART
DELAY:
MOVR4,#5H;;;;;延时程序2.5ms;;;;
DL00:
MOVR5,#0FFH
DL11:
DJNZR5,DL11
DJNZR4,DL00
RET
3.2.2时间中断程序
TIME:
PUSHACC;;保护现场;;;;
PUSHPSW
MOVTH0,#03CH;;;;重新装入初值;;;;
MOVTL0,#0B0H
DJNZR2,RET0;;;;等待1秒到;;;;
MOVR2,#0AH;;;重新给定R2值;;;;
MOVA,20H
CLRC
DECA
MOV20H,A
MOVA,21H
CJNEA,#00H,PFF;;;;;;;;;非0分跳转;;;;;;;;;;;;;;;;;
MOVA,20H
CJNEA,#00H,PFF;;;;;;;;;非0分0秒情况跳转;;;;;;;;;;
CLRTR0;;;;;;;;;比赛结束停止计时;;;;;;;;;;
MOV20H,#00H;;;;显示器清零;;;;;;
MOV21H,#00H
MOV32H,#00H
MOV33H,#00H
LCALLMINGYIN;;;调用MINGYIN子程序;;;;;
MOV21H,26H
MOV30H,#00H
MOV31H,#00H
MOV32H,24H
MOV33H,25H
LJMPRET0
PFF:
MOVA,20H
CJNEA,#0FFH,OUT;;不是0秒则OUT;;
MOV20H,#59;是0秒则给秒赋值59;;
MOV30H,#09H
MOV31H,#05H
MOVA,21H
DECA
MOV21H,A
OUT:
MOVA,20H;;将秒转化为十进制,输出;;;
MOVB,#0AH
DIVAB
MOV30H,B
MOV31H,A
MOVA,21H
MOVB,#0AH
DIVAB
MOV32H,B
MOV33H,A
RET0:
POPPSW
POPACC
RETI
3.2.3鸣音子程序
MINGYIN:
SETBP3.6;;;将P3.6口置1,为高电平;
MOVR4,#0FFH;;;鸣音延时;;;
MOVR7,#4
XU2:
MOVR6,#50
XU1:
MOVR5,#50
XU:
DJNZR5,XU
DJNZR6,XU1
CPLP3.6
DJNZR4,XU2
DJNZR7,XU2
RETI
3.2.4时间显示子程序
DISPT:
MOVR0,#30H;;段码偏移位地址;
MOVR3,#08H;位选地址位;
MOVA,R3
PLAYT:
MOVP2,A
MOVA,@R0;给地址偏移量;
MOVDPTR,#DSEG1
MOVCA,@A+DPTR;;查表;;;
MOVP0,A
LCALLDL1
MOVP2,#00H
MOVA,R3
RRA;;循环右移,选下一位;;
JBACC.7,LD1;;;判断显示完没有;;;
INCR0;;段码偏移位地址加1;;;
MOVR3,A
LJMPPLAYT
LD1:
RET
3.2.5比分显示子程序
DISPF:
MOVR0,#34H;段码偏移位地址;
MOVR3,#80H;位选地址位;
MOVA,R3
PLAYF:
MOVP2,A
MOVA,@R0
MOVDPTR,#DSEG1
MOVCA,@A+DPTR;查表;
MOVP0,A
LCALLDL1
MOVP2,#00H
MOVA,R3
RRA;;循环右移,选下一位;;
JBACC.3,LD1;;;判断显示完没有;;;
INCR0;;段码偏移位地址加1;;;
MOVR3,A
LJMPPLAYF
AJMPLD1
3.2.6调时时间显示程序:
DISPW:
MOVR0,#24H;段码偏移位地址;
MOVR3,#08H;;位选地址位;
MOVA,R3
PLAYW:
MOVP2,A
MOVA,@R0
MOVDPTR,#DSEG1
MOVCA,@A+DPTR
MOVP0,A
LCALLDL1
MOVP2,#00H
MOVA,R3
RRA;;循环右移,选下一位;;
JBACC.1,LD1;;;判断显示完没有;;;
INCR0;;段码偏移位地址加1;;;
MOVR3,A
LJMPPLAYW
DL1:
MOVR7,#05H
DL:
MOVR6,#0FFH
DL6:
DJNZR6,DL6
DJNZR7,DL
RET
DSEG1:
DB0C0H,0F9H,0A4H,0B0H,99H;段码表;;
DB92H,82H,0F8H,80H,90H
;;;;;;;;;调时子程序;;;;;;;;;;;;;
TIAOSHI:
PUSHACC;;保护现场;;;
PUSHPSW
JBP3.3,CHU
LCALLDELAY
JBP3.3,CHU
STOPQ:
JNBP3.3,STOPQ
LCALLDELAY
JNBP3.3,STOPQ
IF10:
LCALLDISPW
LCALLDISPF
JNBP1.3,DECT
JBP1.0,WHAIT2
LCALLDELAY
JBP1.0,WHAIT2
STOPE:
MOVC,P1.0;;;时间分加1;;;;
JNCSTOPE
LCALLDELAY
MOVC,P1.0
JNCSTOPE
INC26H
LJMPSTORE
DECT:
MOVC,P1.3
LCALLDELAY
JCWHAIT2
STOPY:
MOVC,P1.3;;;;时间分减1;;;;;
JNCSTOPY
LCALLDELAY
MOVC,P1.3
JNCSTOPY
DEC26H
STORE:
MOV21H,26H;;;将时间转化为十进制数显示;;;;
MOV20H,#00H
MOVA,26H
MOVB,#0AH
DIVAB
MOV24H,B
MOV25H,A
MOV30H,#00H
MOV31H,#00H
MOV32H,24H
MOV33H,25H
LJMPIF10
WHAIT2:
JBP3.3,IF10
LCALLDELAY
JBP3.3,IF10
STOPG:
JNBP3.3,STOPG
LCALLDELAY