VC6.0MFC串口通信編寫(xiě)全過(guò)程_第1頁(yè)
VC6.0MFC串口通信編寫(xiě)全過(guò)程_第2頁(yè)
VC6.0MFC串口通信編寫(xiě)全過(guò)程_第3頁(yè)
VC6.0MFC串口通信編寫(xiě)全過(guò)程_第4頁(yè)
VC6.0MFC串口通信編寫(xiě)全過(guò)程_第5頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、其于MFC的串口調(diào)試助手編輯過(guò)程一、 新建打開(kāi)VC6.0 文件 新建 工程 MFC AppWiard(exe) 位置(選擇保存工程位置) 工程名稱(chēng)(輸入工程名XXXX) 確定 選擇基本對(duì)話框 下一步 下一步 下一步 選擇(CXXXXDlg) 完成 確定 在生成的基本對(duì)話框內(nèi)將不需要按鈕及提示框(自動(dòng)生成的“確定”“取消” 及提示框)刪除或修改使用,至此基本框架完成如下圖:此控件(標(biāo)志)是下面步驟添加進(jìn)來(lái)的串口控件二、 往生成的基本框架中添加控件1、因?yàn)榭丶斜砜騼?nèi)沒(méi)有串口通信用到的通信控件,所以要先添加到控件列表框內(nèi)再將控件添加到基本框內(nèi)使用,步驟如下:菜單欄 工程 添加到工程 Compone

2、nts and controls Registered ActiveX Controls 選擇“Microsoft Communications Control, version 6.0” Insert 確定 OK 關(guān)閉此子窗口完成添加操作標(biāo)志如上圖所示。基本框架2、將剛才添加添加到控件列表框內(nèi)的串口控件添加到基本框架內(nèi) 點(diǎn)擊控件列表框內(nèi)的串口控件,此時(shí)光標(biāo)變?yōu)椤笆毙危诨究蚣軆?nèi)隨意劃取一矩形區(qū)域,即可以添加串口控件,不需要修改此控件的大小及位置,因?yàn)槌叹幾g運(yùn)行后此控件是看不到的,步驟結(jié)果如下圖:3、繼續(xù)往基本框架內(nèi)添加用于編輯發(fā)送數(shù)據(jù)的輸入編輯框及輸出編輯框,同理選擇控件列表框內(nèi)的“編輯

3、框控件”,以相同的操作即可添加兩個(gè)編輯窗口及一個(gè)按紐控件如下圖所示:選擇其中任意一個(gè)作為輸入編輯框及輸出編輯框這兩個(gè)窗口需要修改大小及位置,因?yàn)槌绦蜻\(yùn)行后將會(huì)顯示而串口通信控件則不顯示,上圖是運(yùn)行后的效果。4、對(duì)以上四個(gè)控件編程步驟如下:a、右擊串口通信控件 建立類(lèi)向?qū)?Member variables Control IDS中選擇IDC_MSCOMM1 add variable Member variable name中輸入控件變量名m_ctrlComm(變量名可以隨意選取,但程序中應(yīng)與所取變量名一致) OK 確定b、右擊編輯框、屬性、常規(guī)、ID:中輸入ID號(hào),此編輯框用于接收顯示數(shù)據(jù)的其I

4、D號(hào)為IDC_EDIT_RXDATA(可以隨意選取,但程序中應(yīng)與所取ID號(hào)一致),再在此窗口的樣式中勾選”多行”,同時(shí)將“自動(dòng)水平滾動(dòng)(T)”勾選去掉,再勾選“垂直滾動(dòng)(V)”,此勾選操作是用于垂直多行顯示的,按回車(chē)后即可輸入;同理右擊另一編輯框輸入ID號(hào)為IDC_EDIT_TXDATA此編輯框用于編輯發(fā)送數(shù)據(jù)的,同樣也選上用于垂直多行顯示,發(fā)送框可以不用垂直多行顯示;再為按鈕控件添加ID號(hào),為IDC_BUTTON_MANUALSEND,并將標(biāo)題中的“Button1”改為“發(fā)送”,功能是按一次就把發(fā)送編輯框中的內(nèi)容發(fā)送一次。C、為以上兩個(gè)編輯框添加變量,與串口通信控件一樣添加,為IDC_EDI

5、T_RXDATA添加CString型變量m_strRXData ;為IDC_EDIT_TXDATA添加CString型變量m_strTXData。說(shuō)明: m_strRXData和m_strTXData分別用來(lái)放入接收和發(fā)送的字符數(shù)據(jù)。D、添加串口事件消息處理函數(shù)OnComm() 打開(kāi)ClassWizard>Message Maps,選擇IDC_MSCOMM1,雙擊消息OnComm,將彈出的對(duì)話框中將函數(shù)名改為OnComm,(好記而已)OK。 這個(gè)函數(shù)是用來(lái)處理串口消息事件的,如每當(dāng)串口接收到數(shù)據(jù),就會(huì)產(chǎn)生一個(gè)串口接收數(shù)據(jù)緩沖區(qū)中有字符的消息事件,我們剛才添加的函數(shù)就會(huì)執(zhí)行,我們?cè)贠nCo

6、mm()函數(shù)加入相應(yīng)的處理代碼就能實(shí)現(xiàn)自已想要的功能了。在函數(shù)中加入如下代碼:提示1:此句以下才是我們要添加的語(yǔ)句代碼段1:void CScommTestDlg:OnComm() / TODO: Add your control notification handler code hereVARIANT variant_inp;/定義一個(gè)VARIANT類(lèi)對(duì)象COleSafeArray safearray_inp;/定義一個(gè)COleSafeArray對(duì)象LONG len,k;BYTE rxdata2048;/設(shè)置BYTE數(shù)組 AN 8intterthat is not signed.CStrin

7、g strtemp;if (m_ctrlComm.GetCommEvent()=2)/事件值為2表示接收緩沖區(qū)內(nèi)有數(shù)據(jù)/以下你可以根據(jù)自己的通信協(xié)議加入處理代碼variant_inp=m_ctrlComm.GetInput();/讀緩沖區(qū)safearray_inp=variant_inp;/VARIANT型變量轉(zhuǎn)換為ColeSafeArray型變量len=safearray_inp.GetOneDimSize();for(k=0;k<len;k+)safearray_inp.GetElement(&k,rxdata+k);/轉(zhuǎn)換為BYTE型數(shù)組提示2:此三句是下面用于是否是十六進(jìn)

8、制發(fā)送的,暫時(shí)可以不用理會(huì)for(k=0;k<len;k+)/將數(shù)組轉(zhuǎn)換為Cstring型變量BYTE bt=*(char*)(rxdata+k);/if(m_ctrlHexSend.GetCheck()/如果是HEX顯示則轉(zhuǎn)為16進(jìn)制/strtemp.Format("%02x ",bt);/將16進(jìn)制數(shù)送入臨時(shí)變量strtemp存放/elsestrtemp.Format("%c",bt);/將字符送入臨時(shí)變量strtemp存放m_strRXData+=strtemp;/加入接收編輯框?qū)?yīng)字符串UpdateData(FALSE);/更新編輯框內(nèi)容(

9、主要是接收編輯框中的)到目前為止還不能在接收編輯框中看到數(shù)據(jù),因?yàn)槲覀冞€沒(méi)有打開(kāi)串口,但運(yùn)行程序不應(yīng)該有任何錯(cuò)誤,不然,你肯定哪兒沒(méi)看仔細(xì),因?yàn)槲沂谴蜷_(kāi)VC6對(duì)照著做一步寫(xiě)一行的,運(yùn)行試試。沒(méi)錯(cuò)吧?那么做下一步:E、打開(kāi)串口和設(shè)置串口參數(shù)  你可以在你需要的時(shí)候打開(kāi)串口,例如在程序中做一個(gè)開(kāi)始按鈕,在該按鈕的處理函數(shù)中打開(kāi)串口?,F(xiàn)在我們?cè)谥鲗?duì)話框的CSCommTestDlg:OnInitDialog()打開(kāi)串口,加入如下代碼:代碼段2:BOOL CSCommTestDlg:OnInitDialog()CDialog:OnInitDialog();/ Add "About.&

10、quot; menu item to system menu./ IDM_ABOUTBOX must be in the system command range.ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL)CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMen

11、u.IsEmpty()pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);提示3:此句以下才是我們要添加的語(yǔ)句/ Set the icon for this dialog. The framework does this automatically/ when the application's main window is not a dialog提示4:此5句是我們下面要用到的暫時(shí)可以不用理會(huì)SetIcon(m_hIcon, TRUE

12、);/ Set big iconSetIcon(m_hIcon, FALSE);/ Set small icon/ TODO: Add extra initialization here/m_ComboBox.SetCurSel(0);/打開(kāi)軟件時(shí)串口選擇框默認(rèn)顯示COM1/m_BaudRate_M.SetCurSel(0);/打開(kāi)軟件時(shí)波特率選擇框默認(rèn)顯示9600/m_Date_Select_M.SetCurSel(0);/打開(kāi)軟件時(shí)數(shù)據(jù)位選擇框默認(rèn)顯示8/m_StopBit_M.SetCurSel(0);/打開(kāi)軟件時(shí)停止位選擇框默認(rèn)顯示1/m_ParityCheck_M.SetCurSel

13、(0);/打開(kāi)軟件時(shí)奇偶校驗(yàn)選擇框默認(rèn)顯示無(wú)校驗(yàn)N/下面if語(yǔ)句用于打開(kāi)默認(rèn)串口/*/if(m_ctrlComm.GetPortOpen()m_ctrlComm.SetPortOpen(FALSE);/關(guān)閉串口m_ctrlComm.SetCommPort(1);/打開(kāi)軟件時(shí)默認(rèn)使用COM1串口if(!m_ctrlComm.GetPortOpen()m_ctrlComm.SetPortOpen(TRUE);/打開(kāi)串口elseAfxMessageBox("cannot open serial port");/*/m_ctrlComm.SetSettings("9600

14、,n,8,1");/打開(kāi)軟件時(shí)端口設(shè)置默認(rèn)為波特率9600,無(wú)校驗(yàn)位,8位數(shù)據(jù),1位停止位m_ctrlComm.SetInputMode(1); /1:表示以二進(jìn)制方式檢取數(shù)據(jù)m_ctrlComm.SetRThreshold(1); /參數(shù)1表示每當(dāng)串口接收緩沖區(qū)中有多于或等于1個(gè)字符時(shí)將引發(fā)一個(gè)接收數(shù)據(jù)的OnComm事件m_ctrlComm.SetInputLen(0); /設(shè)置當(dāng)前接收區(qū)數(shù)據(jù)長(zhǎng)度為0m_ctrlComm.GetInput();/先預(yù)讀緩沖區(qū)以清除殘留數(shù)據(jù)return TRUE; / return TRUE unless you set the focus to a

15、 controlF、發(fā)送數(shù)據(jù),先為發(fā)送按鈕添加一個(gè)單擊消息即BN_CLICKED處理函數(shù),打開(kāi)ClassWizard>Message Maps,選擇IDC_BUTTON_MANUALSEND,雙擊BN_CLICKED添加OnButtonManualsend()函數(shù),并在函數(shù)中添加如下代碼:代碼段3:void CSCommTestDlg:OnButtonManualsend() / TODO: Add your control notification handler code hereUpdateData(TRUE); /讀取編輯框內(nèi)容m_ctrlComm.SetOutput(COleV

16、ariant(m_strTXData);/發(fā)送數(shù)據(jù)此時(shí)運(yùn)行程序,在發(fā)送編輯框中隨意輸入數(shù),單擊發(fā)送按鈕,若出錯(cuò)則修改后再測(cè)試,直到成功再進(jìn)行以下操作。5、添加兩個(gè)“組框”或“靜態(tài)文本”控件,調(diào)整位置及大小,在標(biāo)師處輸入提示文字,這兩個(gè)控件不用編程,效果如下圖:6、添加5個(gè)“靜態(tài)文本”控件并由屬性修改其標(biāo)題,均不用編程,效果如下圖:7、添加5個(gè)“組框”控件,效果如下圖:逐一對(duì)各個(gè)組框?qū)傩跃庉嬋缦拢捍谔?hào):常規(guī) ID:IDC_COMBO_CommSelect 數(shù)據(jù) 輸入列表框項(xiàng)目(N):COM1、COM2、COM3、COM4、COM5、COM6、COM7、COM8、COM9(注意每輸入一個(gè)數(shù)據(jù)選項(xiàng)

17、以Ctrl+Enter回車(chē)后再輸入下一個(gè)數(shù)據(jù)選項(xiàng))樣式 將“分類(lèi)勾選去掉”進(jìn)入類(lèi)向?qū)砑幼兞?,為IDC_COMBO_CommSelect添加一個(gè)value類(lèi)int型變量m_Index,點(diǎn)擊OK后,再添加一個(gè)Control類(lèi)CComboBox型變量m_ComboBox點(diǎn)擊OK最后“確定”波特率:常規(guī) ID:IDC_COMBO_BaudRate_Select數(shù)據(jù) 輸入列表框項(xiàng)目(N):9600、14400、19200、38400、56000、57600、115200、128000、256000樣式 將“分類(lèi)勾選去掉”進(jìn)入類(lèi)向?qū)砑幼兞?,為IDC_COMBO_BaudRate_Select添加一個(gè)v

18、alue類(lèi)int型變量 m_ BaudRate點(diǎn)擊OK后,再添加一個(gè)Control類(lèi)CComboBox型變量m_ BaudRate_M點(diǎn)擊OK最后“確定”數(shù)據(jù)位:常規(guī) ID:IDC_COMBO_Date_Select數(shù)據(jù) 輸入列表框項(xiàng)目(N):8、7、6、5、4樣式 將“分類(lèi)勾選去掉”進(jìn)入類(lèi)向?qū)砑幼兞?,為IDC_COMBO_Date_Select添加一個(gè)value類(lèi)int型變量 m_Date_Select點(diǎn)擊OK后,再添加一個(gè)Control類(lèi)CComboBox型變量m_Date_Select _M點(diǎn)擊OK最后“確定”停止位:常規(guī) ID:IDC_COMBO_StopBit數(shù)據(jù) 輸入列表框項(xiàng)目(

19、N):1、2樣式 將“分類(lèi)勾選去掉”進(jìn)入類(lèi)向?qū)砑幼兞?,為IDC_COMBO_StopBit添加一個(gè)value類(lèi)int型變量 m_StopBit點(diǎn)擊OK后,再添加一個(gè)Control類(lèi)CComboBox型變量m_StopBit_M點(diǎn)擊OK最后“確定”奇偶校驗(yàn)位:常規(guī) ID:IDC_COMBO_ParityCheck數(shù)據(jù) 輸入列表框項(xiàng)目(N):N、O、E、樣式 將“分類(lèi)勾選去掉”進(jìn)入類(lèi)向?qū)砑幼兞?,為IDC_COMBO_ParityCheck添加一個(gè)value類(lèi)int型變量 m_ParityCheck點(diǎn)擊OK后,再添加一個(gè)Control類(lèi)CComboBox型變量m_ParityCheck_M點(diǎn)擊O

20、K最后“確定”說(shuō)明:以上數(shù)據(jù)配置添加的Control類(lèi)CComboBox型變量可能用不到,但value類(lèi)必須為int型8、為各個(gè)列表框添加處理函數(shù):A、在建立類(lèi)向?qū)е蠱essage Maps ,object IDs中選中IDC_COMBO_CommSelect再在Messages中選中CBN_SELCHANG雙擊后單擊OK,再在Member funtions中雙擊剛才生成的函數(shù)進(jìn)入程序編輯頁(yè)面,添加程序代碼如下:代碼段4:void CSCommTestDlg:OnSelchangeCOMBOCommSelect() / TODO: Add your control notification h

21、andler code herem_Index=(CComboBox*)GetDlgItem(IDC_COMBO_CommSelect)->GetCurSel();/當(dāng)前選中的行(CComboBox*)GetDlgItem(IDC_COMBO_CommSelect)->SetCurSel(m_Index);/設(shè)置當(dāng)前選中的行的內(nèi)容為顯示的內(nèi)容if(m_ctrlComm.GetPortOpen()/當(dāng)要改變時(shí)則要先關(guān)閉串口才可以用按鍵進(jìn)行打開(kāi),所以先判斷當(dāng)前串口是否打開(kāi)提示5:下面添加串口打開(kāi)或關(guān)閉按鈕后將用到此將用到此判斷及以下語(yǔ)句/如果是打開(kāi)的則先關(guān)閉m_ctrlComm.Set

22、PortOpen(FALSE);/關(guān)閉串口SetDlgItemText(IDC_BUTTON1,"打開(kāi)串口");/將打開(kāi)或關(guān)才按鈕改為"打開(kāi)串口"顯示狀態(tài)B、同理為IDC_COMBO_BaudRate_Select添加處理函數(shù)程序代碼如下:代碼段5:void CSCommTestDlg:OnSelchangeCOMBOBaudRateSelect() / TODO: Add your control notification handler code hereUpdateData(true);m_BaudRate=(CComboBox*)GetDlgIt

23、em(IDC_COMBO_BaudRate_Select)->GetCurSel();/當(dāng)前選中的行/*/根據(jù)當(dāng)前選中的值進(jìn)行波特率設(shè)置/*/switch(m_BaudRate)case 1: m_ctrlComm.SetSettings("14400,");break;case 2: m_ctrlComm.SetSettings("19200,");break;case 3: m_ctrlComm.SetSettings("38400,");break;case 4: m_ctrlComm.SetSettings("

24、56000,");break;case 5: m_ctrlComm.SetSettings("57600,");break;case 6: m_ctrlComm.SetSettings("115200,");break;case 7: m_ctrlComm.SetSettings("128000,");break;case 8: m_ctrlComm.SetSettings("256000,");break;default:m_ctrlComm.SetSettings("9600,")

25、;break;/*/UpdateData(false);C、同理為IDC_COMBO_Date_Select添加處理函數(shù)程序代碼如下:代碼段6:void CSCommTestDlg:OnSelchangeCOMBODateSelect() / TODO: Add your control notification handler code hereUpdateData(true);m_Date_Select=(CComboBox*)GetDlgItem(IDC_COMBO_Date_Select)->GetCurSel();/當(dāng)前選中的行/*/*/switch(m_Date_Select

26、)case 1: m_ctrlComm.SetSettings(",7,");break;case 2: m_ctrlComm.SetSettings(",6,");break;case 3: m_ctrlComm.SetSettings(",5,");break;case 4: m_ctrlComm.SetSettings(",4,");break;default:m_ctrlComm.SetSettings(",8,");break;/*/UpdateData(false);D、同理為IDC

27、_COMBO_StopBit添加處理函數(shù)程序代碼如下:代碼段6:void CSCommTestDlg:OnSelchangeCOMBOStopBit() / TODO: Add your control notification handler code hereUpdateData(true);m_StopBit=(CComboBox*)GetDlgItem(IDC_COMBO_StopBit)->GetCurSel();/當(dāng)前選中的行/*/*/switch(m_StopBit)case 1: m_ctrlComm.SetSettings(",2");break;d

28、efault:m_ctrlComm.SetSettings(",1");break;/*/UpdateData(false);E、同理為IDC_COMBO_ParityCheck添加處理函數(shù)程序代碼如下:代碼段7:void CSCommTestDlg:OnSelchangeCOMBOParityCheck() / TODO: Add your control notification handler code hereUpdateData(true);m_ParityCheck=(CComboBox*)GetDlgItem(IDC_COMBO_ParityCheck)-&g

29、t;GetCurSel();/當(dāng)前選中的行/*/*/switch(m_ParityCheck)case 1: m_ctrlComm.SetSettings(",O,");break;case 2: m_ctrlComm.SetSettings(",O,");break;default:m_ctrlComm.SetSettings(",N,");break;/*/UpdateData(false);此時(shí)應(yīng)將代碼段2:提示4中所指的那5個(gè)語(yǔ)句前的“/”刪除9、串口添加打開(kāi)或關(guān)閉按鈕以同樣的方式添加按鈕,并將標(biāo)題修改為“關(guān)閉串口”字樣,為此

30、按鈕添加處理函數(shù)程序代碼如下:代碼段8:void CSCommTestDlg:OnButton1Start() /檢查是否改變默認(rèn)的串口值,沒(méi)有改變m_Index的值是0的,否則則不為0if(m_Index<0)/串口的默認(rèn)值沒(méi)有改變switch(m_ctrlComm.GetPortOpen()/點(diǎn)擊打開(kāi)或關(guān)閉串口按鍵時(shí),根據(jù)當(dāng)前串口是否打開(kāi)進(jìn)行相應(yīng)操作case 1:/*關(guān)閉串口前先將自動(dòng)發(fā)送功能關(guān)閉*/SetDlgItemText(IDC_BUTTON_AutoSend,"自動(dòng)發(fā)送");/更改按鍵指示KillTimer(1);/*/當(dāng)前串口是打開(kāi)的則進(jìn)行關(guān)串口操作m

31、_ctrlComm.SetPortOpen(FALSE);/關(guān)閉串口SetDlgItemText(IDC_BUTTON1,"打開(kāi)串口");/更改按鍵指示UpdateData(FALSE);/更新按鍵狀態(tài)break;case 0:/當(dāng)前串口是關(guān)閉的則進(jìn)行開(kāi)串口操作m_ctrlComm.SetCommPort(1);/如果要打開(kāi)串口則應(yīng)先選擇哪個(gè)串口m_ctrlComm.SetPortOpen(TRUE);/打開(kāi)串口SetDlgItemText(IDC_BUTTON1,"關(guān)閉串口");/更改按鍵指示UpdateData(FALSE);break;defaul

32、t : AfxMessageBox("cannot open or close serial port");else/串口的默認(rèn)值有改變switch(m_ctrlComm.GetPortOpen()/點(diǎn)擊打開(kāi)或關(guān)閉串口按鍵時(shí),根據(jù)當(dāng)前串口是否打開(kāi)進(jìn)行相應(yīng)操作case 0:/當(dāng)前串口是關(guān)閉的則進(jìn)行開(kāi)串口操作m_ctrlComm.SetCommPort(m_Index+1);/如果要打開(kāi)串口則應(yīng)先選擇哪個(gè)串口m_ctrlComm.SetPortOpen(TRUE);/打開(kāi)串口SetDlgItemText(IDC_BUTTON1,"關(guān)閉串口");/更改按鍵指示

33、UpdateData(FALSE);/更新按鍵狀態(tài)break;case 1: /*關(guān)閉串口前先將自動(dòng)發(fā)送功能關(guān)閉*/SetDlgItemText(IDC_BUTTON_AutoSend,"自動(dòng)發(fā)送");/更改按鍵指示KillTimer(1);/*/當(dāng)前串口是打開(kāi)的則進(jìn)行關(guān)串口操作m_ctrlComm.SetPortOpen(FALSE);SetDlgItemText(IDC_BUTTON1,"打開(kāi)串口");UpdateData(FALSE);break;default : AfxMessageBox("cannot open serial po

34、rt");if(m_Index<0)(CComboBox*)GetDlgItem(IDC_COMBO_CommSelect)->SetCurSel(0);/如果沒(méi)有另外進(jìn)行串口選擇則顯示COM1if(m_BaudRate<0)(CComboBox*)GetDlgItem(IDC_COMBO_BaudRate_Select)->SetCurSel(0);/如果沒(méi)有另外進(jìn)行波特率選擇則顯示9600if(m_Date_Select<0)(CComboBox*)GetDlgItem(IDC_COMBO_Date_Select)->SetCurSel(0);

35、/如果沒(méi)有另外進(jìn)行數(shù)據(jù)位選擇則顯示8if(m_StopBit<0)(CComboBox*)GetDlgItem(IDC_COMBO_StopBit)->SetCurSel(0);/如果沒(méi)有另外進(jìn)行停止位選擇則顯示1if(m_ParityCheck<0)(CComboBox*)GetDlgItem(IDC_COMBO_ParityCheck)->SetCurSel(0);/如果沒(méi)有另外進(jìn)行校驗(yàn)位選擇則顯示沒(méi)有校驗(yàn)位N10、添加自動(dòng)發(fā)送功能:A、添加一個(gè)“編輯框”控件,此控件用于獲取自動(dòng)發(fā)送的時(shí)間間隔的,修改其ID為IDC_EDIT_Timer,為其添加一個(gè)value類(lèi)UI

36、NT型變量m_TimerB、添加一個(gè)“按鈕”控件,修改其ID為IDC_BUTTON_AutoSend修改其標(biāo)題為“自動(dòng)發(fā)送”C、添加一個(gè)“按鈕”控件,修改其ID為IDC_BUTTON_StopAutoSend修改其標(biāo)題為“停止自動(dòng)發(fā)送”D、為“自動(dòng)發(fā)送”按鈕添加BN_CLICKED處理函數(shù),程序代碼如下:代碼段9:void CSCommTestDlg:OnBUTTONAutoSend() UpdateData(TRUE);if(m_Timer<=0)/判斷是否設(shè)置自動(dòng)發(fā)送時(shí)間間隔AfxMessageBox("請(qǐng)?jiān)O(shè)置自動(dòng)發(fā)送時(shí)間間隔");else if(!m_ctrlC

37、omm.GetPortOpen()/判斷是否打開(kāi)串口AfxMessageBox("請(qǐng)打開(kāi)串口");elseSetDlgItemText(IDC_BUTTON_AutoSend,"自動(dòng)發(fā)送.");/更改按鍵指示SetTimer(1,m_Timer,NULL);E、為“停止自動(dòng)發(fā)送”按鈕添加BN_CLICKED處理函數(shù),程序代碼如下:代碼段9:void CSCommTestDlg:OnBUTTONStopAutoSend() / TODO: Add your control notification handler code hereSetDlgItemTe

38、xt(IDC_BUTTON_AutoSend,"自動(dòng)發(fā)送");/更改按鍵指示KillTimer(1);F、因?yàn)橐O(shè)置自發(fā)送,所以要添加一個(gè)Windows定時(shí)函數(shù),步驟如下:進(jìn)入類(lèi)向?qū)В琈essage Maps中的Object IDs中選擇CScommTestDlg再選擇Messages中的WM_TIMER,進(jìn)入TIMER函數(shù)后,添加如下程序代碼如下:代碼段10:void CSCommTestDlg:OnTimer(UINT nIDEvent) / TODO: Add your message handler code here and/or call defaultUpda

39、teData(TRUE);if(m_ctrlHexSend.GetCheck()CByteArray hexdate;int len=String2Hex(m_strTXData,hexdate);m_ctrlComm.SetOutput(COleVariant(hexdate);elsem_ctrlComm.SetOutput(COleVariant(m_strTXData);CDialog:OnTimer(nIDEvent);11、十六進(jìn)制數(shù)據(jù)發(fā)送及接收顯示添加一個(gè)“復(fù)選框”控件,修改ID為IDC_CHECK_HexSend,標(biāo)題為“HEX發(fā)送”,進(jìn)入類(lèi)向?qū)砑觕ontrol類(lèi)CButto

40、n型變量,變量名為m_ctrlHexSend,然后為為SCommTestDlg類(lèi)添加以下兩個(gè)PUBLIC成員函數(shù),在Class view中右擊CCommTestDlg選中Add Member Function 然后在函數(shù)類(lèi)型中輸入“int”,在函數(shù)描述中輸入“String2Hex(CString str, CByteArray &senddate)”然后確定。編輯函數(shù)體如下:代碼段11:int CSCommTestDlg:String2Hex(CString str, CByteArray &senddate)int hexdate,lowhexdate;int hexdate

41、len=0;int len=str.GetLength();senddate.SetSize(len/2);for(int i=0;i<len;)char lstr,hstr=stri;if(hstr=' ')i+;continue;i+;if(i>=len)break;lstr=stri;hexdate=ConvertHexChar(hstr);lowhexdate=ConvertHexChar(lstr);if(hexdate=16)|(lowhexdate=16)break;elsehexdate=hexdate*16+lowhexdate;i+;sendda

42、tehexdatelen=(char)hexdate;hexdatelen+;senddate.SetSize(hexdatelen);return hexdatelen;再添加別一個(gè)CCommTestDlg添加兩個(gè)成員函數(shù),在函數(shù)類(lèi)型中輸入“char”,在函數(shù)描述中輸入“ConvertHexChar(char ch)”然后確定。編輯函數(shù)體如下:代碼段12:char CSCommTestDlg:ConvertHexChar(char ch)if(ch>='0')&&(ch<='9')return ch-0x30;else if(ch>='A&

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論