




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(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ì)話框的工程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類文件
將類文件SerialPort.hSerialPort.cpp復(fù)制到工程所在文件夾中(選擇改進(jìn)
后的類),然后單擊VC6.0菜單Projrct->AddtoProjrct->Files…,再在開(kāi)啟的文件選擇對(duì)話框中選擇SerialPort.h和SerialPort.cpp,點(diǎn)擊OK,就把類文件參與當(dāng)前工程,并在SCOMMDlg.h中參與頭文件,#include\,通過(guò)上述步驟就在當(dāng)前工程中參與了CSeraiPort類。4、完成串口消息處理函數(shù)OnCommunicatiom
在CserailPort類中有多個(gè)串口事件可以響應(yīng)。在一般串口編程中,只需要處理WM_COMM_RXCHAR消息就可以了,該類所有的消息均需要人工添加消息處理函數(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ì)話框模板,在工程中插入了串口操作類CserailPort類。
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è)輔助線程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ù)在主窗口即將銷毀時(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類添加兩個(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)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廉政承諾書(shū)內(nèi)容
- 拓寬項(xiàng)目管理考試視野的學(xué)習(xí)方式試題及答案
- 金岳霖課題申報(bào)書(shū)
- 課題預(yù)算申報(bào)書(shū)范本
- 證券從業(yè)資格證特殊證券知識(shí)試題及答案
- 課題如何立項(xiàng)申報(bào)書(shū)
- 2025年中考化學(xué)第一輪復(fù)習(xí)訓(xùn)練題 專題06 常見(jiàn)的酸和堿(解析版)
- 土建科技課題申報(bào)書(shū)
- 人教版七年級(jí)音樂(lè)下冊(cè)(簡(jiǎn)譜)第5單元《桑塔·露琪亞》教學(xué)設(shè)計(jì)
- 2025年中國(guó)重載荷限位開(kāi)關(guān)市場(chǎng)調(diào)查研究報(bào)告
- GB/T 14713-2009旋切機(jī)通用技術(shù)條件
- 低成本自動(dòng)化的開(kāi)展與案例課件
- 不予受理反訴民事上訴狀(標(biāo)準(zhǔn)版)
- 高中英語(yǔ)語(yǔ)法之虛擬語(yǔ)氣(課件3份)
- 粵教版2022年小學(xué)六年級(jí)科學(xué)下冊(cè)期中測(cè)試試卷及答案2022-2023
- 北師大六年級(jí)下冊(cè)數(shù)學(xué)第三單元《圖形的運(yùn)動(dòng)》教學(xué)設(shè)計(jì)
- 國(guó)際石油合作主要合同模式課件
- 橋梁加固改造工程施工質(zhì)量管理體系與措施
- 第二十六章慢性腎小球腎炎演示文稿
- 設(shè)施設(shè)備維修記錄表
- 自動(dòng)化設(shè)備檢修規(guī)程
評(píng)論
0/150
提交評(píng)論