![串口調(diào)試助手代碼分析3_第1頁(yè)](http://file4.renrendoc.com/view/7929da5ea240a37b9943466a60f64a9d/7929da5ea240a37b9943466a60f64a9d1.gif)
![串口調(diào)試助手代碼分析3_第2頁(yè)](http://file4.renrendoc.com/view/7929da5ea240a37b9943466a60f64a9d/7929da5ea240a37b9943466a60f64a9d2.gif)
![串口調(diào)試助手代碼分析3_第3頁(yè)](http://file4.renrendoc.com/view/7929da5ea240a37b9943466a60f64a9d/7929da5ea240a37b9943466a60f64a9d3.gif)
![串口調(diào)試助手代碼分析3_第4頁(yè)](http://file4.renrendoc.com/view/7929da5ea240a37b9943466a60f64a9d/7929da5ea240a37b9943466a60f64a9d4.gif)
![串口調(diào)試助手代碼分析3_第5頁(yè)](http://file4.renrendoc.com/view/7929da5ea240a37b9943466a60f64a9d/7929da5ea240a37b9943466a60f64a9d5.gif)
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
本文格式為Word版,下載可任意編輯——串口調(diào)試助手代碼分析3第5章串口調(diào)試助手代碼分析1、建立基于對(duì)話(huà)框的工程SCOMM2、繪制界面,如下圖:
接收區(qū)
串口組合框:IDC_COMBO_COMSELECT,m_Com波特率組合框:IDC_COMBO_SPEED,m_Speed
中止位組合框:IDC_COMBO_STOPBITS,m_StopBits數(shù)據(jù)位組合框:IDC_COMBO_DATABITS,m_DataBits校驗(yàn)位組合框:IDC_COMBO_PARITY,m_Parity十六進(jìn)制顯示(接收):IDC_CHECK_HEXRECIEVE,m_ctrlHexReceieve接收編輯框:IDC_EDIT_RECIVE,m_ReceiveDatam_ctrlReceiveDataStyle:VerticalScrollMultiLine
開(kāi)啟串口IDC_BUTTON_OPENPORT,m_ctrlOpenPort
串口開(kāi)關(guān)標(biāo)志圖標(biāo)IDC_STATIC_OPENOFF,m_ctrlIconOpenoff數(shù)據(jù)文件保存路徑IDC_EDIT_SAVEPATH,m_strCurPath
保存顯示數(shù)據(jù)文件路徑IDC_EDIT_SAVEPATH,m_ctrlSavePath接收計(jì)數(shù)IDC_STATIC_RXCOUNT,m_ctrlRXCOUNT
發(fā)送區(qū)
…。。。。。。。。。。。。。。
3、添加CSeraiPort類(lèi)文件
將類(lèi)文件SerialPort.hSerialPort.cpp復(fù)制到工程所在文件夾中(選擇改進(jìn)
后的類(lèi)),然后單擊VC6.0菜單Projrct->AddtoProjrct->Files…,再在開(kāi)啟的文件選擇對(duì)話(huà)框中選擇SerialPort.h和SerialPort.cpp,點(diǎn)擊OK,就把類(lèi)文件參與當(dāng)前工程,并在SCOMMDlg.h中參與頭文件,#include\,通過(guò)上述步驟就在當(dāng)前工程中參與了CSeraiPort類(lèi)。4、完成串口消息處理函數(shù)OnCommunicatiom
在CserailPort類(lèi)中有多個(gè)串口事件可以響應(yīng)。在一般串口編程中,只需要處理WM_COMM_RXCHAR消息就可以了,該類(lèi)所有的消息均需要人工添加消息處理函數(shù)。我們將處理函數(shù)名定義為OnComm()。首先在SCOMMDlg.h中添加串口字符接收消息WM_COMM_RXCHAR(串口接收緩沖區(qū)內(nèi)有一個(gè)字符)響應(yīng)函數(shù)的聲明:如下圖
然后,在SCOMMDlg.cpp文件中進(jìn)行WM_COMM_RXCHAR消息映射:如下圖;
接著,在SCOMMDlg.cpp文件中參與函數(shù)OnCommunication(WPARAMch,LPARAMport)的實(shí)現(xiàn),暫不添加代碼。
LONGCSCOMMDlg::OnCommunication(WPARAMch,LPARAMport){
return0;}
以上步驟需要手工完成。
至此完成了程序的對(duì)話(huà)框模板,在工程中插入了串口操作類(lèi)CserailPort類(lèi)。
5、添加串口初始化及關(guān)閉
程序中有兩種方法大開(kāi)串口,一是程序啟動(dòng),調(diào)用OnInitDialog()函數(shù),就可以開(kāi)啟串口,缺少的串口號(hào)為COM1,假使COM1不存在或占用,就會(huì)給出提醒;另外,單擊“開(kāi)啟串口〞按鈕也可以開(kāi)啟串口。//在初始化中開(kāi)啟串口
BOOLCSCOMMDlg::OnInitDialog(){
m_nBaud=9600;//波特率m_nCom=1;//串口號(hào)m_cParity='N';//奇偶校驗(yàn)
m_nDatabits=8;//數(shù)據(jù)位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))//假使啟動(dòng)串口成功{m_Port.StartMonitoring();//啟動(dòng)監(jiān)測(cè)輔助線(xiàn)程strStatus.Format(\:COM%dOPENED,%d,%c,%d,%d\m_nBaud,m_cParity,m_nDatabits,m_nStopbits);//打印串口狀態(tài)及參數(shù)m_ctrlIconOpenoff.SetIcon(m_hIconRed);//m_ctrlIconOpenoff.SetIcon(m_hIconOff);//\當(dāng)前狀態(tài):串口開(kāi)啟,無(wú)奇偶校驗(yàn),8數(shù)據(jù)位,1中止位\}
else//假使啟動(dòng)失敗{AfxMessageBox(\沒(méi)有發(fā)現(xiàn)此串口\m_ctrlIconOpenoff.SetIcon(m_hIconOff);}
m_ctrlPortStatus.SetWindowText(strStatus);//顯示串口的狀態(tài)及參數(shù)returnb;}
6、在ClassWizard中為按鈕“開(kāi)啟串口〞控制IDC_BUTTON_OPENPORT添加單擊響應(yīng)函數(shù)。//開(kāi)啟,關(guān)閉串口
voidCSCOMMDlg::OnButtonOpenport(){
//TODO:Addyourcontrolnotificationhandlercodeherem_bOpenPort=!m_bOpenPort;//取反if(m_bOpenPort)//關(guān)閉串口{if(m_ctrlAutoSend.GetCheck()){m_bOpenPort=!m_bOpenPort;AfxMessageBox(\請(qǐng)先關(guān)掉自動(dòng)發(fā)送\return;}m_ctrlOpenPort.SetWindowText(\開(kāi)啟串口\m_Port.ClosePort();//關(guān)閉串口m_ctrlPortStatus.SetWindowText(\:COMPortClosed\
m_ctrlIconOpenoff.SetIcon(m_hIconOff);}
else//開(kāi)啟串口{m_ctrlOpenPort.SetWindowText(\關(guān)閉串口\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;串口開(kāi)啟時(shí)的紅燈圖標(biāo)句柄
strStatus.Format(\:COM%dOPENED,%d,%c,%d,%d\m_nBaud,m_cParity,m_nDatabits,m_nStopbits);//\當(dāng)前狀態(tài):串口開(kāi)啟,無(wú)奇偶校驗(yàn),8數(shù)據(jù)位,1中止位\}else//假使沒(méi)有開(kāi)啟串口成功{AfxMessageBox(\沒(méi)有發(fā)現(xiàn)此串口或被占用\m_ctrlIconOpenoff.SetIcon(m_hIconOff);//m_hIconOff串口關(guān)閉時(shí)的紅燈指示圖標(biāo)句柄}m_ctrlPortStatus.SetWindowText(strStatus);}}
7、為了在程序關(guān)閉時(shí)通過(guò)關(guān)閉串口并釋放占用資源,在ClassWizard中為CSCOMMDlg添加了WM_DISTROY的消息響應(yīng)函數(shù)OnDestroy(),函數(shù)在主窗口即將銷(xiāo)毀時(shí)調(diào)用。
//為主窗口關(guān)閉時(shí)添加關(guān)閉響應(yīng)函數(shù)voidCSCOMMDlg::OnDestroy(){
CDialog::OnDestroy();
m_ctrlAutoSend.SetCheck(0);//強(qiáng)行關(guān)閉自動(dòng)發(fā)送KillTimer(1);//關(guān)閉定時(shí)器KillTimer(4);
m_Port.ClosePort();//關(guān)閉串口
m_ReceiveData.Empty();//清空接收數(shù)據(jù)字符串}
8、十六進(jìn)制數(shù)據(jù)發(fā)送處理
首先為CSCOMMDlg類(lèi)添加兩個(gè)成員函數(shù)Str2Hex()和HexChar,前者對(duì)后者進(jìn)行了調(diào)用,Str2Hex()的作用是將一個(gè)字符串作為十六進(jìn)制轉(zhuǎn)化為一個(gè)字符組,其中,data即為返回的數(shù)組,函數(shù)的返回值為data數(shù)組的長(zhǎng)度。
//將一個(gè)字符串作為十六進(jìn)制轉(zhuǎn)化為一個(gè)字符數(shù)組,字節(jié)間可用空格分隔,//返回轉(zhuǎn)換后的字節(jié)數(shù)組長(zhǎng)度,同時(shí)字節(jié)數(shù)組長(zhǎng)度自動(dòng)設(shè)置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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年元器件測(cè)試儀器合作協(xié)議書(shū)
- 2025年硫精砂合作協(xié)議書(shū)
- 2025年農(nóng)業(yè)科學(xué)研究與試驗(yàn)發(fā)展服務(wù)合作協(xié)議書(shū)
- 2025年二次加工材相關(guān)板材合作協(xié)議書(shū)
- 2024-2025學(xué)年四川省成都市崇州市四年級(jí)(上)期末數(shù)學(xué)試卷
- 2025年中國(guó)建設(shè)銀行企業(yè)網(wǎng)上銀行國(guó)際結(jié)算協(xié)議(2篇)
- 2025年親屬的股權(quán)轉(zhuǎn)讓協(xié)議范文(2篇)
- 2025年二手車(chē)帶牌轉(zhuǎn)讓協(xié)議模板(2篇)
- 2025年個(gè)人自建房購(gòu)房合同標(biāo)準(zhǔn)版本(2篇)
- 2025年五年級(jí)1班第一學(xué)期班主任工作總結(jié)模版(2篇)
- 全面新編部編版四年級(jí)下冊(cè)語(yǔ)文教材解讀分析
- 江蘇農(nóng)牧科技職業(yè)學(xué)院?jiǎn)握小堵殬I(yè)技能測(cè)試》參考試題庫(kù)(含答案)
- 三年級(jí)上冊(cè)脫式計(jì)算100題及答案
- VDA6.3 2023過(guò)程審核教材
- 烹飪實(shí)訓(xùn)室安全隱患分析報(bào)告
- 《金屬加工的基礎(chǔ)》課件
- 運(yùn)輸行業(yè)春節(jié)安全生產(chǎn)培訓(xùn) 文明駕駛保平安
- 體驗(yàn)式沙盤(pán)-收獲季節(jié)
- 老年護(hù)理陪護(hù)培訓(xùn)課件
- 2019年420聯(lián)考《申論》真題(山西卷)試卷(鄉(xiāng)鎮(zhèn)卷)及答案
- 醫(yī)院投訴糾紛及處理記錄表
評(píng)論
0/150
提交評(píng)論