VS2013,串口程序編寫和調(diào)試;參照網(wǎng)文,整理。
開(kāi)發(fā)環(huán)境:VS2013
串口控件
電腦:win7,32版本
準(zhǔn)備:
· 1、下載串口控件:
壓縮包包含四個(gè)文件: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文件復(fù)制到C:WindowsSysWOW64目錄下,否則后面注冊(cè)會(huì)出錯(cuò)。
2、在C:WindowsSystem32里找到cmd.exe以管理員身份運(yùn)行:
Regsvr32 C:WINDOWSsystem32MSCOMM32.OCX
注冊(cè)成功如圖所示:
3、修改注冊(cè)表:win+R組合鍵打開(kāi)“運(yùn)行”或者直接在開(kāi)始菜單里找到“運(yùn)行”;輸入regedit后回車,打開(kāi)注冊(cè)表管理器,在其中找到HKEY_CLASSES_ROOT項(xiàng)下的Licenses項(xiàng),添加主項(xiàng)命名為“4250E830-6AC2-11cf-8ADB-00AA00C00905”,并將鍵值修改為“kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun”
4、新建MFC工程:在VS 2013中新建一個(gè)MFC項(xiàng)目,比如基于對(duì)話框的一個(gè)項(xiàng)目
5、添加MSComm控件:在對(duì)話框上右擊選擇“打開(kāi)ActiveX控件”,英文版“InsertActiveX Control”找到Microsoft Communications Control,version 6.0,此時(shí)在對(duì)話框中出現(xiàn)一個(gè)電話一下的按鈕,這個(gè)就是MSComm控件,軟件運(yùn)行時(shí)是看不見(jiàn)的
6、按你需要的,添加對(duì)話框控件:
7、在電話控件上添加映射變量;完成后, 在工程中會(huì)自動(dòng)生成mscomm.h 和mscomm.cpp兩個(gè)文件;
8、在串口控件上右鍵,添加控件事件處理函數(shù):
11、打開(kāi)串口按鈕回調(diào)函數(shù)編寫:
CString portnums = _T("0");//定義串口編號(hào),默認(rèn)值串口編號(hào)為0
void Cport_demonstrationDlg::OnBnClickedBottonOpen()
{
// TODO: 在此添加控件通知處理程序代碼
Edit.GetWindowText(portnums);//獲取編輯框中的串口編號(hào)
int flag = _ttoi(portnums);//將其轉(zhuǎn)化為數(shù)值類型
if (flag)//如果輸入的串口編號(hào)為正整數(shù),才執(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);//設(shè)置當(dāng)前接收區(qū)數(shù)據(jù)長(zhǎng)度為0,表示全部讀取
m_mscomm.put_InputMode(1);//以二進(jìn)制方式讀寫數(shù)據(jù)
m_mscomm.put_RThreshold(1);//接收緩沖區(qū)有1個(gè)及1個(gè)以上字符時(shí),將引發(fā)接收數(shù)據(jù)的OnComm
m_mscomm.put_Settings(_T("9600,n,8,1"));//波特率9600無(wú)檢驗(yàn)位,8個(gè)數(shù)據(jù)位,1個(gè)停止位
if (!m_mscomm.get_PortOpen())//如果串口沒(méi)有打開(kāi)則打開(kāi)
{
m_mscomm.put_PortOpen(TRUE);//打開(kāi)串口
AfxMessageBox(_T("串口打開(kāi)成功"));
}
else
{
m_mscomm.put_OutBufferCount(0);
AfxMessageBox(_T("串口打開(kāi)失敗"));
}
}
else
{
AfxMessageBox(_T("請(qǐng)先輸入需要打開(kāi)串口編號(hào)"));
}
}
12、關(guān)閉按鈕回調(diào)函數(shù)編寫:
void Cport_demonstrationDlg::OnBnClickedBottonClose()
{
// TODO: 在此添加控件通知處理程序代碼
m_mscomm.put_PortOpen(FALSE);//關(guān)閉串口
AfxMessageBox(_T("串口已關(guān)閉"));
}
13、發(fā)送數(shù)據(jù)按鈕回調(diào)函數(shù)實(shí)現(xiàn):
void Cport_demonstrationDlg::OnBnClickedBottonSend()
{
// TODO: 在此添加控件通知處理程序代碼
UpdateData(true); //讀取編輯框內(nèi)容
m_mscomm.put_Output(COleVariant(m_EditSend));//發(fā)送數(shù)據(jù)
m_EditSend.Empty(); //發(fā)送后清空輸入框
UpdateData(false); //更新編輯框內(nèi)容
}
14、接收數(shù)據(jù)按鈕回調(diào)函數(shù)編寫(寫在串口事件處理程序里面):
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]; //設(shè)置 BYTE 數(shù)組
CString strtemp;
if (m_mscomm.get_CommEvent() == 2) //值為 2 表示接收緩沖區(qū)內(nèi)有字符
{
cnt++;
variant_inp = m_mscomm.get_Input(); //讀緩沖區(qū)消息
safearray_inp = variant_inp; ///變量轉(zhuǎn)換
len = safearray_inp.GetOneDimSize(); //得到有效的數(shù)據(jù)長(zhǎng)度
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); //更新編輯框內(nèi)容
}
-
文件
+關(guān)注
關(guān)注
1文章
579瀏覽量
25364 -
串口
+關(guān)注
關(guān)注
15文章
1588瀏覽量
79919 -
程序
+關(guān)注
關(guān)注
117文章
3826瀏覽量
82968 -
串口通訊
+關(guān)注
關(guān)注
1文章
265瀏覽量
25543
原文標(biāo)題:在VS2013下編寫基于MSCOMM的MFC串口通訊程序
文章出處:【微信號(hào):愛(ài)上PLC,微信公眾號(hào):愛(ài)上PLC】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
怎么配置dlp6500二次開(kāi)發(fā)的環(huán)境,可以使用VS2013嗎?
vs2013上移植ucosii
一個(gè)VS+OpenCV編寫的攝像機(jī)采集圖像的小程序
64位MATLAB2015a與64位VS2013混合編程
為什么VS2013仿真的代碼在板子上運(yùn)行是兩個(gè)結(jié)果?
請(qǐng)問(wèn)GUIBuilder生成的文件在VS2013上無(wú)法仿真怎么解決?
VC基于MSCOMM控件串口通訊
mscomm32控件
如何使用VS2013做C語(yǔ)言編譯器的創(chuàng)建方法詳細(xì)資料說(shuō)明

VS2013 MFC基于對(duì)話框編程系列的19個(gè)程序資料免費(fèi)下載

實(shí)現(xiàn)win10下基于VS2015的串口開(kāi)發(fā)

評(píng)論