完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
VS2017基于MFC 串口通信上位机,实现串口发送、接收数据。
1.打开VS2017 创建 MFC应用程序,选择基于对话框类 完成。 2.将对话框上原有的控件删除,添加所需的控件。 发送部分:Radio Button、Edit Control 接收部分:Edit Control 选择串口、波特率:Combo Box 按键:打开串口、发送数据 图标显示:指示串口打开、关闭状态 Activex 串口控件:Microsoft Communications Control,Version 6.0 ( Activex 串口控件添加方法 项目-》添加新项-》 Activex控件中的MFC类-》从可用的控件中选择Microsoft Communications Control,Version 6.0生成CMSComm类) 3.为控件添加变量 串口通道 IDC_CMB_COM m_cmbCom 波特率 IDC_CMB_BAUD m_cmbBaud Activex 串口控件 IDC_MSCOMM1 m_comm 接受区EDIT IDC_EDT_DATA m_edtData 接受区EDIT IDC_EDT_SEND m_edtSend 3.为各控件添加控制程序 ①选择串口 与 波特率 的 Combo Box 设置 在BOOL C串口Dlg::OnInitDialog() 内添加如下代码 m_cmbCom.AddString(L“COM1”); m_cmbCom.AddString(L“COM2”); m_cmbCom.AddString(L“COM3”); m_cmbCom.AddString(L“COM4”); m_cmbCom.AddString(L“COM5”); m_cmbCom.AddString(L“COM6”); m_cmbCom.AddString(L“COM7”); m_cmbCom.AddString(L“COM8”); m_cmbCom.AddString(L“COM9”); m_cmbCom.AddString(L“COM10”); m_cmbCom.SetCurSel(3); m_cmbBaud.AddString(L“600”); m_cmbBaud.AddString(L“1200”); m_cmbBaud.AddString(L“2400”); m_cmbBaud.AddString(L“4800”); m_cmbBaud.AddString(L“9600”); m_cmbBaud.AddString(L“38400”); m_cmbBaud.AddString(L“57600”); m_cmbBaud.AddString(L“115200”); m_cmbBaud.SetCurSel(7); ② 打开串口按钮 ,显示指示图标 提示:双击打开按钮 会直接跳转到 void C串口Dlg::OnBnClickedButtonOpen() 函数 void CchuankouDlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 if (!m_comm.get_PortOpen())//如果串口未打开 { CString baud; GetDlgItemText(IDC_CMB_BAUD, baud);//取得波特率口当前的选择值,存放在baud里 CString baudPort = baud + _T(“,n,8,1”);// 设置波特率、无校验,8数据位,1个停止位 m_comm.put_CommPort(m_cmbCom.GetCurSel());//选择串口,m_cmbCom:串口选择组合框的 成员变量 m_comm.put_InBufferSize(1024); // put__InBufferSize(1024); //设置输入缓冲区的大小,Bytes m_comm.put_OutBufferSize(1024); // put__OutBufferSize(512); //设置发送缓冲区的大小,Bytes// m_comm.put_PortOpen(TRUE);// SetPortOpen(TRUE); m_comm.put_InputMode(1); // SetInputMode(1); //设置输入方式为二进制方式 m_comm.put_Settings(baudPort); // SetSettings(“9600,n,8,1”); //设置波特率等参数 m_comm.put_RThreshold(1); //SetRThreshold(1); //为1表示有一个字符引发一个事件 m_comm.put_InputLen(0);// SetInputLen(0); 设置当前接收区数据长度为0,表示全部读取 SetDlgItemText(IDC_BTN_OPEN, _T(“关闭串口”)); } else { m_comm.put_PortOpen(FALSE); SetDlgItemText(IDC_BTN_OPEN, _T(“打开串口”)); } } ③串口控件程序:点击Activex 控件,右键 为控件添加处理程序 void CchuankouDlg::OnCommMscomm1() { // TODO: 在此处添加消息处理程序代码 CString strData; GetDlgItemText(IDC_EDT_DATA, strData); if (m_comm.get_CommEvent() == 2) { char str[1024] = { 0 }; long k; VARIANT InputData = m_comm.get_Input(); //读缓冲区 COleSafeArray fs; fs = InputData; //VARIANT型变À量转换为COleSafeArray型变量 for (k = 0; k 《 (long)fs.GetOneDimSize(); k++) fs.GetElement(&k, str + k); //转换为BYTE型数组 strData += str; // 接收到编辑框里面 SetDlgItemText(IDC_EDT_DATA, strData); } } ④发送数据按钮程序 void CchuankouDlg::OnBnClickedBtnSendData() { // TODO: 在此添加控件通知处理程序代码 UpdateData(TRUE); CString sendDAta; GetDlgItemText(IDC_EDT_SEND, sendDAta); if (sendDAta == “”) { MessageBox(_T(“发送数据不能为空”), _T(“警告”), MB_OK | MB_ICONWARNING); return; } char *data = CstringToChar(sendDAta); m_comm.put_Output(COleVariant(sendDAta)); UpdateData(FALSE); } 界面图 |
|
|
|
只有小组成员才能发言,加入小组>>
929浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 00:01 , Processed in 0.639644 second(s), Total 81, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号