问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

VC++中如何用MSComm控件实现串口通信

发布网友 发布时间:2022-04-22 14:07

我来回答

2个回答

热心网友 时间:2023-10-18 08:27

1:添加MSComm控件

2:为对话框添加MSComm控件成员变量
右击MSComm控件,然后选择Add Variable...

3:为对话框添加OnComm事件
右击MSComm控件,然后选择Add Event Handle..

4:打开/关闭串口.

void Ctbox_debug_viewDlg::OnBnClickedBtOpen()
{
// TODO: Add your control notification handler code here
if(m_mscomm.get_PortOpen())
{
m_mscomm.put_PortOpen(FALSE);
GetDlgItem(IDC_BT_OPEN)->SetWindowText(_T("打开"));
ShowInfo(_T("关闭串口成功!"));
m_OpenStatus =false;
return;
}
UpdateData(TRUE);
m_OpenStatus =true;
//当前端口号
m_mscomm.put_CommPort(m_Port+1);//端口号
m_mscomm.put_InBufferSize(1024);//接收缓冲区
m_mscomm.put_OutBufferSize(1024);//发送缓冲区
m_mscomm.put_InputLen(0);//设置当前接收区数据长度为0,表示全部读取
m_mscomm.put_InputMode(1);//以二进制方式读写数据
m_mscomm.put_RThreshold(1);//接收缓冲区有1个及1个以上字符时,将引发接收数据的OnComm事件
//波特率
DWORD baudrate;
switch(m_CombolBaudrate.GetCurSel())
{
case 0:
baudrate =115200;
break;
case 1:
baudrate =9600;
break;
default:
ASSERT(FALSE);
break;
}
CString setting;
setting.Format(_T("%d,n,8,1"),baudrate);
m_mscomm.put_Settings(setting/*_T("115200,n,8,1")*/);//波特率,无校验,8个数据位,1个停止1位
m_mscomm.put_PortOpen(TRUE);//打开串口
GetDlgItem(IDC_BT_OPEN)->SetWindowText(_T("关闭"));
ShowInfo(_T("打开串口成功!"));
}
5:接收串口数据
void Ctbox_debug_viewDlg::OnCommMscomm1()
{
// TODO: Add your message handler code here
short curEvent =m_mscomm.get_CommEvent();
switch(curEvent)
{
case CMscomm1::comEvReceive:
EvReceiveHandle();
break;
}
}
void Ctbox_debug_viewDlg::EvReceiveHandle(void)
{
static unsigned int cnt=0;
VARIANT variant_inp;
COleSafeArray safearray_inp;
long len,k;
/*unsigned intdata[1024]={0};*/
BYTE rxdata[1024];//设置BYTE数组
CString strtemp;
cnt++;
variant_inp= m_mscomm.get_Input();//读取缓冲区
safearray_inp= variant_inp;//变量转换
len= safearray_inp.GetOneDimSize();//得到有效的数据长度
for (k=0;k<len;k++)
{
safearray_inp.GetElement(&k,rxdata+k);
}
/*char c_char; */
for (k=0;k<len;k++)
{
strtemp.Format(_T("%c"),*(rxdata+k));
m_RecveString +=strtemp;
if(*(rxdata+k) =='\n')
{
ShowInfoByFilter(m_RecveString);
m_RecveString ="";
}
}
}
6:发送串口数据
void Ctbox_debug_viewDlg::OnBnClickedBtSend()
{
// TODO: Add your control notification handler code here
if(m_OpenStatus ==false)
{
AfxMessageBox(_T("请先打开串口"));
return;
}
UpdateData(TRUE);
if(m_SendString.IsEmpty())
return;
if(m_AutoAddLF)
{
m_SendString +="\r\n";
}
m_mscomm.put_Output(COleVariant(m_SendString));
ShowInfo(m_SendString);
}

热心网友 时间:2023-10-18 08:28

一两句话说不清楚,你来这里看吧:
http://www.gjwtech.com/serialcomm.htm
这里有很多教程。
尤其是这篇文章:
http://www.gjwtech.com/scomm/scmfcprogramfujie.htm

如果你还有问题可以百度Hi上找 我。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
环保无纺布袋制作方法大盘点 超市食品撕拉袋可以加热吗 四川商用连卷袋批发 电脑换符号的键是哪个笔记本电脑哪个按键是符号键 电脑符号的使用及打出方法掌握电脑符号的快捷技巧打造文书 电脑打字标点符号怎么打电脑上打字时按什么键可以显示出标点符号来 i54570与g4560那个好点,主板能通用吗? i53470和g4560玩联盟哪个好 g4560cpu和四代i54590那个要好些 我很好奇,人的名字真的和一生的命运之类的有关系吗?有什么依据?_百度... VB串口通信 程序员从c/c++转到Go语言怎么样? C#中如何通过RS232的方式实现通信? go语言适合做什么 C# serialport内datareceived事件接收串口数据,详细步骤。 为什么除了Go语言,其他类C语言都是垃圾 Delphi7 SPCOMM串口通信 好程序员:比C语言还好,GO语言有多强大 单片机与单片机之间如何进行串行通信 想学习一门新语言,golang 和 C++ 哪个是更好的选择 串口通信的例子或教程!!!!好的话追加分!!!!!! 西门子PLC串口通讯的几种方法 请Golang深度用户说说,现在Golang的性能可以和C比吗 中断方式串口通信的实现,一般要设置哪四个步骤? c#和go语言的区别 使用C#实现串口通讯,接受和控制单片机。 go语言能取代C语言吗? 串口通信中uart收发数据的过程及步骤 Go语言是不是C语言的下一跳 实现两台计算机之间串口通信的步骤 Objective-C和Go语言那个更优秀? 求易语言串口通讯完整教程 go语言和c++哪个难 用易语言制作串口通信 初中怎么用英语介绍自己 初中生英语自我介绍80字 初中英语自我介绍(带翻译) 初中怎么用英语介绍自己? 初一英语自我介绍带翻译怎么写? 请写一个自我介绍英语作文60-80词 谢谢 初中水平 英语自我介绍范文带翻译初中50个单词 英文版自我介绍带翻译初中生250字 自我介绍怎么写初中生英语 初中英文作文是写自我介绍,应该从哪些方面写呢? 初中英语自我介绍10句 初中英语自我介绍格式 求一篇初中英语的自我介绍 初中的英语自我介绍怎么做 初中生英语自我介绍,一分钟左右? 最后一颗实牙里面的牙龈肿了,很疼是怎么回事