打开APP
userphoto
未登录

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

开通VIP
Visual C++串口通信技术编程实例
结合DT线扫程序,使用MSComm控件进行串口编程
1.先要插入控件,如果试图类是基于CFormView的,那么创建CMSComm类是简单的,只需在对话框窗体中插入控件,再在视图类中为该控件声明一个变量即可,这样在程序运行中,该控件都将有效的。如果视图类不是基于FormView的,那么需要建立一个MSComm控件,创建的方法与普通的ActiveX控件的创建类似。
同时参考DT线扫,胜哥把控件直接放在AboutDlg上,应该放在其他对话框上也行,然后在MainFrm.cpp::OnCreat()函数中添加创建控件的语句
//创建串口1
DWORD style=WS_VISIBLE|WS_CHILD;
if(!m_MSComm.Create(NULL,style,CRect(0,0,0,0),this,IDC_MSCOMM3))
{
//TRACE0("Failed to create OLE Communication Control\n");
AfxMessageBox("串口打开失败!");
return -1;
}
http://dev.yesky.com/231/2309731.shtml深入浅出VC++串口编程之基于控件
2.初始化并打开
设定通信端口号,通信协议,设定传输速率等参数,设定其他参数,打开通信端口
//串口1初始化
if(m_MSComm.GetPortOpen())   //如果串口是打开的,则行关闭串口
m_MSComm.SetPortOpen(FALSE);
m_MSComm.SetCommPort(1);    //选择COM1
m_MSComm.SetInBufferSize(1024);   //接收缓冲区
m_MSComm.SetOutBufferSize(1024);  //发送缓冲区
m_MSComm.SetInputLen(0);    //设置当前接收区数据长度为0,表示全部读取
m_MSComm.SetInputMode(1);    //以二进制方式读写数据
m_MSComm.SetRThreshold(12);    //接收缓冲区有1个及1个以上字符时,将引发接收数据的OnComm事件
m_MSComm.SetSettings("9600,e,8,1");     //波特率:9600,偶检验位,8个数据位,1个停止位
m_MSComm.SetDTREnable(TRUE);
m_MSComm.SetRTSEnable(TRUE);
3.捕捉串口事项
这里用事件驱动方法。
右键在控件上添加消息映射,OnCommMscomm.添加到MainFrm中
4.串口读写
用GetInput()和Setoutput()就可。都使用VARIANT类型。
oid CMainFrame::OnCommMSComm()
{
int a, i;
unsigned char *ucData;
unsigned short *nData;
CString str, str1;
switch(m_MSComm2.GetCommEvent())
{
case 2:
a = m_MSComm2.GetInBufferCount();
if(a>0)
{
ucData = (unsigned char*)m_MSComm2.GetInput().parray->pvData;
nData = new unsigned short[a/2];
memset(nData, 0, sizeof(unsigned short)*a/2);
for(i=0; i<a/2; i++)
{
nData[i] += *(ucData++);
nData[i] <<= 8;
nData[i] += *(ucData++);
str1.Format("%d", nData[i]);
str += str1;
}
CChildFrame *pChildFrame = (CChildFrame*)MDIGetActive();
pChildFrame->m_pFormView2->m_viewFormView2Page2.CommPacketReceive(a/2, nData);
delete[] nData;
}
AfxMessageBox(str);
break;
default:
break;
}
}
void CMainFrame::CommSendData(unsigned short nData)
{
unsigned char ucDataHighByte, ucDataLowByte;//nData的高字节与低字节
ucDataHighByte = nData >> 8;
ucDataLowByte = (nData << 8) >> 8;
TheSig.RemoveAll();//清空发送区
TheSig.SetSize(2);
TheSig.SetAt(0, ucDataHighByte);//将发送数据的高字节加入发送区
TheSig.SetAt(1, ucDataLowByte);//将发送数据的低字节加入发送区
m_MSComm.SetOutput(COleVariant(TheSig));//发送
}
5.
关闭串口
bool CMainFrame::CloseComm()
{
if(m_MSComm.GetPortOpen())
m_MSComm.SetPortOpen(false);
return !m_MSComm.GetPortOpen();
}
对照线扫和该书。还有关于COleSafeArray的使用等
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
VS2010/MFC 入门编程七(基于MSCOMM32.OCX控件的串口编程)
VC上应用mscomm控件
(三)MSComm控件进行串口编程的基本步骤
MSComm控件与Win32 API操作串口有何区别?
VB串口通信
Web中使用MSCOMM32.OCX读写串口(2)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服