久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

串口通信IN C (適用于Microsoft Visual Studio 2010/2012/20...

 goandlove 2016-05-26

                向無數(shù)拼命工作的 程序猿 及 攻城獅 致敬,!

  1. 軟硬件平臺簡介      

        CPUP4 2G及以上兼容于80x86架構(gòu)的中央處理器

        內(nèi)存:1G及以上

        硬盤:80G及以上

        網(wǎng)卡:100M及以上

         操作系統(tǒng):Windows XP及以上

        軟件:VS2010/2012/2013  Visual C++ 6.0  Keil uVision3-4   STC_ISP_V488/友善串口助手

        硬件:眾多,、不勝數(shù)

2.總體設(shè)計思想

    串口通訊把數(shù)據(jù)的字節(jié)分解成單個的二進制比特流依次傳輸,其結(jié)構(gòu)簡單,,連接線少,,應(yīng)用非常廣泛,。實現(xiàn)串口通信的方法很多。如:利用標(biāo)準(zhǔn)通信函數(shù)實現(xiàn)串口通信,、利用API實現(xiàn)串口通信和利用ActiveX控件實現(xiàn),。

    本文主要采用ActiveX控件Microsoft Communications Control(MSComm)編程,Windows平臺先進的ActiveX技術(shù)使得對串口編程不再需要處理煩瑣的細(xì)節(jié),。利用已有的AxtiveX控件,,只需要編寫少量的代碼,就可以輕松高效地完成任務(wù),。

    以下對ActiveX控件屬性進行簡單介紹,,在ClassWizard中為新創(chuàng)建的通信控件定義成員對象(CMSComm m_comm),通過該對象便可以對串口屬性進行設(shè)置,,MSComm控件共有27個屬性,,這里只介紹其中幾個常用屬性:

CommPort:設(shè)置并回通訊端口號

  • Settings:以字符/其他的形式設(shè)置并返回波特率,、奇偶校驗,、數(shù)據(jù)位、停止位,。
  • PortOpen:設(shè)置并返回通訊端口的狀態(tài),,也可以打開和關(guān)閉端口。
  • Input:   從接收緩沖區(qū)返回和刪除字符,。
  • Output:  向發(fā)送緩沖區(qū)寫一個字符串,。
  • InputLen:設(shè)置每次Input讀入的字符個數(shù),缺省值為0,,表明讀取接收緩沖區(qū)中的全部內(nèi)容,。
  • InBufferCount:返回接收緩沖區(qū)中已接收到的字符數(shù),將其置0可以清除接收緩沖區(qū),。
  • InputMode:定義Input屬性獲取數(shù)據(jù)的方式(0:文本方式,;為1:二進制方式)
  • RThresholdSThreshold:表示在OnComm事件發(fā)生之前,,接收緩沖區(qū)或發(fā)送緩沖區(qū)中可以接收的字符數(shù),。

3.具體設(shè)計截面圖

   

    1、建立應(yīng)用工程

          》》》》(1)以VC++60為例:

                       創(chuàng)建一個基于對話框的MFC應(yīng)用程序項目,,選擇Project菜單下Add to Project子菜單

                       中的Components and Controls選項,,在彈出的對話框中雙擊Registered

                       ActiveX Controls項,則所有注冊過的ActiveX控件出現(xiàn)在列表框中,。選擇Microsoft

                       Communications Controlversion 60,,單擊insert按鈕即可將通信控件插入該工

                       程。添加該控件到對話框中,,設(shè)置控件ID號為IDC _MSCOMM.

          》》》》(2)以VS2010為例,,具體參考此鏈接:

    2,、添加界面控件

           將對話框中的按鈕“取消”刪除,將“確定”按鈕改為“退出”,。在對話框中添加適當(dāng)?shù)慕缑婵丶?/span>

           本實驗中需添加的標(biāo)注用的靜態(tài)控件,、用于選擇串口和設(shè)置波特率的組合框分別設(shè)置控件ID號為

           IDC_COMBO_SELECT和IDC _COMBO_BTL SET、添加控制開始發(fā)送/接收按鈕控件并設(shè)置控件ID號為

           IDC_BUTTON_START,,添加用于輸入發(fā)送數(shù)據(jù)和輸出接收數(shù)據(jù)的編輯框并設(shè)置控件ID號為

           IDC_EDIT_SEND和IDC_EDIT_RECEVE,,同時為其設(shè)置各種屬性。


-----------------------------分割分割分割--------------------------------------------

      添加完后如下圖

                                                                  

3,、映射控件通用消息

   (1)打開MFC ClassWizard對話框,,單擊Member Valuable為相應(yīng)控件添加變量。添加變量名和類型如下表:

控件ID號

變量名

變量類似

IDC_EDIT_RECEVE

CString

m_strReceive

IDC_EDIT_SEND

CString

m_strSend

IDC_MSCOMM

CMSComm

m_MScomm

IDC_PORT

int

m_nPort

如下圖:

                                                              

4,、為對應(yīng)控件添加代碼

1為按鈕IDC_BUTTON_OPEN添加單擊響應(yīng)函數(shù)void CMyDlg::OnButtonOpen(),;函數(shù)代碼如下:

   

CMyDlg::OnButtonOpen();函數(shù)代碼如下: void CMyDlg::OnButtonOpen() { // TODO: Add your control notification handler code here if(m_MSComm.GetPortOpen()) { AfxMessageBox(_T('親,,請先關(guān)閉串口,!')); return; } UpdateData(TRUE); if(m_nPort==-1) { AfxMessageBox(_T('親,請選擇串口,!')); 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ù)長度為0 m_MSComm.SetInputMode(1);//1:表示以二進制方式檢取數(shù)據(jù) m_MSComm.SetRThreshold(1); /* 接收緩沖區(qū)有1個及1個以上字符時,,將引發(fā)接收數(shù)據(jù)的Oncomm事件*/ m_MSComm.SetPortOpen(TRUE);//打開串口 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('啊哦!打開串口COM%d失??!'),m_nPort); AfxMessageBox(strInfo); GetDlgItem(IDC_BUTTON_OPEN)->EnableWindow(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('親,請先打開串口,!')); return; } UpdateData(TRUE); //讀取編輯框內(nèi)容 int nSendLength=m_strSend.GetLength();//要發(fā)送的字符串送字符數(shù)組 CByteArray ByteArray; ByteArray.RemoveAll(); ByteArray.SetSize(nSendLength); for(int i=0;i

3)為按鈕IDC_BUTTON_CLOSE添加單擊響應(yīng)函void CMyDlg::OnButtonClose(),;函數(shù)代碼如下:

   

void CMyDlg::OnButtonClose() { // TODO: Add your control notification handler code here if(!m_MSComm.GetPortOpen()) { AfxMessageBox(_T('親,請先打開串口,!')); return; } m_MSComm.SetPortOpen(FALSE); GetDlgItem(IDC_BUTTON_OPEN)->EnableWindow(TRUE); GetDlgItem(IDC_BUTTON_CLOSE)->EnableWindow(FALSE);}

(4)為組合框添加初始化函數(shù)void CMyDlg::OnSelchangeBps(),;編輯加入代碼如下

void CMyDlg::OnSelchangeBps() { // TODO: 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.SetSettings('4800,n,8,1'); break; default: break; } /*參數(shù)1表示每當(dāng)串口接收緩沖區(qū)中有多于或等于 1個字符時將引發(fā)一個接收數(shù)據(jù)的OnComm事件*/ UpdateData(false);}

  (5IDC _MSCOMM添加消息映射函數(shù)void CMyDlg::OnOnCommMscomm()以便當(dāng)接收緩沖區(qū)有數(shù)據(jù)時做相應(yīng)處理。添加代碼如下:

void CMyDlg::OnOnCommMscomm() { // TODO: Add your control notification handler code here VARIANT varinant_Input; COleSafeArray safearray_Input; BYTE RcvData[2048]; //設(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();//得到有效數(shù)據(jù)長度 for(long i=0;i

   

  (6)數(shù)據(jù)

void CMyDlg::OnRadio1() { // TODO: Add your control notification handler code here b=true;}void CMyDlg::OnRadio2() { // TODO: Add your control notification handler code here b=false;}

接收形式添加函數(shù)void CMyDlg::OnRadio添加代碼如下:


  5.生成可執(zhí)行的EXE文件

編譯,、鏈接、運行會相應(yīng)工程目錄下的debug目錄下生成可執(zhí)行的EXE文件,。連接好串口線后運行該文件可進行串口通信,。運行如下

                             

五、軟件流程圖

符號設(shè)定

        流程開始符號:      

          流程結(jié)束符號:       

         判定符號:           

        路由符號:          

        文檔輸出:  

 

在概念設(shè)計中,我采用單向策略.用自頂向下設(shè)計一個全局概念結(jié)構(gòu)的框架,以它為骨架集成由自底向上策略中設(shè)計的各局部概念結(jié)構(gòu).

,、測試結(jié)果截圖

筆記本電腦運行如下:(分整數(shù)和字符兩種顯示格式)

A.整數(shù)顯示

                                                                          

B.字符顯示

                                                                         

C.外設(shè)測試運行如下:

                              

轉(zhuǎn)載請注明來源,,么么噠!原創(chuàng)聲明:本文為-Sure-原創(chuàng)作品,轉(zhuǎn)載時請注明“轉(zhuǎn)自-Sure-”及原文鏈接,。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多