打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
VS2010基于对话框的MFC串口通信简明例程

在左侧类视图面板中,选择CSerialTestDlg类,双击下方的OnInitDialog()函数进入CSerialTestDlg::OnInitDialog()函数


//TODO:此添加额外的初始化代码添加如下代码

  1. // TODO: 在此添加额外的初始化代码  
  2.     m_comboCom.AddString(_T("COM1")); // 为组合框控件的列表框添加列表项  
  3.     m_comboCom.AddString(_T("COM2"));   
  4.     m_comboCom.AddString(_T("COM3"));   
  5.     m_comboCom.AddString(_T("COM4"));   
  6.     m_comboCom.AddString(_T("COM5"));   
  7.     m_comboCom.AddString(_T("COM6"));   
  8.     m_comboCom.AddString(_T("COM7"));   
  9.     m_comboCom.AddString(_T("COM8"));   
  10.     m_comboCom.AddString(_T("COM9"));   
  11.     m_comboCom.AddString(_T("COM10"));   

b.我们希望在组合框中选中的列表项改变时,以打开相应串口并设置串口参数,那么这就要用到CBN_SELCHANGE通知消息。选中ComboBox右键->添加事件处理程序,出现如图所示界面,点击添加编辑


CSerialTestDlg::OnCbnSelchangeComboCom()函数中添加代码之前我们需要给串口控件添加控制变量m_ctrlComm(方法见3.->a.),如图


并在CSerialTestDlg中添加变量m_setOk(用于标记串口是否设置好),方法:在类视图面板中选中CSerialTestDlg右键->添加->添加变量,


在弹出的界面中,选择访问private变量类型bool变量名m_setOk。这里看到SerialTestDlg.h中已经添加了此变量,并在构造函数中已进行了初始化:



现在我们回到CSerialTestDlg::OnCbnSelchangeComboCom()中,添加如下代码:

  1. void CSerialTestDlg::OnCbnSelchangeComboCom()  
  2. {  
  3.     // TODO: 在此添加控件通知处理程序代码  
  4.     int nSel;  
  5.     nSel = m_comboCom.GetCurSel();//获取组合框控件的列表框中选中项的索引  
  6.   
  7.     m_ctrlComm.put_CommPort(nSel+1);//选择串口号(这里因为列表框的索引号是从0开始,所以(nSel+1)对应的才是我们所选的串口号)  
  8.     m_ctrlComm.put_PortOpen(TRUE);//打开串口  
  9.     m_ctrlComm.put_RThreshold(2);//收到两个字节引发OnComm事件   
  10.     m_ctrlComm.put_InputMode(1);//输入模式选为二进制   
  11.     m_ctrlComm.put_Settings(_T("9600,n,8,1"));//设置串口参数,波特率,无奇偶校验,位停止位,位数据位  
  12.     m_ctrlComm.put_InputMode(1);  // 以二进制方式检取数据   
  13.     m_ctrlComm.put_RThreshold(1); //参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件   
  14.     m_ctrlComm.put_InputLen(0); //设置当前接收区数据长度为0   
  15.     m_ctrlComm.get_Input();//先预读缓冲区以清除残留数据    
  16.   
  17.     m_setOk = true;     //标记串口设置OK  
  18. }  

c.添加串口事件消息处理函数。在此步之前,我们先给IDC_EDIT_TXDATA编辑框添加CString变量m_strTXDataIDC_EDIT_TXDATA编辑框添加CString变量m_strRXData(方法见3.->a.,注意变量类型改为CString类别改为Value


然后我们添加串口消息事件处理函数(方法见3.->b.),并将函数改名为OnComm


在CSerialTestDlg::OnComm()函数中添加如下代码:

  1. void CSerialTestDlg::OnComm()  
  2. {  
  3.     // TODO: 在此处添加消息处理程序代码  
  4.     VARIANT variant_inp;   //Variant 是一种特殊的数据类型,除了定长String数据及用户定义类型外,可以包含任何种类的数据。  
  5.     COleSafeArray safearray_inp;       
  6.     LONG len,k;      
  7.     BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integer that is not signed.       
  8.     CString strtemp;       
  9.     if(m_ctrlComm.get_CommEvent() == 2) //事件值为2表示接收缓冲区内有字符       
  10.     {              
  11.         ////////以下你可以根据自己的通信协议加入处理代码   
  12.         variant_inp=m_ctrlComm.get_Input();     //读缓冲区    
  13.         safearray_inp=variant_inp;              //VARIANT型变量转换为ColeSafeArray型变量  
  14.         len=safearray_inp.GetOneDimSize();      //得到有效数据长度          
  15.         for(k=0;k<len;k++)               
  16.             safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组           
  17.         for(k=0;k<len;k++)                    //将数组转换为Cstring型变量      
  18.         {             
  19.             BYTE bt=*(char*)(rxdata+k);//字符型        
  20.             strtemp.Format(_T("%c"),bt); //将字符送入临时变量strtemp存放     
  21.             m_strRXData+=strtemp; //加入接收编辑框对应字符串        
  22.         }  
  23.     }       
  24.     UpdateData(FALSE); //更新编辑框内容   
  25. }  

d.添加发送数据按钮的BN_CLICKED消息的处理函数(方法见3.->b.),


在CSerialTestDlg::OnBnClickedButtonSend()中添加如下代码:

  1. void CSerialTestDlg::OnBnClickedButtonSend()  
  2. {  
  3.     // TODO: 在此添加控件通知处理程序代码  
  4.     if (m_setOk == true)    //判断是否打开并初始化串口  
  5.     {  
  6.         UpdateData(TRUE);  //读取编辑框内容  
  7.         m_ctrlComm.put_Output(COleVariant(m_strTXData)); //发送数据  
  8.     }   
  9.     else  
  10.     {  
  11.         MessageBox(_T("请先选择COM口"));  
  12.     }  
  13. }  

e.同理,添加清楚接收框按钮的BN_CLICKED消息的处理函数(方法见3.->b.),

CSerialTestDlg::OnBnClickedButtonCleanup()中添加如下代码:

  1. void CSerialTestDlg::OnBnClickedButtonCleanup()  
  2. {  
  3.     // TODO: 在此添加控件通知处理程序代码  
  4.     m_strRXData="";  
  5.     UpdateData(FALSE);//更新编辑框内容   
  6. }  

4.生成可执行代码

a.点击启动调试按钮或摁F5,编译成功


b.点击菜单栏生成->配置管理器


活动解决方案配置下拉菜单中选择Release,点击关闭


再次编译,即可看到在目录中生成了的Release文件夹下生成了.exe文件。


5.检测软件是否能正常工作,

a.这里首先要下一个虚拟串口。下载地址:http://www.cr173.com/soft/21406.html(也可在文首提供的连接处下载)

安装完成后,打开软件


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
vc++6.0使用串口控件例程
VC控件MSComm编写串口通信程序(转) - leadtheway - ItEye技术网...
一个使用CSocket类的网络通信实例
用vs2010开发基于VC++的MFC 串口通信一*****两台电脑同一个串口号之间的通信
Ardunio解析之函数探秘
STM32的USART
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服