国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
vc++6.0使用串口控件例程

vc++6.0使用串口控件例程

來(lái)源:csdn 作者:不詳 時(shí)間:2008-05-15 點(diǎn)擊:551 次
      1.建立項(xiàng)目:

  打開(kāi)VC++6.0,建立一個(gè)基于對(duì)話框的MFC應(yīng)用程序SCommTest;

  2.在項(xiàng)目中插入MSComm控件 

  選擇Project菜單下Add To Project子菜單中的 Components and Controls…選項(xiàng),在彈出的對(duì)話框中雙擊Registered ActiveX Controls項(xiàng)(稍等一會(huì),這個(gè)過(guò)程較慢),則所有注冊(cè)過(guò)的ActiveX控件出現(xiàn)在列表框中。 選擇Microsoft Communications Control, version 6.0,,單擊Insert按鈕將它插入到我們的Project中來(lái),接受缺省的選項(xiàng)。(如果你在控件列表中看不到Microsoft Communications Control, version 6.0,那可能是你在安裝VC6時(shí)沒(méi)有把ActiveX一項(xiàng)選上,重新安裝VC6,選上ActiveX就可以了),

  這時(shí)在ClassView視窗中就可以看到CMSComm類了,(注意:此類在ClassWizard中看不到,重構(gòu)clw文件也一樣),并且在控件工具欄Controls中出現(xiàn)了電話圖標(biāo),現(xiàn)在要做的是用鼠標(biāo)將此圖標(biāo)拖到對(duì)話框中,程序運(yùn)行后,這個(gè)圖標(biāo)是看不到的。

  3.利用ClassWizard定義CMSComm類控制對(duì)象 

  打開(kāi)ClassWizard->Member Viariables選項(xiàng)卡,選擇CSCommTestDlg類,為IDC_MSCOMM1添加控制變量:m_ctrlComm,這時(shí)你可以看一看,在對(duì)話框頭文件中自動(dòng)加入了//{{AFX_INCLUDES() #include "mscomm.h" //}}AFX_INCLUDES 。

  4.在對(duì)話框中添加控件 向主對(duì)話框中添加兩個(gè)編輯框,一個(gè)用于接收顯示數(shù)據(jù)ID為IDC_EDIT_RXDATA,另一個(gè)用于輸入發(fā)送數(shù)據(jù),ID為IDC_EDIT_TXDATA,再添加一個(gè)按鈕,功能是按一次就把發(fā)送編輯框中的內(nèi)容發(fā)送一次,將其ID設(shè)為IDC_BUTTON_MANUALSEND。別忘記了將接收編輯框的Properties->Styles中把Miltiline和Vertical Scroll屬性選上,發(fā)送編輯框若你想輸入多行文字,也可選上Miltiline。

  再打開(kāi)ClassWizard->Member Viariables選項(xiàng)卡,選擇CSCommTestDlg類, 為IDC_EDIT_RXDATA添加CString變量m_strRXData, 為IDC_EDIT_TXDATA添加CString變量m_strTXData。說(shuō)明: m_strRXData和m_strTXData分別用來(lái)放入接收和發(fā)送的字符數(shù)據(jù)。

  5.添加串口事件消息處理函數(shù)OnComm() 

  打開(kāi)ClassWizard->Message Maps,選擇類CSCommTestDlg,選擇IDC_MSCOMM1,雙擊消息OnComm,將彈出的對(duì)話框中將函數(shù)名改為OnComm。

  這個(gè)函數(shù)是用來(lái)處理串口消息事件的,如每當(dāng)串口接收到數(shù)據(jù),就會(huì)產(chǎn)生一個(gè)串口接收數(shù)據(jù)緩沖區(qū)中有字符的消息事件,我們剛才添加的函數(shù)就會(huì)執(zhí)行,我們?cè)贠nComm()函數(shù)加入相應(yīng)的處理代碼就能實(shí)現(xiàn)自已想要的功能了。請(qǐng)你在函數(shù)中加入如下代碼:

void CSCommTestDlg::OnComm() 
{
 // TODO: Add your control notification handler code here
 VARIANT variant_inp;
 COleSafeArray safearray_inp;
 LONG len,k;
 BYTE rxdata[2048]; //設(shè)置BYTE數(shù)組 An 8-bit integerthat is not signed.
 CString strtemp;
 if(m_ctrlComm.GetCommEvent()==2) //事件值為2表示接收緩沖區(qū)內(nèi)有字符
 { ////////以下你可以根據(jù)自己的通信協(xié)議加入處理代碼
  variant_inp=m_ctrlComm.GetInput(); //讀緩沖區(qū)
  safearray_inp=variant_inp; //VARIANT型變量轉(zhuǎn)換為ColeSafeArray型變量
  len="safearray"_inp.GetOneDimSize(); //得到有效數(shù)據(jù)長(zhǎng)度
  for(k=0;k<len;k++)
  safearray_inp.GetElement(&k,rxdata+k);//轉(zhuǎn)換為BYTE型數(shù)組
  for(k=0;k<len;k++) //將數(shù)組轉(zhuǎn)換為Cstring型變量
  {
   BYTE bt=*(char*)(rxdata+k); //字符型
   strtemp.Format("%c",bt); //將字符送入臨時(shí)變量strtemp存放
   m_strRXData+=strtemp; //加入接收編輯框?qū)?yīng)字符串 
  }
 }
 UpdateData(FALSE); //更新編輯框內(nèi)容
}

  到目前為止還不能在接收編輯框中看到數(shù)據(jù),因?yàn)槲覀冞€沒(méi)有打開(kāi)串口,但運(yùn)行程序不應(yīng)該有任何錯(cuò)誤,不然,你肯定哪兒沒(méi)看仔細(xì),因?yàn)槲沂谴蜷_(kāi)VC6對(duì)照著做一步寫(xiě)一行的,運(yùn)行試試。沒(méi)錯(cuò)吧?那么做下一步:

  6.打開(kāi)串口和設(shè)置串口參數(shù) 

  你可以在你需要的時(shí)候打開(kāi)串口,例如在程序中做一個(gè)開(kāi)始按鈕,在該按鈕的處理函數(shù)中打開(kāi)串口?,F(xiàn)在我們?cè)谥鲗?duì)話框的CSCommTestDlg::OnInitDialog()打開(kāi)串口,加入如下代碼:

 // TODO: Add extra initialization here
 if(m_ctrlComm.GetPortOpen())
  m_ctrlComm.SetPortOpen(FALSE);

 m_ctrlComm.SetCommPort(1); //選擇com1
 if( !m_ctrlComm.GetPortOpen())
  m_ctrlComm.SetPortOpen(TRUE);//打開(kāi)串口
 else
  AfxMessageBox("cannot open serial port");

 m_ctrlComm.SetSettings("9600,n,8,1"); //波特率9600,無(wú)校驗(yàn),8個(gè)數(shù)據(jù)位,1個(gè)停止位

 m_ctrlComm.SetInputModel(1); //1:表示以二進(jìn)制方式檢取數(shù)據(jù)
 m_ctrlComm.SetRThreshold(1); 
 //參數(shù)1表示每當(dāng)串口接收緩沖區(qū)中有多于或等于1個(gè)字符時(shí)將引發(fā)一個(gè)接收數(shù)據(jù)的OnComm事件
 m_ctrlComm.SetInputLen(0); //設(shè)置當(dāng)前接收區(qū)數(shù)據(jù)長(zhǎng)度為0
 m_ctrlComm.GetInput();//先預(yù)讀緩沖區(qū)以清除殘留數(shù)據(jù)

  現(xiàn)在你可以試試程序了,將串口線接好后(不會(huì)接?去看看我寫(xiě)的串口接線基本方法),打開(kāi)串口調(diào)試助手,并將串口設(shè)在com2,選上自動(dòng)發(fā)送,也可以等會(huì)手動(dòng)發(fā)送。再執(zhí)行你編寫(xiě)的程序,接收框里應(yīng)該有數(shù)據(jù)顯示了。

  7.發(fā)送數(shù)據(jù) 

  先為發(fā)送按鈕添加一個(gè)單擊消息即BN_CLICKED處理函數(shù),打開(kāi)ClassWizard->Message Maps,選擇類CSCommTestDlg,選擇IDC_BUTTON_MANUALSEND,雙擊BN_CLICKED添加OnButtonManualsend()函數(shù),并在函數(shù)中添加如下代碼:

void CSCommTestDlg::OnButtonManualsend() 
{
 // TODO: Add your control notification handler code here
 UpdateData(TRUE); //讀取編輯框內(nèi)容
 m_ctrlComm.SetOutput(COleVariant(m_strTXData));//發(fā)送數(shù)據(jù)
}

  運(yùn)行程序,在發(fā)送編輯框中隨意輸入點(diǎn)什么,單擊發(fā)送按鈕,??!看看,在另一端的串口調(diào)試助手(或別的調(diào)試工具)接收框里出現(xiàn)了什么。

  如果你真是初次涉獵串口編程,又一次成功,那該說(shuō)聲謝謝我了,因?yàn)槲业谝淮巫龃诔绦驎r(shí)可費(fèi)勁了,那時(shí)網(wǎng)上的資料也不好找。開(kāi)開(kāi)玩笑,謝謝你的支持,有什么好東西別忘了給我寄一份。

  說(shuō)明:

  由于用到VC控件,在沒(méi)有安裝VC的計(jì)算機(jī)上運(yùn)行時(shí)要從VC中把mscomm32.ocx、msvcrt.dll、mfc42.dll拷到Windows目錄下的System子目錄中(win2000為System32)并再進(jìn)行注冊(cè)設(shè)置。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
VC控件MSComm編寫(xiě)串口通信程序(轉(zhuǎn)) - leadtheway - ItEye技術(shù)網(wǎng)...
vc串口調(diào)試助手源程序
用vs2010開(kāi)發(fā)基于VC++的MFC 串口通信一*****兩臺(tái)電腦同一個(gè)串口號(hào)之間的通信
VS2010基于對(duì)話框的MFC串口通信簡(jiǎn)明例程
通訊串口:VB/C++/C#串口通信源代碼+詳細(xì)注釋用的是axMSComm控件,通信方式...
用VC 6.0實(shí)現(xiàn)串行通信的三種方法
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服