基于VC和单片机的上下位机串口通讯系统设计1摘要论文详细介绍了单片机做下位机与VC设计的上位机进行通信的软硬件实现。在硬件设计中,下位机采用AT89C52单片机系统与上位机系统通过RS-232串行通信端口进行互连,采用MAX232电平转换器完成双向电平转换功能。单片机系统接收由上位机传输过来的PID参数并在LED数码管上显示,同时可通过按键分别对参数进行加减操作,把修改后的PID参数再传给上位机。在软件设计中,上位机采用VisualStudio2008中的MFC编写上位机的界面程序。上位机可以显示测量数据,调节阀门开度,设定PID参数并可将参数传给下位机,也可接收下位机发送的PID参数。关键词:单片机;VC;串口通信;PID参数。2目录第1章前言.......................................................3第2章总体设计方案...............................................42.1上位机程序设计.............................................42.1.1面向对象的程序设计...................................42.1.2Windows应用程序......................................52.1.3Windows消息机制......................................52.1.4使用MFC程序设计......................................62.2上位机串口编程.............................................72.2.1串口介绍..............................................72.2.2使用串口控件方法......................................72.3下位机设计介绍.............................................82.3.1单片机的通信方式......................................82.4上下位机通信协议..........................................10第3章硬件设计..................................................123.1单片机的选择..............................................123.2电平转换器MAX232.........................................123.374LS164LED驱动芯片.......................................123.4LED显示器................................................133.4.1LED显示器工作原理...................................133.4.2LED显示器接口.......................................13第4章软件设计..................................................144.1上位机编程方案选择........................................144.1.1上位机软件流程图.....................................144.1.2上位机程序设计.......................................164.2下位机编程方案选择........................................224.2.1上位机软件流程图.....................................224.2.2下位机程序设计.......................................24第5章总结......................................................34参考文献.........................................................35附录A...........................................................36附录B...........................................................383第1章前言随着计算机技术尤其是单片微型机技术的发展,单片机被广泛应用在工业控制系统中。单片机具有体积小、价格低廉、开发应用方便、可应用于恶劣工业环境的特点,在分布式控制系统中多采用单片机进行数据采集和现场控制。由于单片机的计算能力有限,难以进行复杂的数据处理,因此在功能复杂的控制系统中常采上位机下位机系统,单片机用作下位机进行数据采集和设备控制,而PC机用做上位机进行复杂的数据处理和对单片机的控制。现代信息网络技术的一个突出特点,就是使工业控制系统中的所有设备连接成网,从而在一个核心软件管理下工作,形成一个有机的整体。这种整体网络方式在现代工业控制系统具有传统独立控制系统所无法比拟的先进性,不仅能极大地提高工业设备的生产效率,还可以大大提高系统的安全性和可靠性。在单片机的输入输出控制中,除直接接上小键盘和LCD显示屏等方法外,一般都通过串口和上位机PC进行通信。这样不仅能够实现远程控制,而且能够利用PC机强大的数据处理功能以及友好的控制界面。在一般的利用PC机对单片机进行控制的场合,都是采用Windows作为上位机的平台,其优点是界面友好,编程和操作都比较容易。因此研究PC机与单片机串行通信具有重要的现实及工业意义。4第2章总体设计方案本课程设计中,开发上位机程序使用的开发环境是WIN7系统下用微软的VS2008集成开发环境,所用语言为C++。主要任务是界面设计和串口通信的实现,以及由下位机上传的水位数据的图形显示。下位机部分,开发所使用的集成环境为keil4,使用编程语言为C语言。下位机主要实现的功能是收发数据,即与上位机进行通信。通信的内容有PID参数的下传与显示,阀门开度的下传,以及水位数据上传给上位机。其中上下位机通信采用的是异步串行通信。通过RS—232和modbus协议完成数据通信的过程。其流程图如图2.1所示。单片机MAX232PC机LED图2.1总体设计方案流程图2.1上位机程序设计2.1.1面向对象的程序设计这次开发所使用C++就是一种面向对象的编程语言,VisualStudio2008就是开发Windows程序最主要的集成开发环境之一,它不仅是C++语言的集成开发环境,还与Win32紧密相连,因此,VisualStudio2008可以完成各种应用程序开发,从底层的软件到顶层面向用户的软件。使用VisualStudio2008环境开发应用程序缩短了开发时间,且界面友好,易于操作。在开发Windows应用程序时,主要使用Windows提供的WindowsAPI即应用程序接口函数,或者是Microsoft提供的MFC即微软基础类库。其中使用API开发Windows应用程序,我们需要大量的调用系统的API函数,而使用MFC实现同样的功能,系统会通过封装的方式提供给我们现成的功能模块调用,甚至大量的代码将由编译器自己生成。省去了程序员大量的编写代码的时间,提高了编写Windows应用程序的效率。是程序员专注于手中将要实现的任务,而非相对底层的实现机制。这样更有利于开发出大型的,面向对象的应用程序。52.1.2Windows应用程序由于要开发的上位机需要与有良好的人机界面,这样就需要开发一个具有图形窗口的应用程序。在Windows图形操作系统下,窗口程序是基于事件驱动的,也就是说用户可能随时发出各种消息,而每当一个操作完成,窗口程序也要完成相应的处理功能。这与DOS下顺序执行的操作方式有很大的不同。一个完整的窗口程序如图2.2。图2.2应用程序窗口2.1.3Windows消息机制Windows程序启动后,执行特定的任务,其中最重要的是创建应用程序的主窗口,这个主窗口需要自己的代码来处理Windows发送给它的信息,所以Windows程序是通过来自操作系统的消息来处理用户的输入。Windows中的大部分消息是严格定义的,而且适用于所有的程序。例如,当创建一个窗口时,发送一个WM_CREAT消息;当用户按下鼠标左键时,会发送一个WM_LBUTTONDWON消息。Windows还对选定的窗口发送WM_COMMAND消息,以响应用户菜单的选择、对话框按钮的单击等操作,用户也可以定义自己的消息,并且能够由程序发送到桌面的任何窗口,接收响应。Windows对消息的处理过程为:Windows在系统内部有一个消息队列,当输入设备有所动作的时候,Windows都会产生响应的记录放在系统的消息队列里,而每个记录中包含了消息的类型、发生的位置和发生的时间。同时,Windows为6每个程序维护一个消息队列,Windows检查系统消息队列里的应用程序消息发生的位置,进而送到相应的窗口中去。2.1.4使用MFC程序设计MFC中的类的名称都是以C为开头的,如果需要定义自己的类或者根据MFC库的基类派生新类时要使用相同的约定。这样更有助于程序的理解。而变量的命名需要使用匈牙利命名法。这样可以是代码更加容易阅读。MFC中如果要得到完整的应用程序,只需要从MFC中派生两个类即可:应用程序类和窗口类。CWinApp类对任何使用MFC编写的Windows程序来说都很重要,该类包括的对象包括启动、初始化、运行和关闭应用程序所需的一切代码。MFC应用程序与用户交互的界面被称作框架窗口,因此,需要为应用程序从MFC类CFrameWnd中派生一个窗口类,而此类提供了创建和管理应用程序窗口所需的一切。MFC程序的结构包括两个面向应用的实体——文档和视图。文档是给予应用程序中与用户交互的数据集合的名称。文档类是从MFC的库中的CDocument类派生的,需要添加数据成员来存储应用程序需要的数据,还要添加成员函数来支持对数据的处理。视图总是与特定的文档对象相关。视图对象可以提供一种机制来显示文档中存储的部分或全部数据。视图定义了在窗口中显示的数据的方式以及与用户交互的方式。与定义的文档方式类似,自己的视图类是通过CView类派生出来的。显示视图的窗口框架被称为框架窗口。视图实际上是在自己的、完全充满框架窗口的客户区窗口中显示的。文档对象可以拥有任意多个与其相关的视图对象。各个视图对象可以提供文档数据或文档子集的不同表示方法。MFC提供了使文档与其视图相结合,以及使各个框架窗口与当前的活动视图相结合的机制。文档对象自动维护着指向相关视图的指针列表,而视图对象拥有存储相关文档对象的指针的数据成员。各个框架窗口都存储着一个指向当前活动视图对象的指针。文档、视图和框架窗口之间的协作,是由另一个名为文档模版的MFC类的对象安排的。这些指针使一种类对象的函数成员可以访问另一种类对7象的公有数据或接口中的函数成员。应用MFC编程时使用的到的功能组件:(l)应用程序向导(Appwizard)。Appwizard是一个标准的C++源代码生成器。它通过一系列的对话框来提示用户输入所需创建的程序的信息。然后APPWizard生成一些文件,这些文件构成程序的框架。由APPwizard生成的程序是一个基本的Windows程序,它生成的是基本代码,用户应在此基础上完善自己内容。(2)类向导(Classwizard)。Classwizard