MSComm在VS2010中的实现步骤
### MSComm在VS2010中的实现步骤详解 #### 一、项目创建与界面设计 **1. 创建新项目** - 打开Visual Studio 2010。 - 新建一个MFC应用程序,命名为“SCommTest”。 **2. 设计用户界面** - 删除原有的两个按钮和静态文本。 - 更改窗口标题为“串口通信助手1.0beta”: - 在窗口标题栏右键点击“属性”,然后更改标题。 **3. 用户界面元素布局** - 添加两个组框,分别命名为“显示区”和“发送区”。 - 在“显示区”内放置一个编辑框,其ID设为`IDC_EDIT_RECV`。 - 在“发送区”内放置一个编辑框,其ID设为`IDC_EDIT_SEND`。 - **样式更改**:确保编辑框支持多行输入和自动滚动等功能。 - 添加一个发送按钮,其ID设为`IDC_BUTTON_SEND`。 **4. 插入MSComm控件** - 右键点击工具箱中的“Com 控件”选项卡,选择“插入ActiveX控件”。 - 在弹出的对话框中搜索“MSComm”,选择“Microsoft Communications Control, Version 6.0 (SP6)”(或更高版本)。 - 将控件拖放到主窗口中。 #### 二、MSComm控件配置与功能实现 **1. 添加变量** - 右键点击控件,选择“添加变量”。 - 定义变量`m_cComm`,类型为`CComControl<MSCommCtrl> *`。 **2. 添加函数** - **OnComm**:用于接收串口数据。 - **OnButtonSend**:用于发送数据到串口。 **3. 编写代码** - 所有代码应写在`SCommTestDlg.CPP`文件中。 #### 三、串口初始化及数据收发 **1. 串口初始化** - 检查串口是否已打开,并关闭它(如果已打开)。 - 设置串口参数: - 选择COM1端口。 - 输入模式为二进制。 - 设置输入输出缓冲区大小。 - 设置波特率为9600,无校验位,8位数据位,1位停止位。 - 打开串口。 - 设置接收阈值为1,即每接收到一个字符时触发事件。 - 清除缓冲区内的残留数据。 **2. 接收数据** - 在`OnComm`函数中处理串口数据: - 获取缓冲区内的数据。 - 转换数据类型为`CString`。 - 显示数据在编辑框中。 **3. 发送数据** - 在`OnButtonSend`函数中处理发送逻辑: - 从编辑框获取要发送的数据。 - 使用`m_cComm`发送数据。 ### 示例代码 **初始化串口** ```cpp if (m_cComm.get_PortOpen()) { // 如果发现串口本来是打开的,则关闭串口 m_cComm.put_PortOpen(FALSE); } m_cComm.put_CommPort(1); // 选择COM1端口 m_cComm.put_InputMode(1); // 输入方式为二进制方式 m_cComm.put_InBufferSize(1024); // 设置输入缓冲区 m_cComm.put_OutBufferSize(512); // 设置输出缓冲区 m_cComm.put_Settings(TEXT("9600,n,8,1")); // 波特率9600,无校验,8个数据位,1个停止位 if (!m_cComm.get_PortOpen()) { m_cComm.put_PortOpen(TRUE); // 打开串口 m_cComm.put_RThreshold(1); // 每当接收缓冲区有1个字符则接收串口数据 m_cComm.put_InputLen(0); // 设置当前缓冲区长度为0 m_cComm.get_Input(); // 预读缓冲区以清除残留数据 } else { AfxMessageBox(TEXT("打开端口失败!"), MB_ICONSTOP, 0); } ``` **接收数据** ```cpp void CSCommTestDlg::OnComm() { VARIANT variant_inp; COleSafeArray safearray_inp; long len, k; byte rxdata[512]; // 设置BYTE数组 CString strtemp; if (m_cComm.get_CommEvent() == 2) { // 值为2表示接收缓冲区内有字符 variant_inp = m_cComm.get_Input(); // 读缓冲区消息 safearray_inp = variant_inp; /// 变量转换 len = safearray_inp.GetOneDimSize(); // 得到有效的数据长度 for (k = 0; k < len; k++) { safearray_inp.GetElement(&k, rxdata + k); } for (k = 0; k < len; k++) { // 将数组转换为CString型变量 char bt = *(char*)(rxdata + k); // 字符型 strtemp.Format(TEXT("%c"), bt); // 将字符送入临时变量strtemp存放 m_strRecvData += strtemp; // 加入接收编辑框对应字符串 } } CString temp = TEXT("\r\n"); // 显示完成后要自动换行 m_strRecvData += temp; UpdateData(FALSE); // 更新编辑框内容 } ``` 通过以上步骤,可以在Visual Studio 2010中实现一个基本的串口通信助手应用。这包括了界面设计、串口控件的使用、串口参数配置以及数据的接收和发送。这样的应用非常适合于学习和测试串口通信的基本原理和技术细节。
剩余11页未读,继续阅读
- 超级无敌黄金炒饭2016-07-01有用,感谢分享!
- decoxiaohan2012-10-04XP下运行没问题,使用起来比较方便。呵呵
- 粉丝: 41
- 资源: 39
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助