国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

VC++下用MSComm控件實現串口通訊

2019-11-17 04:59:51
字體:
來源:轉載
供稿:網友
首先,在對話框中創建通信控件,若Control工具欄中缺少該控件,可通過菜單PRoject --> Add to Project --> Components and Control插入即可,再將該控件從工具箱中拉到對話框中。此時,你只需要關心控件提供的對 Windows 通訊驅動程序的 API 函數的接口。
換句話說,只需要設置和監視MSComm控件的屬性和事件。 打開所需串口后,需要考慮串口通信的時機。在接收或發送數據過程中,可能需要監視并響應一些事件和錯誤,所以事件驅動是處理串行端口交互作用的一種非常有效的方法。使用 OnComm 事件和 CommEvent 屬性捕捉并檢查通訊事件和錯誤的值。發生通訊事件或錯誤時,將觸發 OnComm 事件,CommEvent 屬性的值將被改變,應用程序檢查 CommEvent 屬性值并作出相應的反應 // 若是在SDI中使用該控件則要調用下兩句,在對話框程序中該語句有MFC自己創建
// 所以不用人為添加
DWord style=WS_VISIBLE;
m_MSComm.Create(NULL,style,CRect(0,0,0,0),this,IDC_MSCOMM1);
// 串口控件的初始化
DWORD style=WS_VISIBLE;
m_MSComm.Create(NULL,style,CRect(0,0,0,0),this,IDC_MSCOMM1);
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(1);//接收緩沖區有1個及1個以上字符時,將引發接收數據的OnComm事件
m_MSComm.SetSettings("9600,n,8,1");//波特率9600無檢驗位,8個數據位,1個停止位
if(!m_MSComm.GetPortOpen())//假如串口沒有打開則打開
 m_MSComm.SetPortOpen(TRUE);//打開串口
else
 m_MSComm.SetOutBufferCount(0);
// 控件事件的響應聲明
// *.h
//{{AFX_MSG(CGolfView)
afx_msg BOOL OnComm();
DECLARE_EVENTSINK_MAP()
//}}AFX_MSG
// *.cpp
BEGIN_EVENTSINK_MAP(CGolfView, CView)
//{{AFX_EVENTSINK_MAP(CAboutDlg)
ON_EVENT(CGolfView, IDC_MSCOMM1, 1 /* OnComm */, OnComm, VTS_NONE)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
// 控件事件的響應
BOOL CGolfView::OnComm()
{
 VARIANT variant_inp;
 COleSafeArray safearray_inp;
 LONG len,k;
 BYTE rxdata[2048]; //設置BYTE數組 An 8-bit integerthat is not signed.
 CString strtemp;
 switch(m_MSComm.GetCommEvent())
 {
  case 1: // comEvSend發送數據
   break;
  case 2: // comEvReceive讀取數據
   // MessageBox(_T("讀取數據事件"), _T("TRACE"), MB_OK);
   variant_inp=m_MSComm.GetInput(); //讀緩沖區
   safearray_inp=variant_inp; //VARIANT型變量轉換為ColeSafeArray型變量
   len=safearray_inp.GetOneDimSize(); //得到有效數據長度
   // 接受數據
   for(k=0; k    {
    safearray_inp.GetElement(&k,rxdata+k); //轉換為BYTE型數組
    BYTE BT=*(char*)(rxdata+k); //字符型
    strtemp.Format("%c",bt); //將字符送入臨時變量strtemp存放
    recd+=strtemp;
   }
   // UpdateData(TRUE);
 
   break;

  default: // 傳輸事件出錯
   m_MSComm.SetOutBufferCount(0);
   break;
  }
 UpdateData(FALSE); //更新圖象內容
 return TRUE;
}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 拉孜县| 思茅市| 望奎县| 鸡东县| 同江市| 桂东县| 广州市| 高尔夫| 瑞金市| 宁陕县| 沙雅县| 桂东县| 绥江县| 东阳市| 商城县| 津市市| 祁阳县| 乐都县| 大渡口区| 峡江县| 五家渠市| 太和县| 青河县| 北海市| 浦城县| 读书| 东阳市| 社旗县| 方正县| 冷水江市| 开封县| 湛江市| 那坡县| 苏尼特左旗| 苍山县| 武威市| 巢湖市| 大冶市| 西华县| 巢湖市| 伊春市|