<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > Visual C++串口通信技術(shù)編程實例

          Visual C++串口通信技術(shù)編程實例

          作者: 時間:2016-12-01 來源:網(wǎng)絡(luò) 收藏
          結(jié)合DT線掃程序,使用MSC++omm控件進(jìn)行串口編程

          1.先要插入控件,如果試圖類是基于CFormView的,那么創(chuàng)建CMSComm類是簡單的,只需在對話框窗體中插入控件,再在視圖類中為該控件聲明一個變量即可,這樣在程序運行中,該控件都將有效的。如果視圖類不是基于FormView的,那么需要建立一個MSComm控件,創(chuàng)建的方法與普通的ActiveX控件的創(chuàng)建類似。

          本文引用地址:http://www.ex-cimer.com/article/201612/324417.htm

          同時參考DT線掃,勝哥把控件直接放在AboutDlg上,應(yīng)該放在其他對話框上也行,然后在MainFrm.cpp::OnCreat()函數(shù)中添加創(chuàng)建控件的語句

          //創(chuàng)建串口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.初始化并打開

          設(shè)定通信端口號,通信協(xié)議,設(shè)定傳輸速率等參數(shù),設(shè)定其他參數(shù),打開通信端口

          //串口1初始化
          if(m_MSComm.GetPortOpen()) //如果串口是打開的,則行關(guān)閉串口
          m_MSComm.SetPortOpen(FALSE);

          m_MSComm.SetCommPort(1); //選擇COM1
          m_MSComm.SetInBufferSize(1024); //接收緩沖區(qū)
          m_MSComm.SetOutBufferSize(1024); //發(fā)送緩沖區(qū)
          m_MSComm.SetInputLen(0); //設(shè)置當(dāng)前接收區(qū)數(shù)據(jù)長度為0,表示全部讀取
          m_MSComm.SetInputMode(1); //以二進(jìn)制方式讀寫數(shù)據(jù)
          m_MSComm.SetRThreshold(12); //接收緩沖區(qū)有1個及1個以上字符時,將引發(fā)接收數(shù)據(jù)的OnComm事件
          m_MSComm.SetSettings("9600,e,8,1"); //波特率:9600,偶檢驗位,8個數(shù)據(jù)位,1個停止位
          m_MSComm.SetDTREnable(TRUE);
          m_MSComm.SetRTSEnable(TRUE);

          3.捕捉串口事項

          這里用事件驅(qū)動方法。

          右鍵在控件上添加消息映射,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的高字節(jié)與低字節(jié)
          ucDataHighByte = nData >> 8;
          ucDataLowByte = (nData << 8) >> 8;
          TheSig.RemoveAll();//清空發(fā)送區(qū)
          TheSig.SetSize(2);
          TheSig.SetAt(0, ucDataHighByte);//將發(fā)送數(shù)據(jù)的高字節(jié)加入發(fā)送區(qū)
          TheSig.SetAt(1, ucDataLowByte);//將發(fā)送數(shù)據(jù)的低字節(jié)加入發(fā)送區(qū)
          m_MSComm.SetOutput(COleVariant(TheSig));//發(fā)送

          }

          5.

          關(guān)閉串口

          bool CMainFrame::CloseComm()
          {
          if(m_MSComm.GetPortOpen())
          m_MSComm.SetPortOpen(false);
          return !m_MSComm.GetPortOpen();

          }

          對照線掃和該書。還有關(guān)于COleSafeArray的使用等



          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();