20160426 VC++(VS2013)串口编程图文教程(MSComm的使用)
来源:互联网 发布:面纱3.0雾化器做芯数据 编辑:程序博客网 时间:2024/05/16 23:43
1、新建MFC对话框工程如下
2、给编辑框控件添加变量,其中Edit Box添加Value变量,Button添加Control变量,ID和变量分别为:
IDC_BTNOPEN() CButton m_cBtnOpen;
IDC_BTNSEND() CButton m_cBtnSend;
IDC_EDIT_RXDATA() CString m_sRXDATA;
IDC_EDIT_TXDATA() CString m_sTXDATA;
3、右击插入Active X控件:
右击电话图标选择“Class Wirzard”,添加变量m_comm1,添加Function:
双击两个Button按钮;
代码中显示如下:
void CMSCommTestDlg::OnBnClickedBtnopen(){// TODO: Add your control notification handler code here}void CMSCommTestDlg::OnBnClickedBtnsend(){// TODO: Add your control notification handler code here}void CMSCommTestDlg::OnOncommMscomm1(){// TODO: Add your message handler code here}
5、将上面代码补全如下:
void CMSCommTestDlg::OnClickedBtnopen(){// TODO: Add your control notification handler code here//如果端口已经开启,那么先关闭if (m_comm1.get_PortOpen()){m_comm1.put_PortOpen(FALSE);}m_comm1.put_CommPort(3);//选择com3,可以根据具体情况更改m_comm1.put_InBufferSize(1024);//设置输入缓冲区的大小,Bytesm_comm1.put_OutBufferSize(1024);//设置输出缓冲区的大小,Bytesm_comm1.put_Settings(_T("9600,n,8,1")); //波特率9600,无校验,8个数据位,停止位1m_comm1.put_InputMode(1);//1:表示以二进制方式检索数据m_comm1.put_RThreshold(1);//参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件m_comm1.put_InputLen(0);//设置当前接收区长度是0if (!m_comm1.get_PortOpen()){m_comm1.put_PortOpen(TRUE);}else{AfxMessageBox(_T("Can not open serial port!"));}m_comm1.get_Input();//先预读缓冲区以清除残留数据UpdateData(FALSE);}void CMSCommTestDlg::OnClickedBtnsend(){// TODO: Add your control notification handler code hereUpdateData(TRUE);m_comm1.put_Output(COleVariant(m_sTXDATA));//发送数据}void CMSCommTestDlg::OnOncommMscomm1(){// TODO: Add your message handler code hereVARIANT variant_inp;COleSafeArray safearray_inp;LONG len, k;BYTE rxdata[2048];CString strtemp;if (m_comm1.get_CommEvent() == 2)//事件值为2表示缓冲区内有字符{variant_inp = m_comm1.get_Input();//读缓冲区safearray_inp = variant_inp;//VARIANT型变量转换为ColeSafeArray型变量len = safearray_inp.GetDim();//得到有效数据长度for (k = 0; k < len; k++){safearray_inp.GetElement(&k, rxdata + k);//转换为BYTE型数组}for (k = 0; k < len; k++)//将数组转换为CString型变量{BYTE bt = *(char*)(rxdata + k); //字符型strtemp.Format(_T("%c"), bt);//将字符送入临时变量strtemp存放m_sRXDATA += strtemp;//接收到的数据放到编辑框对应的变量中}}SetDlgItemText(IDC_EDIT_RXDATA, m_sRXDATA);}
备注:
如果Project是基于视图的,只需在对话框窗体中插入MSComm控件,再在视图类的ClassWizard中为该控件声明一个变量即可,如m_Comm1。
1 0
- 20160426 VC++(VS2013)串口编程图文教程(MSComm的使用)
- VC使用MSCOMM进行串口编程
- VC使用MSCOMM进行串口编程
- VC++串口组件MSCOMM的使用
- VC++串口组件MSCOMM的使用
- VC++ 使用MSComm控件检测串口是否存在的方法
- vc串口通讯控件MSComm编程详解
- MSComm控件在串口编程中使用
- MSComm控件在串口编程中使用
- 20120904-串口编程-MSComm使用1
- 串口通信编程(1):使用MSComm控件
- 基于Mscomm控件的串口通信编程
- 基于Mscomm控件的串口通信编程
- vc串口通讯控件MSComm编程—No.1
- vc串口通讯控件MSComm编程—No.2
- vc串口编程使用mscomm控件的,接受字符个数多余8个时,会重复进中断的OnCommMscomm()的处理对策
- MSCOMM 串口控件的基本使用
- Vs2010中MSCOMM串口控件的使用
- JQuery中$.ajax()方法参数详解
- UITableView总结
- 百度云盘资料查询地址
- Thinking-java学习(三)
- 6指南针网址导航介绍
- 20160426 VC++(VS2013)串口编程图文教程(MSComm的使用)
- Item 06: 若不想使用编译器自动生成的函数,就该明确拒绝
- iOS程序启动原理
- nginx安装
- java学习笔记
- ios导航栏透明
- 我U盘中的efi manager
- 高亮地图点及属性信息展示优化方案
- SQLZOO(More JOIN operations)Writeup