您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > VS2010串口通信
新建MFC项目,名称SerialComm基于对话框,去掉使用Unicode库确认ActiveX控件选中,完成删掉上面默认的控件,放上下面的控件添加成员变量,有两种方法,右键添加变量或类向导》成员变量方法一:方法二:注意不同,类别和变量类型对不同类型的控件是不同的然后添加串口控件,左下角切换到解决方案,然后项目名上右键添加完成多出的两个文件加入控件对象编辑控件,去掉控件旁边的空白给控件添加变量和响应函数变量名为m_ctrlcomm同理为两个按钮添加响应函数,结果:控件类型ID用途添加成员变量相关事件处理程序名称EditControlIDC_EditRxData显示接收数据类别:Value,变量类型:Cstring,变量名:m_EditRxDataEditControlIDC_EditTxData显示发射数据类别:Value,变量类型:Cstring,变量名:m_EditTxDataButtonIDC_BtnOpenSerial打开串口类别:Control,变量类型:CButton,变量名:m_BtnOpenSerialOnBnClickedBtnopenserial()ButtonIDC_BtnSendTxData发送数据类别:Control,变量类型:CButton,变量名:m_BtnSendTxDataOnBnClickedBtnsendtxdata()CMSCommIDC_MSCOMM1串口通信控件类别:Control,变量类型:CMSComm,变量名:m_ctrlcommOnCommMscomm1()三个响应函数为:voidCSerialCommDlg::OnBnClickedBtnopenserial(){if(m_ctrlcomm.get_PortOpen())m_ctrlcomm.put_PortOpen(FALSE);m_ctrlcomm.put_CommPort(12);//打开COM12m_ctrlcomm.put_InputMode(1);//1:表示以二进制方式检取数据m_ctrlcomm.put_InBufferSize(1024);//设置输入缓冲区的大小,Bytesm_ctrlcomm.put_OutBufferSize(1024);//设置输入缓冲区的大小,Bytesm_ctrlcomm.put_Settings(9600,n,8,1);//波特率9600,无校验,8个数据位,1个停止位if(!m_ctrlcomm.get_PortOpen()){m_ctrlcomm.put_PortOpen(TRUE);//打开串口if(m_ctrlcomm.get_PortOpen()){SetDlgItemText(IDC_BtnOpenSerial,COM12已经打开);}else{MessageBox(该串口无法打开,请检查);}}m_ctrlcomm.put_RThreshold(1);//参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件m_ctrlcomm.put_InputLen(0);//设置当前接收区数据长度为0m_ctrlcomm.get_Input();//先预读缓冲区以清除残留数据}voidCSerialCommDlg::OnBnClickedBtnsendtxdata(){UpdateData(TRUE);//UpdateData函数参数和内容传递方向对应关系:false:控件-变量true:控件-变量m_ctrlcomm.put_Output(COleVariant(m_EditTxData));//发送数据m_EditTxData=;UpdateData(false);//发送之后将发送输入框清空}voidCSerialCommDlg::OnCommMscomm1(){VARIANTvariant_inp;COleSafeArraysafearray_inp;LONGlen,k;BYTErxdata[2048];//设置BYTE数组An8-bitintegerthatisnotsigned.CStringstrtemp;if(m_ctrlcomm.get_CommEvent()==2)//事件值为2表示接收缓冲区内有字符{variant_inp=m_ctrlcomm.get_Input();//读缓冲区safearray_inp=variant_inp;//VARIANT型变量转换为ColeSafeArray型变量len=safearray_inp.GetOneDimSize();//得到有效数据长度for(k=0;klen;k++)safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组for(k=0;klen;k++)//将数组转换为Cstring型变量{BYTEb=*(char*)(rxdata+k);//字符型strtemp.Format(%c,b);//将字符送入临时变量strtemp存放m_EditRxData+=strtemp;//加入接收编辑框对应字符串}}UpdateData(FALSE);//UpdateData函数参数和内容传递方向对应关系:false:控件-变量true:控件-变量}编译运行,连接单片机,点击打开串口,单片机上电后就发送0123456789字符串,然后进入循环,将收到的数据发回去下载的代码打开后类视图和资源视图应该是空白,VS中工具》选项》文本编辑器》高级设置如下,然后关闭VS,双击SerialComm.sln这个文件等VS加载完成就有了。代码下载地址
本文标题:VS2010串口通信
链接地址:https://www.777doc.com/doc-6018592 .html