久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

Visual C++串口通信技術編程實例

作者:黃波海   來源:本站原創   點擊數:  更新時間:2014年03月06日   【字體:

結合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的使用等

關閉窗口

相關文章

主站蜘蛛池模板: 99久久精品免费看国产小宝寻花 | 中文字幕一区二区三区日韩精品 | 中文字幕在线观看国产 | 99re在线视频| 国产乱一区二区三区视频 | 黄片毛片免费看 | 欧美精品91 | 精品在线一区 | 欧美日韩三级 | 一区二区三区日韩 | 91在线观看视频 | 中文av字幕| 毛片a| 亚洲成人观看 | 久久在线视频 | 成人av免费 | 日韩色在线 | 欧美一区二区三区四区五区无卡码 | 国产一区二 | 无码一区二区三区视频 | 在线观看国产www | 国产精品久久久久久久一区探花 | 在线视频亚洲 | 做a视频 | 中文字幕1区 | 亚洲一区二区三区乱码aⅴ 四虎在线视频 | 超碰免费在线观看 | 国产一区亚洲二区三区 | 国产高清精品一区二区三区 | 欧美日本一区 | 91久久婷婷 | 国产乱码精品一区二区三区五月婷 | 免费观看一级特黄欧美大片 | 久久亚洲国产精品日日av夜夜 | 六月成人网 | 欧美综合一区 | 91精品国产91久久久久久 | h在线观看 | 国产精品亚洲综合 | 日韩视频在线播放 | 日韩小视频 |