您的位置 首页 嵌入式

Visual C++串口通讯技能编程实例

结合DT线扫程序,使用MSComm控件进行串口编程1先要插入控件,如果试图类是基于CFormView的,那么创建CMSComm类是简单的,只需在对话框窗体

结合DT线扫程序,运用MSC++omm控件进行串口编程

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”);
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 {
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的运用等

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/317574.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部