国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
VC++下用MSComm控件實現串口通訊
http://tech.163.com/school · 2005-10-08 17:59:47 · 來源: 天極網
首先,在對話框中創(chuàng)建通信控件,若Control工具欄中缺少該控件,可通過菜單Project --> Add to Project --> Components and Control插入即可,再將該控件從工具箱中拉到對話框中。此時,你只需要關心控件提供的對 Windows 通訊驅動程序的 API 函數的接口。換句話說,只需要設置和監(jiān)視MSComm控件的屬性和事件。
打開所需串口后,需要考慮串口通信的時機。在接收或發(fā)送數據過程中,可能需要監(jiān)視并響應一些事件和錯誤,所以事件驅動是處理串行端口交互作用的一種非常有效的方法。使用 OnComm 事件和 CommEvent 屬性捕捉并檢查通訊事件和錯誤的值。發(fā)生通訊事件或錯誤時,將觸發(fā) OnComm 事件,CommEvent 屬性的值將被改變,應用程序檢查 CommEvent 屬性值并作出相應的反應
// 若是在SDI中使用該控件則要調用下兩句,在對話框程序中該語句有MFC自己創(chuàng)建 
// 所以不用人為添加 
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); //接收緩沖區(qū) 
m_MSComm.SetOutBufferSize(1024);//發(fā)送緩沖區(qū) 
m_MSComm.SetInputLen(0);//設置當前接收區(qū)數據長度為0,表示全部讀取 
m_MSComm.SetInputMode(1);//以二進制方式讀寫數據 
m_MSComm.SetRThreshold(1);//接收緩沖區(qū)有1個及1個以上字符時,將引發(fā)接收數據的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發(fā)送數據 
break; 
case 2: // comEvReceive讀取數據 
// MessageBox(_T("讀取數據事件"), _T("TRACE"), MB_OK); 
variant_inp=m_MSComm.GetInput(); //讀緩沖區(qū) 
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; 
}
本站僅提供存儲服務,所有內容均由用戶發(fā)布,如發(fā)現有害或侵權內容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
用vs2010開發(fā)基于VC++的MFC 串口通信一*****兩臺電腦同一個串口號之間的通信
VC控件MSComm編寫串口通信程序(轉) - leadtheway - ItEye技術網...
用VC 6.0實現串行通信的三種方法
通訊串口:VB/C++/C#串口通信源代碼+詳細注釋用的是axMSComm控件,通信方式...
VB6.0環(huán)境下利用Mscomm控件實現串行通信
VB下實現串口通信的方法
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服