VC++高級(jí)程序設(shè)計(jì)_第1頁(yè)
VC++高級(jí)程序設(shè)計(jì)_第2頁(yè)
VC++高級(jí)程序設(shè)計(jì)_第3頁(yè)
VC++高級(jí)程序設(shè)計(jì)_第4頁(yè)
VC++高級(jí)程序設(shè)計(jì)_第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、目 錄1 實(shí)驗(yàn)要求.12 軟硬件平臺(tái)簡(jiǎn)介.13 總體設(shè)計(jì)思想.14 具體設(shè)計(jì)界面圖(含詳細(xì)操作步驟).24.1建立應(yīng)用工程. 24.2添加界面控件. 24.3映射控件通用消息.34.4為對(duì)應(yīng)控件添加代碼.34.5生成可執(zhí)行的EXE文件.7五軟件流程圖.8六. 測(cè)試結(jié)果截圖.9七. 總結(jié).10一、實(shí)驗(yàn)要求把一臺(tái)計(jì)算機(jī)和單片機(jī)(12C5A60S2)的串口通過(guò)串口線連在一起,通過(guò)串口實(shí)現(xiàn)通訊。利用VC+高級(jí)語(yǔ)言、C語(yǔ)言編程實(shí)現(xiàn),要求程序界面友好,有發(fā)送和接收功能,其接收和發(fā)送內(nèi)容可在屏幕上顯示。2、 軟硬件平臺(tái)簡(jiǎn)介 CPU:P4 2G及以上兼容于80x86 架構(gòu)的中央處理器 內(nèi)存:1G 及以上 硬盤

2、:80G及以上 網(wǎng)卡:100M及以上 操作系統(tǒng):Windows XP 及以上 軟件:Visual C+ 6.0 Keil uVision3-4 STC_ISP_V488 硬件:51開(kāi)發(fā)板搭載STC12C5A60S2單片機(jī)1602液晶顯示屏三、總體設(shè)計(jì)思想串口通訊把數(shù)據(jù)的字節(jié)分解成單個(gè)的二進(jìn)制比特流依次傳輸,其結(jié)構(gòu)簡(jiǎn)單,連接線少,應(yīng)用非常廣泛。實(shí)現(xiàn)串口通信的方法很多。如:利用標(biāo)準(zhǔn)通信函數(shù)實(shí)現(xiàn)串口通信、利用API實(shí)現(xiàn)串口通信和利用ActiveX控件實(shí)現(xiàn)。本文主要采用ActiveX控件Microsoft Communications Control(MSComm)編程,Windows平臺(tái)先進(jìn)的Act

3、iveX技術(shù)使得對(duì)串口編程不再需要處理煩瑣的細(xì)節(jié)。利用已有的AxtiveX控件,只需要編寫少量的代碼,就可以輕松高效地完成任務(wù)。以下對(duì)ActiveX控件屬性進(jìn)行簡(jiǎn)單介紹,在ClassWizard中為新創(chuàng)建的通信控件定義成員對(duì)象(CMSComm m_comm),通過(guò)該對(duì)象便可以對(duì)串口屬性進(jìn)行設(shè)置,MSComm控件共有27個(gè)屬性,這里只介紹其中幾個(gè)常用屬性:CommPort:設(shè)置并回通訊端口號(hào),缺省為COM4。Settings:以字符串的形式設(shè)置并返回波特率、奇偶校驗(yàn)、數(shù)據(jù)位、停止位。PortOpen:設(shè)置并返回通訊端口的狀態(tài),也可以打開(kāi)和關(guān)閉端口。Input:從接收緩沖區(qū)返回和刪除字符。Outp

4、ut:向發(fā)送緩沖區(qū)寫一個(gè)字符串。InputLen:設(shè)置每次Input讀入的字符個(gè)數(shù),缺省值為0,表明讀取接收緩沖區(qū)中的全部?jī)?nèi)容。InBufferCount:返回接收緩沖區(qū)中已接收到的字符數(shù),將其置0可以清除接收緩沖區(qū)。InputMode:定義Input屬性獲取數(shù)據(jù)的方式(為0:文本方式;為1:二進(jìn)制方式)。RThreshold和SThreshold:表示在OnComm事件發(fā)生之前,接收緩沖區(qū)或發(fā)送緩沖區(qū)中可以接收的字符數(shù)。四、具體設(shè)計(jì)截面圖1、建立應(yīng)用工程啟動(dòng)VC+60,創(chuàng)建一個(gè)基于對(duì)話框的MFC應(yīng)用程序項(xiàng)目,選擇Project菜單下Add to Project子菜單中的Components

5、and Controls選項(xiàng),在彈出的對(duì)話框中雙擊Registered ActiveX Controls項(xiàng),則所有注冊(cè)過(guò)的ActiveX控件出現(xiàn)在列表框中。選擇Microsoft Communications Control version 60,單擊insert按鈕即可將通信控件插入該工程。添加該控件到對(duì)話框中,設(shè)置控件ID號(hào)為IDC _MSCOMM.2、添加界面控件將對(duì)話框中的按鈕“取消”刪除,將“確定”按鈕改為“退出”。在對(duì)話框中添加適當(dāng)?shù)慕缑婵丶?。本?shí)驗(yàn)中需添加的標(biāo)注用的靜態(tài)控件、用于選擇串口和設(shè)置波特率的組合框分別設(shè)置控件ID號(hào)為IDC_COMBO_SELECT和IDC _COMBO

6、_BTL SET、添加控制開(kāi)始發(fā)送/接收按鈕控件并設(shè)置控件ID號(hào)為IDC_BUTTON_START,添加用于輸入發(fā)送數(shù)據(jù)和輸出接收數(shù)據(jù)的編輯框并設(shè)置控件ID號(hào)為IDC_EDIT_SEND和IDC_EDIT_RECEVE,同時(shí)為其設(shè)置各種屬性。添加完后如下圖3、映射控件通用消息 (1)打開(kāi)MFC ClassWizard對(duì)話框,單擊Member Valuable為相應(yīng)控件添加變量。添加變量名和類型如下表:控件ID號(hào)變量名變量類似IDC_EDIT_RECEVECStringm_strReceiveIDC_EDIT_SENDCStringm_strSendIDC_MSCOMMCMSCommm_MSco

7、mmIDC_PORTintm_nPort如下圖:4、為對(duì)應(yīng)控件添加代碼(1)為按鈕IDC_BUTTON_OPEN添加單擊響應(yīng)函數(shù)void CMyDlg:OnButtonOpen();函數(shù)代碼如下: void CMyDlg:OnButtonOpen() / TODO: Add your control notification handler code hereif(m_MSComm.GetPortOpen() AfxMessageBox(_T(親,請(qǐng)先關(guān)閉串口!); return; UpdateData(TRUE); if(m_nPort=-1) AfxMessageBox(_T(親,請(qǐng)選擇串

8、口!); return; m_MSComm.SetCommPort(m_nPort);/選擇com m_MSComm.SetInBufferSize(1024);/設(shè)置輸入緩沖區(qū)的大小 m_MSComm.SetOutBufferSize(1024);/設(shè)置輸出緩沖區(qū)的大小 m_MSComm.SetInputLen(0);/設(shè)置當(dāng)前接收區(qū)數(shù)據(jù)長(zhǎng)度為0 m_MSComm.SetInputMode(1);/1:表示以二進(jìn)制方式檢取數(shù)據(jù) m_MSComm.SetRThreshold(1); /* 接收緩沖區(qū)有1個(gè)及1個(gè)以上字符時(shí),將引發(fā)接收數(shù)據(jù)的Oncomm事件*/ m_MSComm.SetPortO

9、pen(TRUE);/打開(kāi)串口 if(m_MSComm.GetPortOpen() GetDlgItem(IDC_BUTTON_OPEN)-EnableWindow(FALSE); GetDlgItem(IDC_BUTTON_CLOSE)-EnableWindow(TRUE); else m_MSComm.SetOutBufferCount(0); CString strInfo=_T(); strInfo.Format(_T(啊哦!打開(kāi)串口COM%d失?。?,m_nPort); AfxMessageBox(strInfo); GetDlgItem(IDC_BUTTON_OPEN)-Enabl

10、eWindow(TRUE); GetDlgItem(IDC_BUTTON_CLOSE)-EnableWindow(FALSE); (2)為按鈕IDC_BUTTON_SEND添加單擊響應(yīng)函數(shù)void CMyDlg:OnButtonSend();函數(shù)代碼如下: void CMyDlg:OnButtonSend() / TODO: Add your control notification handler code here if(!m_MSComm.GetPortOpen() AfxMessageBox(_T(親,請(qǐng)先打開(kāi)串口!); return; UpdateData(TRUE); /讀取編輯框

11、內(nèi)容 int nSendLength=m_strSend.GetLength();/要發(fā)送的字符串送字符數(shù)組 CByteArray ByteArray; ByteArray.RemoveAll(); ByteArray.SetSize(nSendLength); for(int i=0;iEnableWindow(TRUE); GetDlgItem(IDC_BUTTON_CLOSE)-EnableWindow(FALSE);(4)為組合框添加初始化函數(shù)void CMyDlg:OnSelchangeBps() ;編輯加入代碼如下:void CMyDlg:OnSelchangeBps() / TO

12、DO: Add your control notification handler code here UpdateData(true); int nlndex=m_bps.GetCurSel();a=nlndex; switch(nlndex) case 0: m_MSComm.SetSettings(19200,n,8,1); break; case 1: m_MSComm.SetSettings(14400,n,8,1); break; case 2: m_MSComm.SetSettings(9600,n,8,1); break; case 3: m_MSComm.SetSetting

13、s(4800,n,8,1); break; default: break; /*參數(shù)1表示每當(dāng)串口接收緩沖區(qū)中有多于或等于 1個(gè)字符時(shí)將引發(fā)一個(gè)接收數(shù)據(jù)的OnComm事件*/ UpdateData(false); (5)為IDC _MSCOMM添加消息映射函數(shù)void CMyDlg:OnOnCommMscomm()以便當(dāng)接收緩沖區(qū)有數(shù)據(jù)時(shí)做相應(yīng)處理。添加代碼如下:void CMyDlg:OnOnCommMscomm() / TODO: Add your control notification handler code hereVARIANT varinant_Input;COleSafeAr

14、ray safearray_Input;BYTE RcvData2048; /設(shè)置BYTE數(shù)組 An 8-bit integerthat is not signed.CString strTmp=_T();if(m_MSComm.GetCommEvent()=2)/事件值為2表示接收緩沖區(qū)內(nèi)有字符 varinant_Input=m_MSComm.GetInput(); /讀緩沖區(qū) safearray_Input=varinant_Input; /*-VARIANT型變量轉(zhuǎn)換為ColeSafeArray型變量-*/ int Length=safearray_Input.GetOneDimSize

15、();/得到有效數(shù)據(jù)長(zhǎng)度 for(long i=0;iLength;i+) safearray_Input.GetElement(&i,RcvData+i);/轉(zhuǎn)換為BYTE型數(shù)組 BYTE bt=*(char*)(RcvData+i);/字符型 if(b=1)strTmp.Format(%c,bt);/將字符送入臨時(shí)變量strtemp存放 else strTmp.Format(%d,bt); m_strReceive+=strTmp;/加入接收編輯框?qū)?yīng)字符串 UpdateData(FALSE);/更新編輯框內(nèi)容,顯示接收到的數(shù)據(jù) (6)為數(shù)據(jù)接收形式添加函數(shù)void CMyDlg:OnRa

16、dio添加代碼如下:void CMyDlg:OnRadio1() / TODO: Add your control notification handler code hereb=true;void CMyDlg:OnRadio2() / TODO: Add your control notification handler code hereb=false; 5.生成可執(zhí)行的EXE文件編譯、鏈接、運(yùn)行會(huì)相應(yīng)工程目錄下的debug目錄下生成可執(zhí)行的EXE文件。連接好串口線后運(yùn)行該文件可進(jìn)行串口通信。運(yùn)行如下:五、軟件流程圖符號(hào)設(shè)定 流程開(kāi)始符號(hào): 流程結(jié)束符號(hào): 判定符號(hào): 路由符號(hào): 文檔輸

17、出: 開(kāi)始MCU.串口.液晶屏初始化下載hex文件,選擇端口,波特率N 有鍵按下并成功連接YLCD顯示提示語(yǔ) VC+初始化 發(fā)送信息單片機(jī)接收信息并返還到VC+終端 結(jié)束在概念設(shè)計(jì)中,我采用單向策略.用自頂向下設(shè)計(jì)一個(gè)全局概念結(jié)構(gòu)的框架,以它為骨架集成由自底向上策略中設(shè)計(jì)的各局部概念結(jié)構(gòu).六、測(cè)試結(jié)果截圖筆記本電腦運(yùn)行如下:(分整數(shù)和字符兩種顯示格式)A.整數(shù)顯示B.字符顯示單片機(jī)運(yùn)行如下:七、實(shí)驗(yàn)總結(jié) 通過(guò)本次串口通信實(shí)驗(yàn),讓我對(duì)串口通信原理有了更近一步的理解。同時(shí)通過(guò)應(yīng)用VC+ 6.0帶的MFC進(jìn)行串口通信API應(yīng)用和用戶界面制作,使我對(duì)VC+的使用更加熟練,同時(shí)也掌握了ActiveX控件的使用方法及原理。 在調(diào)試單片機(jī)時(shí),關(guān)于在于1602顯示屏顯示VC發(fā)送信息的問(wèn)題糾結(jié)了很久,后來(lái)知道文字無(wú)法的顯示的原因是12864顯示屏可以支持文字,而我用的則是1602的,所以無(wú)法顯示文字,之前走了很多彎路。而在VC界面上,波特率為應(yīng)選4800, 總之,在本次實(shí)驗(yàn)中我收獲很多,不僅在通信方面的知識(shí)有所提升、VC+軟件的使用更加熟練,而且也

溫馨提示

  • 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)論