串口調試助手代碼分析3_第1頁
串口調試助手代碼分析3_第2頁
串口調試助手代碼分析3_第3頁
串口調試助手代碼分析3_第4頁
串口調試助手代碼分析3_第5頁
已閱讀5頁,還剩2頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

本文格式為Word版,下載可任意編輯——串口調試助手代碼分析3第5章串口調試助手代碼分析1、建立基于對話框的工程SCOMM2、繪制界面,如下圖:

接收區

串口組合框:IDC_COMBO_COMSELECT,m_Com波特率組合框:IDC_COMBO_SPEED,m_Speed

中止位組合框:IDC_COMBO_STOPBITS,m_StopBits數據位組合框:IDC_COMBO_DATABITS,m_DataBits校驗位組合框:IDC_COMBO_PARITY,m_Parity十六進制顯示(接收):IDC_CHECK_HEXRECIEVE,m_ctrlHexReceieve接收編輯框:IDC_EDIT_RECIVE,m_ReceiveDatam_ctrlReceiveDataStyle:VerticalScrollMultiLine

開啟串口IDC_BUTTON_OPENPORT,m_ctrlOpenPort

串口開關標志圖標IDC_STATIC_OPENOFF,m_ctrlIconOpenoff數據文件保存路徑IDC_EDIT_SAVEPATH,m_strCurPath

保存顯示數據文件路徑IDC_EDIT_SAVEPATH,m_ctrlSavePath接收計數IDC_STATIC_RXCOUNT,m_ctrlRXCOUNT

發送區

…。。。。。。。。。。。。。。

3、添加CSeraiPort類文件

將類文件SerialPort.hSerialPort.cpp復制到工程所在文件夾中(選擇改進

后的類),然后單擊VC6.0菜單Projrct->AddtoProjrct->Files…,再在開啟的文件選擇對話框中選擇SerialPort.h和SerialPort.cpp,點擊OK,就把類文件參與當前工程,并在SCOMMDlg.h中參與頭文件,#include\,通過上述步驟就在當前工程中參與了CSeraiPort類。4、完成串口消息處理函數OnCommunicatiom

在CserailPort類中有多個串口事件可以響應。在一般串口編程中,只需要處理WM_COMM_RXCHAR消息就可以了,該類所有的消息均需要人工添加消息處理函數。我們將處理函數名定義為OnComm()。首先在SCOMMDlg.h中添加串口字符接收消息WM_COMM_RXCHAR(串口接收緩沖區內有一個字符)響應函數的聲明:如下圖

然后,在SCOMMDlg.cpp文件中進行WM_COMM_RXCHAR消息映射:如下圖;

接著,在SCOMMDlg.cpp文件中參與函數OnCommunication(WPARAMch,LPARAMport)的實現,暫不添加代碼。

LONGCSCOMMDlg::OnCommunication(WPARAMch,LPARAMport){

return0;}

以上步驟需要手工完成。

至此完成了程序的對話框模板,在工程中插入了串口操作類CserailPort類。

5、添加串口初始化及關閉

程序中有兩種方法大開串口,一是程序啟動,調用OnInitDialog()函數,就可以開啟串口,缺少的串口號為COM1,假使COM1不存在或占用,就會給出提醒;另外,單擊“開啟串口〞按鈕也可以開啟串口。//在初始化中開啟串口

BOOLCSCOMMDlg::OnInitDialog(){

m_nBaud=9600;//波特率m_nCom=1;//串口號m_cParity='N';//奇偶校驗

m_nDatabits=8;//數據位m_nStopbits=1;//中止位

m_dwCommEvents=EV_RXFLAG|EV_RXCHAR;//串口事件//if(m_Port.InitPort(this,1,9600,'N',8,1,dwCommEvents,512))CStringstrStatus;

if(m_Port.InitPort(this,m_nCom,

m_nBaud,m_cParity,m_nDatabits,m_nStopbits,m_dwCommEvents,512))//假使啟動串口成功{m_Port.StartMonitoring();//啟動監測輔助線程strStatus.Format(\:COM%dOPENED,%d,%c,%d,%d\m_nBaud,m_cParity,m_nDatabits,m_nStopbits);//打印串口狀態及參數m_ctrlIconOpenoff.SetIcon(m_hIconRed);//m_ctrlIconOpenoff.SetIcon(m_hIconOff);//\當前狀態:串口開啟,無奇偶校驗,8數據位,1中止位\}

else//假使啟動失敗{AfxMessageBox(\沒有發現此串口\m_ctrlIconOpenoff.SetIcon(m_hIconOff);}

m_ctrlPortStatus.SetWindowText(strStatus);//顯示串口的狀態及參數returnb;}

6、在ClassWizard中為按鈕“開啟串口〞控制IDC_BUTTON_OPENPORT添加單擊響應函數。//開啟,關閉串口

voidCSCOMMDlg::OnButtonOpenport(){

//TODO:Addyourcontrolnotificationhandlercodeherem_bOpenPort=!m_bOpenPort;//取反if(m_bOpenPort)//關閉串口{if(m_ctrlAutoSend.GetCheck()){m_bOpenPort=!m_bOpenPort;AfxMessageBox(\請先關掉自動發送\return;}m_ctrlOpenPort.SetWindowText(\開啟串口\m_Port.ClosePort();//關閉串口m_ctrlPortStatus.SetWindowText(\:COMPortClosed\

m_ctrlIconOpenoff.SetIcon(m_hIconOff);}

else//開啟串口{m_ctrlOpenPort.SetWindowText(\關閉串口\CStringstrStatus;if(m_Port.InitPort(this,m_nCom,

m_nBaud,m_cParity,m_nDatabits,m_nStopbits,m_dwCommEvents,512)){m_Port.StartMonitoring();m_ctrlIconOpenoff.SetIcon(m_hIconRed);//m_hIconRed;串口開啟時的紅燈圖標句柄

strStatus.Format(\:COM%dOPENED,%d,%c,%d,%d\m_nBaud,m_cParity,m_nDatabits,m_nStopbits);//\當前狀態:串口開啟,無奇偶校驗,8數據位,1中止位\}else//假使沒有開啟串口成功{AfxMessageBox(\沒有發現此串口或被占用\m_ctrlIconOpenoff.SetIcon(m_hIconOff);//m_hIconOff串口關閉時的紅燈指示圖標句柄}m_ctrlPortStatus.SetWindowText(strStatus);}}

7、為了在程序關閉時通過關閉串口并釋放占用資源,在ClassWizard中為CSCOMMDlg添加了WM_DISTROY的消息響應函數OnDestroy(),函數在主窗口即將銷毀時調用。

//為主窗口關閉時添加關閉響應函數voidCSCOMMDlg::OnDestroy(){

CDialog::OnDestroy();

m_ctrlAutoSend.SetCheck(0);//強行關閉自動發送KillTimer(1);//關閉定時器KillTimer(4);

m_Port.ClosePort();//關閉串口

m_ReceiveData.Empty();//清空接收數據字符串}

8、十六進制數據發送處理

首先為CSCOMMDlg類添加兩個成員函數Str2Hex()和HexChar,前者對后者進行了調用,Str2Hex()的作用是將一個字符串作為十六進制轉化為一個字符組,其中,data即為返回的數組,函數的返回值為data數組的長度。

//將一個字符串作為十六進制轉化為一個字符數組,字節間可用空格分隔,//返回轉換后的字節數組長度,同時字節數組長度自動設置intCSCOMMDlg::Str2Hex(CStringstr,char*data){

intt,t1;

intrlen=0,len=str.GetLength();//data.SetSize(len/2);for(inti=0;i=len)break;l=str[i];t=HexChar(h);t1=HexChar(l);if((t==16)||(t1==16))

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論