本科毕业设计基于串行通信的智能抢答器.docx

上传人:b****4 文档编号:24351305 上传时间:2023-05-26 格式:DOCX 页数:43 大小:1.39MB
下载 相关 举报
本科毕业设计基于串行通信的智能抢答器.docx_第1页
第1页 / 共43页
本科毕业设计基于串行通信的智能抢答器.docx_第2页
第2页 / 共43页
本科毕业设计基于串行通信的智能抢答器.docx_第3页
第3页 / 共43页
本科毕业设计基于串行通信的智能抢答器.docx_第4页
第4页 / 共43页
本科毕业设计基于串行通信的智能抢答器.docx_第5页
第5页 / 共43页
点击查看更多>>
下载资源
资源描述

本科毕业设计基于串行通信的智能抢答器.docx

《本科毕业设计基于串行通信的智能抢答器.docx》由会员分享,可在线阅读,更多相关《本科毕业设计基于串行通信的智能抢答器.docx(43页珍藏版)》请在冰豆网上搜索。

本科毕业设计基于串行通信的智能抢答器.docx

本科毕业设计基于串行通信的智能抢答器

基于串行通信的智能抢答器

职业技术教育学院应用电子技术教育专业王丹萍(07440114)

指导老师:

杨金华(讲师)

摘要:

本文主要介绍应用单片机技术和VB语言实现智能抢答系统的设计,以及实现智能抢答系统的方案。

系统分为两大部分,即单片机部分和PC机两大部分。

PC机主要完成图形用户界面,并利用Visualbasic语言本身具有的通信控件MSComm与单片机进行通讯。

图形界面友好美观,操作简单。

单片机部分采用的是功能强大,集成度极高的STC89C52单片机。

设计完成后,电路总体调试,实现了智能抢答的功能。

关键词:

STC89C52;VisualBasic;MSComm控件;实时通讯

Intelligencecontestdevicebasedonserialcommunication

Student:

WANGDan-pingDirector:

YANGJin-hua

(Applicationofelectronictechnologyeducationprofessionals,ZhejiangNormalUniversityNo:

07440114)

Abstract:

ThistextismainintroducedthetechnologyoftheMicrocontrollerandutilizeVBlanguagetorealizetheintelligenceviesforansweringsystem,andtheschemetorealizetheintelligenceviesforansweringsystem.Thesystemdivideintotwomajorparts,namelyMicrocontrollerpartandPCpart.ThePCfinishesthefigureuser'sinterfacemainly,andutilizetheVisualbasiclanguageowncommunicationcontrollingpartMSCommcommunicatewithMicrocontroller.Theinterfaceisfriendlyandbeautiful,itissimpletooperate.theMicrocontrollerpartisadoptedtheSTC89C52whichispowerfulandextremelyhighinintegrateddegree.Afterfinishdesign,thecircuitisdebuggedcompletelyandrealizedthefunctionofintelligenceviesforansweringsystem.

KeyWord:

STC89C52;LanguageofVisualBasic;controllingpartMSComm;Real-timecommunication

 

1引言

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,无奇偶校验,8个数据位,1个停止位。

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))

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1