电子竞赛打分系统软件Word文档下载推荐.docx
《电子竞赛打分系统软件Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《电子竞赛打分系统软件Word文档下载推荐.docx(21页珍藏版)》请在冰豆网上搜索。
结束语……………………………………………………………22
致谢…………………………………………………………………23
1.引言
在计算机的发展历史上,运算和控制一直是计算机功能实施的2条主线。
其角色的转换也常常困扰着人们的认识思路和研发目标。
这是一对矛盾,对于不同的课题或截然不同的2个方面,用相同的价值去衡量显然是不合适的。
在20世纪70年代,半导体微电子专家为了绕开这个矛盾,深有远虑地另辟蹊径,按照嵌入式微控器系统的发展思路,交一个微型计算核心部件集成在一个芯片上,这就形成最早的单片机。
如今单片机的用途十分广泛,这次毕业设计的内容就是利用单片机与微机之间的数据传输和处理来实现竞赛打分系统。
竞赛评分系统按照时下流行的评委打分方式设计,有比较完善的竞赛评分功能。
通过大屏幕,给观众强烈的视觉感受,凝聚比赛现场气氛,体现评委公正裁决。
该系统主要适用于企事业单位、学校、娱乐行业等组织的各类选拔赛、技能比武、运动会等活动,如:
歌手大赛、演讲比赛、朗诵比赛、模特选拔赛、演员考试、技能演示等。
使活动组织轻松且象电视节目一样专业。
本评分系统操作简单,实用性强,是开展评委打分比赛的得力助手!
本系统由计算机、打分终端、显示终端等组成,采用总线结构,连线少、结构简单,便于扩展。
2.单片机介绍
在20世纪70年代,半导体微电子专家按照嵌入式微控器系统的发展思路,交一个微型计算核心部件集成在一个芯片上,这就形成最早的单片机(single
chip
micrcomputer)。
1974年,美国仙童(Firchild)公司研制的世界第一台单片微型机F8.该机有两块集成电路芯片组成,结构奇特,具有与众不同的指令系统,深受民用电器和仪器仪表领域的欢迎和重视.从此,单片机开始迅速发展,应用领域也在不断扩大。
现已成为微型计算机的重要分支,单片机的发展过程通常可以分为一下几个发展过程。
(1) 第一代单片机(1974-1976):
这是单片机发展的起步阶段.在这个时期生产的单片机特点是,制造工艺落后和集成度低,而且采用了双片形式.典型的代表产品有Fairchild公司的F8和Mostek387公司的3870等.
2) 第二代单片机(1976-1978):
这是单片机的第二发展阶段.这个时代生产的单片机随眼已能在单块芯片内集成CPU,并行口,定时器,RAM和ROM等功能部件,但性能低,品种少,应用范围也不是很广,典型的产品有Inrel公司的MCS-48系列机.
(3) 第三代单片机(1979-1982):
这是八位单片机成熟的阶段.这一代单片机和前两代相比,不仅存储容量和寻址范围大,而且中断源,并行I/O口和定时器/计数器个数都有了不同程度的增加,更有甚者是新集成了全双工串行通信接口电路.在指令系统方面,普遍增设了乘除法和比较指令。
这一时期生产的单片机品种齐全,可以满足各种不同领域的需要。
代表产品有Intel公司的MCS-51系列机,Motorola公司的MC6801系机,TI公司的TMS7000系列机,此外,Rockwell,NS,GI和日本松下等公司也先后生产了自己的单片机系列.
(4) 第四代单片机(1983年以后):
这是十六位单片机和八位高性能单片机并行发展的时代,十六位机的特点是,工艺先进,集成度高和内部功能强,加法运算速度可达到1uS以上,而且允许用户采用面向工业控制的专用语言,如PL/MPLUSC和Forth语言等.代便产品有intel公司的MCS-96系列,TI公司的TMS9900,NEC公司的783×
×
系列和NS公司的HPC16040等。
然而,由于十六位单片机价格比较贵,销售量不大,大量应用领域需要的是高性能,大容量和多功能新型八位单片机.这些单片机有Intel公司的88044(双CPU工作),Zilog公司的Super8(含DMA通道),Motorola公司的MC68CH11(内含E2prom及A/D电路)和WDC公司的65C124(内含网络接口电路),等等。
目前,八位高性能单片机以成为主流,单片机发展具体体现在以下几个方面:
1.CPU功能增强;
2.内部资源增多;
3.引脚的多功能化;
4.低电压低功耗。
3.软件开发工具介绍
Visualbasic简称vb,它的功能强大,不仅仅在于他本身的变成能力,还在于它可以直接调用DLL,通过DLL程序员可以访问构成Windows操作系统的许多过程,例如窗口与图形的显示,内存管理。
人们将这些过程称作WindowsAPI。
在这些API中还包含了成千上万的函数,例如,类型和常量定义,通过在visualbasic程序中声明外部过程,能够访问并使用这些WindowsAPI及其它外部DLL,调用他们的方法与调用visualbasic自己的过程相同。
ActiveAPI控件的使用和OLE自动化是增强vb功能的另外一个途径,通过它们程序员能够访问外部应用程序提供的大量对象。
Vb允许选择和管理外接程序,这是对vb的扩充,这些扩充增强了vb开发环境的能力。
自从1991年推出以来,vb已经成为最为流行的编程语言之一,vb即visualbasic,visual是指可视化的编程方法,basic是指在原有basic语言的基础上发展起来的编程语言,visialbasci继承了basic语言易学易用的特点,。
什么是可视化的编程方法呢?
采用这种编程方法,可以不必通过代码来描述界面上元素的外形和位置,只需要把事先建立的对象拖到屏幕上,再通过鼠标的调节他们的位置和尺寸。
现在有了visualbasic,即使没有经过严格的程序设计培训,也能开发出不错的程序,现在vb已经有了数百个语句,函数及关键词,其中有很多和windowsGUI有直接关系。
本打分系统采用了vb编程。
4.打分系统
竞赛打分时通常有多个评委,每人一个终端,各个终端通过电缆与计算机相连,由计算机按照某种评分规则计算选手的最终得分,再显示的大屏幕上。
所以,设计本系统首先要确定各个终端与计算机的通信问题。
4.1分终端与主机(微机)的通信方式
(1)并行连接方式
打分终端与主机的打印口相连接,采用总线方式,如下图所示:
每个打分终端设置不同的地址,用地址译码器对地址线上的信号进行译码。
主机采用查询方式读取第个打分终端上的数据。
这种方式软件和硬件设计简单,但连线多,另外,通信距离有限(数米内)。
(2)采用单独连接的串行通信方式
每一个打分终端单独用三根通信线与主机连接,主机需要有多串口卡。
如下图所示:
这种方式软件设计简单,通信距离远(数十米),但连线多,另外,且主机需要有多串口卡。
(3)采用总线结构的串行通信方式
每个打分终端设置不同的地址,主机采用查询方式读取第个打分终端上的数据。
这种方式必须采用RS-485通信,通信距离远(数十米),连线少,易于增减终端数量,但软件设计稍复杂。
基于上述三种方式的优缺点,我们选用了第三种方式,即RS-485总线方式。
4.2打分终端设计
打分终端是一个单片机系统,包括显示器,键盘、RS485接口等部件。
(1)单片机
选用MCS51系列的AT89C51,该单片机芯片内含4KB的程序存储器,有四个8位的并行口和一个串行口,两个16位计数/定时器,5个中断源,这些内部资源完全可以满足本设计的需要。
(2)显示器
打分终端上应有显示器,用于显示分值,可选用数码液晶显示器或LED数码管,考虑到成本原因,本设计采用4个LED数码管作为显示器。
为了简化设计,分值可为四位整数或小数。
四个LED数码管采用动态扫描方式。
(3)键盘
有12个键,包括10个数字键、一个小数点键和一个确定键。
12键连接成4×
3的矩阵,占用单片机的7根并口线,软件上采用反转法读取键盘。
(4)打分终端数量
为了简化硬件,本设计只制作了三个打分终端。
(5) 显示终端
本应使用单片机控制大型LED数码管显示总得分,因条件限制,只使用4个小LED数码管作显示终端。
4.3软件设计
竞赛打分系统主机负责对终端进行查询,读取分值,并进行统计、显示总分、存储等。
基于打分终端与主机之间采用RS-485总线连接,主机上需连接RS-232到RS-485转换器,我们使用了商品化的转换器。
竞赛打分时通常要去掉一个最高分和一个最低分,剩余的取平均值或总和。
本课题中打分终端数量少,所以不能去掉最高分和最低分,采用求总分或求均分的方法。
软件设计为在屏幕上显示一个表格,分别显示每个评委的打分及统计的总分(或均分),如下表所示:
XXX竞赛成绩统计表
评委A
评委B
评委C
总分
参赛队员1
参赛队员2
软件除了统计成绩外,还应能够保存成绩,并可打开以往保存的比赛成绩。
5.软件的实现
5.1系统功能框图
图5.1.1
从图5.1.1的框图可以分为两个主要的窗口,既打分系统的主界面和显示得分表的界面,在主界面我们主要是进行打分前的设置,例如比赛的名称,参赛选手的姓名,裁判的人数,采用何种记分规则等等。
而第二个主要窗口是用来显示各选手的成绩表,在该窗口中可以对各位选手的成绩进行排序,并且可以按照预先设置好的记分方式来显示各各裁判所打的分数,并且记录他们的总分或者是平均分数。
并且在该窗口中可以记录保存选手的成绩或者调出以往选手的成绩。
当系统收到评委的打分时,系统会根据打分终端的编号将数据显示主窗口对应的文本框中,同时填入成绩表对应的单元格中,保证两个窗口中数据的一致性。
5.2打分系统软件设计
本软件主要部分分为两部分,第一部分界面如图5.2.1
该界面主要是显示裁判打分,并且显示选手姓名,编号和得分。
而选手姓名的编辑和打分规则的设置如下图5.2.2和图5.2.3,图5.2.4
图5.2.1
图5.2.2
图5.2.3
图5.2.4
1.主窗口部分
在图5.2.1中有两个按钮“前一选手”和“下一选手”其实现功能的代码如下。
PrivateSubCommand1_Click()'
下一选手按钮
IfIndex<
Form1.FG1.Rows-1Then
Command2.Enabled=True
Index=Index+1
Calldisp(Index)
Else
Command1.Enabled=False
EndIf
EndSub
PrivateSubCommand2_Click()
Index=Index-1
Command1.Enabled=True
IfIndex=1Then
Command2.Enabled=False
Command1.SetFocus
EndIf
初始化全局变量Index=1,指向表格中的第一选手,这时“前一选手”按键为不可用状态,既将其Enabled属性设置为False,“下一选手”按键的Enabled属性为Ture,当用户电击“下一选手”按键时,将Index+1,同时将“前一选手”按键设置为可用,同时判断是否已达表格的最后一行,代码
IfIndex<
Form1.FG1.Rows–1Then
就实现了上面的判断功能,若已达最后一行,I则将该键设置为不可用,既语句
Command1.Enabled=False
按照新的Index值将相应编号选手的得分情况显示在主窗体上。
当用户点击“前一选手”键时,先将“下一选手”键设置为可用,将变量Index-1,显示相应选手得分情况,同时判断是否已经达到表格第一行,若已达到,则将该按钮设置为不可用。
其判断语句为
IfIndex=1Then
通常情况下,要去掉一个最高分,一个最低分,然后计算最后得分,但本系统由于只有三个打分终端,因此无法实现上述功能。
在本系统里计算选手最后得分要根据评分规则和评委人数,可以求总分或着求均分,其默认为求总分。
图5.2.4就是设置求分方法的界面。
其设置求均分或者总分的代码如下:
PublicSubCommand1_Click()
DimIAsInteger,NAsInteger
N=Combo1.Text
ForI=0To7'
先将8个格子全设置为不可操作
Form2.Text1(I).BackColor=&
H80000000'
灰色
Form2.Label3(I).Visible=False
NextI
ForI=0ToN-1'
再将N个格子设置为可操作
H80000005'
白色
Form2.Label3(I).Visible=True
IfOption1Then
Form1.FG1.TextArray(10)="
总分"
平均分"
Form3.Hide
Form2.Enabled=True
在设置求分方法后,我们并没有马上计算总分或者是均分,而是把这个工作放在了Timer1_Timer这个事件中,Timer1_Timer将在以后说明。
在上面的程序里我门还能选择裁判人数,同时实现把没有被选择的裁判所在的格子变成灰色。
在图5.2.1中左下角中那个电话形状的控件,那个是MSComm控件,它是用来控制pc机和单片机通信的。
其设置如图5.25
图5.2.5
在该控件中的设置串口1的波特率9600bps,没有校验码,8位数据位,1位停止位。
由于接收数据是随机的,所以我们采用中断方式接收,在程序中建立了一个该控件的MSComm1_OnComm的事件过程,并将其设置为当收到第5个字符时开始中断,打分中断发送数据的格式为,终端编号4个字符,分数可以是一到五个字符(含一个小数点),再加上1个字节累加和,所以每次通讯至少6个字符最多10个字符。
由于打分终端发送每个数据的字符个数不等,为了能够保证完整接收数据,在MSComm1_OnComm事件过程中没有立刻接收数据,而是启动了一个定时器,定时器的时间值设置为0.1秒,过0.1秒后本次数据一定发送完毕,这时在定时器的Timer1_Timer事件过程中接收数据,因为传输率为9600bps,所以传输每个字符的时间大约为1.1毫秒,所以10个字符传输的时间最多为11毫秒。
在Timer1_Timer事件过程中将接受到的数据一次性读入到字符型变量中,截取其前4个字符为裁判号,余下的字符为分值。
把分值填入主窗体和表格的相应单元格中。
计算机采用中断方式接收打分键盘发过来的数据,当每次通信过程中收到5个字符时引发OnComm事件,在OnComm事件过程中并没有去接收数据,而只是启动定时器Timer1。
下面是Timer1_Timer事件过程的原代码:
PrivateSubTimer1_Timer()
DimLAsInteger,NAsInteger,SAsSingle,SumAsSingle,IAsInteger
Timer1.Enabled=False'
禁止定时器
Buf=MSComm1.Input'
从串口缓冲区读数据
L=Len(Buf):
IfL<
5ThenExitSub'
不足5个字符则为错误,不予处理
N=0
ForI=1ToL–1'
除最后一个字符外,循环求前面各个字符的累加和
N=N+Val(Mid(Buf,I,1))
NextI
N=NMod16'
保留低4位
IfN<
>
Val(Right(Buf,1))Then
MSComm1.Output=Left(Buf,4)&
“R”'
校验错,向该终端发重发命令
ExitSub'
退出,放弃本次收到的数据
EndIf
N=Val(Left(Buf,4))
S=Val(Right(Buf,L-4))
Text1(N-1).Text=S
L=Val(Text4.Text)
Form1.FG1.TextArray(L*Form1.FG1.Cols+N+1)=S
Sum=0
ForI=0To7
Sum=Sum+Val(Text1(I).Text)
IfForm3.Option2ThenSum=Sum/Val(Form3.Combo1.Text)
IfSum>
=1Then
Text3.Text=CStr(Sum)
Else
Text3.Text="
0"
&
CStr(Sum)
Form1.FG1.TextArray(L*Form1.FG1.Cols+10)=Sum
Change=True
Timer1_Timer事件不但截取信号中的裁判号和所打的分数,而且实现了总分的计算和平均分的计算,(总分和平均分的设置在Command1_Click设置里,既图5.2.4),Sum=Sum+Val(Text1(I).Text)是计算总分的,Sum=Sum/Val(Form3.Combo1.Text)是用来计算平均分数的。
同时判断得分是否小于1,若小于1,系统将在小数点前加零,代码如下Text3.Text="
CStr(Sum)。
点击“开始打分”按钮,启动定时器2(Timer2),定时器2的时间常数是200毫秒,即每隔0.2秒向打分终端发送一条打分命令(T命令),发完自动禁止定时器。
(初始状态Timer2.Enabled=False)
PrivateSubCommand3_Click()'
启动定时器2
Command3.Enabled=False
Timer2.Enabled=True
PrivateSubTimer2_Timer()'
每隔0.2秒向1个打分终端发送1条T命令
StaticIasInteger
I=I+1
IfI>
Val(Form3.Combo1.Text)Then
I=0
Timer2.Enabled=False
Command3.Enabled=True
ExitSub'
发送完毕,关闭定时器2,退出
MSComm1.Output=“000”&
Chr(I+64)&
“T”
2.记分表模块
图5.2.6
记分表界面如图5.2.6,在记分表模块中我们使用了MSFlexGrid控件,由于该控件不是VB6.0的默认控件,需要添加,点击VB“工程”菜单,在打开的“部件”对话框中选择“MicrosoftFlexGridControl6.0”选中它并点击“确定”按钮即可。
当系统启动时触发得分表Form_Load这个事件时,系统将将把该控件进行初始化设置,设置为21行,11列,其代码如下:
FG1.Cols=11
FG1.FixedRows=1
FG1.Rows=21
FG1.FontSize=12
其中一行为表头,其余为20个选手,当添加选手超过20行,表的行树将会自动扩展。
而行的扩展是在选手姓名编辑过程中就完成了。
其实现方法如下:
DoWhileI<
=Len(S)AndK<
0
IfJ>
=Form1.FG1.Rows-1Then'
若行数超过表的最后一行则扩展一行
Form1.FG1.Rows=J+1
ForK=1ToForm1.FG1.Cols-1
Form1.FG1.Row=J'
设置当前单元格
Form1.FG1.Col=K
Form1.FG1.CellAlignment=4'
该行各格文字居中中间对齐
NextK
Form1.FG1.TextArray(J*Form1.FG1.Cols)=CStr(J)&
"
'
为该行加上编号
K=InStr(I,S,vbCrLf)'
找回车符位置
IfK>
0Then
C=Mid(S,I,K-I)
ElseIfI<
=Len(S)Then
C=Mid(S,I,Len(S)-I+1)
Form1.FG1.TextArray(J*Form1.FG1.Cols+1)=C
J=J+1'
行数加一
I=K+2'
I指针指向回车换行符后的字符
Loop
表的列数是固定的,不可扩展,最左边一列用于显示行号(即选手编号),其余各列用于显示选手姓名,各评委的打分和最后得分;
表的行数据是可以扩展的,系统刚启动时默认21行,一行作表头,其余20可放20个选手的比赛成绩,添加选手人数超过20人或打开的成绩文件中选手人数超过20人时,表的行数会看上去扩充。
3.文件处理
为了保存和打开得分表文件,设计了文件处