VC++实现串口通信的应用程序设计

VC++实现串口通信的应用程序设计
VC++实现串口通信的应用程序设计

VC++实现串口通信的应用程序设计

王臻,陈永泰

武汉理工大学信息学院,武汉(430070)

E-mail:wangz_best@https://www.360docs.net/doc/eb7343448.html,

摘 要:本文介绍了结合了Win32 的API函数和C++类的基本思想封装的一个串行通信类CSerialPort类。并通过具体的实例详细介绍其在VC++6.0下的实现串口通信方法和过程。关键词:VC++,串口通信,CSerialPort类

1.引言

在控制领域的研发中,PC机与外围控制设备的通讯方式有多种,如串行通信口、并行通信口、一台网口(需要网卡支持)、USB通信口或自制危机接口卡。而串口通信则是在数据通信速率部是很高的情况下,开发者所采用的最常见、最简单、最通用的通信方式。并且考虑到现在的PC机标准配置都具备两个串口,因此利用串口资源来开发PC机与外围控制设备之间的通信应该是最方便快捷的[3]。

在目前常用的各种开发环境(如VB、VC和Delphi等)下实现串口通信的方式有很多种:

首先,最简便的方法是采用Microsofe公司提供的ActiveX控件实现串口通信,即MSComm控件。实现串口通信的编程方法原理上比较简单,容易实现,但编程的灵活性稍差,且应用程序运行时必须同时拷入与通信控件相关的文件。

其次,使用Win32 的API函数实现串口通信亦是很好的方法。利用 API函数实现串口通信的编程方法功能强大,灵活性好,但原理上比较复杂,需要编程人员对串口的硬件工作原理有较深入的了解。

最后,可以利用VC运行时库的标准通信函数实现串口通信。其编程原理简单,但其使用性和灵活性较差。

总之,各种串口通信的实现方式在使用条件、灵活性和复杂程度等方面各有优缺点,分别适合于各自不同的应用场合。而本文介绍一个结合了Win32 的API函数和C++类的基本思想封装了一个串行通信类CSerialPort类,通过一个实例介绍,我们发现这个自定义的串口通信类能够使得串口通信的实现更加灵活、方便。

2.串口通信的实现

虽然实现串口通信方法很多,但是一般来说,串行通信程序的工作过程一般分四步[2]:(1)打开串口:在此步骤中,我们可以实现打开通信资源、设置通信参数、设置通信事件、创建读写事件以及等待串口接收中断等操作。

(2)读串口:在此步骤中,当有字符或干扰到达串口时发生EV_ RXCHAR消息的发送,响应函数接收到此消息后读取串口接收缓冲区。

(3)写串口:该步骤是负责将要发送的字符写入发送串口缓冲区。

(4)关闭串口。

2.1 CSerialPort通信类的介绍

2.1.1 CSerialPort类的定义声明

class CSerialPort

{

public:

ClosePort();

void

CSerialPort();

virtual ~CSerialPort();

BOOL InitPort(CWnd* pPortOwner, UINT portnr = 1, UINT baud = 19200, char parity = 'N', UINT databits = 8, UINT stopbits = 1, DWORD dwCommEvents =

EV_RXCHAR, UINT writebuffersize = 1024);

HANDLE m_hComm;

BOOL StartMonitoring();

BOOL RestartMonitoring();

BOOL StopMonitoring();

GetWriteBufferSize();

DWORD

DWORD

GetCommEvents();

DCB GetDCB();

string);

void

WriteToPort(char*

string,int

n);

WriteToPort(char*

void

string);

WriteToPort(LPCTSTR

void

string,int

n);

WriteToPort(LPCTSTR

void

protected:

ErrorText);

void

ProcessErrorMessage(char*

static UINT CommThread(LPVOID pParam);

void ReceiveChar(CSerialPort* port, COMSTAT comstat);

static

static void WriteChar(CSerialPort* port);

m_Thread;

CWinThread*

CRITICAL_SECTION m_csCommunicationSync;

BOOL m_bThreadAlive;

HANDLE m_hWriteEvent;

HANDLE m_hShutdownEvent;

HANDLE m_hEventArray[3];

OVERLAPPED m_ov;

COMMTIMEOUTS m_CommTimeouts;

DCB m_dcb;

m_pOwner;

CWnd*

UINT m_nPortNr;

char* m_szWriteBuffer;

DWORD _dwCommEvents;

DWORD

m_nWriteBufferSize;

};

2.1.2 CSerialPort类的函数说明

在构造函数 CSerialPort 中对该类的数据成员进行了初始化。InitPort函数完成串口的初始化工作,包括打开串口、设置 SPC的参数、设置通信事件的时间、建立串口的设备控制块。由于串口是一种临界资源,不允许多个线程或用户同时访问,因此在该函数中调用了两

个Windows API函数EnterCriticalSection和LeaveCriticalSection,以实现对串口的互斥访问。

A,串口操作函数:

StartMonitoring函数调用Windows API函数:AfxBeginThread启动一个SPC线程,打开串口。

RestartMonitoring函数调用CwinThread 的成员函数:ResumeThread 重启SPC线程,重起串口;

StopMonitoring函数调用CwinThread的成员函数:SuspendThread 停止SPC线程,关闭串口。

B,串口读写函数:

WriteChar 函数调用Windows API函数:WriteFile 向串口写数据;

ReceiveChar 函数调用 Windows API函数:ReadFile从串口读取数据。

WriteToPort函数:另外扩充函数,通过不同的变量参数,适应不同的写串口的需求。

CommThread函数是SPC的线程,完成SPC的消息循环。该函数调用了WaitCommEvent 函数来等待事件消息,然后进行消息的处理和分发。在消息的处理中调用了WriteChar函数和ReceiveChar函数。另外在这个SPC线程函数中还进行了必要的异常处理。

C,其他的相关函数

其它的几个函数 ProcessErrorMessage,GetDCB 和GetWriteBufferSize 则完成一些辅助的功能。

2.2 CSerialPort串口通信类的具体应用

前面介绍了CSerialPort类的声明以及其中一些重要的函数。下面介绍在VC++6.0环境下利用MFC编写一个基于对话框的串口通信测试的应用程序[1]。定义实现串口通信的类为CSerialPort。

2.2.1 串口初始化

在我们的例子中,我们在CSerialPort.h中声明一个串口类的对象:

CSerialPort m_SerialPort;

要实现串口首先需要对串口进行设置和初始化。打开串口后,才能对串口的状态进行监控。其串口初始化函数如下:

InitPort(this, nPort, band, checkbit, databits, stopbits,EV_RXFLAG | EV_RXCHAR,512);

初始化串口的状态,每次只能初始化一个串口。其中参数nPort:端口号, band:波特率, checkbit:校验位, databits:数据个数, stopbits:停止位均可以通过界面设置,也可以在初始化串口时直接定义。

初始化串口完毕后,需要通过StartMonitoring()启动串口通信线程函数CommThread,即可立即对所定义的串口进行监听。

2.2.2 处理函数的定义

在文件CSerialPort.h类CSerialPort的定义中声明自定义处理函数:

afx_msg void OnComm(WPARAM ch, LPARAM port);

在CSerialPort.cpp内添加函数OnComm()。实现了对接受到的数据的处理代码。

在文件CSerialPort.cpp消息映射的BEGIN_MESSAGE_MAP和END_MESSAGE_MAP 之间添加自定义消息映射宏ON_MESSAGE(WM_COMM_RXCHAR, OnComm),即在接受

到字节的情况下触发函数。这样就可以在串口上存在一个字节的时候就可以触发OnComm ()函数来处理消息。

2.2.3 写串口

在处理完接受的消息的后,就需要将反馈的消息再次写到串口发送出来,从而完成串口通信。在这里我们使用m_SerialPort.WriteToPort(char* string,int n)来完成写串口,其中定义了写到串口的字符串和字符的个数。在CSerialPort类中,我们补充了其他的WriteToPort的函数以满足其他情况下的需要,在使用的过程中大家可以根据需要选择合适的写串口函数,也可以根据自己的需要来扩充其他的函数。

2.2.4关闭串口

在串口通信完毕用m_SerialPort.ClosePort()来关闭串口。

3.测试

使用“串口调试工具”对编写的串口测试工具进行调试,用串口线将PC机上的串口1和串口 2 相连。将串口调试工具和串口测试工具的参数设置如下所示,其比特率,交验位,数据位,停止位设置必须相同,其两个端口号分别选择为端口1,端口2。当两个端口同时打开的时候,PC机上的串口连接线将两个串口导通。当“串口调试工具”发送“this is a test program!”信息时,在串口测试工具接受到该条信息。测试结果如下图所示:图1:串口调试器发送信息;图2:串口测试工具接受信息。

图1 串口调试器发送信息图2 串口测试工具接受信息

4.结束语

本文应用Win32的API函数和C++类的基本思想把对串口的操作封装成一个串口通信类的CSeriaPort,采用该串口通信类对串口设备的“屏蔽”,增加对串口操作的透明度,提高串口传输数据的可靠性,方便程序员的编程。另外,还可以根据自己的需求对CSeriaPort 类进行功能扩充。

参考文献

[1] Kruglinski.《Visual C++ 技术内幕》[M].北京:电子工业出版社,1999.

[2] 李现勇.《Visual C+ +串口通信技术与工程实践》[M].北京:人民邮电出版社.

[3] 王颖.《用 VC6.0 实现串行通信的三种方法》[J].VC 知识库在线帮助期,https://www.360docs.net/doc/eb7343448.html,/,2000第9 期:18-20.

Application design of serial communication based on VC++

Wang Zhen, Chen Yongtai

school of information engineering,Wuhan University of Technology, Wuhan, PRC (430070)

Abstract

This paper introduces a new Serial Port class, which is named CSerialPort and is comprised based on Win32 API and some C++ classes. By introducing one example, we analysis the application of the CSerialPort class in the serial communication based on VC++.

Keywords:VC++,Serial Communication,Class CSerialPort

VC课程设计及商品销售管理知识系统(DOC 39页)

VC课程设计及商品销售管理知识系统(DOC 39页)

第一章需求分析 1.1 商品销售管理功能概述 21世纪是个信息发展的时代,随着电脑普及时代的来临以及互联网的迅速发展,越来越多的进程从单一的人工管理上升到电脑智能管理,企业的发展更不例外,商品的经营管理,经营模式已经慢慢的从手工管理过渡到了计算机管理。对于发展中的绝大多数企业来说,随着规模的不断扩大,商品种类的不断丰富与完善,需要管理的各种商品信息也会大幅度增加,无论是商品管理,订货管理,销售管理,都变得相对复杂。这里开发出了一个“商品销售管理系统”,对企业的发展至关重要,无疑为商品销售的可持续发展,日益壮大提供了保障和解决方案,也节省了大量时间,从而提高了商品销售的运转效率,更有利于企业的管理和维持。商品销售管理系统可以实现企业商品管理的网络化,信息化,现代化,可以有效的提高企业商品的管理效率,节约了管理开支。 通过调查,要求系统需要具有以下功能: (1) 由于该系统的使用对象多,要求有较好的权

限管理。 (2) 方便的数据查询,支持多条件查询。 (3) 基础信息管理与查询,其中包括商品信息、客户信息和员工信息。 (4) 通过计算机,能够直接“透视”商品销售情况。 (5) 完善的商品查询信息、商品销售信息进行管理。 (6) 当外界环境(停电、网络病毒)干扰本系统后, 系统可以自动保护原始数据的安全,对数据进行备份与还原。 (7) 数据计算自动完成,尽量减少人工干预。 (8) 系统退出。 商品销售管理系统分为基础信息管理子系统、日常业务管理子系统、查询报表管理子系统、系统信息管理子系统、维护管理子系统。如图1.1所示 1.1商品销售管理系统 1.2 基础信息管理模块 基础信息管理模块主要用于对商品信息,员工信息和客户信息的管理。操作员通过合法的认

cc2530串口UART0通信实验(20200627130016)

/********************* 头文件*************************************************/ #include #include /********************* 宏定义*************************************************/ #define uint unsigned int #define uchar unsigned char // --------------- LED 控制端口------------------------------- // #define GLED P1_0〃绿色LED定义 #define RLED P1_1〃红色LED定义 // --------------- 按键输入端口------------------------------- // #define KEY1 P0_0 /********************* 全局变量**********************************************/ unsigned char Uart0_Rx; unsigned char Text_Data[]=" 海舟物联网教育!\r\n"; /********************* 函数声明***********************************************/ void Delay(uint); void Init_LED(void); void Init_Uart0(void); void Init_Sysclk(void); void Uart0_TX_Data(unsigned char *Data,int len); /****************************************************************************** * 函数名称: void Delay(uint n) * 函数功能: 软件延时函数 * 入口参数: * 出口参数: * 备注: ******************************************************************************/ void Delay(uint n) { uint i; for(i=0;i

UART串口通信设计实例

2.5 UART串口通信设计实例(1) 接下来用刚才采用的方法设计一个典型实例。在一般的嵌入式开发和FPGA设计中,串口UART是使用非常频繁的一种调试手段。下面我们将使用Verilog RTL编程设计一个串口收发模块。这个实例虽然简单,但是在后续的调试开发中,串口使用的次数比较多,这里阐明它的设计方案,不仅仅是为了讲解RTL编程,而且为了后续使用兼容ARM9内核实现嵌入式开发。 串口在一般的台式机上都会有。随着笔记本电脑的使用,一般会采用USB转串口的方案虚拟一个串口供笔记本使用。图2-7为UART串口的结构图。串口具有9个引脚,但是真正连接入FPGA开发板的一般只有两个引脚。这两个引脚是:发送引脚TxD和接收引脚RxD。由于是串行发送数据,因此如果开发板发送数据的话,则要通过TxD线1 bit接着1 bit 发送。在接收时,同样通过RxD引脚1 bit接着1 bit接收。 再看看串口发送/接收的数据格式(见图2-8)。在TxD或RxD这样的单线上,是从一个周期的低电平开始,以一个周期的高电平结束的。它中间包含8个周期的数据位和一个周期针对8位数据的奇偶校验位。每次传送一字节数据,它包含的8位是由低位开始传送,最后一位传送的是第7位。

这个设计有两个目的:一是从串口中接收数据,发送到输出端口。接收的时候是串行的,也就是一个接一个的;但是发送到输出端口时,我们希望是8位放在一起,成为并行状态(见图2-10)。我们知道,串口中出现信号,是没有先兆的。如果出现了串行数据,则如何通知到输出端口呢?我们引入“接收有效”端口。“接收有效”端口在一般情况下都是低电平,一旦有数据到来时,它就变成高电平。下一个模块在得知“接收有效”信号为高电平时,它就明白:新到了一个字节的数据,放在“接收字节”端口里面。

VC程序设计 课程设计报告书

VC程序设计课程设计 报告书 设计题目:简单绘图软件 院系:信息工程学院 班级:软件1101 组别:第二十二组 学号: 1110024130 姓名: 方锦 起止日期:2012年12月10日~2012年12月20日指导教师:张顺利

目录 绪论 -------------------------------------------------------------------------------- 3一概要设计 -------------------------------------------------------------------- 5 1.主要功能---------------------------------------------------------------------- 5 2.设计的概要设计功能模型框架图---------------------------------------- 5 二设计的详细设计------------------------------------------------------------- 5 1工具栏的编辑---------------------------------------------------------------- 6 2状态栏的编辑 --------------------------------------------------------------- 6 四编码和测试---------------------------------------------------------------- 9五设计总结 ------------------------------------------------------------------ 10 1.过程分析-------------------------------------------------------------------- 10 2.经验教训及分析 -----------------------------------------------------------11 3程序维护 --------------------------------------------------------------------11 六参考文献-------------------------------------------------------------------- 12

串行口通信实验 单片机实验报告

实验六串行口通信实验 一、实验内容 实验板上有RS-232接口,将该接口与PC机的串口连接,可以实现单片机与PC机的串行通信,进行双向数据传输。本实验要求当PC机向实验板发送的数字在实验板上显示,按实验板键盘输入的数字在PC机上显示,并用串口助手工具软件进行调试。 二、实验目的 掌握单片机串行口工作原理,单片机串行口与PC机的通信工作原理及编程方法。 三、实验原理 51单片机有一个全双工的串行通讯口,所以单片机和电脑之间可以方便地进行串口通信。进行串行通讯信要满足一定的条件,比如电脑的串口是RS232电平(-5~-15V为1,+5~+15V为0),而单片机的串口是TTL电平(大于+2.4V为1,小于- 0.7V为0),两者之间必须有一个电平转换电路实现RS232电平与TTL电平的相互转换。 为了能够在PC机上看到单片机发出的数据,我们必须借助一个Windows软件进行观察,这里我们可以使用免费的串口调试程序SSCOM32或Windows的超级终端。 单片机串行接口有两个控制寄存器:SCON和PCON。串行口工作在方式0时,可通过外接移位寄存器实现串并行转换。在这种方式下,数据为8位,只能从RXD端输入输出,TXD端用于输出移位同步时钟信号,其波特率固定为振荡频率的1/12。由软件置位串行控制寄存器(SCON)的REN位后才能启动,串行接收,在CPU将数据写入SBUF寄存器后,立即启动发送。待8位数据输完后,硬件将SCON寄存器的T1位置1,必须由软件清零。 单片机与PC机通信时,其硬件接口技术主要是电平转换、控制接口设计和远近通信接口的不同处理技术。在DOS操作环境下,要实现单片机与微机的通信,只要直接对微机接口的通信芯片8250进行口地址操作即可。WINDOWS的环境下,由于系统硬件的无关性,不再允许用户直接操作串口地址。如果用户要进行串行通信,可以调用WINDOWS的API 应用程序接口函数,但其使用较为复杂,可以使用KEILC的通信控件解决这一问题。 四、实验电路 [参考学习板说明书P27]

VC与c51串口通讯程序

跟着步骤学习 1.建立项目:打开VC++6.0,建立一个基于对话框的MFC应用程序SCommTest 2.在项目中插入MSComm控件选择Project菜单下Add To Project子菜单中的 Components and Controls…选项,在弹出的对话框中双击Registered ActiveX Controls项(稍等一会,这个过程较慢),则所有注册过的ActiveX控件出现在列表框中。选择Microsoft Communications Control, version 6.0,,单击Insert按钮将它插入到我们的Project中来,接受缺省的选项。(如果你在控件列表中看不到Microsoft Communications Control, version 6.0,那可能是你在安装VC6时没有把ActiveX一项选上,重新安装VC6,选上ActiveX就可以了), 这时在ClassView视窗中就可以看到CMSComm类了,(注意:此类在ClassWizard中看不到,重构clw 文件也一样),并且在控件工具栏Controls中出现了电话图标(如图1所示),现在要做的是用鼠标 将此图标拖到对话框中,程序运行后,这个图标是看不到的。 3.利用ClassWizard定义CMSComm类控制对象打开ClassWizard ->Member Viariables选项卡,选择CSCommTestDlg类,为IDC_MSCOMM1 添加控制变量:m_ctrlComm,这时你可以看一看,在对话框头文件中自动 加入了//{{AFX_INCLUDES() #include "mscomm.h" //}}AFX_INCLUDES (这时运行程序,如果有错,那就再从头开始)。 4.在对话框中添加控件向主对话框中添加两个编辑框,一个用于接收显 示数据ID为IDC_EDIT_RXDATA,另一个用于输入发送数据,ID为 IDC_EDIT_TXDATA,再添加一个按钮,功能是按一次就把发送编辑框中的内 容发送一次,将其ID设为IDC_BUTTON_MANUALSEND。别忘记了将接收编辑 框的Properties->Styles中把Miltiline和Vertical Scroll属性选上,发送编辑框若你想输入多行文字,也可选上Miltiline。 再打开ClassWizard->Member Viariables选项卡,选择CSCommTestDlg类,为IDC_EDIT_RXDATA 添加CString变量m_strRXData,为IDC_EDIT_TXDATA添加CString变量m_strTXData。说明: m_strRXData和m_strTXData分别用来放入接收和发送的字符数据。 5.添加串口事件消息处理函数OnComm()打开ClassWizard->Message Maps,选择类CSCommTestDlg,选择IDC_MSCOMM1,双击消息OnComm,将弹出的对话框中将函数名改为OnComm,(好记而已)OK。 这个函数是用来处理串口消息事件的,如每当串口接收到数据,就会产生一个串口接收数据缓冲区中有字符的消息事件,我们刚才添加的函数就会执行,我们在OnComm()函数加入相应的处理代码就能实现自已想要的功能了。请你在函数中加入如下代码: void CSCommTestDlg::OnComm() { // TODO: Add your control notification handler code here VARIANT variant_inp; COleSafeArray safearray_inp; LONG len,k; BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed. CString strtemp; if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符 { ////////以下你可以根据自己的通信协议加入处理代码 variant_inp=m_ctrlComm.GetInput(); //读缓冲区 safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量 len=safearray_inp.GetOneDimSize(); //得到有效数据长度 for(k=0;k

河北工业大学vc课程设计 7成绩管理系统

河北工业大学计算机软件技术基础(VC) 课程设计任务书 一、题目:设计一个成绩管理系统 二、目的与要求 1.目的: 通过成绩管理系统的设计,培养学生综合利用C++语言进行程序设计的能力,加强函数的运用及学生对软件工程方法的初步认识,提高软件系统分析能力和程序文档建立、归纳总结的能力,提高学生程序调试技巧、代码规范化等素质,提高学生分析问题、解决问题及实际运用能力。 2. 基本要求: (1)要求用C++语言编程,在Visual C++环境下调试完成; (2)要求划分功能模块,各个功能分别使用函数来完成; (3)源代码程序要求必要的注释。 三、设计方法和基本原理 1.课题功能描述 设计一个成绩管理系统,要求实现的功能包括:成绩录入、显示、修改、排序等功能。 2.问题详细描述 设计一个成绩管理系统,要求可以录入成绩(学生信息包括学号、姓名、成绩)并能显示学生成绩;当输入有误或其他情况需要修改成绩时可以进行修改(插入或删除);同时还可以按学生学号排序。 要求编写多个函数分别实现上述功能,而后在main函数中进行调用。 3.问题的解决方案: 根据问题的描述,可以按照程序要求的功能采用结构化的设计思想。 成绩管理系统可利用菜单(界面制作switch语句)使用户选择各个功能模块,例如: 1.输入成绩 2.显示成绩 3.插入 4.删除 5.按学号排序 6. 退出 而后可根据不同的选项进入到不同的功能模块进行执行。结束程序,请选择y之外的任何字母或数字,如果想让程序循环执行,则选择y。 四、主要技术问题的描述 根据三的分析,主要问题在于: (1)学生信息用结构体的构造

struct student { char num[10]; /*学号*/ char name[20]; /*姓名*/ int score; /*成绩*/ } stu[80]; (2)如果学号定义成了字符数组的形式,因此在进行排序(冒泡法)的时候,要用到strcmp,strcpy 等函数,注意它们的使用。 五、课程设计的考核方式及评分方法 1.考核方式 (1)学生要提交书面课程设计报告(A4纸打印);并将设计报告的电子文档、.cpp源文件和.h头文件放到一个文件夹里(如果是基于MFC的编程,另外还包括源程序的压缩包)上传到所对 应班级的学生名称相应文件夹中。 (2)课程设计结束时,在机房当场验收。教师提供测试数据,由学生运行所设计的系统,检查运行结果是否正确,并回答教师提出的有关问题。 2.评分方法 根据出勤率、课程设计期间纪律、课程设计运行结果、课程设计报告及答辩情况综合评分。 六、书写设计报告的要求(详细内容见“设计报告模板”) 七、说明:课程设计的有关文档,“设计报告模板”和“课程设计要求”请在下载任务书处下载。

实验报告-实验一IAR串口通信

实验报告-实验一IAR串口通信 以下是为大家整理的实验报告-实验一IAR串口通信的相关范文,本文关键词为实验,报告,IAR,串口,通信,实验,平台,使用,串口,通信,您可以从右上方搜索框检索更多相关文章,如果您觉得有用,请继续关注我们并推荐给您的好友,您可以在综合文库中查看更多范文。 实验一平台使用及串口通信 本次实验报告在下课后3天内上交!一、实验目的 (1)了解物联网实验 (2)箱熟悉IAR开发平台

(3)能够读懂原理图中有关传感器的接口电路(4)能够建工程项目并编写程序(5)掌握串口通信 二、实验设备 仿真器1台,gec_cc2530板1块,usb连接线1根。 三、实验内容 使用cc2530通过uART接收控制命令,完成LeD的控制。 四、实验代码 完善红色注释部分代码: #include#include #defineuintunsignedint#defineucharunsignedchar #defineRLeDp1_0#definegLeDp1_1#defineYLeDp1_4 voidinituART0(void); ucharRecdata[3]=%ucharRxTxflag=1; uchartemp; uintdatanumber=0;uintstringlen; /*******************************@brief串口(uART0)初始化******************************/voidinituART0(void){ cLKconcmD//设置系统时钟源为32mhZ晶振while(cLKconsTA//等待晶振稳定 cLKconcmD//设置系统主时钟频率为32mhZpeRcFg=0x00;//位置1p0口p0seL=0x3c;//p0用作串口

VC6.0MFC串口通信编写全过程(DOC)

其于MFC 的串口调试助手编辑过程 一、新建 打开 VC6.0 文件 新建 工程 MFC AppWiard(exe) 位置(选择保存工程位置) 工程名称(输入工程名XXXX ) 确定 选择基本对话框 下一步 下一步 下一步 选择(CXXXXDlg ) 完成 确定 在生成的基本对话框内将不需要按钮及提示框(自动生成的“确定”“取消” 及提示框)删除或修改使用,至此基本框架完成如下图: 二、往生成的基本框架中添加控件 1、因为控件列表框内没有串口通信用到的通信控件,所以要先添加到控件列表框内再将控件添加到基本框内使用,步骤如下: 菜单栏 工程 添加到工程 Components and controls … Registered ActiveX Controls 选择“Microsoft Communications Control, version 6.0” Insert 确定 OK 关闭此子窗口完成添加操作标志如上图所示。 2、将刚才添加添加到控件列表框内的串口控件添加到基本框架内 点击控件列表框内的串口控件,此时光标变为“十”形,在基本框架内随意划取一矩 形区域,即可以添加串口控件,不需要修改此控件的大小及位置,因为程编译运行后此控件是看不到的,步骤结果如下图:

3、继续往基本框架内添加用于编辑发送数据的输入编辑框及输出编辑框,同理选择控件列表框内的“编辑框控件”,以相同的操作即可添加两个编辑窗口及一个按纽控件如下图所示: 这两个窗口需要修改大小及位置,因为程序运行后将会显示而串口通信控件则不显示,上图是运行后的效果。 4、对以上四个控件编程步骤如下: a 、右击串口通信控件 建立类向导 Member variables Control IDS 中选择IDC_MSCOMM1 add variable … Member variable name 中输入控件变量名m_ctrlComm (变量名可以随意选取,但程序中应与所取变量名一致) OK 确定

vc++课程设计

1登陆模块设计 1.1本系统使用登陆模块来验证用户的合法性。登陆模块主要用于判断登陆用户的权限,根据用户的权限弹出不同的对话框供用户对系统进行操作。(1)登陆界面如图所示,其主要用到的控件如表所示 (2)单击【密码问题按钮】系统会根据用户输入的用户名显示相关密码问题。 (3)单击【查询】按钮系统根据用户输入的用户名和密码问题给出正确的密码。 (4)单击【取消】按钮退出对话框。 1.2单击登陆界面(图4.3)的【关于】按钮,系统弹出关于对话框

后台管理对话框运行时进行初始化,分别添加试题信息管理对话框、学生成绩查血对话框和数据存储管理对话框三个对话框到CTabCtrl控件中,并响应项改变消息

/ 登录模块- 判断登陆用户的合法性 bool CLoginDlg::LoginValidM() { UpdateData(); if(m_strUserName.IsEmpty()) { this->SetWindowTextW(_T("提示- 请输入用户名")); return false; } if(m_strUserPasswd.IsEmpty()) { this->SetWindowTextW(_T("提示- 请输入密码")); return false; } m_comboUserPower.GetLBText(m_comboUserPower.GetCurSel(),m_strUserPo wer); if(m_strUserPower.IsEmpty()) { this->SetWindowTextW(_T("提示- 请选择用户权限")); return false; } ADOConn adoConn; adoConn.Connect(); CStringW sql; _RecordsetPtr pRs; if ( m_https://www.360docs.net/doc/eb7343448.html,pare(_T("学生"))==0 ) { sql.Format(_T("select* from %s where 学号 ='%s'"),m_strTable,m_strUserName); pRs=adoConn.GetRecordSet(sql); if(pRs->adoEOF) { this->SetWindowTextW(_T("提示- 用户名不存在")); adoConn.Disconnect(); return false; } else { sql.Format(_T("select* from %s where 学号='%s' and 密码 ='%s'"),m_strTable,m_strUserName,m_strUserPasswd); pRs=adoConn.GetRecordSet(sql); if(pRs->adoEOF) { this->SetWindowTextW(_T("提示- 密码输入错误"));

串口通信实验报告全版.doc

实验三双机通信实验 一、实验目的 UART 串行通信接口技术应用 二、实验实现的功能 用两片核心板之间实现串行通信,将按键信息互发到对方数码管显示。 三、系统硬件设计 (1)单片机的最小系统部分 (2)电源部分 (3)人机界面部分

数码管部分按键部分 (4)串口通信部分 四、系统软件设计 #include #define uchar unsigned char #define uint unsigned int void send(); uchar code0[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0-9的数码管显示 sbit H1=P3^6; sbit H2=P3^7;

sbit L1=P0^5; sbit L2=P0^6; sbit L3=P0^7; uint m=0,i=0,j; uchar temp,prt; /***y延时函数***/ void delay(uint k) { uint i,j; //定义局部变量ij for(i=0;i

{ m=1; //KEY1键按下 return(m); } if(H2==0) { m=4; //KEY4键按下 return(m); } } } if(L2==0) { delay(5); if (L2==0) { L2=0;H1=1;H2=1; if(H1==0) { m=2; //KEY2键按下 return(m); } if(H2==0) { m=5; //KEY5键按下 return(m); } } } if(L3==0) { delay(5); if (L3==0) { L3=0;H1=1;H2=1; if(H1==0) { m=3; //KEY3键按下

VC++_串口上位机编程实例

VC++串口上位机简单例程(源码及详细步骤) (4.33MB) VC++编写简单串口上位机程序 2010年4月13日10:23:40 串口通信,MCU跟PC通信经常用到的一种通信方式,做界面、写上位机程序的编程语言、编译环境等不少,VB、C#、LABVIEW等等,我会的语言很少,C语言用得比较多,但是还没有找到如何用C语言来写串口通信上位机程序的资料,在图书管理找到了用VC++编写串口上位机的资料,参考书籍,用自己相当蹩脚的C++写出了一个简单的串口上位机程序,分享一下,体验一下单片机和PC通信的乐趣。 编译环境:VC++6.0 操作系统:VMWare虚拟出来的Windows XP 程序实现功能: 1、PC初始化COM1口,使用n81方式,波特率57600与单片机通信。PC的COM口编号可以通过如下方式修改: 当然也可以通过上位机软件编写,通过按钮来选择COM端口号,但是此次仅仅是简单的例程,就没有弄那么复杂了。COM1口可用的话,会提示串口初始化完毕。否则会提示串口已经打开Port already open,表示串口已经打开,被占用了。 2、点击开始转换,串口会向单片机发送0xaa,单片机串口中断接收到0xaa后启动ADC转

换一次,并把转换结果ADCL、ADCH共两个字节的结果发送至PC,PC进行数值转换后在窗口里显示。(见文章末尾图) 3、为防止串口被一只占用,点击关闭串口可以关闭COM1,供其它程序使用,点击后按钮变为打开串口,点击可重新打开COM1。 程序的编写: 1、打开VC++6.0建立基于对话框的MFC应用程序Test,

2、在项目中插入MSComm控件:工程->增加到工程->Components and Controls->双击Registered ActiveX Controls->选择Microsoft Communications Control,version6.0->Insert,按

dsp实验-UART串口通信实验

实验八、UART串口通信实验 一、实验目的 1. 了解RS232通信接口的基本原理; 2. 熟悉通信接口芯片(TL16C550C)在DSP I/O空间寄存器的地址映射 及工作原理; 3.了解异步通信中串口模式选择、设置数据传输格式、设置波特率、建立连接、传输数据和断开连接等功能。 二、实验设备 1. 集成开发环境CCS 2. 实验开发板TMS320VC5402DSK、RS232接口电缆线及附件 3.程序“串口调试程序v2.2.exe” 三、实验内容及步骤 实验操作流程参照前面实验。 1 在汇编环境调试Uart:(实现字符或文件的发送和回发功能) a. 实验代码main.s54、uartasm.cmd和uart_init.s54、dsp_init.s54 以及uartasm.h54,c5402_dsk.gel(说明同前)。 b. 串口调试程序“串口调试程序v2.2.exe” , 汇编调试中Build option设置情况与CODEC实验中的汇编调试设置及出错情况相同。 c. 程序文件介绍: 1)“uart.h54”定义了一些寄存器的地址以及函数类型。 2)“dsp_init.s54”与dsp工作有关的寄存器ST1、PMST、IMR、IFR和SWWSR,并且清除INTM位以及设定时钟模式。 3)“uart_init.s54”先检测UART模块是否工作正常,然后设定UART模块的寄存器,如CNTL1、CNTL2、LCR、MSB&LSB(设定波特率)、FCR、IER 等。 4)“main.s54”主程序查看标志位,检测是否UART存在有效接收数据。若有,则执行一定的处理,包括亮LED以及将接收的数据从UART回发。 d. 执行程序时,只要发送数据时,可在串口调试程序的接收窗口立即看到回发的数据。 e. 程序中UART工作参数设置如下: 1)波特率9600(或更低)、无数据校验、字符长度8比特、停止位1、

UART串口通信实验报告

实验四 UART 串口通信 学院:研究生院 学号:1400030034 姓名:张秋明 一、 实验目的及要求 设计一个UART 串口通信协议,实现“串 <-->并”转换功能的电路,也就是 “通用异步收发器”。 二、 实验原理 UART 是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实 现全双工传输和接收。在嵌入式设计中,UART 用来主机与辅助设备通信,如汽 车音响与外接AP 之间的通信,与PC 机通信包括与监控调试器和其它器件,如 EEPROM 通信。 UART 作为异步串口通信协议的一种,工作原理是将传输数据的每个字符一 位接一位地传输。 其中各位的意义如下: 起始位:先发出一个逻辑” 0的信号,表示传输字符的开始。 资料位:紧接着起始位之后。资料位的个数可以是 4、5、6、7、8等,构成 一个字符。通常采用ASCII 码。从最低位开始传送,靠时钟定位。 奇偶校验位:资料位加上这一位后,使得“ 1的位数应为偶数(偶校验)或奇数 (奇校验),以此来校验资料传送的正确性。 停止位:它是一个字符数据的结束标志。可以是 1位、1.5位、2位的高电 平。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能 在通信中两台设备间出现了小小的不同步。 因此停止位不仅仅是表示传输的结束, 并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步 的容忍程度越大,但是数据传输率同时也越慢。 空闲位:处于逻辑“ 1状态,表示当前线路上没有资料传送。 波特率:是衡量资料传送速率的指标。表示每秒钟传送的符号数(symbol )。 一个符号代表的信息量(比特数)与符号的阶数有关。例如资料传送速率为 120 字符/秒,传输使用256阶符号,每个符号代表8bit ,则波特率就是120baud,比 特率是120*8=960bit/s 。这两者的概念很容易搞错。 三、 实现程序 library ieee; use ieee.std 」o gic_1164.all; end uart; architecture behav of uart is en tity uart is port(clk : in std_logic; rst_n: in std 」o gic --系统时钟 --复位信号 rs232_rx: in std 」o gic rs232_tx: out std 」o gic --RS232接收数据信号; --RS232发送数据信号;); use ieee.std_logic_ un sig ned.all;

(完整版)VC6.0MFC串口通信编写全过程

其于MFC的串口调试助手编辑过程 一、新建 打开VC6.0 文件新建工程MFC AppWiard(exe) 位置(选择保存工程位置)工程名称(输入工程名XXXX)确定选择基本对话框下一步下一步下一步选择(CXXXXDlg)完成确定在生成的基本对话框内将不需要按钮及提示框(自动生成的“确定”“取消”及提示框)删除或修改使用,至此基本框架完成如下图: 二、往生成的基本框架中添加控件 1、因为控件列表框内没有串口通信用到的通信控件,所以要先添加到控件列表框内再 将控件添加到基本框内使用,步骤如下: 菜单栏工程添加到工程Components and controls…Registered ActiveX Controls 选择“Microsoft Communications Control, version 6.0”Insert 确定OK 关闭此子窗口完成添加操作标志如上图所示。 2、将刚才添加添加到控件列表框内的串口控件添加到基本框架内 点击控件列表框内的串口控件,此时光标变为“十”形,在基本框架内随意划取一矩形区域,即可以添加串口控件,不需要修改此控件的大小及位置,因为程编译运行后此控件是看不到的,步骤结果如下图:此控件(标志)是下面步骤添加进来的串口控件 基本框架

3、继续往基本框架内添加用于编辑发送数据的输入编辑框及输出编辑框,同理选择控 件列表框内的“编辑框控件”,以相同的操作即可添加两个编辑窗口及一个按纽控件如 下图所示: 选择其中任 意一个作为 输入编辑框 及输出编辑 框 这两个窗口需要修改大小及位置,因为程序运行后将会显示而串口通信控件则不显示, 上图是运行后的效果。 4、对以上四个控件编程步骤如下: a、右击串口通信控件建立类向导Member variables Control IDS中选 择IDC_MSCOMM1 add variable…Member variable name中输入控件变量名 m_ctrlComm(变量名可以随意选取,但程序中应与所取变量名一致)OK 确 定

Vc课程设计报告

作者: 裴超晨 班级:07信息 学号:200710520113 指导老师:彭永康 时间:2009.12.28—2010.01.08 景德镇陶瓷学院

前言 随着21世纪面向对象程序设计技术的蓬勃发展,在全球软件业掀起了面向对象程序设计的浪潮,在众多的面向对象程序设计语言中,Visual C++6.0将程序设计方法和可视的软件开发环境完美的结合在一起,其崭新的开发数据库和适应Internet应用程序的新特点引起了开发人员的广泛关注,尤其受广大软件设计人员的亲睐,逐渐成为软件设计、Windows应用程序开发的首选语言。 Visual C++6.0是汇集MS公司技术精华的主流产品,使用Visual C++6.0可以开发强大的32应用程序,能为用户提供全方位的服务,具有广阔的商业前景。 本次课程设计是为配合课堂教学,提高学生动手能力和创新能力而安排的一次实践性教学环节,学生通过本课程设计,进一步掌握《Windows程序设计》课程中有关理论知识,将所学理论知识应用于实践,按软件工程方法,完成简单的Windows程序设计。 本次课程设计主要有:设计一个具备基本计算能力的计算器、设计一个浏览器SEExplorer、设计一个小闹钟还选做了一个在VC6.0下自制多媒体播放器可以通过这几个例子更加深刻地了解Visual C++6.0.

第一篇多媒体播放器 1.内容 设计一个多媒体播放器 2.要求 具有一般的播放功能,能播放*.mp3,*.wma,*.mdi,*.wav,*.avi,*.dat等文件,还有Repeat功能 编写有关本程序的使用手册 3.程序设计框架和步骤 1.打开VC6.0,在Projects下选择MFC AppWizard(exe),并取名MediaPlayer,然后建立基于对话框(Dialog Based)的运用程序。 2.打开Resource View,选择其中的对话框,打开其中的主对话框,去掉对话框上的“确定”按钮,保留“取消”,将Caption改为“Exit”。然后再在上面加上九个按钮,ID和Caption分别为 IDC_OPEN,Open; IDC_PLAY,Play; IDC_PAUSE,Pause; IDC_STOP,Stop; IDC_CLOSE,Close; IDC_LOWER,<<=; IDC_UPPER,=>>; IDC_FULLSCREEN,Full; IDC_REPEAT,Repeat; 再加入两个静态文本控件,分别为 IDC_STATIC,Volume;IDC_STATIC2,Status:Normal。 3.再打开Projects->Add to Project->Components and Controls->Registered ActiveX Controls对话框,选择其中的ActiveMovieControl Object, Insert,OK之后,你会发现你的控件面板上多了一项ActiveMovieControl Object,将它选中,直接放在你的对话框上就行了。按Ctrl+W打开ClassWizard为它添加变量CActiveMovie3 m_ActiveMovie。各控件的布局如图:

UART串行口简介

UART异步串行口 UART异步串行口简介 数据通信的基本方式可分为并行通信与串行通信两种: 并行通信:是指利用多条数据传输线将一个资料的各位同时传送。它的特点是传输速度快,适用于短距离通信,但要求通讯速率较高的应用场合。 串行通信:是指利用一条传输线将资料一位位地顺序传送。特点是通信线路简单,利用简单的线缆就可实现通信,降低成本,适用于远距离通信,但传输速度慢的应用场合。 UART 异步串行口的传输格式 异步通信以一个字符为传输单位,通信中两个字符间的时间间隔是不固定的,然 而在同一个字符中的两个相邻位代码间的时间间隔是固定的。 通信协议(通信规程):是指通信双方约定的一些规则。在使用异步串口传送一个 字符的信息时,对资料格式有如下约定:规定有空闲位、起始位、资料位、奇偶校验位、停止位。通讯时序图如下: 开始前,线路处于空闲状态,送出连续“1”。传送开始时首先发一个“0”作为 起始位,然后出现在通信线上的是字符的二进制编码数据。 每个字符的数据位长可以约定为5 位、6 位、7 位或8 位,一般采用ASCII 编码。后面是奇偶校验位,根据约定,用奇偶校验位将所传字符中为“1”的位数凑成奇 数个或偶数个。也可以约定不要奇偶校验,这样就取消奇偶校验位。 最后是表示停止位的“1”信号,这个停止位可以约定持续1 位、1.5 位或2 位 的时间宽度。 至此一个字符传送完毕,线路又进入空闲,持续为“1”。经过一段随机的时间后,下一个字符开始传送才又发出起始位。 每一个数据位的宽度等于传送波特率的倒数。微机异步串行通信中,常用的波特 率为110,150,300,600,1200,2400,4800,9600 ,19200,38400,115200等。 S3C2410的异步串行口 1

UART串口通信实验报告

实验四UART串口通信 学院:研究生院学号:1400030034姓名:张秋明 一、实验目的及要求 设计一个UART串口通信协议,实现“串<-->并”转换功能的电路,也就是“通用异步收发器”。 二、实验原理 UART是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART用来主机与辅助设备通信,如汽车音响与外接AP之间的通信,与PC机通信包括与监控调试器和其它器件,如EEPROM通信。 UART作为异步串口通信协议的一种,工作原理是将传输数据的每个字符一位接一位地传输。 其中各位的意义如下: 起始位:先发出一个逻辑”0”的信号,表示传输字符的开始。 资料位:紧接着起始位之后。资料位的个数可以是4、5、6、7、8等,构成一个字符。通常采用ASCII码。从最低位开始传送,靠时钟定位。 奇偶校验位:资料位加上这一位后,使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验资料传送的正确性。 停止位:它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平。由于数据是在传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步。因此停止位不仅仅是表示传输的结束,并且提供计算机校正时钟同步的机会。适用于停止位的位数越多,不同时钟同步的容忍程度越大,但是数据传输率同时也越慢。 空闲位:处于逻辑“1”状态,表示当前线路上没有资料传送。 波特率:是衡量资料传送速率的指标。表示每秒钟传送的符号数(symbol)。一个符号代表的信息量(比特数)与符号的阶数有关。例如资料传送速率为120字符/秒,传输使用256阶符号,每个符号代表8bit,则波特率就是120baud,比特率是120*8=960bit/s。这两者的概念很容易搞错。 三、实现程序 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity uart is port(clk : in std_logic; --系统时钟 rst_n: in std_logic; --复位信号 rs232_rx: in std_logic; --RS232接收数据信号; rs232_tx: out std_logic --RS232发送数据信号;); end uart; architecture behav of uart is

相关文档
最新文档