新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 在VC++中用ActiveX 控件實現與單片機的串行通信

        在VC++中用ActiveX 控件實現與單片機的串行通信

        作者: 時間:2016-12-02 來源:網絡 收藏


        3.設置屬性

          可以在兩個地方對控件的屬性進行設置:

          (1)對話框資源編輯器中。在對話框模板上,用右鍵單擊MSCOMM控件,然后選擇Properties…菜單項,最后便可設置各項屬性。此處只對以下幾處進行改動,其他接受缺省設置:Rthershold:1,InputLen:1,DTREnable:不選,InputMode:1- Binary。

          (2)對話框類的OnInitDialog()函數中。下面是以上設置的函數實現:

          BOOL CMyCOMMDlg::OnlnitDialog()

          {

          CDialog::OnlnitDialog();

          //此處為應用框架自動生成代碼,不予列出

          //TODO:Add extra initialization here

          m_comm.SetCommPort(1);//使用串口1

          m_comm.SetSettings("9600,N,8,1");

          //波特率為9600,無奇偶校驗,8位數據位,1位停止位

          m_comm.SetRThreshold(10); //每接收10個字符就觸發1次接收事件

          m_comm.SetSThreshold(0); //不觸發發送事件

          m_comm.SetInputLen(10); //每次讀操作從緩沖區中取10個字符

          m_comm.SetInputMode(1); //二進制數據傳輸形式

          m_comm.SetPortOpen(TRUE); //打開串口

          return TRUE;//return TRUE unless you set the focus to a control

          }

        4.發送二進制數據

          如果需要發送二進制數據,可將數據作如下處理。具體代碼如下:

          CByteArray bytOutArr;

          bytOutArr.Add(0x0); //給數組賦值

          bytOutArr.Add(0x1);

          bytOutArr.Add(0x2);

          bytOutArr.Add(0x3);

          bytOutArr.Add(0x4);

          COleVariant varOut;

          varOut=COleVariant(bytOutArr); //將數據轉換為變體數據類型

          m_comm.SetOutput (varOut); //發送數據

        5.接收二進制數據

          當需要接收大量的數據時,最好采用事件驅動方式進行編程。具體步驟如下:

          (1)響應OnComm事件。在對話框資源編程器中,雙擊對話框模板上的MSCOMM控件,在彈出的對話框中填入您所希望的事件響應函數名,此處將其命名為OnCommMscomm1()。

          (2)在事件響應函數中接收和處理數據。接收來的數據為變體數據,所以需要做一些處理,具體代碼如下:

          void CMyCOMMDlg::OnCommMscomm1()

          {

          COleVariant varRcv;

          CByteArray byt;

          int i;

          long num;

          switch (m_comm.GetCommEvent())

          {

          cass 1://數據發送事件

          break;

          case 2://數據接收事件

          varRcv=m_comm.GetInput();

          varRcv.ChangeType (VT_ARRAY |VT_UI1);

          BYTE HUGEP *pbstr;

          HRESULT hr;

          hr=SafeArrayAccessData (varRcv.parray,(void HUGEP*FAR*)&pbstr);//獲取安全數組指針

          if (FAILED(hr)){

          AfxMessageBox("獲取數組指針失敗!");

          break;}

          num=0;

          hr=SafeArrayGetUBound (varRcv.parray,1,&num);//獲取數組上界

          if (FAILED (hr)){

          AfxMessageBox("獲取數組上界失敗!");

          break;}

          for(i=0;i

          byt.Add(pbstr);

          SafeArrayUnaccessData (varRcv.parray);

          //此時數據已保存在二進制數組byt中,可根據需要進行相關處理

          break;

          default:

          break;

          }

          }

          以上代碼中的處理部分可以做成一個單獨的函數,在此處調用即可。經過以上代碼的處理,接收來的數據已存放在二進制數組byt中,可以根據自己的需要對其進行相關處理,如保存和顯示等。

        三、硬件接口

          單片機與微機之間的硬件接口可以用1片MAX232或ICL232與幾個電容即可實現,有許多文獻討論過,此處不再多述。

          以上方法經過筆者在實踐中的應用,感到非常簡潔、方便,具有很強的實用意義。

        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 尼玛县| 钟山县| 渭南市| 辽中县| 丹巴县| 任丘市| 建阳市| 陆良县| 白山市| 射洪县| 若羌县| 乾安县| 凉城县| 富裕县| 惠东县| 江油市| 渝中区| 岗巴县| 札达县| 巴中市| 河南省| 肥城市| 土默特右旗| 甘洛县| 高密市| 乌兰浩特市| 宁蒗| 拜城县| 古浪县| 连平县| 东辽县| 乌什县| 泰顺县| 格尔木市| 庄浪县| 闻喜县| 南通市| 偃师市| 汉源县| 陕西省| 大理市|