0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

在VS2013下編寫基于MSCOMM的MFC串口通訊程序

qianyanjishuhui ? 來源:愛上PLC ? 2023-08-18 11:09 ? 次閱讀

VS2013,串口程序編寫和調試;參照網文,整理。

開發(fā)環(huán)境:VS2013

串口控件

電腦:win7,32版本

準備:

· 1、下載串口控件:

壓縮包包含四個文件:MSCOMM.SRG、MSCOMM32.DEP、MSCOMM32.oca、mscomm32.ocx;

解壓后拷貝到:

C:WindowsSystem32(WIN7、Win8、Win10系統(tǒng));

C:WINDOWSsystem32(XP系統(tǒng))。

注意:64位win7、8、10系統(tǒng)還需要將mscomm32.ocx文件復制到C:WindowsSysWOW64目錄下,否則后面注冊會出錯。

2、在C:WindowsSystem32里找到cmd.exe以管理員身份運行:

Regsvr32 C:WINDOWSsystem32MSCOMM32.OCX

注冊成功如圖所示:

3、修改注冊表:win+R組合鍵打開“運行”或者直接在開始菜單里找到“運行”;輸入regedit后回車,打開注冊表管理器,在其中找到HKEY_CLASSES_ROOT項下的Licenses項,添加主項命名為“4250E830-6AC2-11cf-8ADB-00AA00C00905”,并將鍵值修改為“kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun”

4、新建MFC工程:在VS 2013中新建一個MFC項目,比如基于對話框的一個項目

5、添加MSComm控件:在對話框上右擊選擇“打開ActiveX控件”,英文版“InsertActiveX Control”找到Microsoft Communications Control,version 6.0,此時在對話框中出現一個電話一下的按鈕,這個就是MSComm控件,軟件運行時是看不見的

6、按你需要的,添加對話框控件:

7、在電話控件上添加映射變量;完成后, 在工程中會自動生成mscomm.h 和mscomm.cpp兩個文件;

8、在串口控件上右鍵,添加控件事件處理函數:

91af2986-3d73-11ee-ac96-dac502259ad0.jpg

91d4765a-3d73-11ee-ac96-dac502259ad0.png

91fbfe00-3d73-11ee-ac96-dac502259ad0.jpg

11、打開串口按鈕回調函數編寫:

CString portnums = _T("0");//定義串口編號,默認值串口編號為0

void Cport_demonstrationDlg::OnBnClickedBottonOpen()

{

// TODO: 在此添加控件通知處理程序代碼

Edit.GetWindowText(portnums);//獲取編輯框中的串口編號

int flag = _ttoi(portnums);//將其轉化為數值類型

if (flag)//如果輸入的串口編號為正整數,才執(zhí)行下列命令

{

if (m_mscomm.get_PortOpen())

{

m_mscomm.put_PortOpen(FALSE);

}

m_mscomm.put_CommPort(flag); //選擇COM

m_mscomm.put_InBufferSize(1024); //接收緩沖區(qū)

m_mscomm.put_OutBufferSize(1024);//發(fā)送緩沖區(qū)

m_mscomm.put_InputLen(0);//設置當前接收區(qū)數據長度為0,表示全部讀取

m_mscomm.put_InputMode(1);//以二進制方式讀寫數據

m_mscomm.put_RThreshold(1);//接收緩沖區(qū)有1個及1個以上字符時,將引發(fā)接收數據的OnComm

m_mscomm.put_Settings(_T("9600,n,8,1"));//波特率9600無檢驗位,8個數據位,1個停止位

if (!m_mscomm.get_PortOpen())//如果串口沒有打開則打開

{

m_mscomm.put_PortOpen(TRUE);//打開串口

AfxMessageBox(_T("串口打開成功"));

}

else

{

m_mscomm.put_OutBufferCount(0);

AfxMessageBox(_T("串口打開失敗"));

}

}

else

{

AfxMessageBox(_T("請先輸入需要打開串口編號"));

}

}

12、關閉按鈕回調函數編寫:

void Cport_demonstrationDlg::OnBnClickedBottonClose()

{

// TODO: 在此添加控件通知處理程序代碼

m_mscomm.put_PortOpen(FALSE);//關閉串口

AfxMessageBox(_T("串口已關閉"));

}

13、發(fā)送數據按鈕回調函數實現:

void Cport_demonstrationDlg::OnBnClickedBottonSend()

{

// TODO: 在此添加控件通知處理程序代碼

UpdateData(true); //讀取編輯框內容

m_mscomm.put_Output(COleVariant(m_EditSend));//發(fā)送數據

m_EditSend.Empty(); //發(fā)送后清空輸入框

UpdateData(false); //更新編輯框內容

}

14、接收數據按鈕回調函數編寫(寫在串口事件處理程序里面):

void Cport_demonstrationDlg::OnCommMscomm1()

{

// TODO: 在此處添加消息處理程序代碼

static unsigned int cnt = 0;

VARIANT variant_inp;

COleSafeArray safearray_inp;

long len, k;

unsigned int data[1024] = { 0 };

byte rxdata[1024]; //設置 BYTE 數組

CString strtemp;

if (m_mscomm.get_CommEvent() == 2) //值為 2 表示接收緩沖區(qū)內有字符

{

cnt++;

variant_inp = m_mscomm.get_Input(); //讀緩沖區(qū)消息

safearray_inp = variant_inp; ///變量轉換

len = safearray_inp.GetOneDimSize(); //得到有效的數據長度

for (k = 0; k

{

safearray_inp.GetElement(&k, rxdata + k);

}

for (k = 0; k

{

strtemp.Format(_T("%c"), *(rxdata + k));

m_EditReceive += strtemp;

CString temp = _T(" "); //換行

m_EditReceive += temp;

}

}

UpdateData(FALSE); //更新編輯框內容

}

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • 文件
    +關注

    關注

    1

    文章

    555

    瀏覽量

    24634
  • 串口
    +關注

    關注

    14

    文章

    1535

    瀏覽量

    75880
  • 程序
    +關注

    關注

    115

    文章

    3743

    瀏覽量

    80661
  • 串口通訊
    +關注

    關注

    1

    文章

    257

    瀏覽量

    24785

原文標題:在VS2013下編寫基于MSCOMM的MFC串口通訊程序

文章出處:【微信號:愛上PLC,微信公眾號:愛上PLC】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    vs2013上移植ucosii

    學習嵌入式操作系統(tǒng),ucosii是很好的入門途徑,但是手頭又沒有硬件怎么辦,我找到了一個vs2013上移植ucosii的例程,具體工程看附件。我只是搬運一,如果有誰運行出現問題,可以回復我。
    發(fā)表于 11-05 21:47

    一個VS+OpenCV編寫的攝像機采集圖像的小程序

    這個程序VS2013編寫的,用OpenCv3.00的平臺,攝像機是大恒的HV1351UM,只實現了圖像的采集,并沒有圖像處理的功能在里
    發(fā)表于 03-21 21:07

    64位MATLAB2015a與64位VS2013混合編程

    以及是否需要專業(yè)版或者完整版有什么要求嗎?請問有VS2013的官方版下載地址嗎?我是新手,望各位大神指導一,謝謝啦
    發(fā)表于 08-18 15:20

    VS2010之MFC串口通信的編寫教程

    本帖最后由 lee_st 于 2017-10-31 09:24 編輯 VS2010之MFC串口通信的編寫教程
    發(fā)表于 10-30 17:02

    ucguivs2013上的仿真

    原子老師,各位大俠,大家有沒有用過vs2013仿真過ucgui
    發(fā)表于 04-25 05:53

    基于MSComm32的LabVIEW串口通訊

    基于MSComm32的LabVIEW串口通訊高效易行,串口通訊程序中包含子vi:打開
    發(fā)表于 09-05 19:52

    為什么VS2013仿真的代碼板子上運行是兩個結果?

    為什么 VS2013仿真的代碼板子上運行是兩個結果
    發(fā)表于 09-25 04:35

    請問有VS2013軟件的下載地址嗎?

    誰有VS2013軟件的下載地址
    發(fā)表于 04-01 04:38

    請問GUIBuilder生成的文件VS2013上無法仿真怎么解決?

    ,無法打開,而在GUIBuilder生成的.c文件中可以打開,請問這是為什么?還是VS2013不能這么用?之后將主函數直接放到GUIBuilder生成的.c文件中,編譯通過,但在打開虛擬機是黑屏顯示,沒有反應,請問這是為什么?我開發(fā)板上測試以上兩種情況沒有問題
    發(fā)表于 04-28 01:59

    VS2010之MFC串口通信的編寫教程

    VS2010之MFC串口通信的編寫教程
    發(fā)表于 03-02 11:22

    VC基于MSCOMM控件串口通訊

    mfc 中進行串口通訊最簡單的方法莫過于在對話框中使用MSCOMM 控件了,MSComm 通信
    發(fā)表于 03-08 14:52 ?84次下載

    mscomm32控件

    運用mscomm可以進行計算機通信,vs中的MFC工程中可以調用,但是需要注冊
    發(fā)表于 07-25 17:45 ?14次下載

    如何使用VS2013做C語言編譯器的創(chuàng)建方法詳細資料說明

    本文檔的主要內容詳細介紹的是如何使用VS2013做C語言編譯器的創(chuàng)建方法詳細資料說明。前言,C語言是一個 歷史悠久的計算器編程語言,幾十年的發(fā)展,現在任然經久不衰。有很多C語言編譯器。這里介紹用強大的VS2013 做C編譯器學習C語言 方便快捷。
    發(fā)表于 11-06 16:18 ?8次下載
    如何使用<b class='flag-5'>VS2013</b>做C語言編譯器的創(chuàng)建方法詳細資料說明

    VS2013 MFC基于對話框編程系列的19個程序資料免費下載

    VS2013 作為最新版的 Visual studio,界面和功能上相比之前的版本有了較大的改善和提高, MFC 作為集成 API 的簡單版更適合編程開發(fā),許多應用軟件都是基于對話框的,這里就介紹一如何在
    發(fā)表于 03-05 08:00 ?12次下載
    <b class='flag-5'>VS2013</b> <b class='flag-5'>MFC</b>基于對話框編程系列的19個<b class='flag-5'>程序</b>資料免費下載

    實現win10基于VS2015的串口開發(fā)

    都是心酸淚,既然之前的工程不能用,那就重新來吧,首先想到了Mscomm控件。下面把它的步驟簡要說明MFC添加串口Mscomm控件 1.
    的頭像 發(fā)表于 03-12 16:00 ?2679次閱讀
    實現win10<b class='flag-5'>下</b>基于<b class='flag-5'>VS</b>2015的<b class='flag-5'>串口</b>開發(fā)