【正文】
earray_inp。klen。 //加入接收編輯框對應字符串 } } UpdateData(FALSE)。在設計過程中困難是很多,其主要表現(xiàn)在不熟練軟件編程。而這諸多環(huán)節(jié)往往影響你整個系統(tǒng)的正常運轉。在此感謝我們的指導老師,老師不求回報,無私奉獻的精神很讓我感動,也是我做人的榜樣,向您表示由衷的謝意。 //{{AFX_DATA_MAP(CAboutDlg) //}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) //{{AFX_MSG_MAP(CAboutDlg) // No message handlers //}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CMy10250119Dlg dialogCMy10250119Dlg::CMy10250119Dlg(CWnd* pParent /*=NULL*/) : CDialog(CMy10250119Dlg::IDD, pParent){ //{{AFX_DATA_INIT(CMy10250119Dlg) m_strRXData = _T()。 // Add About... menu item to system menu. // IDM_ABOUTBOX must be in the system mand range. ASSERT((IDM_ABOUTBOX amp。 } } // Set the icon for this dialog. The framework does this automatically // when the application39。 //波特率9600,無校驗,8個數(shù)據位,1個停止位 (1)。 } else { CDialog::OnSysCommand(nID, lParam)。 GetClientRect(amp。 COleSafeArray safearray_inp。klen。 //加入接收編輯框對應字符串 } } UpdateData(FALSE)。 //字符型 (%c,bt)。 //VARIANT型變量轉換為ColeSafeArray型變量 len=()。 }}// The system calls this to obtain the cursor to display while the user drags// the minimized window.HCURSOR CMy10250119Dlg::OnQueryDragIcon(){ return (HCURSOR) m_hIcon。 int cyIcon = GetSystemMetrics(SM_CYICON)。 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout。//打開串口 else AfxMessageBox(cannot open serial port)。 if (!()) { pSysMenuAppendMenu(MF_SEPARATOR)。 DDX_Text(pDX, IDC_EDIT_TXDATA, m_strTXData)。 // DDX/DDV support //}}AFX_VIRTUAL// Implementationprotected: //{{AFX_MSG(CAboutDlg) //}}AFX_MSG DECLARE_MESSAGE_MAP()}。同時,幫助我們鞏固并理解了課本學習過的內容,幫助我們學習在本次課程設計中遇到的課本之外的知識。最后,細節(jié)決定成敗。本次課程設計,在VC++,利用MSComm控件編寫串口通信程序,實現(xiàn)了串口通信發(fā)送數(shù)據、接收數(shù)據的功能。 //字符型 (%c,bt)。 //VARIANT型變量轉換為ColeSafeArray型變量 len=safearray()。 //設置當前接收區(qū)數(shù)據長度為0 添加串口事件消息處理函數(shù)OnComm()打開工具欄查看按鈕,建立類向導MFC ClassWizard,然后選擇Message Maps,在Class Name中選擇類Cmy10250119Dlg,再在Object IDs 中選擇IDC_MSCOMM1,然后在Message中雙擊消息OnComm,在彈出的對話框中將函數(shù)名改為OnComm,單擊“OK”,就加入了串口事件的消息處理函數(shù),如圖318圖 318 添加消息處理函數(shù)然后編寫OnComm()中的代碼,主要任務是從串口接收數(shù)據并顯示在接收編輯框中。添加初始化代碼代碼如下:// TODO: Add extra initialization here if(()) (FALSE)。SetInPutLen:一次讀取輸入緩沖區(qū)的字符數(shù)。GetCommPort:得到當前使用的串口。 VC++ Communications Control 控件Microsoft公司在WINDOWS中提供了一個串口通訊控件,用它,我們可以很簡單的利用串口進行通訊。MFC中封裝了大部分Windows API函數(shù)和Windows控件,它包含的功能涉及到整個Windows操作系統(tǒng)。每個包是指一個字節(jié),包括開始/停止位,數(shù)據位和奇偶校驗位。由于被傳送的數(shù)據塊是由字符組成,故被稱作面向字符的協(xié)議。 同步協(xié)議在同步傳輸方式中,比特塊以穩(wěn)定的比特流的形式傳輸,數(shù)據被封裝成更大的傳輸單位,稱為幀。 異步通信協(xié)議的實例–起止式異步協(xié)議、特點與格式:起止式異步協(xié)議的特點是一個字符一個字符傳輸,并且傳送一個字符總是以起始位開始,以停止位結束,字符之間沒有固定的時間間隔要求。在通信的數(shù)據流中,字符間異步,字符內部各位間同步。但是對于像打印機這樣單方向傳輸?shù)耐鈬O備,用半雙工方式就能滿足要求了,不必采用全雙工方式,可節(jié)省一根傳輸線。還有在某些通信信道中,如單工無線發(fā)送等。 串行通信的工作模式通過單線傳輸信息是串行數(shù)據通信的基礎。由于串行通信只需在發(fā)送方和接收方之間建立一條通信信道,因此可以減小通信系統(tǒng)的造價。 本次課程設計首先通過VC++,通過插入MSComm控件,用vspm虛擬串口實現(xiàn)串行異步通信,具體實現(xiàn)過程是先建立工程,然后在項目中插入MSComm控件,再通過布局,初始化串口,設置MSComm控件的屬性,添加串口事件消息處理函數(shù)OnComm(),就可以發(fā)送數(shù)據,通過虛擬發(fā)送可以在同一界面上出現(xiàn)發(fā)送和接收消息,也可以互相發(fā)送消息,從而實現(xiàn)串行異步通信。計算機與外部設備之間的通信方式有兩種,一種是并行通信,另一種是串行通信。