版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录摘要 1英文摘要 11引言 21.1智能抢答器的发展意义 21.1.1普通抢答器的特点 21.1.2智能抢答器的基本功能及特点 22智能抢答器的相关技术介绍和分析 42.1中文VisualBasic简介 42.1.1VisualBasic的发展过程 42.1.2VisualBasic的概念简述 42.1.3VisualBasic的开发程序步骤 52.2有关MSComm控件的简介 62.2.1MSComm的引用步骤 62.2.2MSComm的工作方式 62.2.3MSComm的属性说明 72.2.4MSComm的通信步骤 82.3RS-232的简介 83智能抢答器的硬件设计 93.1晶振的选择 93.2智能抢答器方案设计 103.2.1硬件电路总框图 103.2.2主要模块设计方案 11单片机的选择 11准备抢答电路的设计 12单片机与PC机通讯的实现 134智能抢答器的软件设计 144.1单片机软件设计 144.1.1串行通信初始设置 154.1.2串行中断 154.2VB软件设计 164.2.1初始设置程序 174.2.2串行通信程序 185系统调试及结果分析 195.1软件仿真 195.2调试步骤 195.3功能测试 205.3.1距离测试 205.4总结 206结束语 20参考文献 21附录 22基于串行通信的智能抢答器PAGE32基于串行通信的智能抢答器1基于串行通信的智能抢答器职业技术教育学院应用电子技术教育专业王丹萍(07440114)指导老师:杨金华(讲师)摘要:本文主要介绍应用单片机技术和VB语言实现智能抢答系统的设计,以及实现智能抢答系统的方案。系统分为两大部分,即单片机部分和PC机两大部分。PC机主要完成图形用户界面,并利用Visualbasic语言本身具有的通信控件MSComm与单片机进行通讯。图形界面友好美观,操作简单。单片机部分采用的是功能强大,集成度极高的STC89C52单片机。设计完成后,电路总体调试,实现了智能抢答的功能。关键词:STC89C52;VisualBasic;MSComm控件;实时通讯IntelligencecontestdevicebasedonserialcommunicationStudent:WANGDan-pingDirector:YANGJin-hua(Applicationofelectronictechnologyeducationprofessionals,ZhejiangNormalAbstract:ThistextismainintroducedthetechnologyoftheMicrocontrollerandutilizeVBlanguagetorealizetheintelligenceviesforansweringsystem,andtheschemetorealizetheintelligenceviesforansweringsystem.Thesystemdivideintotwomajorparts,namelyMicrocontrollerpartandPCpart.ThePCfinishesthefigureuser'sinterfacemainly,andutilizetheVisualbasiclanguageowncommunicationcontrollingpartMSCommcommunicatewithMicrocontroller.Theinterfaceisfriendlyandbeautiful,itissimpletooperate.theMicrocontrollerpartisadoptedtheSTC89C52whichispowerfulandextremelyhighinintegrateddegree.Afterfinishdesign,thecircuitisdebuggedcompletelyandrealizedthefunctionofintelligenceviesforansweringsystem.KeyWord:STC89C52;LanguageofVisualBasic;controllingpartMSComm;Real-timecommunication1引言1.1智能抢答器的发展意义随着我国经济、文化事业和电子技术的迅速发展,在很多的竞争场合要求有快速公正的竞争裁决,例如证券、股票交易及各种智力竞赛等[1]。于是抢答器应运而生,并且其设计方案越来越多样化,功能越来越智能化,而且外观也越来越人性化。1.1.1普通抢答器的特点抢答器是竞赛问答中一种常用的必备装置,随着场合的不同,电路难易程度也有所不同,实现的功能也有所不同。一般的抢答器是由许多的门电路组成的。从原理上讲,它就是一种典型的数字电路,分为主体电路与扩展电路两部分。利用优先编码电路、锁存器、译码电路将参赛队的输入信号在显示器上输出,组成主体电路。通过定时电路实现计时功能,构成扩展电路。经过布线、焊接、调试等工作后数字抢答器系统成形。在抢答电路中利用一个优先编码器译出最先抢到答题权的选手的编号并经LED显示器显示出来,同时还要封锁电路以防其他选手再抢答。当选手问答完成后,主持人将系统恢复至零。这样的抢答器制作简单,抢答的功能也能基本实现,基本上能完成小型抢答的场合。不过说到实用性,却有很多的不足之处:(1)由很多门电路组成,线路复杂,而且显示方式简单,性价比差,特别是抢答路数增多时,电路变得很复杂,实现起来更加困难。(2)因为必须使用较多的分立元件,从而造成电路的成本偏高。(3)显示系统和主机之间用多股线连接,结构复杂、安装麻烦。(4)远距离实现困难,一般只能1.5~2米的距离。1.1.2智能抢答器的基本功能及特点何谓“智能”,就是利用微处理器能够高速而精确地进行各种数据的计算处理,几乎能模仿人脑部分的功能。而说本次设计的抢答器是智能的,是因为它是和PC机进行了通信,并且PC机发送给选手的数据都是由一块单片机进行存储,计算处理的,并能把相应的数据返回到PC机。那什么是单片机呢?它是一块芯片上集成了一台微型计算机所需的中央处理器(CPU)、存储器(RAM、ROM)、定时器/计数器、中断系统和各种输入/输出(I/O)接口等。单片机其实就是一台计算机。单片机具有集成度高、功能强、速度快、体积小、功耗低、使用方便、性能可靠、价格低廉等特点,因此,在工业控制、智能仪器仪表、数据采集和处理、通信系统、高级计算器、家用电器等领域的应用日益广泛,并且正在逐步取代现有的多片微机应用系统。单片机的潜力越来越被人们所重视。本次设计使用了STC89C52单片机及外围接口电路来实现抢答系统,具有很强的实用性。本设计功能齐全,可通过四位一体LED数码管显示出各组选手的得分情况,通过绿色的发光二极管判别是否准备抢答;还利用了单片机的串行通信技术进行接收传送数据,能将各组选手每题抢答而得的分数动态地接收并显示,也能将每题的违例抢答或者正常抢答的组号发送到PC机进行显示,使主持人、选手们、观众们能对各组选手的得分情况一目了然。每路抢答选手设有一个抢答按键和一个得分显示器,方便选手们进行抢答,了解自己的得分;而在主持人PC机界面上,设有默认,重抢,下题,串口设置,题目设置,准备键,开始键,确定键,加分键,减分键和还有一个选手积分卡,方便主持人在整个抢答过程中进行控制,使整个抢答过程在公正、公平的环境下进行。本设计还将每题的抢答情况送PC机显示以体现公正,同时也让选手们知道竞争对手的得分情况。本次设计的抢答器实现了单片机和PC机的实时通信,由于PC机上本身配置的RS-232,使得单片机和电脑的距离可以拉长15m。这个抢答系统模块体积比较小,携带比较方便,而且当今社会,PC机的拥有率越来越高,使得这个抢答系统使用起来更为方便。图1-1所示的是PC机上用VB编写的一个界面,比数码管、液晶显示的更为美观、人性化。图1-1PC机上界面显示图2智能抢答器的相关技术介绍和分析2.1中文VisualBasic简介[2]VisualBasic6.0是Microsoft公司推出的基于Windows环境的计算机程序设计语言,它继承了Basic语言简单易学的优点,同时增加了许多新的功能。由于VisualBasic采用面向对象的程序设计技术,摆脱了面向过程语言的许多细节,而将主要精力集中在解决实际问题和设计友好界面上,使开发Windows应用程序更迅速、简捷。什么是VisualBasic?“Visual”指的是开发图形用户界面(GUI)的方法。在图形用户界面下,不需要编写大量代码去描述界面元素的外观和位置,而只要把预先建立的对象加到屏幕上的适当位置,再进行简单的设置即可。“Basic”指的是BASIC(BeginnersAll—PurposeSymbolInstructionCode,初学者通用的符号指令代码)语言,是一种应用十分广泛的计算机语言。VisualBasic在原有BASIC语言的基础上进一步发展,至今包含了数百条语句、函数及关键词,其中很多和WindowsGUI有直接关系。专业人员可以用VisualBasic实现其他任何Windows编程语言的功能,而初学者只要掌握几个关键词就可以建立简单的应用程序。2.1.1VisualBasic的发展过程Basic是专门为初学者设计的计算机语言,它诞生于1964年,最初问世时只有几十条语句,而且简单易学,很受用户的欢迎。随着计算机技术的飞速发展,VisualBasic(简称VB)就由此而生,它是Microsoft公司为开发Windows应用程序而提供的强有力的开发环境和工具,具有很好的图形用户界面的程序设计语言。VB应用程序的开发以对象为基础,并运用事件驱动机制实现对Windows操作系统的事件响应。VB提供了大量控件,可用语设计界面和实现各种功能,用户可以通过拖放操作完成界面设计,不仅大大减轻了工作量、简化了界面设计过程,而且有效地提高了应用程序的运放效率与可靠性。1991年,Microsoft公司推出VisualBasic1.0版,它虽然存在一些缺陷,但仍受到了广大程序员的青睐。随后,Microsoft公司又分别在1992年、1993年、1995年和1997年相继推出了2.0、3.0、4.0、5.0等多个版本。目前常用的版本VisualBasic6.0是1998年下半年推出的。VisualBasic6.0版较以前版本,其功能和性能都大大增强了,它还提供了新的、灵巧的数据库和Web开发工具。2.1.2VisualBasic的概念简述自从Windows操作系统兴起后,计算机的使用就大为改观了,一切操作都是在可视的操作系统中进行。窗口环境与以前的DOS环境有很大差异,在概念上也大相径庭。在使用VisualBasic设计窗口程序中,其设计的方向大约分为两部分,即窗体设计和程序编写。VB采用面向对象、事件驱动的编程机制。用户只需编写响应用户动作的程序,如移动鼠标、单击鼠标等,而不必考虑每个步骤执行的精确次序,编写代码相对较少。在VB环境中,用户不仅可以利用控件来创建对象,而且还可以建立自己的控件,这是Windows环境下变成的新概念。VB的接口成员有:属性、事件、方法。VB的开发环境有:菜单栏、工具栏、工具箱、工程资源管理窗口、属性窗口、窗体设计窗口、代码设计窗口。VB的环境模式分为三种,即设计模式、运行模式、中断模式。VB的控件很多,这次在界面设计中使用了其中的常用控件,比如组合框、文本框、标签框,图形、定时器等控件,还用到菜单编辑器。2.1.3VisualBasic的开发程序步骤VisualBasic看似复杂的环境,其实是很容易上手的,VisualBasic的开发环境分成两个部分:一个是设计模式,一个是运行模式。程序在设计模式下被开发至一定程度后,就可在运行模式下观看程序运行的结果,以此作为改正程序的参考。面对新建的工程,脑中想着对象、属性、时间、方法四个步骤,开发程序的步骤如下:(1)拖动窗体到适当的大小。需要的外观控件可从工具箱中取出,当在工具箱中找到所需要的控件时,首先单击该控件,接着在窗体上以拖拉的方式产生出所需的外观。(2)当对象放到窗体上,确定其大小后,接着按下F4键弹出属性窗口以改变其重要属性。如:Name属性、Color属性、Caption属性等。属性数量众多,通常一个控件只需要改变部分属性即可,很多属性都只要保持其默认值就行了。(3)按照步骤(2)的方法将所需要的控件以拖拉的方式放到窗体上,考虑窗体上各个控件之间的排列关系,排出理想的样子。(4)打开程序代码编辑窗口,方法有很多,可以点击某一控件就可以进入程序代码编辑窗口;或者右击窗体,选择“查看代码”;或者选择“试图”菜单中的“代码窗口”选项;或者是使用“工程资源管理器窗口”中的“查看代码”按钮。把操作写入程序代码编辑窗口中。在程序代码的编写过程中,均以对象和外界的交互为第一个考虑的重点,再以此开发下去。(5)工程完成后,可按下F5键或选择[运行]菜单下的命令以执行工程,然后就可以看到工程执行后的结果,试着操作各控件并观察它对事件的反应,可以看出设计的事件是否适当。(6)在修改与测试的过程中,中断是经常使用到的功能。将光标停留在需要中断的某一行,按下F9键即可设置断点,一旦程序运行至此,即会产生中断而停止运行,这时可在实时运算窗口中进行各项参数的测试,也可以按下F8键使程序单步运行下去,或者直接按下F5键立刻让程序运行下去。(7)需要修改程序时,可从运行模式回到设计模式,待修改完毕后,再按下F5键进入运行模式,不断修改,直到满意位置。(8)完成工程的设计工作后,再利用VB提供的“打包和展开向导”制作工程的安装程序。这样,一个VB工程的开发步骤就完成了。2.2有关MSComm控件的简介VB不但容易学习,而且可设计的系统内置及外挂控件更是众多。随着现在串行通信的使用越来越普遍,Microsoft公司便在VB中设计了一个MSComm通信控件,以便我们完成串行通信的设计[3]。MSComm控件包含在VisualBasic专业版及企业版中,结合RS-232串行通信,就可以轻易地完成很多系统控制的通信。2.2.1MSComm的引用步骤由于VB的串行通信控件不会主动出现在工具箱中,当我们需要MSComm控件时,让它出现在工具箱中的操作步骤如下:(1)单击[工程]菜单。(2)在工程菜单中选择[部件]命令。(3)打开[部件]对话框,选中MicrosoftCommControl6.0复选框。(4)单击[应用]或者[确定]按牛,就可在工具箱中看到“电话盒(MSComm控件)”的图标。我们就可以将MSComm控件加载,进行串行通信。2.2.2MSComm的工作方式使用MSComm控件的目的是为了让用户设计一个系统,此系统可以和串行断口进行通信及发送数据,因此信息会在其硬件线路上流动,此控件提供了以下两种方式来处理信息的流动。(1)事件驱动(Event-driven)是处理连接端口通信的一种有效方法。例如有个字符到达或者发生一个变化时,程序都可以利用MSComm控件来检测并处理。(2)程序通过检查CommEvent属性的值来轮询事件和错误。以上两种方式都可以达到数据接收发送的目的,具体使用哪种方法好都是根据实际的系统环境而定,有时会同时使用这两种方法。如果应用程序不大,那可能是第二种方法比较好。2.2.3MSComm的属性说明使用MSCOMM控件主要是通过事件来处理串行口的交互,即当数据到达时,控件的OnComm的事件就会来捕获或处理这些通信事件。而OnComm事件也可以用来捕获和处理通信错误。在实际应用中,一个MSComm控件就对应一个串行口,所以如果要处理多个串行口的话,必须有相应数量的控件与之对应。下面介绍一下此控件的主要属性[4]:CommPort:设置串口号,类型short:1-com12-com2,其实VB的MSComm控件有16个串行端口,若使用的通信端口号码超过16时,此控件会有错误信息。Setting设置串口通信参数,类型Cstring:B波特率,P奇偶性(N默认值,E偶校验,O奇校验),D字节有效位数,数据数可以有4位,5位,6位,7位,8位,S停止位,停止位可以有1位,1.5位,2位。默认的Settings=“9600,n,8,1”表示波特率为9600bps,PortOpen:设置或返回串口状态,类型BOOL:TRUE打开,FALSE关闭。InputMode:设置从接收缓冲区读取数据的格式,默认值为0,表示以文本格式读取数据。类型long:0-Text,1-Bin。Input:从接收缓冲区读取数据,类型VARIANT。InBufferCount:接收缓冲区中的字节数,类型:short。InBufferSize:接收缓冲区的大小,类型:short。Output:向发送缓冲区写入数据,类型:short。OutBufferCount:发送缓冲区中的字节数,类型:short。OutBufferSize:发送缓冲区的大小,类型:short。InputLen:设置或返回Input读出的字节数,类型;short。CommEvent:串口事件,类型:short。RThreshold:设置或返回引发接收事件的字节数,即最小接收字符数。若设置其属性为0时,则数据传输事件不会生成OnComm事件中的接收事件。类型:short。Sthreshold:设置或返回引发发送事件的字节数。若其属性为0(默认值),则数据传输事件不会生成OnComm事件中的发送事件。类型:short。HandShaking:指定通信双方的握手协议。其设置有这样四种:0:(默认值)没有握手协议;1:(XON/XOFF)握手协议;2:RTS/CTS握手协议;3:RTS和XON/XOFF握手协议。另外对于OnComm事件来说,每当CommEvent的数值发生改变时就会产生这种事件,这表明要么就是一个通信事件的产生,要么是一个通信错误产生。2.2.4MSComm的通信步骤通常我们都是以下面的步骤来使用VB的MSComm控件进行通信控制的:(1)加入通信控件。也就是MSComm控件。(2)设置通信端口号码。即CommPort属性。(3)设置通信协议。即HandShaking属性。(4)设置传输速度等参数。即Settings属性。(5)设置其他参数。如引发接收或发送的字节数(6)打开通信端口。即PortOpen属性设成True。(7)送出字符串或读入字符串。使用Input及Output属性。(8)使用完MSComm通信控件后,将通信端口关闭。2.3RS-232的简介[5]现在,串行通信端口(RS-232)是计算机上的标准配置,通常有COM1和COM2两个端口。一般计算机将COM1端口以9针的接头引出,而以25针的接头将COM2端口接出。新一代的计算机均以9针接头接出RS-232通信端口。各串行端口脚位定义如表2-1所示。表2-1RS-232串行端口脚位定义表管脚方向说明CD(CarrierDetect)计算机——>外设外设通知计算机有载波被检测到RXD(Receive)计算机<——外设接收信息TXD(Transmit)计算机——>外设传送信息DTRData(TerminalReady)计算机——>外设计算机告诉外设:可以进行传输GND(Ground)计算机====外设地线DSR(DataSetReady)计算机<——外设外设告诉计算机:一切准备就绪RTS(RequestToSend)计算机——>外设计算机要求外设将信息送出CTS(ClearToSend)计算机<——外设外设通知计算机可送信息过来RI(RingIndicator)计算机——>外设外设通知计算机有信息传送RS-232的每支脚都有它的作用,也有它信号流动的方向。不过串口传输数据只要有接收数据针脚和发送针脚就能实现,比如同一个串口的接收脚和发送脚直接用线相连,或者两个串口相连或一个串口和多个串口相连。本设计只用到发送线RXD、接收线TXD、接地GND三根线。这是串行通信中最简单的三线接法[6]。RXD此脚负责将传送过来的远程信息进行接收。在接收的过程中,信息是以数字形式传送的。TXD此脚负责将计算机的信息传送出去。在传送的过程中,信息是以数据形式传送的。GND此脚为地线,作为计算机与外设之间的准位参考。两端设备地线准位必须一样,否则会产生地回路,使得信号产生偏移,也会导致结果错误。值得注意的是:通信距离较近时(<12m),是可以用电缆线直接连接标准RS232端口(RS422,RS485较远),若距离较远,需附加调制解调器(MODEM)。3智能抢答器的硬件设计3.1晶振的选择在串行通信中,当规定了传输速率以后,波特率的设置与系统使用的晶振频率有着很密切的关系,它可直接影响通信的成败。这次设计使用到的晶振是11.0592MHZ的,即系统频率为fosc=11.0592MHZ,串行方式为方式一,且规定串行通信双方的波特率要求为9600bps,SMOD选为1,TH1,TL1的初值计算如下:波特率=2×11.0592×106/(32×12×(256-X))=9600解上式可得出X=250=0FAH将此值置入TH1和TL1时,波特率发生器产生的实际传输率为:波特率=2×11.0592×106/(32×12×(256-250))=9600波特率误差=(9600-9600)/9600=0.0000%通过推算,得到如此精确的波特率,所以绝对能保证PC机与单片机进行正常的接收与发送。按以上条件若系统采用12MHZ系统时钟,照上面公式计算可得出X=250或249(FAH或F9H),此时在TH1和TL1中置入FAH或F9H时,实际的传输速率为10416.67bps或8928.57bps,其误差分别为-8.5%或7%。实践表明,PC机与单片机在这种条件下不能实现正常的接收与发送。上例中,当双机约定了传输速率9600bps时,若晶振频率为12MHZ或6MHZ,PC机的波特率为9600bps,而单片机实际的波特率大于(或小于)9600bps,波特率误差为8.5%。也就是说,如果PC机以每位104.17μs的时间发送一为数据,单片机则以96μs的时间接收一位数据。在接收一帧数据的过程中,由于误差的积累,便产生了错码。当波特率相对误差小于4.5%时,这种偏移将不会影响正常的数据接收,但为了保证传输的可靠性,通常波特率误差不大于2.5%,而尽量选择最小的传输误差率。值得注意的一个问题:就是SMOD位的选择也影响着波特率的准确度。试看下例:设波特率选为2400bps,fosc=6MHZ时,SMOD可以任选为0或1,但是由于对SMOD不同的选择,产生了不同的波特率误差:2400=2SMOD×6×106/(32×12×(256-X))当SMOD=0时,X≈249=F9H;当SMOD=1时,X=243=F3H。实际的波特率及误差如下:SMOD=0时为2232.14bps及7%;SMOD=1时为2403.85bps及20.16%.上面的分析说明了SMOD值虽然可以任意选择,但在某些情况下它直接影响着波特率误差范围,因而在波特率设置时,对SMOD的选择也需要做适当的考虑。那么对于11.0592MHZ的晶振,SMOD的选择对它的波特率是否也有影响呢?我们可以用公式来推算一下:假定波特率仍旧为9600bps,串行方式为一。SMOD可以任选为0或1,看看SMOD不同的选择,是否产生了不同的波特率误差:9600=2SMOD×11.0592×106/(32×12×(256-X))当SMOD=0时,X=253=0FDH;当SMOD=1时,X=250=0FAH。实际的波特率及误差如下:SMOD=0时为9600bps及0.000%;SMOD=1时为9600bps及0.000%。若设置波特率为2400bps,晶振仍旧选择11.0592MHZ,只改变SMOD,分析下是否产生不同的波特率误差:2400=2SMOD×11.0592×106/(32×12×(256-X))当SMOD=0时,X=244=0F4H;当SMOD=1时,X=232=0E8H。实际的波特率及误差如下:SMOD=0时为2400bps及0.000%;SMOD=1时为2400bps及0.000%经过多次的运算证明,当振荡器频率选用11.0592MHZ时,对于常用的标准波特率,都能正确地计算出T1的计数初值,所以这个晶振是最常用的,特别适用在串行电路中,精度非常高。3.2智能抢答器方案设计3.2.1硬件电路总框图如图3-1所示,这次设计采用STC89C52实现。将PC机作为上位机,STC89C52作为下位机,下位机主要完成对按键的扫描、对上位机进行数据接收和发送以及分数的显示功能。这个方案电路简单,功能较多,并能足够地拉长选手之间的距离,且充分利用STC89C52的资源。图3-1硬件电路总框图因为它具有灵活性和可行性,即使增加抢答路数时,只要增加分机的个数即可且电路也比较简单。3.2.2主要模块设计方案单片机的选择本电路的核心部件就是主控芯片—单片机,因此对单片机的选择非常关键。在我国,用得最多的单片机系列当首推MCS-51单片机系列,STC89C52是一种带8K字节闪烁可编程可檫除只读存储器(FPEROM-FlashProgrammableandErasableReadOnlyMemory)的低电压,高性能COMOS8的微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。STC89C52具体介绍如下:(1)主电源引脚(2根)VCC(Pin40):电源输入,接+5V电源。GND(Pin20):接地线。(2)外接晶振引脚(2根)XTAL1(Pin18):片内振荡电路的输入端。XTAL2(Pin19):片内振荡电路的输出端。(3)控制引脚(4根)RST/VPP(Pin9):复位引脚,引脚上出现2个机器周期的高电平将使单片机复位。ALE/PROG(Pin30):地址锁存允许信号。PSEN(Pin29):外部存储器读选通信号。EA/VPP(Pin31):程序存储器的内外部选通,接低电平从外部程序存储器读指令,如果接高电平则从内部程序存储器读指令。(4)可编程输入/输出引脚(32根)STC89C52单片机有4组8位的可编程I/O口,分别位P0、P1、P2、P3口,每个口有8位(8根引脚),共32根。P0口(Pin39~Pin32):8位双向I/O口线,名称为P0.0~P0.7。P1口(Pin1~Pin8):8位准双向I/O口线,名称为P1.0~P1.7。P2口(Pin21~Pin28):8位准双向I/O口线,名称为P2.0~P2.7。P3口(Pin10~Pin17):8位准双向I/O口线,名称为P3.0~P3.7。STC89C52共有40根引脚。在设计中,P0口作为LED的段控脚。P3.0和P3.1分别为串行通讯的接收端和发送端,作为STC89C52和RS-232通信的接口。P3.2和P3.3为两个外部中断输入口,P3.4、P3.5为两个定时器输入口。在引脚分配时,P2.4、P2.5、P2.6、P2.7分别作四个数码管的位控脚,而P3.2和P3.3作为外部中断输入口直接各接一个按键后接地,这两个按键就是选手的抢答键。另外,还需要连接11.0592MHZ的振荡电路和复位电路。STC89C52的管脚配置如图3-2所示。图3-2STC89C52管脚分配图准备抢答电路的设计准备抢答电路说明可以准备开始抢答,所以采用绿色发光二极管串上限流电阻来实现。当主持人按下上位机VB界面中的准备按键,该绿色发光二极管就会点亮,告诉选手可以准备开始抢答了。此电路简单,容易实现,又能满足我们所需的要求。其设计如图3-3所示。图3-3准备抢答图单片机与PC机通讯的实现[7]众所周知,计算机无法分辨所谓的数字和文字,在其内部的记录中所有的数据都是0和1。所有电子仪器的基础均来自“开”、“关”两个状态的改变,我们可以将它们表示0与1或者是“高电位”、“低电位”。而任何电子零件或芯片的高低电位都有一定的规定,RS-232也有相关电气标准电位定义。在RS-232的标准中,电压在+3V~+15V称为逻辑0,电压在-3V~-15V称为逻辑1[8]。而单片机标准中,电压在1.4V以下称为逻辑0,在1.4V以上称为逻辑1。电位定义不一样,是不能通信的,所以需要电平转换。这次设计使用到的是MAX232电平转换芯片[9]。MAX232是一种双组驱动器/接收器,片内含有一个电容性电压发生器以便在单5V电源供电时提供TIA-232-F电平。每个接收器将TIA-232-F电平输入转换为5VTTL/CMOS电平。这些接收器具有1.3V的典型门限值及0.5V的典型迟滞,而且可以接收±30V的输入。每个驱动器将TTL/CMOS输入电平转换为TIA-232-F电平。这次设计使用的是MAX232CAP,其工作温度范围为-40℃至80℃。此外在设计中,MAX232需要外接四个0.1μF的电容。图3-4所示的就是MAX232构成的TTL—RS232电平转换电路。图3-4TTL—RS232电平转换电路图4智能抢答器的软件设计该抢答器的程序分为单片机和VB两部分。以下分别就两部分的核心程序及其功能进行阐述。4.1单片机软件设计[10]单片机部分程序主要完成分值显示以及接收PC机发送过来的数据,并对这些数据进行相应的计算处理。其工作流程图如图4-1所示。图4-1单片机工作流程图4.1.1串行通信初始设置初始设置主要是设置定时器方式、赋其初值以及设置串行方式和外部中断触发方式,以下是单片机的初始程序。voidUART_Init(void){ SCON=0x50; TMOD=0x20; TH1=0xFD; TL1=0xFD; TR1=1; ES=1; EA=1;}4.1.2串行中断通过单片机STC89C52的P3.0和P3.1口进行通讯,如果PC机向单片机发送数据,其串行中断标志RI在接收到停止位的中间便由硬件自动置位,但如果要撤消中断,进行下一次的接收时,必须由软件将RI复位。单片机接收到数据后,进行响应的计算和处理比较。但是有一个问题必须要说明:传送速度很快,接收中断后必须马上返回再次等待中断。其中断程序如下:voidUART(void)interrupt4{ if(RI) { RI=0; if(Rec_flag==0) { if(SBUF=='S') { key_flag=0; } if(SBUF=='W') { Rec_flag=1; } } else { tally++; Loot_Tab[tally-1]=SBUF; if(tally==2) { tally=0; Rec_flag=0; switch(Loot_flag) { case1:Varone=(Loot_Tab[0]-'0')+(Loot_Tab[1]-'0');break; case2:Vartwo=(Loot_Tab[0]-'0')+(Loot_Tab[1]-'0');break; default:break; } } } } }串行中断返回后,单片机一边等待再次中断,一边对接收到的数据进行处理,如果发现接收到的是自己的本机号码,就进行通讯状态,如果不是,则等待PC机的下一次发送。4.2VB软件设计VB部分主要完成对抢答初始状态的以及抢答时间、分值等的设置。以及在抢答过程中及时接收并显示由单片机发送来的信息。VB设计窗口如图4-2所示。图4-2VB设计界面4.2.1初始设置程序在VB代码的初始程序中,最重要的是将串行控件MSComm的端口COM1口打开,然后对其他所用到的一些控件进行程序初始化。其MSComm控件初始程序如下。PrivateSubForm1_Load()……COM_COM="COM1"COM_Baud=9600MSComm1.InBufferSize=1MSComm1.OutBufferSize=3MSComm1.RThreshold=1MSComm1.SThreshold=1MSComm1.InputLen=0MSComm1.InputMode=MSCommLib.InputModeCInputModeTextMSComm1.InBufferCount=0MSComm1.OutBufferCount=0EndSub串行通讯端口各项功能都是在PortOpen的True与False之间完成的,尚若没有打开这个通讯端口就进行数据传输,系统将显示错误信息。对于MSComm的初始化程序中,另外的属性在第2章中均有表述。4.2.2串行通信程序在设置完成后,裁判不用再去对计算机进行操作,由VB程序自动对串行口接收到的各信息作出相应的动作。其核心程序是MSComm控件的Oncomm事件。其部分程序如下所示。PrivateSubMSComm1_OnComm()SelectCaseMSComm1.CommEventCaseMSCommLib.OnCommCEvReceiveCOM_Rec=MSComm1.InputIfCOM_Rec=1ThenIfStart_flag=TrueThenTextBox_display.Text="☆一组抢答成功!☆"LED1.BackColor=Color.LimeLED2.BackColor=Color.RedTimer1.Enabled=FalseElseLED1.BackColor=Color.BlackLED2.BackColor=Color.RedTimer1.Enabled=FalseTextBox_display.Text="●一组抢答违规!●"EndIfElseIfCOM_Rec=2ThenIfStart_flag=TrueThenTextBox_display.Text="☆二组抢答成功!☆"LED1.BackColor=Color.RedLED2.BackColor=Color.LimeTimer1.Enabled=FalseElseLED1.BackColor=Color.RedLED2.BackColor=Color.BlackTimer1.Enabled=FalseTextBox_display.Text="●二组抢答违规!●"EndIfEndIfEndSelectEndSub在编辑程序代码中,发现在完成传输工作后没有关闭通讯端口COM1,其实在应用程序结束时,VB会自动关闭其通信端口的。5系统调试及结果分析5.1软件仿真软件仿真我用的是Protues7.6版本来进行电路仿真。软件仿真步骤:1.建立仿真文件;2.点击左侧P按钮选取本系统所需的元器件;3.连接电路图,检查无误后,向单片机导入.HEX文件;4.打开VB调试窗体,进行调试,检验结果是否符合设计的要求。调试结果如图5-1所示。图5-1仿真图5.2调试步骤用连接线将电路与电脑的串口连上,并将电路接上电源,数码管的显示都为零。首先,打开VB界面,选择“设置题目”菜单栏,本设计可以设置三个题目,如果没有选择“设置题目”而去按其它按键,则会弹出“请设置题目”的窗口。然后选择“设置串口”菜单栏,可以对端口、波特率、计时时间、每次加的分数和每次减的分数进行设置。接着,按下“准备”按键,电路中的绿色发光二极管就会点亮,表示准备抢答,当按下“开始”按键,选手就可以开始抢答了。如果超过抢答时间还没有选手抢答,VB界面会显示“两组都放弃抢答!”。如果在抢答时间内有人抢答,VB界面会显示出哪一组抢答成功,且VB界面上与该组对应的红色灯变成绿色,主持人根据选手回答的是否正确来给选手加分或者减分,最后按“确定”按键,电路中与该组所对应的数码管就会显示出该组选手的得分。若没有按“开始”选手就抢答,VB界面就会显示有人违规了,并且会显示是哪一组违规抢答了。VB界面的菜单栏还设有“重抢”和“下题”,主持人根据需要进行选择。5.3功能测试5.3.1距离测试本设计实现了单片机和PC机的实时通信,由于PC机上本身配置的RS-232,使得单片机与电脑的距离可以拉长15m,但通过实际测试,可以实现距离拉长10m。5.4总结通过查阅资料,得出通信距离较近时(<12m),是可以用电缆线直接连接标准RS232端口(RS422,RS485较远),若距离较远,需附加调制解调器(MODEM)。6结束语经过一个多月的调试,基于串行通信的智能抢答器已经完成了,虽然算不上完美,但也算是成功的,因此不管制作过程中有过多少的挫折,也会觉得只是一次锻炼。选这个设计题目的时候,杨老师就劝告过我,这个题目涉及到VB,得做一定的考虑。但是我作为一个学生,错过一次选择的机会,那可能会失去更多选择,再说难点对自己也算是一个考验,大学四年,如果连一个抢答器都做不出来,那这些学习的时间不都算白白浪费了。当时心里就是这样想的,也就这样下定决心选择了这个设计题目。因为是一开始就听得这个题目有点复杂,而且又得涉及到VB的一些知识。所以我就特别地用上了心。这个设计是要用到单片机与PC机通讯,PC机上的界面是用VB实现,以前大二的时候学过VB,基础的知识还是有点记得,但是关于通讯方面的知识,我脑子里一点都没有。于是就特别紧张,在开题报告还没开始写的时候,我就去图书馆借了许多书,但是这些书讲的都是单片机之前的通讯。幸运的是我打听到有同学曾经做过一个把PC机作为上位机的温度控制系统,于是向他请教了许多,还好他也很耐心。这次毕业设计,我调试的时间已经算很长了,看着别人一一做好了,心里会很着急,但是光着急是没用的,最后还得有耐心去调试。能完成毕业设计,当然是件高兴的事,而且通过了设计,我也学到了很多知识,就像老师所说的一句话:“学一门,精一门。”但是只是一门罢了,看着有些做模拟电子设计的同学,他们的电路不算复杂,但是很难调试,有时我自己的做累了,会去看看他们的进展,但是却帮不了什么忙。我的设计虽然也会遇到一些问题,但毕竟都是简单数字电路。只要软件可以,功能基本上都能实现的。所以我觉得我应该学更多!参考文献[1]杨晓辉,张彤,姜俊海.智能抢答器的设计与制作[J].长春大学学报,2000,10(6):24~25.[2]罗朝盛.VISUALBASIC6.0程序设计教程[M].北京:人民邮电出版社,2009:1~2.[3]范逸之,陈立元等.VisualBasic与RS-232串行通信控制[M].北京:清华大学出版社,2002:54~67.[4]徐永洪,符影杰,江峰,范献林.基于VB6.0的串口通信实现[J].东南大学自动控制系,2004,11(1):67~68.[5]李群芳,肖看等.单片机原理、接口及应用—嵌入式系统技术基础[M].北京:清华大学出版社,2005:105~127.[6]于大方等.利用VB实现串口数据采集[J].青岛广播电视大学,2002,3:60~61.[7]雷伏容,张小林,崔浩.51单片机常用模块设计查询手册[M].北京:清华大学出版社,2010:276~278.[8]于京,张景璐.51系列单片机C程序设计与应用案例[M].北京:中国电力出版社,2006:135.[9]张毅坤,陈善久,裘雪红.单片微型计算机原理及应用[M].西安:西安电子科技大学出版社,1998:150.[10]赵建国,韩庆妙.用VisualBasic实现PC机与单片机之间的串行通信[J].安阳大学学报,2003,1:38~40.[11]谢自美.电子线路设计.实验.测试[M].武昌:华中科技大学出版社,2006.[12]吴金成,沈庆阳,郭庭吉.8051单片机实践与应用[M].北京:清华大学出版社,2002.[13]苏丽萍.电子技术基础[M].西安:西安电子科技大学出版社,2002.[14]陈庆章.VisualBasic程序设计基础[M].浙江:浙江科学技术出版社,2004.[15]谭浩强.C程序设计(第三版)[M].北京:清华大学出版社,2005.[16]/~rares/SerialVB.htm[17]/~cit/html/visual_basic_mscomm_control.html附录1单片机程序#include"REG52.H" //包含51相关头文件#include"Define.H" //包含定义头文件#include"Public_Function.H"//包含公共头文件//定义相关引脚#defineLED_OUTP0sbitBit_1=P2^4;sbitBit_2=P2^5;sbitBit_3=P2^6;sbitBit_4=P2^7;sbitkey_1=P3^2;sbitkey_2=P3^3;sbitLED_1=P3^4;//定义共阴数码管表Uint8codeLED_Table[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};//全局变量Uint1key_flag,Rec_flag;Uint8Varone,Vartwo,Loot_flag,tally,Loot_Tab[2];//函数声明voidUART_Init(void);voidKeyFunction(void);voidUART_Send_Byte(Uint8Data);voiddisplay(Uint8one,Uint8two);//主函数voidmain(void){ key_flag=1; UART_Init(); while(1) { if(!key_flag) { LED_1=0; KeyFunction(); } else { LED_1=1; } display(Varone,Vartwo); }}//显示函数voiddisplay(Uint8one,Uint8two){ P0=LED_Table[one/10];Bit_1=0;delay_ms(1);Bit_1=1; P0=LED_Table[one%10];Bit_2=0;delay_ms(1);Bit_2=1; P0=LED_Table[two/10];Bit_3=0;delay_ms(1);Bit_3=1; P0=LED_Table[two%10];Bit_4=0;delay_ms(1);Bit_4=1;}//串口初始化函数voidUART_Init(void){ SCON=0x50; TMOD=0x20; TH1=0xFD; TL1=0xFD; TR1=1; ES=1; EA=1;}//串口传送函数voidUART_Send_Byte(Uint8Data){ SBUF=Data; while(!TI); TI=0;}//按键函数voidKeyFunction(void){ if(key_1==0) { key_flag=1; Loot_flag=1; UART_Send_Byte('1'); } while(!key_1); if(key_2==0) { key_flag=1; Loot_flag=2; UART_Send_Byte('2'); } while(!key_2);}//串口中断服务程序voidUART(void)interrupt4{ if(RI) { RI=0; if(Rec_flag==0) { if(SBUF=='S') { key_flag=0; } if(SBUF=='W') { Rec_flag=1; } } else { tally++; Loot_Tab[tally-1]=SBUF; if(tally==2) { tally=0; Rec_flag=0; switch(Loot_flag) { case1:Varone=(Loot_Tab[0]-'0')+(Loot_Tab[1]-'0');break; case2:Vartwo=(Loot_Tab[0]-'0')+(Loot_Tab[1]-'0');break; default:break; } } } } }2VB程序窗体1智能抢答窗体1初始化PrivateSubForm1_Load()Hanzi(0)=""tally_add=1tally_dec=1TextBox_TK.Text=Hanzi(0)TextBox_1Z.Text="00"TextBox_2Z.Text="00"TextBox_display.Text=""LED1.BackColor=Color.RedLED2.BackColor=Color.Redmoren=0COM_COM="COM1"COM_Baud=9600MSComm1.InBufferSize=1MSComm1.OutBufferSize=3MSComm1.RThreshold=1MSComm1.SThreshold=1MSComm1.InputLen=0MSComm1.InputMode=MSCommLib.InputModeCInputModeTextMSComm1.InBufferCount=0MSComm1.OutBufferCount=0EndSub准备PrivateSubButton_ZB_Click()IfFF3=TrueThenIfmoren=FalseThenmoren=1MSComm1.CommPort=1MSComm1.Settings="9600,N,8,1"MSComm1.PortOpen=TrueMSComm1.InBufferCount=0tally_2=5EndIfMSComm1.Output="S"tally=tally_2tally_flag=TrueTextBox_tally.Text=tallyButton_ZB.Enabled=FalseElseMsgBox=("请设置题目")EndIfEndSub开始PrivateSubButton_KS_Click()IfFF3=TrueThenCOM_Rec=0IfButton_ZB.Enabled=FalseThenStart_flag=1Iftally_flag=TrueThenTimer1.Enabled=TrueButton_KS.Enabled=FalseLED1.BackColor=Color.RedLED2.BackColor=Color.RedTextBox_display.Text=""EndIfEndIfElseMsgBox=("您未设置题目")EndIfEndSub确定PrivateSubButton_QD_Click()LED1.BackColor=Color.RedLED2.BackColor=Color.RedButton_KS.Enabled=TrueButton_ZB.Enabled=TrueStart_flag=FalseIfCOM_Rec=1ThenMSComm1.Output="W"&TextBox_1Z.TextElseIfCOM_Rec=2ThenMSComm1.Output="W"&TextBox_2Z.TextEndIfTextBox_display.Text=""EndSub加分PrivateSubButton_ADD_Click()IfCOM_Rec=1Thenyizu+=tally_addIfyizu<=9ThenTextBox_1Z.Text="0"&yizuElseTextBox_1Z.Text=yizuEndIfElseIfCOM_Rec=2Thenerzu+=tally_addIferzu<=9ThenTextBox_2Z.Text="0"&erzuElseTextBox_2Z.Text=erzuEndIfEndIfEndSub减分PrivateSubButton_DEC_Click()IfCOM_Rec=1ThenIfyizu>0Thenyizu-=tally_decIfyizu<=9ThenTextBox_1Z.Text="0"&yizuElseTextBox_1Z.Text=yizuEndIfElseIfyizu<=0Thenyizu=0EndIfElseIfCOM_Rec=2ThenIferzu>0Thenerzu-=tally_decIferzu<=9ThenTextBox_2Z.Text="0"&erzuElseTextBox_2Z.Text=erzuEndIfElseIferzu<=0Thenerzu=0EndIfEndIfEndSub串行通信PrivateSubMSComm1_OnComm()SelectCaseMSComm1.CommEventCaseMSCommLib.OnCommCEvReceiveCOM_Rec=MSComm1.InputIfCOM_Rec=1ThenIfStart_flag=TrueThenTextBox_display.Text="☆一组抢答成功!☆"LED1.BackColor=Color.LimeLED2.BackColor=Color.RedTimer1.Enabled=FalseElseLED1.BackColor=Color.BlackLED2.BackColor=Color.RedTimer1.Enabled=FalseTextBox_display.Text="●一组抢答违规!●"EndIfElseIfCOM_Rec=2ThenIfStart_flag=TrueThenTextBox_display.Text="☆二组抢答成功!☆"LED1.BackColor=Color.RedLED2.Bac
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年三季度报天津地区A股流动负债合计排名前十大上市公司
- 课题申报参考:教育家精神赋能高校师德师风建设研究
- 二零二五版外资企业会计人员聘用与管理服务协议3篇
- 二零二五年环境治理担保合同标的属性与实施3篇
- 二零二五年度农产品批发市场合作协议书4篇
- 2025年湛江货运从业资格证怎么考
- 医院工作个人工作总结
- 二零二五版个体工商户雇工劳动合同(文创产业专用)3篇
- 2025年度智能交通设施安装与维护承包合作协议4篇
- 2025年度智慧家居虫害预防与治理服务合同4篇
- 2024年高纯氮化铝粉体项目可行性分析报告
- 安检人员培训
- 山东省潍坊市2024-2025学年高三上学期1月期末 英语试题
- 危险性较大分部分项工程及施工现场易发生重大事故的部位、环节的预防监控措施
- 《榜样9》观后感心得体会四
- 2023事业单位笔试《公共基础知识》备考题库(含答案)
- 化学-广东省广州市2024-2025学年高一上学期期末检测卷(一)试题和答案
- 2025四川中烟招聘高频重点提升(共500题)附带答案详解
- EHS工程师招聘笔试题与参考答案(某大型央企)2024年
- 营销策划 -丽亭酒店品牌年度传播规划方案
- 2025年中国蛋糕行业市场规模及发展前景研究报告(智研咨询发布)
评论
0/150
提交评论