VC6.0MFC串口通信编写全过程要点.pdf
《VC6.0MFC串口通信编写全过程要点.pdf》由会员分享,可在线阅读,更多相关《VC6.0MFC串口通信编写全过程要点.pdf(17页珍藏版)》请在三一文库上搜索。
1、其于 MFC 的串口调试助手编辑过程 一、新建 打开 VC6.0 文件新建工程MFC AppWiard(exe) 位置(选择保存 工程位置)工程名称(输入工程名XXXX )确定选择基本对话框下一 步下一步下一步选择( CXXXXDlg )完成确定在生成的基 本对话框内将不需要按钮及提示框(自动生成的“确定”“取消”及提示框)删除或修 改使用,至此基本框架完成如下图: 二、往生成的基本框架中添加控件 1、因为控件列表框内没有串口通信用到的通信控件,所以要先添加到控件列表框内再 将控件添加到基本框内使用,步骤如下: 菜单栏工程添加到工程Components and controlsRegister
2、ed ActiveX Controls 选择“ Microsoft Communications Control, version 6.0”Insert 确定OK 关闭此子窗口完成添加操作标志如上图所示。 2、将刚才添加添加到控件列表框内的串口控件添加到基本框架内 点击控件列表框内的串口控件,此时光标变为 “十” 形,在基本框架内随意划取一矩 形区域,即可以添加串口控件,不需要修改此控件的大小及位置,因为程编译运行后 此控件是看不到的,步骤结果如下图: 此控件 (标志) 是下面步 骤添加进 来的串口 控件 基 本 框 架 3、继续往基本框架内添加用于编辑发送数据的输入编辑框及输出编辑框,同理选
3、择控 件列表框内的 “编辑框控件” ,以相同的操作即可添加两个编辑窗口及一个按纽控件如 下图所示: 这两个窗口需要修改大小及位置,因为程序运行后将会显示而串口通信控件则不显示, 上图是运行后的效果。 4、对以上四个控件编程步骤如下: a、右击串口通信控件建立类向导Member variables Control IDS 中选 择 IDC_MSCOMM1 add variableMember variable name 中输入控件变量名 m_ctrlComm (变量名可以随意选取,但程序中应与所取变量名一致)OK 确 定 选 择 其 中 任 意 一 个 作 为 输 入 编 辑 框 及 输 出 编
4、 辑 框 b、右击编辑框、属性、常规、ID:中输入ID 号,此编辑框用于接收显示数据的其ID 号为 IDC_EDIT_RXDATA (可以随意选取,但程序中应与所取ID 号一致) ,再在此窗 口的样式中勾选” 多行 ” ,同时将“自动水平滚动(T) ”勾选去掉,再勾选“垂直滚动 (V) ” ,此勾选操作是用于垂直多行显示的,按回车后即可输入;同理右击另一编辑框 输入 ID 号为 IDC_EDIT_TXDATA 此编辑框用于编辑发送数据的,同样也选上用于垂直 多 行 显 示 , 发 送 框 可 以 不 用 垂 直 多 行 显 示 ; 再 为 按 钮 控 件 添 加ID号 , 为 IDC_BUTT
5、ON_MANUALSEND ,并将标题中的“Button1 ”改为“发送” ,功能是按一 次就把发送编辑框中的内容发送一次。 C、为以上两个编辑框添加变量,与串口通信控件一样添加,为IDC_EDIT_RXDATA 添 加CString型变量m_strRXData ;为IDC_EDIT_TXDATA添加CString型变量 m_strTXData 。说明: m_strRXData 和 m_strTXData分别用来放入接收和发送的字符 数据。 D、添加串口事件消息处理函数OnComm() 打开 ClassWizardMessage Maps,选择 IDC_MSCOMM1, 双击消息OnComm,
6、 将弹出的对话框中将函数名改为OnComm,(好 记而已) OK。 这个函数是用来处理串口消息事件的,如每当串口接收到数据,就会产生一个串口接 收数据缓冲区中有字符的消息事件,我们刚才添加的函数就会执行,我们在 OnComm() 函数加入相应的处理代码就能实现自已想要的功能了。在函数中加入如下代码: 代码段 1: void CScommTestDlg:OnComm() / TODO: Add your control notification handler code here VARIANT variant_inp;/定义一个 VARIANT类对象 COleSafeArray safearr
7、ay_inp;/ 定义一个COleSafeArray 对象 LONG len,k; BYTE rxdata2048;/ 设置 BYTE 数组AN 8 intterthat is not signed. CString strtemp; if (m_ctrlComm.GetCommEvent()=2)/事件值为2 表示接收缓冲区内有数据 /以下你可以根据自己的通信协议加入处理代码 variant_inp=m_ctrlComm.GetInput();/读缓冲区 safearray_inp=variant_inp;/V ARIANT型变量转换为ColeSafeArray 型变量 len=safear
8、ray_inp.GetOneDimSize(); for(k=0;kAppendMenu(MF_SEPARATOR); pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); / Set the icon for this dialog. The framework does this automatically / when the applications main window is not a dialog SetIcon(m_hIcon, TRUE); / Set big icon SetIcon(m_hIcon, FA
9、LSE); / Set small icon / TODO: Add extra initialization here / m_ComboBox.SetCurSel(0);/ 打开软件时串口选择框默认显示COM1 / m_BaudRate_M.SetCurSel(0);/ 打开软件时波特率选择框默认显示9600 / m_Date_Select_M.SetCurSel(0);/ 打开软件时数据位选择框默认显示8 / m_StopBit_M.SetCurSel(0);/ 打开软件时停止位选择框默认显示1 / m_ParityCheck_M.SetCurSel(0);/ 打开软件时奇偶校验选择框默
10、认显示无校验N 提示3:此句以下才 是 我 们 要 添 加 的 语 句 提示 4: 此 5 句是我们下 面要用到的 暂时可以不 用理会 /下面 if 语句用于打开默认串口 /*/ if(m_ctrlComm.GetPortOpen() m_ctrlComm.SetPortOpen(FALSE);/ 关闭串口 m_ctrlComm.SetCommPort(1);/ 打开软件时默认使用COM1 串口 if(!m_ctrlComm.GetPortOpen() m_ctrlComm.SetPortOpen(TRUE);/ 打开串口 else AfxMessageBox(“cannot open ser
11、ial port“); /*/ m_ctrlComm.SetSettings(“9600,n,8,1“);/ 打开软件时端口设置默认为波特率9600,无校 验位, 8 位数据, 1 位停止位 m_ctrlComm.SetInputMode(1); /1 :表示以二进制方式检取数据 m_ctrlComm.SetRThreshold(1); / 参数 1 表示每当串口接收缓冲区中有多于或等于1 个 字符时将引发一个接收数据的OnComm 事件 m_ctrlComm.SetInputLen(0); / 设置当前接收区数据长度为0 m_ctrlComm.GetInput(); / 先预读缓冲区以清除残
12、留数据 return TRUE; / return TRUE unless you set the focus to a control F、发送数据,先为发送按钮添加一个单击消息即BN_CLICKED 处理函数,打开 ClassWizard Message Maps ,选择 IDC_BUTTON_MANUALSEND ,双击 BN_CLICKED 添加 OnButtonManualsend()函数,并在函数中添加如下代码: 代码段 3: void CSCommTestDlg:OnButtonManualsend() / TODO: Add your control notification
13、handler code here UpdateData(TRUE); /读取编辑框内容 m_ctrlComm.SetOutput(COleVariant(m_strTXData);/发送数据 此时运行程序,在发送编辑框中随意输入数,单击发送按钮,若出错则修改后再测试, 直到成功再进行以下操作。 5、添加两个“组框”或“静态文本”控件,调整位置及大小,在标师处输入提示文字, 这两个控件不用编程,效果如下图: 6、添加 5 个“静态文本”控件并由属性修改其标题,均不用编程,效果如下图: 7、添加 5 个“组框”控件,效果如下图: 逐一对各个组框属性编辑如下: 串口号: 常规ID :IDC_COM
14、BO_CommSelect 数据 输入列表框项目 (N) :COM1、COM2、COM3、COM4、COM5、COM6、COM7、 COM8、COM9(注意每输入一个数据选项以Ctrl+Enter回车后再输入下一个数据选 项) 样式 将“分类勾选去掉” 进入类向导添加变量,为IDC_COMBO_CommSelect添加一个value 类 int 型变量 m_Index, 点击 OK 后,再添加一个Control 类 CComboBox 型变量 m_ComboBox点 击 OK 最后“确定” 波特率: 常规 ID :IDC_COMBO_BaudRate_Select 数据 输入列表框项目(N)
15、:9600、14400 、19200 、38400 、56000 、57600 、115200 、 128000 、 256000 样式 将“分类勾选去掉” 进入类向导添加变量,为IDC_COMBO_BaudRate_Select添加一个value 类 int 型变量 m_ BaudRate 点击 OK 后,再添加一个Control 类 CComboBox 型变量 m_ BaudRate_M 点击 OK 最后“确定” 数据位: 常规 ID :IDC_COMBO_Date_Select 数据 输入列表框项目(N) :8、7、6、5、4 样式 将“分类勾选去掉” 进入类向导添加变量,为IDC_CO
16、MBO_Date_Select添加一个value类 int型变量 m_Date_Select点击 OK 后, 再添加一个Control 类 CComboBox 型变量 m_Date_Select _M 点击 OK 最后“确定” 停止位: 常规 ID :IDC_COMBO_StopBit 数据 输入列表框项目(N) :1、2 样式 将“分类勾选去掉” 进 入 类 向 导 添 加 变 量 , 为IDC_COMBO_StopBit添 加 一 个value类int型 变 量 m_StopBit 点击 OK 后,再添加一个Control 类 CComboBox 型变量 m_StopBit_M点击 OK
17、最后“确定” 奇偶校验位: 常规 ID :IDC_COMBO_ParityCheck 数据 输入列表框项目(N) :N、O、E、 样式 将“分类勾选去掉” 进入类向导添加变量,为IDC_COMBO_ParityCheck添加一个value类 int型变量 m_ParityCheck点 击OK后 , 再 添 加 一 个Control类CComboBox型 变 量 m_ParityCheck_M点击 OK 最后“确定” 说明:以上数据配置添加的Control 类 CComboBox 型变量可能用不到,但value 类必须为 int 型 8、为各个列表框添加处理函数: A、在建立类向导中Messag
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VC6 MFC 串口 通信 编写 全过程 要点
链接地址:https://www.31doc.com/p-5198401.html