竞赛打分系统的设计与实现及软件设计毕业设计.doc_第1页
竞赛打分系统的设计与实现及软件设计毕业设计.doc_第2页
竞赛打分系统的设计与实现及软件设计毕业设计.doc_第3页
竞赛打分系统的设计与实现及软件设计毕业设计.doc_第4页
竞赛打分系统的设计与实现及软件设计毕业设计.doc_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

淮阴师范学院毕业论文(设计)毕业设计说明书学生姓名学 号学院 计算机科学与技术学院专 业计算机科学与技术(软件工程)题 目竞赛打分系统的设计与实现指导教师 讲师/硕士 (姓 名) (专业技术职称/学位)2013年5月摘 要:竞赛打分系统是一个简单的信息发送,接收与处理系统,本系统由PC、打分终端等组成,采用串口总线通讯,语言包括VB,汇编语言。评委在各自的打分终端上输入比赛成绩,终端通过总线将数据传送到PC机,软件对各评委的打分进行统计,最终得出选手的名次。本文介绍了系统的工作原理,软件和硬件设计,给出了关键源代码及部分电路的原理图。关键字: VB,汇编语言,串行通讯,竞赛Abstract: The judges scoring system is to send a simple message, receiving and processing system, this system is composed of PC, scoring terminal, this systems languages are VB、assembler.the bus structure.the hardware structure is simple.In the traditional game score, the score, the format and effectiveness need manual inspection, is prone to errors, will also affect the fairness of the scoring.This system is: the fractional collection, analysis, processing of players, and then through the way of showing stick out a mile.After using this system, can save the game organizers of manpower, material resources. Can make the grading efficiency, accuracy can be improve. The scoring system is simple, practical, can make easy and professional activities of the organization.Key words: vb, assembler, serial , game目 录1 前言42 硬件选择43 软件选择54 通信方案65 下位机软件设计75.1主程序75.2读键盘子程序85.3发送子程序95.4显示子程序106 上位机软件设计116.1 系统实现116.2 输入选手姓名界面126.3 改变比赛项目界面126.4 成绩统计136.5 系统设置147 系统调试147.1 硬件系统调试147.2 软件系统调试15结 论17参 考 文 献18致 谢191 前言随着近几年来各种各样竞赛的风靡,主办方急需一个操作方便,价格低廉的打分系统,本评分打分系统是按照竞赛中评委打分的方式设计的,有比较完善的竞赛评分功能。该系统优点是:1、可以节省比赛主办方的人力,物力。2、使打分的效率,准确性得到整体的提高。3、本评分系统操作简单,实用性强,使活动组织更轻松,更专业。该系统适用于一切比赛下的评委打分情况如:象棋竞赛、歌唱比赛、计算机知识竞赛、乒乓球竞赛、足球竞赛等。本系统由PC、打分终端等组成,采用总线结构,硬件结构简单,便于生产,组装,可有效节省成本,节约时间。2 硬件选择选用AT89C51单片机(如图1),该MCU内含4KB的ROM,有四个8位的并行口(P1,P2等)和一个串行口,两个16位计数/定时器(T0,T1)。我们的硬件除了一个CPU以外,还有两个不可或缺的外设要选择:1、显示器 : 终端上要有显示器,用于告知评委他打的分数是什么,可选用LCD或LED数码管。本系统使用四个7段LED数码管,这种显示器是4个数码管做在一起的,四个数码管的相同接口已在内部连在一起,不同的引脚分别由同一个引脚引出,例如:7个数字端和1个小数点端接在单片机的P2口,当某一脚为低电平时对应的灯亮,输出为1时对应的灯不亮;4个序号端分别为P30、P31、P32、 P33,选择一个时候我们就可以选择哪个序号的数码管亮了。软件编码时采用扫描的方式,每次只有一个数码管亮,4个数码管轮流点亮,每个数码管亮0.005秒,4个一共是0.02秒。为了是设计简单和自动化,我们用时钟中断的方式,在中断处理函数里,我们实现了不同数码管的依次显示。2、键盘电路:由于按键较多,如果按照一个按键一个接口的方式来连接键盘则51的引脚数目要增加好几倍,所以键盘连接成mn(m=4,n=3)的矩阵形式,占用单片机的7根口线。图2-1 AT89C51单片机的结构框图本系统远端不需要太强的运算能力,单片机就可以满足我的需求。不仅可以减少硬件成本,也可以简化软件的设计3 软件选择1、上位机:VB是由微软公司开发的事件驱动编程语言。程序员可以使用VB提供的组件快速写出一个稳定的应用程序。在本项目中最重要的就是上位机和下位机之间的串口通信,而在VB中就有一个用于串口收发数据的控件, 从系统的稳定性和系统的复杂度来看, 用Visual Basic是合适的。 而且我也对他比较熟悉。 所以PC端的程序就由Visual Basic开发。2、下位机:下位机即打分终端,选择Keil开发环境和汇编语言编程。4 通信方案打分系统分工:上位机负责处理,显示和保存数据。下位机负责输入数据。在上下系统之间有一个通信的过程,通信的方法有很多种,我们可以在下面几种通信方法中选择一种。(1)并行连接方式:图4-1 并行连接每个MCU连接不同的引脚,主机采用轮讯方式读取第N个打分终端上的评委的打分。说明:MCU与主机的并口相连接优点:这种连接方式软件和硬件设计简单。缺点:连线多,通信只能在数米内进行。(2)多串口线连接方式:图4-2 多串口线连接说明:每一个MCU单独用串口线与主机连接。优点:这种方式软件设计简单,通信距离可至数十米。缺点:连线多,且主机需要有多个串口。(3)单串口线连接方式:图4-3 单串口线连接说明:每个MCU设置不同的地址,主机采用查询方式读取第N个MCU上的数据。优点:通信距离远(数十米),连线少。缺点:软件设计稍复杂。基于上述三种方式的优缺点,我们选用了第三种方式,即RS-485总线方式。5 下位机软件设计5.1主程序主程序的流程图如图5-1 所示,首先是中断,串口等的初始化,然后清空显示的“buffer”让终端显示“ 0”,然后调用读按键盘程序,直到有键被按下,然后分析被按下的键值,如果是小数点就查看小数点有没有被按下,如果没有被按下就将前一个数的高四位置一,如果已经被按下过了,则输入是错误的,此时我们可以将本次按键的值忽略不计。如果按键不是“.”,而是“OK”则我们调用发送子程序,待发送完毕,我们再次清空“发送buffer”,然后回到读按键状态。如果既不是”.”也不是”OK”,就是数字键,则首先判断是否是第一次按下数字键,如果是的话,就不用左移一位“发送buffer”了。接着将按键的值和“发送buffer”进行“或”运算,并且将运算结果存入“发送buffer”中。随后再次去等待按键的按下。图5-1 主程序5.2读键盘子程序读键盘子程序的流程图如图5-2所示,这里采用的是行反转法的读键盘程序设计,将行值置“1”如果有按键被按下那只能确定是哪一行的按键被按下,此时无法确定是哪一个按键被按下,将列值置“1”这个时候能确定是那一列的值被按下,将行和列确定了那么哪个键被按下也就确定了。然后根据此值来确定它代表的数字是什么,这就需要一个键值表了。图5-2 读键盘子程序5.3发送子程序数据发送子程序流程图如图5-3所示,先发送“主机号”,待主机号发送完毕以后,开始发送实际的的分值。其中要注意的是随时监测数据的高四位是否为“1“,如果为一的话,我们要发送小数点。这么做比较麻烦也可以在接受按键值的时候定义一个变量,在发送数字的同时,我们可以通过它来确定小数点是在哪里这样就减去了每次比较的辛苦。图5-3 发送子程序 5.4显示子程序显示子程序流程图如图5-4所示,因为显示的时候我们使用的是中断来显示的,所以按照中断函数的惯例应该是现场保护。将计数的变量取模运算,得到要显示的数据的偏移地址。接着我们判断数据的高四位是否为“1”如果是的话,我们就将“。“点亮,根据要显示的数据,我们在表中查找段代码。根据段代码来点亮“LED灯”,计数变量加一;定时计数器的计数器值置初值。恢复现场。中断返回。图5-4显示子程序流程图6 上位机软件设计软件说明:软件有FORM1,2,3,4,5,6,和Module1 其中程序的入口点是Module1,在那里我们将首先显示form2,它是软件的主窗口。下面我将一一介绍这些窗口。6.1 系统实现打分界面如图6-1见示所示,选手姓名和比赛项目可以分别通过界面来改变。评委打分情况是通过MScomm这个控件来改变的。得分是根据评委的打分情况来得到的,比如平均分和总分。下一位选手和上一位选手的改变也可以改变选手姓名,得分,评委打分情况。它是通过from1中的msflexgrid来改变的,它也可以存储一些基本的信息比如,选手的姓名,得分,评委的打分情况。值得注意的是比赛项目不可以改变。图6-1 打分界面6.2 输入选手姓名界面输入选手姓名界面如图6-2所示。图6-2 输入选手姓名界面6.3 改变比赛项目界面改变比赛项目界面如图6-3所示。图6-3 改变比赛项目界面6.4 成绩统计成绩统计界面如图6-4所示,存储比赛的所有信息。Form2中的下一位选手和上一位选手的按键的按下就意味着显示值的改变。改成什么样就要看form1中的内容了。图6-4 成绩统计界面6.5 系统设置系统设置界面如图6-5所示,改变比赛的得分情况(是取平均分还是取总分),和裁判的人数。这个直接影响到form2的显示,和form1的分数的存储情况。图6-5 系统设置界面7 系统调试7.1 硬件系统调试在本系统的硬件上有两个主要部件,在进行试验之前,一定要确保他们的正常工作。分别是输入,输出。输入是键盘,输出是LED数码管。1,LED数码管的测试:本项目中,由P2端口连接LED数码管的数据输入端,由P3的13号端口来选择在哪一个上数码管显示数字。所以我们就可以逐个的输出8字,因为数码管的全亮就是8。这样既可以检测硬件连接是否正确,也可以使我们知道LED数码管的灯是否都是正确的。方法如下:a,将P2口上全部输出为1,将P3口上的1号端口设置为一用来在第一个数码管上显示一个8和一个小数点。b,P2的管脚不变,将P3口上的2号端口输出为1.然后以此类推。遇到的问题:在显示具体数字如1,2,3,4的时候,我在P2口上输出的是该数字的原码二进制。可是老是得不到预期的结果。原来我犯了一个低级的错误,我采用了大家比较通用的方法:写了一个数组。数组里数字的序号就是要显示的值,数组里相应序号的值就是我们要往P2口输出的值。2,键盘的测试:在本系统中,利用P1口来接受键盘的输入,同时它的输入不是一个具体的值因为那样需要很多端口,我们现在的设计只需要7个端口就可以了。我们现在是确定要输入的值是不是正确的,是硬件级的调试,所以现在只需要得到的是两个1和六个零组成的数字,两个1的组合就可以确定是什么按键被按下了。遇到的问题:在连接键盘的时候,我先选择的是最简单的一个引脚接一个按键的设计,可是在设计的过程中才发现,引脚不够,因为起先没有考虑到LED数码管,后来加上LED数码管以后引脚就不够用了。经多次尝试之后,我选择了现在的4X3的按键。只是这样的设计是软件复杂了。7.2 软件系统调试1、打分终端的显示子程序:第一步:先写一个死循环,显示缓冲区中依次写入01、02、02、01四个数字,使得LED数码管上依次显示1、2、2、1,然后在显示的时候,死循环里依次选中P3的13号口,在选中的过程中加上一个延迟;作用:确认缓冲区的设置是否正确。第二步:在第一步的基础上将死循环改成时钟中断。这样我们的程序就可以在中断的基础上显示了。然后在中断处理函数上启动时钟中断这样就可以使得源源不断的数字得到显示。作用:使得数据的显示不需要人工的参与,完全由中断来搞定。遇到的问题:在显示的时候我的数据类型是char,可是有的时候是不正确的输出,后来仔细的研究了类型的表示才知道。Char类型只能保证我们的数据的低七位是有效的。第八位是不确定的。将类型改成了Unsigned Char类型以后就成功了。2、打分终端的按键子程序按住某个键不动,从P2口读取扫描码,然后从扫描码表中得到相应的二进制数字,然后将它导入到上一步调试好的显示缓冲区中。如果显示的数字是正确的就说明已经调试好了。否则将该二进制数字打印出来,然后一点一点的调试。如果上几步的硬件和软件调试没有问题,那么这一步也不会有太大的问题。3、下位机软和上位机软件调试:本系统中,上位机软件的编写难点以及上位机和下位机之间的关系的难点都是串口数据的收发。其中下位机没有什么大的问题,比较麻烦的是上位机的接收。因为仅仅在开始接受数据的时候会触发一个函数调用,但是我们现在串口才刚刚接受数据而已,那么怎么样既可以收取完整的数据,又不添加太多的代码呢?有两种解决方法:(a) 可以用一个延时函数,来让cpu空转一段时间,给串口一个接收数据的时间。等到时间结束的时候,我们的数据也就发送完了。这时就可以放心大胆的一次性读取了。(b) 可以开始一个计时器,使其进入激活状态,也是等待一段时间以后再去读取数据。不过a计划的读数据函数是在串口控件的函数里进行的而b计划的读数据代码是在时钟控件里进行的,我认为二者没有什么太大的优劣之分,因为我们传输的数据量不是很大。我选取了b选项的设计风格,因为这样的设计思路更清晰。结 论随着毕业设计的结束,我的大学生活也要结束了,回想这四年的大学生活感想良多。大一的时候第一次听说编程这个词,对计算机算是一窍不通,以前只是会上上网,别的什么都不会。后来渐渐地系统性的学习了C语言,C+,数电,组成原理,汇编语言,编译原理,操作系统等等专业课,在大三上学期用了半年的时间学习java,以为以后就要在java里面混饭吃了。到了大三下学期突然意识到,如果以后就做java,那么以前下过功夫学的一些理论课就完全的没有了意义,所以还是果断的转换了方向。毕业设计的选择也是因为方向的转变而转变的,随着自己的兴趣选择了偏底层的单片机来开发。通过这次毕业设计,学会了怎样查阅资料和利用工具书。平时课堂上所学习的知识大多比较陈旧和偏理论,作为软件工程专业的学生,由于专业特点不可能什么都学过,什么都懂,因此,在设计过程中需要用一些不曾学过的东西时,就要去有针对性地查找资料,然后加以吸收利用。一定要对自己有信心。相信自己能把东西做出来那么就一定能做出来。在调试的时候知道了这一行的辛酸,不知道是哪儿的问题,它就是不出来。最后绝大部分是因为没有看好数据手册,导致的问题。所以以后看资料一定要细心再细心。这样往往会事半功倍的。否则,只有死路一条。还有我想告诉学弟学妹们的是在平时的学习过程中一定要注重基础知识的学习,尤其要注意的是多动手,多动脑。这比基础知识的学习更实用,因为,我们做的是一个研发类的工作,在工作中,会遇到很多的问题,对于这些问题你身边的人大多数都是不能指导你的,因为他们也没有遇到过类似的问题,所以更不可能有人可以给你一个及时的解答。这就需要你自己去空手套白狼了。在学校就要培养这种独立解决问题的能力,否则到了社会上,在工作中很少有领导能照顾你。参 考 文 献1 薛均义, 张彦斌. MCS-51系列单片微型计算机及其应用M. 西安交通大学出版社, 2005.2 李全利. 单片机原理及应用M. 北京: 清华大学出版社, 2006.3 徐爱钧, 彭秀华. 单片机高级语言C51应用程序设计M.北京航空航天大学出版社, 2006.4 余锡存. 单片机原理及接口技术M. 西安: 西安电子科技大学出版社, 2000.5 李全利. 单片机原理及接口技术M. 北京: 北京航空航天大学出版社, 2004.致 谢感谢父母,他们给予我生命,将所有的爱都倾注在我的身上。感谢老师,她在百忙之中抽出时间指导我的学习和毕业设计工作,另外,也要感谢金法华老师,他平时对我们严格要求,对工作一丝不苟。尤其是他深厚的理论水平和高超的动手能力更使我受益良多。再次感谢!毕 业 论 文物理与电子学 系 电子信息 专业题 目 竞赛打分系统 (软件设计)学生姓名 学生班级 指导教师 XXXX年 5 月 28 日摘要:竞赛打分系统软件是一个简单的信息接收与管理系统,对于此系统要求功能完备,操作简单。关键字: Visual Basic 、串行通讯、竞赛Abstract:The competition hits subsystem software is a simple informationreceive and the management system management system, regarding thissystem requirement function complete, the operation is simple.Key words: Visual Basic, serial communication, competition目 录1 引言 32 单片机介绍 33 软件开发工具介绍 44打分系统44.1 分终端与主机(微机)的通信方式542 打分终端设计643 软件设计75.软件的实现 851系统功能框图85.2打分系统软件设计9参考文献 21结束语 22致谢231.引言在计算机的发展历史上,运算和控制一直是计算机功能实施的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/MPLUS C和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.软件开发工具介绍 Visual basic简称vb,它的功能强大,不仅仅在于他本身的变成能力,还在于它可以直接调用DLL,通过DLL程序员可以访问构成Windows操作系统的许多过程,例如窗口与图形的显示,内存管理。人们将这些过程称作Windows API。在这些API中还包含了成千上万的函数,例如,类型和常量定义,通过在visual basic程序中声明外部过程,能够访问并使用这些Windows API及其它外部DLL,调用他们的方法与调用visual basic 自己的过程相同。Active API控件的使用和OLE自动化是增强vb功能的另外一个途径,通过它们程序员能够访问外部应用程序提供的大量对象。Vb允许选择和管理外接程序,这是对vb的扩充,这些扩充增强了vb开发环境的能力。自从1991年推出以来,vb已经成为最为流行的编程语言之一,vb即visual basic,visual是指可视化的编程方法,basic是指在原有basic语言的基础上发展起来的编程语言,visial basci继承了basic语言易学易用的特点,。什么是可视化的编程方法呢?采用这种编程方法,可以不必通过代码来描述界面上元素的外形和位置,只需要把事先建立的对象拖到屏幕上,再通过鼠标的调节他们的位置和尺寸。现在有了visual basic ,即使没有经过严格的程序设计培训,也能开发出不错的程序,现在vb已经有了数百个语句,函数及关键词,其中有很多和windows GUI有直接关系。本打分系统采用了vb编程。4打分系统竞赛打分时通常有多个评委,每人一个终端,各个终端通过电缆与计算机相连,由计算机按照某种评分规则计算选手的最终得分,再显示的大屏幕上。所以,设计本系统首先要确定各个终端与计算机的通信问题。41 分终端与主机(微机)的通信方式(1)并行连接方式打分终端与主机的打印口相连接,采用总线方式,如下图所示:。打分终端打分终端数据线8位地址线3-4位并口大屏幕每个打分终端设置不同的地址,用地址译码器对地址线上的信号进行译码。主机采用查询方式读取第个打分终端上的数据。这种方式软件和硬件设计简单,但连线多,另外,通信距离有限(数米内)。(2)采用单独连接的串行通信方式每一个打分终端单独用三根通信线与主机连接,主机需要有多串口卡。如下图所示:打分终端打分终端。多串口卡大屏幕这种方式软件设计简单,通信距离远(数十米),但连线多,另外,且主机需要有多串口卡。(3)采用总线结构的串行通信方式。打分终端打分终端串口显示终端 每个打分终端设置不同的地址,主机采用查询方式读取第个打分终端上的数据。这种方式必须采用RS-485通信,通信距离远(数十米),连线少,易于增减终端数量,但软件设计稍复杂。基于上述三种方式的优缺点,我们选用了第三种方式,即RS-485总线方式。42 打分终端设计打分终端是一个单片机系统,包括显示器,键盘、RS485接口等部件。(1) 单片机 选用MCS51系列的AT89C51,该单片机芯片内含4KB的程序存储器,有四个8位的并行口和一个串行口,两个16位计数/定时器,5个中断源,这些内部资源完全可以满足本设计的需要。(2) 显示器 打分终端上应有显示器,用于显示分值,可选用数码液晶显示器或LED数码管,考虑到成本原因,本设计采用4个LED数码管作为显示器。为了简化设计,分值可为四位整数或小数。四个LED数码管采用动态扫描方式。(3) 键盘 有12个键,包括10个数字键、一个小数点键和一个确定键。12键连接成43的矩阵,占用单片机的7根并口线,软件上采用反转法读取键盘。(4) 打分终端数量 为了简化硬件,本设计只制作了三个打分终端。(5)显示终端本应使用单片机控制大型LED数码管显示总得分,因条件限制,只使用4个小LED数码管作显示终端。43 软件设计竞赛打分系统主机负责对终端进行查询,读取分值,并进行统计、显示总分、存储等。基于打分终端与主机之间采用RS-485总线连接,主机上需连接RS-232到RS-485转换器,我们使用了商品化的转换器。竞赛打分时通常要去掉一个最高分和一个最低分,剩余的取平均值或总和。本课题中打分终端数量少,所以不能去掉最高分和最低分,采用求总分或求均分的方法。软件设计为在屏幕上显示一个表格,分别显示每个评委的打分及统计的总分(或均分),如下表所示:XXX竞赛成绩统计表评委A评委B评委C总分参赛队员1参赛队员2软件除了统计成绩外,还应能够保存成绩,并可打开以往保存的比赛成绩。5.软件的实现51系统功能框图编辑姓名编辑比赛项目设置评分规则裁判人数打分系统主界面得分表文件名次返回打开保存另存为串行通讯 图 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.41 主窗口部分在图5.2.1中有两个按钮“前一选手”和“下一选手”其实现功能的代码如下。Private Sub Command1_Click() 下一选手按钮 If Index Form1.FG1.Rows - 1 Then Command2.Enabled = True Index = Index + 1 Call disp(Index) Else Command1.Enabled = False End IfEnd SubPrivate Sub Command2_Click() Index = Index - 1 Command1.Enabled = True Call disp(Index) If Index = 1 Then Command2.Enabled = False Command1.SetFocus End IfEnd Sub 初始化全局变量Index = 1,指向表格中的第一选手,这时“前一选手”按键为不可用状态,既将其Enabled属性设置为False,“下一选手”按键的Enabled属性为Ture,当用户电击“下一选手”按键时,将Index + 1,同时将“前一选手”按键设置为可用,同时判断是否已达表格的最后一行,代码If Index Form1.FG1.Rows 1 Then 就实现了上面的判断功能,若已达最后一行,I则将该键设置为不可用,既语句Command1.Enabled = False按照新的Index值将相应编号选手的得分情况显示在主窗体上。 当用户点击“前一选手”键时,先将“下一选手”键设置为可用,将变量Index - 1,显示相应选手得分情况,同时判断是否已经达到表格第一行,若已达到,则将该按钮设置为不可用。其判断语句为If Index = 1 Then Command2.Enabled = False Command1.SetFocus End IfEnd Sub通常情况下,要去掉一个最高分,一个最低分,然后计算最后得分,但本系统由于只有三个打分终端,因此无法实现上述功能。在本系统里计算选手最后得分要根据评分规则和评委人数,可以求总分或着求均分,其默认为求总分。图5.2.4就是设置求分方法的界面。其设置求均分或者总分的代码如下:Public Sub Command1_Click() Dim I As Integer, N As Integer N = Combo1.Text For I = 0 To 7 先将8个格子全设置为不可操作 Form2.Text1(I).BackColor = &H80000000 灰色 Form2.Label3(I).Visible = False Next I For I = 0 To N - 1 再将 N 个格子设置为可操作 Form2.Text1(I).BackColor = &H80000005 白色 Form2.Label3(I).Visible = True Next I If Option1 Then Form1.FG1.TextArray(10) = 总分 Else Form1.FG1.TextArray(10) = 平均分 End If Form3.Hide Form2.Enabled = TrueEnd Sub在设置求分方法后,我们并没有马上计算总分或者是均分,而是把这个工作放在了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事件过程的原代码:Private Sub Timer1_Timer()Dim L As Integer, N As Integer, S As Single, Sum As Single, I As IntegerTimer1.Enabled = False 禁止定时器Buf = MSComm1.Input 从串口缓冲区读数据 L = Len(Buf): If L 5 Then Exit Sub 不足5个字符则为错误,不予处理N = 0For I = 1 To L 1 除最后一个字符外,循环求前面各个字符的累加和 N = N + Val(Mid(Buf, I, 1)Next IN = N Mod 16 保留低4位If N Val(Right(Buf, 1) ThenMSComm1.Output = Left(Buf, 4) & “R” 校验错,向该终端发重发命令 Exit Sub 退出,放弃本次收到的数据End IfN = 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 For I = 0 To 7 Sum = Sum + Val(Text1(I).Text) Next IIf Form3.Option2 Then Sum = Sum / Val(Form3.Combo1.Text) If Sum = 1 Then Text3.Text = CStr(Sum) Else Text3.Text = 0 & CStr(Sum) End IfForm1.FG1.TextArray(L * Form1.FG1.Cols + 10) = Sum Change = True End SubTimer1_Timer事件不但截取信号中的裁判号和所打的分数,而且实现了总分的计算和平均分的计算,(总分和平均分的设置在Command1_Click 设置里,既图5.2.4),Sum = Sum + Val(Text1(I).Text)是计算总分的,Sum = Sum / Val(Form3.Combo1.Text)是用来计算平均分数的。同时判断得分是否小于1,若小于1 ,系统将在小数点前加零 ,代码如下Text3.Text = 0 & CStr(Sum) 。 点击“开始打分”按钮,启动定时器2(Timer2), 定时器2的时间常数是200毫秒,即每隔0.2秒向打分终端发送一条打分命令(T命令),发完自动禁止定时器。(初始状态Timer2.Enabled = False)Private Sub Command3_Click()启动定时器2Command3.Enabled = FalseTimer2.Enabled = TrueEnd SubPrivate Sub Timer2_Timer()每隔0.2秒向1个打分终端发送1条T命令Static I as IntegerI = I + 1 If I Val(Form3.Combo1.Text) ThenI = 0Timer2.Enabled = FalseCommand3.Enabled = True Exit Sub发送完毕,关闭定时器2,退出 End IfMSComm1.Output = “000” & Chr(I + 64) & “T”End Sub2.记分表模块 图5.2.6记分表界面如图5.2.6,在记分表模块中我们使用了MSFlexGrid控件,由于该控件不是VB6.0的默认控件,需要添加,点击VB“工程”菜单 ,在打开的“部件”对话框中选择“Microsoft FlexGrid Control 6.0”选中它并点击“确定”按钮即可。当系统启动时触发得分表Form_Load这个事件时,系统将将把该控件进行初始化设置,设置为21行,11列,其代码如下:FG1.Cols = 11 FG1.FixedRows = 1 FG1.Rows = 21 FG1.FontSize = 12其中一行为表头,其余为20个选手,当添加选手超过20行,表的行树将会自动扩展。而行的扩展是在选手姓名编辑过程中就完成了。其实现方法如下:Do While I = Len(S) And K 0If J = Form1.FG1.Rows - 1 Then 若行数超过表的最后一行则扩展一行 Form1.FG1.Rows = J + 1 For K = 1 T

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论