




版權(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 AppWiardexe 位置選擇保存 工程位置一工程名稱輸入工程名XXXX 確定 一選擇根本對(duì)話框 一下一步 一下一步下一步選擇CXXXXDlg= 完成 一確定在生成的基 本對(duì)話框內(nèi)將不需要按鈕及提示框自動(dòng)生成的“確定 “取消 及提示框刪除或修 改使用,至此根本框架完成如下列圖:曰 SmmmT,!5 tM* _| Dialog* _| Icon* _| Siring Table* _| Version:兇件控TODO:在這里巡置泡話段制.I1小根本框 架同皿耳膾日聞的哨 亞等三愷岫nG驟添加進(jìn) 來(lái)的串口 控件可
2、組建調(diào)試h在文件1中查找在文件2中查找在結(jié)果X SQL Wb.MLnE f-<|J人|辟襄I舁品|囹EB |輻1回用圖|蜀耳就緒再 、往生成的根本框架中添加控件1、由于控件列表框內(nèi)沒(méi)有串口通信用到的通信控件,所以要先添加到控件列表框內(nèi)再 將控件添加到根本框內(nèi)使用,步驟如下:菜單欄一工程一添加到工程一 Components and controls RegisteredActiveX Controls -選擇"Microsoft Communications Control, version 6.0 " - Insert - 確定一OK 關(guān)閉此子窗口完成添加操作標(biāo)志如上
3、圖所示.2、將剛剛添加添加到控件列表框內(nèi)的串口控件添加到根本框架內(nèi)點(diǎn)擊控件列表框內(nèi)的串口控件,此時(shí)光標(biāo)變?yōu)椤笆?在根本框架內(nèi)隨意劃取一矩形區(qū)域,即可以添加串口控件,不需要修改此控件的大小及位置,由于程編譯運(yùn)行后此控件是看不到的,步驟結(jié)果如下列圖:3、繼續(xù)往根本框架內(nèi)添加用于編輯發(fā)送數(shù)據(jù)的輸入編輯框及輸出編輯框,同理選擇控 件列表框內(nèi)的“編輯框控件,以相同的操作即可添加兩個(gè)編輯窗口及一個(gè)按紐控件如卜圖所示:選擇其中任 意一個(gè)作為 輸入編輯框 及輸出編輯這兩個(gè)窗口需要修改大小及位置,由于程序運(yùn)行后將會(huì)顯示而串口通信控件那么不顯示, 上圖是運(yùn)行后的效果.4、對(duì)以上四個(gè)控件編程步驟如下:a、右擊串通
4、信控件一建立類向?qū)б籑ember variables - Control IDS 中選擇 IDC_MSCOMM1 add variable -M Member variable name 中輸入控件變量名 m_ctrlComm 變量名可以隨意選取,但程序中應(yīng)與所取變量名一致一 OL確定b、右擊編輯框、屬性、常規(guī)、 ID:中輸入ID號(hào),此編輯框用于接U顯示數(shù)據(jù)的其ID號(hào)為IDC_EDIT_RXDATA (可以隨意選取,但程序中應(yīng)與所取ID號(hào)一致),再在此窗口的樣式中勾選“多行,同時(shí)將“自動(dòng)水平滾動(dòng)(T)勾選去掉,再勾選“垂直滾動(dòng)(V),此勾選操作是用于垂直多行顯示的,按回車后即可輸入;同理右擊另
5、一編輯框輸入ID號(hào)為IDC_EDIT_TXDATA此編輯框用于編輯發(fā)送數(shù)據(jù)的,同樣也選上用于垂直多行顯示,發(fā)送框可以不用垂直多行顯示;再為按鈕控件添加ID號(hào),為 IDC_BUTTON_MANUALSEND ,并將標(biāo)題中的“ Buttonl 改為“發(fā)送,功能是按一 次就把發(fā)送編輯框中的內(nèi)容發(fā)送一次.C、為以上兩個(gè)編輯框添加變量,與串口通信控件一樣添加,為 IDC_EDIT_RXDATA添 力口 CString 型變量 m_strRXData ;為 IDC_EDIT_TXDATA 添力口 CString 型變量 m_strTXData .說(shuō)明:m_strRXData和m_strTXData分別用來(lái)
6、放入接收和發(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è)贠nComm()函數(shù)參加相應(yīng)的處理代碼就能實(shí)現(xiàn)自已想要的功能了.在函數(shù)中參加如下代碼:提示1:此句以下才是我們要添加 的語(yǔ)句J代碼段1:void CScommTestDlg:OnComm() / TODO:
7、 Add your control notification handler code hereVARIANT variant_inp;/ 定義一個(gè) VARIANT 類對(duì)象COleSafeArray safearray_inp; 定義一個(gè) COleSafeArray 對(duì)象LONG len,k;BYTE rxdata2048;/ 設(shè)置 BYTE 數(shù)組 AN 8 intterthat is not signed.CString strtemp;if (m_ctrlComm.GetCommEvent()=2) 事件值為2表示接收緩沖區(qū)內(nèi)有數(shù)據(jù) /以下你可以根據(jù)自己的通信協(xié)議參加處理代碼variant
8、_inp=m_ctrlComm.GetInput(); 讀緩沖區(qū)safearray_inp=variant_inp;/V ARIANT 型變量轉(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)制發(fā)送的,暫 時(shí)可以不用理會(huì)Ifor(k=0;k<len;k+)將數(shù)組轉(zhuǎn)換為 Cstring型變量 BYTE bt=*(char*)(rxdat
9、a+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)容(主要是接收編輯框中的)到目前為止還不能在接收編輯框中看到數(shù)據(jù),由于我們還沒(méi)有翻開(kāi)串口, 但運(yùn)行程序不應(yīng)該有任何錯(cuò)誤,
10、不然,你肯定哪兒沒(méi)看仔細(xì),由于我是翻開(kāi) VC6對(duì)照著做一步寫一 行的,運(yùn)行試試.沒(méi)錯(cuò)吧?那么做下一步:E、翻開(kāi)串口和設(shè)置串口參數(shù)你可以在你需要的時(shí)候翻開(kāi)串口,例如在程序中做一個(gè)開(kāi)始按鈕,在該按鈕的處理函數(shù)中翻開(kāi)串口.現(xiàn)在我們?cè)谥鲗?duì)話框的CSCommTestDlg:OnInitDialog() 翻開(kāi)串口,參加如下代碼:代碼段2:BOOL CSCommTestDlg:OnInitDialog()CDialog:OnInitDialog();/ Add "About." menu item to system menu./ IDM_ABOUTBOX must be in the
11、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 (!strAboutMenu.IsEmpty() pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu-&
12、gt;AppendMenu(MF_STRING , IDM_ABOUTBOX, strAboutMenu);)/ Set the icon for this dialog. The framework does this automatically/ when the application's main window is not a dialogr a提示4:此5 1句是我們下 面要用到的 暫時(shí)可以不 用理會(huì) )SetIcon(m_hIcon, TRUE);SetIcon(m_hIcon, FALSE);/ TODO: Add extra initialization here/
13、Set big icon/ Set small icon提示3:此句以下才 : 是我們要添加的語(yǔ) 句/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(0);/翻開(kāi)軟件時(shí)奇偶校驗(yàn)選擇框默認(rèn)顯示無(wú)校驗(yàn)N/下面if語(yǔ)句用于翻開(kāi)默
14、認(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)串 口)else(AfxMessageBox("cannot open serial port");)/*/m_ctrlComm.SetSettings("9600,n,8,1");/翻開(kāi)軟件時(shí)端口設(shè)
15、置默認(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 control )F、發(fā)送數(shù)據(jù),先為發(fā)送按
16、鈕添加一個(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(COleVariant(m_st
17、rTXData);發(fā)送數(shù)據(jù))此時(shí)運(yùn)行程序,在發(fā)送編輯框中隨意輸入數(shù),單擊發(fā)送按鈕,假設(shè)出錯(cuò)那么修改后再測(cè)試, 直到成功再進(jìn)行以下操作.5、添加兩個(gè)“組框或“靜態(tài)文本控件,調(diào)整位置及大小,在標(biāo)師處輸入提示文字,這兩個(gè)控件不用編程,效果如下列圖:eat接收數(shù)據(jù)區(qū):發(fā)送數(shù)據(jù)輸入:6、添加5個(gè)“靜態(tài)文本控件并由屬性修改其標(biāo)題,均不用編程,效果如下列圖:接收數(shù)據(jù)區(qū):串口號(hào):波特率:骸據(jù)位:停止位:發(fā)送數(shù)據(jù)輸入:7、添加5個(gè)“組框控件,效果如下列圖:全 SCouTest逐一對(duì)各個(gè)組框?qū)傩跃庉嬋缦拢捍谔?hào):常規(guī) ID : IDC_COMBO_CommSelect數(shù)據(jù)輸入列表框工程 N: COM1、COM2、
18、COM3、COM4、COM5、COM6、COM7、COM8、COM9 注意每輸入一個(gè)數(shù)據(jù)選項(xiàng)以Ctrl+Enter回車后再輸入下一個(gè)數(shù)據(jù)選項(xiàng)樣式將“分類勾選去掉進(jìn)入類向?qū)砑幼兞?為 IDC_COMBO_CommSelect添加一個(gè) value類int型變量 m_Index,點(diǎn)擊 OK 后,再添加一個(gè) Control 類 CComboBox 型變量 m_ComboBox 點(diǎn) 擊OK最后“確定波特率:常規(guī) ID : IDC_COMBO_BaudRate_Select數(shù)據(jù)輸入列表中S工程N(yùn): 9600、14400、19200、38400、56000、57600、115200、 128000 、 2
19、56000樣式將“分類勾選去掉進(jìn)入類向?qū)砑幼兞?為 IDC_COMBO_BaudRate_Select 添加一個(gè) value類int型變量 m_ BaudRate 點(diǎn)擊 OK 后,再添加一個(gè) Control 類 CComboBox 型變量 m_ BaudRate_M 點(diǎn)擊OK最后“確定數(shù)據(jù)位:常規(guī) ID : IDC_COMBO_Date_Select數(shù)據(jù) 輸入列表中S工程N(yùn): 8、7、6、5、4樣式將“分類勾選去掉進(jìn)入類向?qū)砑幼兞?為 IDC_COMBO_Date_Select 添加一個(gè) value 類int型變量 m_Date_Select 點(diǎn)擊 OK 后,再添加一個(gè) Control 類
20、 CComboBox 型變量 m_Date_SelectM點(diǎn)擊OK最后“確定停止位:常規(guī) ID : IDC_COMBO_StopBit數(shù)據(jù)輸入列表中g(shù)工程(N): 1、2 樣式將“分類勾選去掉進(jìn)入類向?qū)砑?變量,為IDC_COMBO_StopBit 添 加一個(gè) value 類int型變量 m_StopBit 點(diǎn)擊 OK 后,再添加一個(gè) Control 類 CComboBox 型變量 m_StopBit_M 點(diǎn)擊 OK最后“確定奇偶校驗(yàn)位:常規(guī) ID : IDC_COMBO_ParityCheck數(shù)據(jù) 輸入列表中S工程(N): N、O、E、樣式將“分類勾選去掉進(jìn)入類向?qū)砑幼兞?為 IDC_C
21、OMBO_ParityCheck 添加一個(gè) value 類int型變量 m_ParityCheck 點(diǎn)擊 OK 后,再添加一個(gè) Control 類 CComboBox 型變量 m_ParityCheck_M 點(diǎn)擊 OK 最后“確定說(shuō)明:以上數(shù)據(jù)配置添加的Control類CComboBox型變量可能用不到,但value類必須為int型 8、為各個(gè)列表框添加處理函數(shù):A、在建立類向?qū)е?Message Maps , object IDs 中選中 IDC_COMBO_CommSelect 再 在Messages中選中CBN_SELCHANG雙擊后單擊 OK,再在 Member funtions 中雙
22、擊剛剛生 成的函數(shù)進(jìn)入程序編輯頁(yè)面,添加程序代碼如下: 代碼段4:void CSCommTestDlg:OnSelchangeCOMBOCommSelect()/ TODO: Add your control notification handler code herem_Index=(CComboBox*)GetDlgItem(IDC_COMBO_CommSelect)->GetCurSel();/ 當(dāng)前選 中而行 (CComboBox*)GetDlgItem(IDC_COMBO_CommSelect)->SetCurSel(m_Index);/ 設(shè)置當(dāng) 前選中的行的內(nèi)容為顯示的
23、內(nèi)容if(m_ctrlComm.GetPortOpen()當(dāng)要改變時(shí)那么要先關(guān)閉用口才可以用按鍵進(jìn)行翻開(kāi), 先判而當(dāng)前申是否翻開(kāi)/如果是翻開(kāi)的那么先關(guān)閉m_ctrlComm.SetPortOpen(FALSE);/慶閉用 口添加串口打開(kāi)或關(guān)閉按鈕后將用到此將用到此判斷及以下SetDlgItemText(IDC_BUTTON1,"翻開(kāi)用口 ")7/將翻開(kāi)或關(guān)才按鈕改為"翻開(kāi)用口 "顯示狀 態(tài)B、同理為IDC_COMBO_BaudRate_Select添加處理函數(shù)程序代碼如下:代碼段5:void CSCommTestDlg:OnSelchangeCOMBOB
24、audRateSelect() / TODO: Add your control notification handler code hereUpdateData(true);m_BaudRate=(CComboBox*)GetDlgItem(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.SetSet
25、tings("19200,");break;case 3: m_ctrlComm.SetSettings("38400,");break;case 4: m_ctrlComm.SetSettings("56000,");break;case 5: m_ctrlComm.SetSettings("57600,");break;case 6: m_ctrlComm.SetSettings("115200,");break;case 7: m_ctrlComm.SetSettings("12
26、8000,");break;case 8: m_ctrlComm.SetSettings("256000,");break;default:m_ctrlComm.SetSettings("9600,"); break;/*/UpdateData(false);C、同理為IDC_COMBO_Date_Select添加處理函數(shù)程序代碼如下:代碼段6:void CSCommTestDlg:OnSelchangeCOMBODateSelect() (/ TODO: Add your control notification handler code h
27、ereUpdateData(true);m_Date_Select=(CComboBox*)GetDlgItem(IDC_COMBO_Date_Select)->GetCurSel();士前選而的行/*/ /* */ switch(m_Date_Select)case 1: m_ctrlComm.SetSettings(",7,"); break;case 2: m_ctrlComm.SetSettings(",6,"); break;case 3: m_ctrlComm.SetSettings(",5,"); break;ca
28、se 4: m_ctrlComm.SetSettings(",4,"); break;default:m_ctrlComm.SetSettings(",8,"); break;/*UpdateData(false);D、同理為IDC_COMBO_StopBit添加處理函數(shù)程序代碼如下:代碼段6:void CSCommTestDlg:OnSelchangeCOMBOStopBit()(/ TODO: Add your control notification handler code hereUpdateData(true);m_StopBit=(CCom
29、boBox*)GetDlgItem(IDC_COMBO_StopBit)->GetCurSel(); 當(dāng)前選中 的行 /* */ /* */switch(m_StopBit) (.case 1: m_ctrlComm.SetSettings(",2");break;default:m_ctrlComm.SetSettings(",1");break;/*/UpdateData(false);E、同理為IDC_COMBO_ParityCheck添加處理函數(shù)程序代碼如下:代碼段7:void CSCommTestDlg:OnSelchangeCOMBOP
30、arityCheck()(/ TODO: Add your control notification handler code hereUpdateData(true);m_ParityCheck=(CComboBox*)GetDlgItem(IDC_COMBO_ParityCheck)->GetCurSel();/ 當(dāng)前選中的行 /*/ /* */switch(m_ParityCheck) (case 1: m_ctrlComm.SetSettings(",O,");break;case 2: m_ctrlComm.SetSettings(",O,&quo
31、t;);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)閉串口字樣,為此按鈕添加處理函 數(shù)程序代碼如下:代碼段8:void CSCommTestDlg:OnButton1Start()(/檢查是否改變默認(rèn)的串口值,沒(méi)有改變m_Index的值是0的,否那么那么不為0if(m_Index<0)/用口的默認(rèn)值沒(méi)有改變switch(m_ctrlComm.GetPo
32、rtOpen()/點(diǎn)擊翻開(kāi)或關(guān)閉串口按鍵時(shí),根據(jù)當(dāng)前串口 是否翻開(kāi)進(jìn)行相應(yīng)操作(1:case/*關(guān)閉用口前先將自動(dòng)發(fā)送功能關(guān)閉*SetDlgItemText(IDC_BUTTON_AutoSend,"自動(dòng)發(fā)送");更改按鍵指示 KillTimer(l);/*/當(dāng)前串口是翻開(kāi)的那么進(jìn)行關(guān)串口操作m_ctrlComm.SetPortOpen(FALSE);/慶閉用 口SetDlgItemText(IDC_BUTTON1,"翻開(kāi)串口 ");更改按鍵指示 UpdateData(FALSE);/使新按鍵狀態(tài) break;case 0:/生前串口是關(guān)閉的那么進(jìn)行開(kāi)審
33、口操作m_ctrlComm.SetCommPort(1);儂口果要翻開(kāi)用口那么應(yīng)先選擇哪個(gè)串口 m_ctrlComm.SetPortOpen(TRUE);/M開(kāi)串 口 SetDlgItemText(IDC_BUTTON1,"關(guān)閉串口 ");更改按鍵指示 UpdateData(FALSE);break;default : AfxMessageBox("cannot open or close serial port");else/用口的默認(rèn)值有改變switch(m_ctrlComm.GetPortOpen()/點(diǎn)擊翻開(kāi)或關(guān)閉串口按鍵時(shí),根據(jù)當(dāng)前串口是否 翻
34、開(kāi)進(jìn)行相應(yīng)操作case 0:/生前串口是關(guān)閉的那么進(jìn)行開(kāi)審口操作m_ctrlComm.SetCommPort(m_Index+1);/如果要翻開(kāi)用 口 那么應(yīng)先選擇哪 個(gè)串口m_ctrlComm.SetPortOpen(TRUE);/M開(kāi)串 口SetDlgItemText(IDC_BUTTON1,"關(guān)閉串口 ");更改按鍵指示UpdateData(FALSE);/使新按鍵狀態(tài) break;case 1: /*關(guān)閉用口前先將自動(dòng)發(fā)送功能關(guān)閉*/SetDlgItemText(IDC_BUTTON_AutoSend,"自動(dòng)發(fā)送");更改按鍵指示 KillTim
35、er(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 port");if(m_Index<0)(CComboBox*)GetDlgItem(IDC_COMBO_CommSelect)->SetCurSel(0); 如果沒(méi)有另外進(jìn)行串口選擇那么顯示COM1if(m_BaudRate
36、<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);/ 如果沒(méi)有另外進(jìn)行數(shù)據(jù)位選擇那么顯示8if(m_StopBit<0)(CComboBox*)GetDlgItem(IDC_COMBO_StopBit)->SetCurSel(0);/ 如果沒(méi)有另外進(jìn)行停止位選擇那么顯示1if
37、(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 類 UINT 型變量 m_TimerB、添加一個(gè)“按鈕控件,修改其 ID為IDC_BUTTON_AutoSend修改其標(biāo)題為“自動(dòng)發(fā)送C、添加一個(gè)“按鈕控件,修改其 ID為IDC_BUTTON_StopAutoSend修改其
38、標(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í)間問(wèn)隔AfxMessageBox("青設(shè)置自動(dòng)發(fā)送時(shí)間間隔");else if(!m_ctrlComm.GetPortOpen()/陰J 斷是否翻開(kāi)用 口AfxMessageBox("青翻開(kāi)串口 ); elseSetDlgItemText(IDC_BUTTON_AutoSend,“自動(dòng)發(fā)送);/更改按
39、鍵指示 SetTimer(1,m_Timer,NULL); E、為“停止自動(dòng)發(fā)送按鈕添加 BN_CLICKED處理函數(shù),程序代碼如下: 代碼段9:void CSCommTestDlg:OnBUTTONStopAutoSend()(/ TODO: Add your control notification handler code here SetDlgItemText(IDC_BUTTON_AutoSend,"自動(dòng)發(fā)送);更改按鍵指示 KillTimer(1);F、由于要設(shè)置自發(fā)送,所以要添加一個(gè) Windows定時(shí)函數(shù),步驟如下:進(jìn)入類向?qū)?Message Maps中的Object
40、 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 default UpdateData(TRUE);if(m_ctrlHexSend.GetCheck()( 一CByteArray hexdate;int len=String2Hex(m_strTXData,hexdate);m_ctrlComm.SetOu
41、tput(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) 入類向?qū)砑?control類 CButton型變量,變量名為 m_ctrlHexSend ,然后為為 SCommTestDlg 類添加以下兩個(gè) PUBLIC 成員函數(shù),在 Class view 中右擊 CCommTestDlg選中Add Member Functio
42、n-然后在函數(shù)類型中輸入“int,在 函數(shù)描述中輸入 “ String2Hex(CString str, CByteArray &senddate) 然后確定.編 輯函數(shù)體如下:代碼段11:int CSCommTestDlg二String2Hex(CString str, CByteArray &senddate)int hexdate,lowhexdate;int hexdatelen=0;int len=str.GetLength();senddate.SetSize(len/2);for(int i=0;i<len;) char lstr,hstr=stri; if
43、(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+;senddatehexdatelen=(char)hexdate;hexdatelen+;)senddate.SetSize(hexdatelen); return hexdatelen;)再添加別一個(gè)CCommTestDlg添加兩個(gè)成員函數(shù),在函數(shù)類型中輸入“ char,在函數(shù)描 述中輸入“ ConvertHexChar(char ch)然后確定.編輯函數(shù)體如下:代碼段12:char CSCommTestDlg:ConvertHexChar(char ch)(if(ch>='0')&&(ch<='9')(return ch-0x30;)else if(c
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 駱駝祥子人物性格分析教學(xué)教案:探究社會(huì)變遷與人性的掙扎
- 汽車租賃三方合同
- 農(nóng)作物種植技術(shù)手冊(cè)
- 圖表展示各類數(shù)據(jù)統(tǒng)計(jì)情況
- 小學(xué)生數(shù)學(xué)應(yīng)用題的作文分析與實(shí)踐指導(dǎo)
- 留置擔(dān)保合同協(xié)議書(shū)
- 文學(xué)佳作圍城中的人物形象解讀
- 智能交通大數(shù)據(jù)平臺(tái)開(kāi)發(fā)協(xié)議
- 企業(yè)戰(zhàn)略聯(lián)盟穩(wěn)定性評(píng)價(jià)與維護(hù)
- 產(chǎn)品推廣合作合同
- GB/T 13701-1992單標(biāo)準(zhǔn)氣體質(zhì)譜法鈾同位素分析
- FZ/T 24011-2019羊絨機(jī)織圍巾、披肩
- 【課件】2.1.1植物細(xì)胞工程的基本技術(shù)課件-2021-2022學(xué)年高二下學(xué)期生物人教版選擇性必修3
- 35kV集電線路直埋施工組織設(shè)計(jì)方案
- 客戶來(lái)訪登記表
- 日產(chǎn)新軒逸電子手冊(cè)cvt
- 大連市小升初手冊(cè)
- 醫(yī)療垃圾管理及手衛(wèi)生培訓(xùn)PPT課件
- 嚇數(shù)基礎(chǔ)知識(shí)共20
- 鋰電池安全知識(shí)培訓(xùn)-課件
- 電子產(chǎn)品高可靠性裝聯(lián)工藝下
評(píng)論
0/150
提交評(píng)論