版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 課程設(shè)計(jì)說(shuō)明書(shū) </b></p><p> 課 程 名 稱:高級(jí)語(yǔ)言在測(cè)控中的應(yīng)用課程設(shè)計(jì)</p><p> 課 程 代 碼: </p><p> 題 目: 基于串口通信的 </p><p> 高級(jí)語(yǔ)言控制程序的
2、設(shè)計(jì) </p><p> 學(xué) 生 姓 名: </p><p> 學(xué) 號(hào): </p><p> 年級(jí)/專業(yè)/班: </p><p> 學(xué)院(直屬系) : 機(jī)械工程與自動(dòng)化學(xué)院 </p&g
3、t;<p> 指 導(dǎo) 教 師: </p><p><b> 目 錄</b></p><p><b> 1 引 言1</b></p><p> 1.1 問(wèn)題的提出1</p><p> 1.2 國(guó)內(nèi)外研究的現(xiàn)狀1</p
4、><p> 1.3任務(wù)與分析1</p><p> 2 程序的主要功能2</p><p><b> 2.1發(fā)送功能2</b></p><p><b> 2.2退出程序2</b></p><p><b> 2.3清除功能2</b></p
5、><p> 3 程序運(yùn)行平臺(tái)3</p><p><b> 3.1建立工程3</b></p><p><b> 3.2資源創(chuàng)建3</b></p><p><b> 4 總體設(shè)計(jì)5</b></p><p> 5 程序類(lèi)的說(shuō)明6</p&g
6、t;<p> 6 程序流程及代碼實(shí)現(xiàn)6</p><p> 6.1 發(fā)送函數(shù)7</p><p> 6.2 接收函數(shù)8</p><p> 6.3 退出函數(shù)8</p><p> 6.4 清空函數(shù)9</p><p> 6.5 其他函數(shù)9</p><p><b&
7、gt; 7 系統(tǒng)測(cè)試11</b></p><p><b> 8 結(jié)論14</b></p><p><b> 參考文獻(xiàn)15</b></p><p><b> 引 言 </b></p><p> 目前儀器儀表的智能化程度越來(lái)越高,大量的智能儀器都配備了
8、RS-232通信接口,并提供了相應(yīng)的通信協(xié)議,能夠?qū)y(cè)試、采集的數(shù)據(jù)傳輸給計(jì)算機(jī)等設(shè)備,以便進(jìn)行大量數(shù)據(jù)的儲(chǔ)存、處理、查詢和分析。圖1-1所示為某型號(hào)智能儀器示意圖。</p><p> 1.1 問(wèn)題的提出 </p><p> 在現(xiàn)代化的測(cè)控系統(tǒng)中,串口通信有著十分重要的作用,然而,不同測(cè)控系統(tǒng)對(duì)串口通信的需求也不盡相同,因此會(huì)用高級(jí)語(yǔ)言設(shè)計(jì)串口通信的控制程序也變得很重要。與測(cè)控相關(guān)的專
9、業(yè)就開(kāi)設(shè)了高級(jí)語(yǔ)言在測(cè)控中的應(yīng)用課程設(shè)計(jì)?;诖谕ㄐ诺母呒?jí)語(yǔ)言的控制程序的設(shè)計(jì)就是本次課程設(shè)計(jì)的題目。</p><p> 1.2 國(guó)內(nèi)外研究的現(xiàn)狀 </p><p> 目前,計(jì)算機(jī)的串行通信應(yīng)用十分廣泛,串行接口已成為計(jì)算機(jī)的必需部件和接口之一。由于其具有連接簡(jiǎn)單、使用靈活方便、數(shù)據(jù)傳遞可靠等優(yōu)點(diǎn),在工業(yè)監(jiān)控、數(shù)據(jù)采集和實(shí)時(shí)控制系統(tǒng)中得到了廣泛應(yīng)用。當(dāng)今,實(shí)現(xiàn)串口通信的方法以及第三方
10、控件有很多,例如PComm控件,Windows API函數(shù)等等。但是這幾種方法都過(guò)于復(fù)雜,對(duì)程序員要求較高,而且可靠性并不是很好。利用Microsoft推出的MSComm控件,使得串口通信的實(shí)現(xiàn)更為簡(jiǎn)單、可靠。</p><p> 隨著當(dāng)今信息技術(shù)的快速發(fā)展,通信已成為信息技術(shù)中的關(guān)鍵問(wèn)題。尤其在控制領(lǐng)域,以何種方式實(shí)現(xiàn)計(jì)算機(jī)與外圍設(shè)備間既簡(jiǎn)單又可靠的通信,就顯得特別重要。由于串行通信具有實(shí)現(xiàn)簡(jiǎn)單、使用靈活方便、
11、數(shù)據(jù)傳輸可靠等優(yōu)點(diǎn),因而廣泛應(yīng)用于工業(yè)控制系統(tǒng)中,是計(jì)算機(jī)與外部設(shè)備進(jìn)行數(shù)據(jù)通信時(shí)經(jīng)常使用的方式之一。VC++是新一代面向?qū)ο蟮目梢暬_(kāi)發(fā)工具,提供了良好的界面設(shè)計(jì)能力,在PC機(jī)的串口通信方面有很強(qiáng)的功能。它具有功能強(qiáng)大、簡(jiǎn)便易用和代碼執(zhí)行速度快等特點(diǎn),在通信軟件的開(kāi)發(fā)中成為越來(lái)越多開(kāi)發(fā)人員的首選工具。無(wú)論在工業(yè)控制中PC機(jī)和單片機(jī)之間的通信,還是在2臺(tái)Pc機(jī)之間的串口通信,都具有相同的原理。只要掌握其中的通信本質(zhì),就能靈活地實(shí)現(xiàn)串口通
12、信,串口控制。</p><p><b> 1.3任務(wù)與分析</b></p><p> (1). 任務(wù):本課題是要求設(shè)計(jì)一個(gè)基于VC++平臺(tái)下串口通信的控制程序,該程序必須有著良好的用戶界面、能夠設(shè)置端口的參數(shù)、能在同一臺(tái)計(jì)算機(jī)上進(jìn)行調(diào)試和可進(jìn)行單個(gè)數(shù)據(jù)或成批數(shù)據(jù)的傳送。主要的目的是通過(guò)該課程設(shè)計(jì)進(jìn)一步掌握計(jì)算機(jī)串口通信和高級(jí)語(yǔ)言的相關(guān)知識(shí),同時(shí),深入學(xué)習(xí)串口通信知
13、識(shí),掌握實(shí)現(xiàn)串口通信編程技巧。</p><p> (2). 分析:利用Visual C++開(kāi)發(fā)串口通信程序既可以使用MSComm控件也可以調(diào)用Windows API函數(shù)。不過(guò),只要MSComm可以被選用,它幾乎總是這類(lèi)設(shè)計(jì)的優(yōu)先選擇。當(dāng)然,本次設(shè)計(jì)所涉及到了功能要求,選用MSComm控件是能完成的,所以,該設(shè)計(jì)也將選用MSComm控件方式來(lái)完成。</p><p><b> 2
14、 程序的主要功能</b></p><p><b> 2.1發(fā)送功能</b></p><p> 發(fā)送字符串時(shí),在發(fā)送框里輸入字符串,按“發(fā)送”按鈕,開(kāi)始把發(fā)送文本框內(nèi)的字符發(fā)送到接受文本框內(nèi),發(fā)送文件時(shí)按“選擇發(fā)送文件”按鈕,選中所要發(fā)送的文件,點(diǎn)擊“發(fā)送”按鈕,則可在接受文本框里顯示所發(fā)送的文件內(nèi)容。</p><p><b
15、> 2.2退出程序</b></p><p> 按“退出”按鈕,程序窗口關(guān)閉,結(jié)束程序運(yùn)行。</p><p><b> 2.3清除功能</b></p><p> 按接受字符區(qū)的“清空”按鈕,則清空接受文本框內(nèi)的字符。按發(fā)送字符區(qū)的“清空”按鈕,將發(fā)送文本框內(nèi)容清空。</p><p><b&g
16、t; 3 程序運(yùn)行平臺(tái)</b></p><p><b> 3.1建立工程</b></p><p> (1). 啟動(dòng)Visual C++6.0,單擊“文件”菜單中的“新建”命令,顯示新建對(duì)話框,選擇“MFC AppWizard(exe)”工程類(lèi)型,輸入需要?jiǎng)?chuàng)建工程的名稱“l(fā)zhh”和目錄。</p><p> (2). 按照彈出
17、的應(yīng)用向?qū)?duì)話框依次填寫(xiě),第1步選擇基于對(duì)話框,其他均采用默認(rèn)。</p><p> (3). 單擊“完成”按鈕,將會(huì)彈出一個(gè)關(guān)于新工程信息的對(duì)話框。單擊“確定”按鈕,這樣MFC向?qū)П阕詣?dòng)生成了一個(gè)名稱為“l(fā)zhh”的工程。</p><p><b> 3.2資源創(chuàng)建</b></p><p> (1).應(yīng)用程序中添加了一個(gè)對(duì)話框資源IDD_l
18、zhh_DIALOG,打開(kāi)屬性對(duì)話框,將對(duì)話框標(biāo)題改為“應(yīng)用程序中添加了一個(gè)對(duì)話框資源IDD_lzhh_DIALOG”。</p><p> (2).為了實(shí)現(xiàn)計(jì)算機(jī)與計(jì)算機(jī)的串口通信,添加MScomm控件。選擇“工程”菜單中的“添加工程”下的“Components and Controls”選項(xiàng),在彈出的對(duì)話框中雙擊“Registered ActiveX Controls”項(xiàng),選擇“Microsoft Commu
19、nications Control,version 6.0”項(xiàng),單擊“Insert”按鈕,在彈出的對(duì)話框中單擊“OK”按鈕,再在彈出的對(duì)話框中單擊“結(jié)束”按鈕關(guān)閉對(duì)話框,所選擇的控件就會(huì)出現(xiàn)在“控件面板”中,然后將其添加到對(duì)話框中相應(yīng)位置。</p><p> (3).刪除對(duì)話框中原來(lái)的Static文本,用面板為對(duì)話框添加如表3-1所示的控件,并按照?qǐng)D3-1所示放置。</p><p>
20、表3-1程序主界面內(nèi)的控件類(lèi)型、ID及相關(guān)屬性</p><p> (4). 選中在當(dāng)前窗口的“Dialg”單擊鼠標(biāo)右鍵選擇“插入Dialg”,同步驟1將對(duì)話框標(biāo)題改為“參數(shù)設(shè)置”,同步驟3刪除對(duì)話框中原來(lái)的Static文本,用面板為對(duì)話框添加如表3-2所示的控件,并按照?qǐng)D3-2所示放置。</p><p> (5). 添加成員變量,在“查看”菜單中或在對(duì)話框上單擊鼠標(biāo)右鍵,修改類(lèi)名為“
21、CSettingDlg”,再打開(kāi)“Class Wizard”對(duì)話框中的“Member Variables”標(biāo)簽,選中所需的控件ID號(hào),雙擊鼠標(biāo)左鍵或單擊Add Variables按鈕,依次為表3-3中所列控件增加成員變量。</p><p> 表3-2參數(shù)設(shè)置界面內(nèi)的控件類(lèi)型、ID及相關(guān)屬性</p><p><b> 表3-3成員變量</b></p>
22、<p> (6). 切換到Class Wizard的Message Maps標(biāo)簽頁(yè)為相應(yīng)控件添加相應(yīng)的消息響應(yīng)函數(shù),對(duì)照表3-4。</p><p> 表3-4主界面控件函數(shù)</p><p><b> 4 總體設(shè)計(jì)</b></p><p> 要滿足這個(gè)設(shè)計(jì)所需要的界面是兩個(gè),通過(guò)主界面上的相關(guān)控件可以彈出另一界面。當(dāng)然,另
23、一界面也是單獨(dú)的一個(gè)類(lèi),其只是有些控件有變量沒(méi)有功能函數(shù),所以,就沒(méi)有給出它框架圖。然而,MScomm控件的相關(guān)功能函數(shù)是系統(tǒng)默認(rèn)的,這里也沒(méi)必要給出。如此,就給出了系統(tǒng)總體框架圖,如圖4.1。</p><p> 圖4-1 系統(tǒng)總體框架圖</p><p><b> 5 程序類(lèi)的說(shuō)明</b></p><p> 本程序涉及到了四個(gè)類(lèi),其分別
24、是ClzhhApp、CLzhhDlg、CMSComm和CsettingDlg。除CLzhhDlg需要添加一些程序外,其余的都以VC++自動(dòng)生成的程序?yàn)闇?zhǔn)。CLzhhDlg添加的代碼如下:</p><p> class CLzhhDlg : public CDialog</p><p><b> {</b></p><p> // Cons
25、truction</p><p><b> public:</b></p><p> CLzhhDlg(CWnd* pParent = NULL);// standard constructor</p><p> BOOL bRec; //接收按鍵標(biāo)志</p><p>
26、 BOOL bSend; //自動(dòng)發(fā)送模式發(fā)送鍵標(biāo)志</p><p> BOOL Check1; //自動(dòng)發(fā)送復(fù)選框選中標(biāo)志</p><p> BOOL Check2; //十六進(jìn)制復(fù)選框選中標(biāo)志</p><p> CString m_strSe
27、tting;</p><p> CString strSetting;</p><p> int m_nTime;</p><p> int m_nPort;</p><p> void OpenPort(); //串口開(kāi)起函數(shù)</p><p> // Dialog Data
28、</p><p> ……//自動(dòng)生成部分</p><p><b> }</b></p><p> 6 程序流程及代碼實(shí)現(xiàn)</p><p> 根據(jù)第4小節(jié)的系統(tǒng)總體框架圖和第5小節(jié)中的給類(lèi)加的數(shù)據(jù)成員與函數(shù)成員設(shè)計(jì)了程序流程圖,如圖6-1。</p><p> 在程序流程圖中,雖然每個(gè)按鍵控
29、件和復(fù)選框都是能單獨(dú)動(dòng)作,但是其每次的動(dòng)作都可能改變標(biāo)志,從而影響到其它控件動(dòng)作結(jié)果,甚至改變到程序的運(yùn)行,這就完成了控件關(guān)系。</p><p> 在lzhhDlg.cpp文件中,設(shè)置初始化函數(shù)OnInitDialog(),添加代碼實(shí)現(xiàn)對(duì)話框各控件的初始化工作,如下:</p><p> BOOL CLzhhDlg::OnInitDialog()</p><p>
30、 { //VC自動(dòng)生成的代碼</p><p> // TODO: Add extra initialization here</p><p> bSend=FALSE;</p><p> bRec=FALSE;</p><p> Check1=FALSE;</p><p> Check2=FALSE;&
31、lt;/p><p> m_nPort=1;</p><p> m_nTime=1000;</p><p> m_strSetting=_T("9600,n,8,1");</p><p> OpenPort();</p><p> return TRUE; // return TRUE un
32、less you set the focus to a control</p><p><b> }</b></p><p><b> 6.1 發(fā)送函數(shù)</b></p><p> 實(shí)現(xiàn)接收按鈕相應(yīng)的響應(yīng)函數(shù)OnSend() 。代碼如下:</p><p> void CLzhhDlg::OnS
33、end() </p><p><b> {</b></p><p> // TODO: Add your control notification handler code here</p><p> if(Check1) //自動(dòng)發(fā)送模式</p><p><b>
34、{ </b></p><p> bSend=!bSend; </p><p><b> if(bSend)</b></p><p><b> {</b></p><p> SetTimer(1,m_nTime,NULL);</p><p>
35、m_ctrlSend.SetWindowText(_T("停止發(fā)送"));</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> KillTimer(1);&
36、lt;/p><p> m_ctrlSend.SetWindowText(_T("自動(dòng)發(fā)送"));</p><p><b> }</b></p><p><b> }</b></p><p> else //手動(dòng)發(fā)送模式</p
37、><p><b> { </b></p><p> UpdateData(TRUE); </p><p> m_COMM.SetOutput(COleVariant(m_Send));</p><p> m_ctrlSend.SetWindowText(_T("手動(dòng)發(fā)送"));</p&
38、gt;<p><b> }</b></p><p><b> }</b></p><p><b> 6.2 接收函數(shù)</b></p><p> 實(shí)現(xiàn)接發(fā)送鈕相應(yīng)的響應(yīng)函數(shù)OnRec() 。代碼如下:</p><p> void CLzhhDlg::OnR
39、ec() </p><p><b> {</b></p><p> // TODO: Add your control notification handler code here</p><p> m_COMM.GetInput();</p><p> bRec=!bRec;</p><p
40、><b> if(bRec)</b></p><p><b> {</b></p><p> m_ctrlRec.SetWindowText(_T("停止接收"));</p><p><b> }</b></p><p><b>
41、else</b></p><p> m_ctrlRec.SetWindowText(_T("開(kāi)始接收"));</p><p><b> }</b></p><p><b> 6.3 退出函數(shù)</b></p><p> 實(shí)現(xiàn)退出按鈕相應(yīng)的響應(yīng)函數(shù)OnEnd()
42、。代碼如下:</p><p> void CLzhhDlg::OnEnd() </p><p><b> {</b></p><p> // TODO: Add your control notification handler code here</p><p> CDialog::OnOK();</p&
43、gt;<p><b> }</b></p><p><b> 6.4 清空函數(shù)</b></p><p> 實(shí)現(xiàn)清空按鈕相應(yīng)的響應(yīng)函數(shù)OnClsR()和OnClsS()。代碼如下:</p><p> void CLzhhDlg::OnClsR() </p><p><b&g
44、t; {</b></p><p> // TODO: Add your control notification handler code here</p><p><b> bRec=0;</b></p><p> m_ctrlRec.SetWindowText(_T("開(kāi)始接收"));</p&g
45、t;<p> m_Rec=_T("");</p><p> SetDlgItemText(IDC_REC,m_Rec);</p><p><b> }</b></p><p> void CLzhhDlg::OnClsS() </p><p><b> {</b
46、></p><p> // TODO: Add your control notification handler code here</p><p><b> bSend=0;</b></p><p> m_Send=_T("");</p><p> SetDlgItemText(ID
47、C_SEND,m_Send);</p><p> if(Check1) //自動(dòng)模式</p><p><b> {</b></p><p> m_ctrlSend.SetWindowText(_T("自動(dòng)發(fā)送"));</p><p><b> }&l
48、t;/b></p><p><b> }</b></p><p><b> 6.5 其他函數(shù)</b></p><p> (1). 參數(shù)設(shè)置按鈕的響應(yīng)函數(shù)OnSetting()。代碼如下:</p><p> void CLzhhDlg::OnSetting() </p>&
49、lt;p><b> {</b></p><p> // TODO: Add your control notification handler code here </p><p> CSettingDlg setDlg;</p><p> setDlg.m_nPort=m_nPort;</p><p>
50、 setDlg.m_nTime=m_nTime; </p><p> setDlg.m_strSetting=m_strSetting;</p><p> if(setDlg.DoModal()==IDOK)</p><p><b> {</b></p><p> m_nPort=setDlg.m_nPort;&
51、lt;/p><p> m_nTime=setDlg.m_nTime;</p><p> m_strSetting=setDlg.m_strSetting;</p><p> OpenPort();</p><p> if(Check1&&bSend)</p><p> SetTimer(1,m_n
52、Time,NULL);</p><p><b> }</b></p><p><b> }</b></p><p> (2). 串口控件響應(yīng)函數(shù)OnOnCommMscomm()。代碼如下:</p><p> void CLzhhDlg::OnOnCommMscomm() </p>
53、<p><b> {</b></p><p> // TODO: Add your control notification handler code here</p><p> VARIANT variant_inp;</p><p> COleSafeArray safearray_inp;</p>&l
54、t;p> LONG len,k;</p><p> BYTE rxdata[2048]; //設(shè)置BYTE數(shù)組 An 8-bit integerthat is not signed.</p><p> CString strtemp;</p><p> CString strtemp_R;</p><p><b>
55、if(bRec)</b></p><p><b> {</b></p><p> if(m_COMM.GetCommEvent()==2) //事件值為2表示接收緩沖區(qū)內(nèi)有字符</p><p> { </p><p> variant_inp=m_COMM.G
56、etInput(); //讀緩沖區(qū)</p><p> safearray_inp=variant_inp; //VARIANT型變量轉(zhuǎn)換為ColeSafeArray型變量</p><p> len=safearray_inp.GetOneDimSize(); //得到有效數(shù)據(jù)長(zhǎng)</p><p> for(k=0;k<
57、;len;k++)</p><p> safearray_inp.GetElement(&k,rxdata+k);//轉(zhuǎn)換為BYTE型數(shù)組</p><p> for(k=0;k<len;k++) //將數(shù)組轉(zhuǎn)換為Cstring型變量</p><p><b> {</b></p>
58、<p> BYTE bt=*(char*)(rxdata+k); //字符型</p><p> if(!Check2)</p><p> strtemp.Format("%c",bt); //將字符送入臨時(shí)變量strtemp存放</p><p> if(Check2)
59、 //顯示十六進(jìn)制</p><p> strtemp.Format("%02X ",bt); //將字符送入臨時(shí)變量strtemp存放</p><p> m_Rec+=strtemp; //加入接收編輯框?qū)?yīng)字符串 </p><p><b> }</b></p>&l
60、t;p><b> }</b></p><p> else m_Rec=_T("(沒(méi)有字符)");</p><p><b> }</b></p><p> SetDlgItemText(IDC_REC,m_Rec); //更新接收編輯框?qū)?yīng)字符串</p>
61、<p><b> }</b></p><p> (3). 周期響應(yīng)函數(shù)OnTimer()。代碼如下:</p><p> void CLzhhDlg::OnTimer(UINT nIDEvent) </p><p><b> {</b></p><p> // TODO: Add
62、 your message handler code here and/or call default</p><p> UpdateData(TRUE); //讀取編輯框內(nèi)容</p><p> m_COMM.SetOutput(COleVariant(m_Send));</p><p> CDialog::OnTime
63、r(nIDEvent);</p><p><b> }</b></p><p> (4). 自動(dòng)發(fā)送和十六進(jìn)制復(fù)選框動(dòng)作響應(yīng)函數(shù)分別是OnCheck1()和OnCheck2()。代碼如下:</p><p> void CLzhhDlg::OnCheck1() </p><p><b> {</b&
64、gt;</p><p> // TODO: Add your control notification handler code here</p><p> Check1=!Check1; //自動(dòng)發(fā)送標(biāo)志取反</p><p> if(Check1) /
65、/允許自動(dòng)發(fā)送</p><p><b> { </b></p><p><b> bSend=0;</b></p><p> m_ctrlSend.SetWindowText(_T("自動(dòng)發(fā)送"));</p><p><b> }</b>
66、</p><p> if(!Check1) //手動(dòng)發(fā)送</p><p><b> {</b></p><p> KillTimer(1);</p><p> m_ctrlSend.SetWindowText(_T("手動(dòng)發(fā)送"));&
67、lt;/p><p><b> }</b></p><p><b> }</b></p><p> void CLzhhDlg::OnCheck2() </p><p><b> {</b></p><p> // TODO: Add your co
68、ntrol notification handler code here</p><p> Check2=!Check2; //十六進(jìn)制標(biāo)志取反</p><p><b> }</b></p><p> (5). 在lzhhDlg.h文件里自定義串口打開(kāi)函數(shù)OpenPort()。代碼如下:<
69、;/p><p> void CLzhhDlg::OpenPort()//打開(kāi)串口</p><p><b> {</b></p><p> if(m_COMM.GetPortOpen())</p><p> m_COMM.SetPortOpen(FALSE);</p><p> m_COMM.
70、SetCommPort(m_nPort);</p><p> if(!m_COMM.GetPortOpen())</p><p> m_COMM.SetPortOpen(TRUE);</p><p><b> else</b></p><p> AfxMessageBox("cannaot open s
71、erial port");</p><p> m_COMM.SetSettings(m_strSetting);</p><p> m_COMM.SetRThreshold(1);</p><p> m_COMM.SetInputMode(1); </p><p> m_COMM.SetInputLen(0);</p
72、><p> m_COMM.GetInput();</p><p><b> }</b></p><p><b> 7 系統(tǒng)測(cè)試</b></p><p> 程序的打開(kāi)方法是:首先進(jìn)入VC++6.0,打開(kāi)工程lzhh.dsw,然后進(jìn)入源程序,接著選擇Build下的Execute lzhh.exe即可
73、,也可以不打開(kāi)工程,直接雙擊lzhh文件夾下的debug或release子文件夾下的lzhh.exe文件即可運(yùn)行程序。</p><p> 第一步,打開(kāi)兩個(gè)運(yùn)行程序,設(shè)置端口分別為3和4其余參數(shù)均為默認(rèn),如圖7-1。</p><p> 第二步,按下兩個(gè)界面的“開(kāi)始接收”按鈕。</p><p> 第三步,分別在兩個(gè)界面的“待發(fā)字符”的編輯框內(nèi)寫(xiě)入一些任意字符,左邊
74、界面選擇自動(dòng)發(fā)送模式,右邊界面選擇手動(dòng)發(fā)送模式,單擊右邊界面的“手動(dòng)發(fā)送”按鈕,左邊界面的“接收字符”的只讀編輯框內(nèi)出現(xiàn)左邊所寫(xiě)入是字符。同樣,按下左邊界面的“自動(dòng)發(fā)送”按鈕,右邊界面的“接收字符”的只讀編輯框內(nèi)出現(xiàn)左邊所寫(xiě)入是字符,而且,每隔1000ms接收到相同字符,如圖7-2和7-3。</p><p> 第四步,保持端口不變,修改串口參數(shù),且為相同可用參數(shù)。在第三步的方法仍然可以得到相同的結(jié)果。</
75、p><p> 第五步,按右邊界面的“退出程序”窗口關(guān)閉。打開(kāi)串口調(diào)試小助手,設(shè)置串口為“COM4”其它參數(shù)相同,串口調(diào)試小助手自動(dòng)發(fā)送十六進(jìn)制數(shù),設(shè)計(jì)程序界面接收十六進(jìn)制數(shù),如圖7-4。</p><p> 第六步,按“清空重發(fā)”和“清空重接”本別清空發(fā)送區(qū)和接收區(qū)的字符。按“退出程序”窗口關(guān)閉。</p><p> 通過(guò)以上測(cè)試,本系統(tǒng)實(shí)現(xiàn)了數(shù)據(jù)的接收與發(fā)送功能,也
76、滿足參數(shù)能調(diào)和同一臺(tái)PC機(jī)上調(diào)試的要求,在新增功能的調(diào)試也獲得了通過(guò),總體上完成了設(shè)計(jì)任務(wù)。</p><p><b> 8 結(jié)論</b></p><p> 本次課程設(shè)計(jì)是Visual C++ 6.0平臺(tái)下,利用MSComm控件編寫(xiě)的串口通信程序。這次設(shè)計(jì)的程序完能實(shí)現(xiàn)對(duì)字符的發(fā)送與接收,特別是還能接收十六進(jìn)制數(shù),當(dāng)然,該程序還能選擇特定的串口和通信參數(shù)進(jìn)行串口通信
77、,也具有一般程序的基本功能那就能刪除相應(yīng)文本框內(nèi)字符和實(shí)現(xiàn)程序的關(guān)閉。通過(guò)系統(tǒng)測(cè)試,有如下現(xiàn)象:本程序在自動(dòng)發(fā)送字符時(shí),如果確認(rèn)改變參數(shù),那么它將會(huì)立即按照所確定的參數(shù)進(jìn)行字符的自動(dòng)發(fā)送,這能提高其自動(dòng)發(fā)送的及時(shí)性;在使用清除按鍵時(shí),能立即解除自動(dòng)發(fā)送(或接收)的循環(huán)流程。當(dāng)然,這些能實(shí)現(xiàn)這些功能,也是相應(yīng)控鍵的響應(yīng)函數(shù)內(nèi)編寫(xiě)對(duì)相應(yīng)模式的標(biāo)志進(jìn)行值的改變或賦值程序。這種加入特定的BOOL性模式標(biāo)志數(shù),能夠很好的運(yùn)用于循環(huán)程序的解除循環(huán)節(jié)
78、,特顯其方便,這比在使用發(fā)回更方便和靈活。</p><p> 當(dāng)然,本次設(shè)計(jì)只是一個(gè)小小的試驗(yàn)性設(shè)計(jì),遠(yuǎn)遠(yuǎn)不能滿足現(xiàn)在高端的智能儀器所要求的串口通信性能。就拿簡(jiǎn)單的說(shuō),所設(shè)計(jì)的這個(gè)程序還不能發(fā)送十六進(jìn)制數(shù),更不要說(shuō)文件的發(fā)送與接收了。雖然,有這么多不足,但是這也我這近十天來(lái)的勞動(dòng)成果。在不斷的資料檢索和查閱十來(lái)本Visual C++相關(guān)書(shū)籍才有這份收獲。這也充分說(shuō)明簡(jiǎn)單是書(shū)本知識(shí)遠(yuǎn)遠(yuǎn)不能滿足做好一件事所要求的知
79、識(shí),必須不斷的學(xué)習(xí)與關(guān)注更多有用相關(guān)的東西。特別是要充分利用好網(wǎng)絡(luò)資源,當(dāng)然,同學(xué)間的討論更是不能少的,因?yàn)樗较嘟娜酥g對(duì)一些問(wèn)題討論更使這些知識(shí)點(diǎn)變得淺顯易懂。</p><p><b> 參考文獻(xiàn)</b></p><p> [1] 李強(qiáng),賈云霞 編著. Visual C++項(xiàng)目開(kāi)發(fā)實(shí)踐. 北京:中國(guó)鐵道出版社,2003 </p><p&
80、gt; [2] 王莉,陽(yáng)春華.基于VC++的串口通信設(shè)計(jì)及其應(yīng)用[J].控制工程,2004,11 (S1) :89292.</p><p> [3] 施紅琴主編.C++ Builder 5.0編程實(shí)例應(yīng)用指南. 北京:航空工業(yè)出版社,2000,7</p><p> [4] 鄭莉,董淵,張瑞豐 編著.C++語(yǔ)言程序設(shè)計(jì)(第3版).北京:清華大學(xué)出版社,2004,1</p>
81、<p> [5] 任哲等.MFC Windows應(yīng)用程序設(shè)計(jì). 北京:清華大學(xué)出版社,2007,9</p><p> [6] 匡松主編.C++程序設(shè)計(jì)百問(wèn)百例.北京:中國(guó)鐵道出版社,2008</p><p> [7] 肖霞 .C++程序設(shè)計(jì)及實(shí)訓(xùn)教程.北京:清華大學(xué)出版社,2007</p><p> [8] 鄭明,鄭世偉 編著.C++ Build
82、er與Windows API經(jīng)典范例. 北京:清華大學(xué)出版社,2000 </p><p> [9] 劉振安 編著.C++ 及Windows 可視化程序設(shè)計(jì)題解與實(shí)訓(xùn)指導(dǎo). 北京:清華大學(xué)出版社,2000</p><p> [10] 王華,岳麗全,岳志高. MSComm 控件在VC + + 6. 0串口通信中的應(yīng)用.長(zhǎng)春工程學(xué)院學(xué)報(bào):自然科學(xué)版,2009 ,10 (1)</p>
溫馨提示
- 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ù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于串口通信的高級(jí)語(yǔ)言控制程序的設(shè)計(jì)c++課程設(shè)計(jì)
- 課程設(shè)計(jì)---基于串口通信的高級(jí)語(yǔ)言控制程序的設(shè)計(jì)
- 課程設(shè)計(jì)--基于串口通信的高級(jí)語(yǔ)言控制程序的設(shè)計(jì)
- 串口通信c++課程設(shè)計(jì)
- c++課程設(shè)計(jì)--c++程序設(shè)計(jì)語(yǔ)言
- 《高級(jí)語(yǔ)言程序設(shè)計(jì)》c++課程設(shè)計(jì)數(shù)值微分
- 高級(jí)語(yǔ)言程序設(shè)計(jì)c++課程答辯
- 基于plc的串級(jí)控制程序的課程設(shè)計(jì)
- 《c++語(yǔ)言程序設(shè)計(jì)》課程設(shè)計(jì)報(bào)告
- 《程序設(shè)計(jì)語(yǔ)言(c++)》課程設(shè)計(jì)
- 基于c++的教師排課程序課程設(shè)計(jì)
- c++課程設(shè)計(jì)--通信錄管理程序
- c++課程設(shè)計(jì)-- c++面向?qū)ο蟪绦蛟O(shè)計(jì)
- 微機(jī)課程設(shè)計(jì)--智能流星燈管的控制程序設(shè)計(jì)
- 高級(jí)語(yǔ)言程序設(shè)計(jì)(c++) 考試大綱
- 高級(jí)語(yǔ)言程序設(shè)計(jì)c++考試大綱
- 高級(jí)語(yǔ)言程序設(shè)計(jì)c++考試大綱
- c++程序設(shè)計(jì)語(yǔ)言課程設(shè)計(jì)-收銀臺(tái)結(jié)算程序
- c++程序設(shè)計(jì)語(yǔ)言課程設(shè)計(jì)-收銀臺(tái)結(jié)算程序
- 數(shù)值計(jì)算課程設(shè)計(jì)--典型數(shù)值算法的c++語(yǔ)言程序設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論