竞赛打分系统的设计与实现论文Word下载.docx
《竞赛打分系统的设计与实现论文Word下载.docx》由会员分享,可在线阅读,更多相关《竞赛打分系统的设计与实现论文Word下载.docx(15页珍藏版)》请在冰豆网上搜索。
关键字:
VB,汇编语言,串行通讯,竞赛
Abstract:
Thejudgesscoringsystemistosendasimplemessage,receivingandprocessingsystem,thissystemiscomposedofPC,scoringterminal,thissystem'
slanguagesareVB、assembler.thebusstructure.thehardwarestructureissimple。
Inthetraditionalgamescore,thescore,theformatandeffectivenessneedmanualinspection,ispronetoerrors,willalsoaffectthefairnessofthescoring.Thissystemis:
thefractionalcollection,analysis,processingofplayers,andthenthroughthewayofshowingstickoutamile.Afterusingthissystem,cansavethegameorganizersofmanpower,materialresources。
Canmakethegradingefficiency,accuracycanbeimprove.Thescoringsystemissimple,practical,canmakeeasyandprofessionalactivitiesoftheorganization。
Keywords:
vb,assembler,serial,game
1前言
随着近几年来各种各样竞赛的风靡,主办方急需一个操作方便,价格低廉的打分系统,本评分打分系统是按照竞赛中评委打分的方式设计的,有比较完善的竞赛评分功能.该系统优点是:
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个序号端分别为P3^0、P3^1、P3^2、P3^3,选择一个时候我们就可以选择哪个序号的数码管亮了.
软件编码时采用扫描的方式,每次只有一个数码管亮,4个数码管轮流点亮,每个数码管亮0.005秒,4个一共是0.02秒。
为了是设计简单和自动化,我们用时钟中断的方式,在中断处理函数里,我们实现了不同数码管的依次显示。
2、键盘电路:
由于按键较多,如果按照一个按键一个接口的方式来连接键盘则51的引脚数目要增加好几倍,所以键盘连接成m×
n(m=4,n=3)的矩阵形式,占用单片机的7根口线。
图2—1AT89C51单片机的结构框图
本系统远端不需要太强的运算能力,单片机就可以满足我的需求。
不仅可以减少硬件成本,也可以简化软件的设计
3软件选择
1、上位机:
VB是由微软公司开发的事件驱动编程语言。
程序员可以使用VB提供的组件快速写出一个稳定的应用程序。
在本项目中最重要的就是上位机和下位机之间的串口通信,而在VB中就有一个用于串口收发数据的控件,从系统的稳定性和系统的复杂度来看,用VisualBasic是合适的。
而且我也对他比较熟悉。
所以PC端的程序就由VisualBasic开发.
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发送子程序
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改变比赛项目界面
4成绩统计
成绩统计界面如图6—4所示,存储比赛的所有信息。
Form2中的下一位选手和上一位选手的按键的按下就意味着显示值的改变.改成什么样就要看form1中的内容了.
图6-4成绩统计界面
6.5系统设置
系统设置界面如图6—5所示,改变比赛的得分情况(是取平均分还是取总分),和裁判的人数。
这个直接影响到form2的显示,和form1的分数的存储情况.
图6—5系统设置界面
7系统调试
7。
1硬件系统调试
在本系统的硬件上有两个主要部件,在进行试验之前,一定要确保他们的正常工作.分别是输入,输出.输入是键盘,输出是LED数码管。
1,LED数码管的测试:
本项目中,由P2端口连接LED数码管的数据输入端,由P3的1~3号端口来选择在哪一个上数码管显示数字.
所以我们就可以逐个的输出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的按键。
只是这样的设计是软件复杂了。
2软件系统调试
1、打分终端的显示子程序:
第一步:
先写一个死循环,显示缓冲区中依次写入01、02、02、01四个数字,使得LED数码管上依次显示1、2、2、1,然后在显示的时候,死循环里依次选中P3的1~3号口,在选中的过程中加上一个延迟;
作用:
确认缓冲区的设置是否正确.
第二步:
在第一步的基础上将死循环改成时钟中断。
这样我们的程序就可以在中断的基础上显示了。
然后在中断处理函数上启动时钟中断这样就可以使得源源不断的数字得到显示。
使得数据的显示不需要人工的参与,完全由中断来搞定。
在显示的时候我的数据类型是char,可是有的时候是不正确的输出,后来仔细的研究了类型的表示才知道.Char类型只能保证我们的数据的低七位是有效的。
第八位是不确定的.将类型改成了UnsignedChar类型以后就成功了。
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.
致谢
感谢父母,他们给予我生命,将所有的爱都倾注在我的身上。
感谢老师,她在百忙之中抽出时间指导我的学习和毕业设计工作,另外,也要感谢金法华老师,他平时对我们严格要求,对工作一丝不苟。
尤其是他深厚的理论水平和高超的动手能力更使我受益良多.再次感谢!