?? 串口調試助手源程序及編程詳細過程- 無憂電子開發網-在線閱讀.htm
字號:
<P class=style29 align=left>void
CSCommTestDlg::OnButtonManualsend() <BR>{ <BR>// TODO:
Add your control notification handler code here
<BR>UpdateData(TRUE); //讀取編輯框內容
<BR>if(m_ctrlHexSend.GetCheck()) <BR>{ <BR>CByteArray
hexdata; <BR>int len=String2Hex(m_strTXData,hexdata);
//此處返回的len可以用于計算發送了多少個十六進制數
<BR>m_ctrlComm.SetOutput(COleVariant(hexdata));
//發送十六進制數據 <BR>} <BR>else
<BR>m_ctrlComm.SetOutput(COleVariant(m_strTXData));//發送ASCII字符數據
<BR><BR>} <BR></P>
<P class=style29
align=left> 現在,你先將串口線接好并打開串口調試助手V2.1,選上以十六制顯示,設置好相應串口,然后運行我們這個程序,在發送框中輸入00
01 02 03 A1
CC等十六進制字符,并選上以十六進制發送,單擊手動發送,在串口調試助手的接收框中應該可以看到00 01 02
03 A1 CC了。 </P>
<P class=style29 align=left><A><STRONG>9.在接收框中以十六進制顯示
</STRONG></A></P>
<P class=style29 align=left> 這就容易多了:
在主對話框中加入一個復選接鈕,IDC_CHECK_HEXDISPLAY Caption:
十六進制顯示,再利用ClassWizard為其添加控制變量:m_ctrlHexDiaplay。
然后修改CSCommTestDlg::OnComm()函數: </P>
<P class=style29 align=left>void CSCommTestDlg::OnComm()
<BR>{ <BR>// TODO: Add your control notification handler
code here <BR>VARIANT variant_inp; <BR>COleSafeArray
safearray_inp; <BR>LONG len,k; <BR>BYTE rxdata[2048];
//設置BYTE數組 An 8-bit integerthat is not signed.
<BR>CString strtemp;
<BR>if(m_ctrlComm.GetCommEvent()==2) //事件值為2表示接收緩沖區內有字符
<BR>{ <BR>variant_inp=m_ctrlComm.GetInput(); //讀緩沖區
<BR>safearray_inp=variant_inp;
//VARIANT型變量轉換為ColeSafeArray型變量
<BR>len=safearray_inp.GetOneDimSize(); //得到有效數據長度
<BR>for(k=0;k<len;k++)
<BR>safearray_inp.GetElement(&k,rxdata+k);//轉換為BYTE型數組
<BR>for(k=0;k<len;k++) //將數組轉換為Cstring型變量 <BR>{
<BR>BYTE bt=*(char*)(rxdata+k); //字符型
<BR>if(m_ctrlHexDisplay.GetCheck())
<BR>strtemp.Format("%02X ",bt);
//將字符以十六進制方式送入臨時變量strtemp存放,注意這里加入一個空隔 <BR>else
<BR>strtemp.Format("%c",bt); //將字符送入臨時變量strtemp存放
<BR><BR>m_strRXData+=strtemp; //加入接收編輯框對應字符串 <BR>} <BR>}
<BR>UpdateData(FALSE); //更新編輯框內容 <BR>} </P>
<P class=style29 align=left> 測試:在串口調試助手發送框中輸入00 01 02
03 A1
CC等十六進制字符,并選上以十六進制發送,單擊手動發送,在本程序運行后選上以十六進制顯示,在串口調試助手中單擊手動發送或自動發送,則在本程序的接收框中應該可以看到00
01 02 03 A1 CC了。 </P>
<P class=style29 align=left><A><STRONG>10.如何設置自動發送
</STRONG></A></P>
<P class=style29
align=left> 最簡單的設定自動發送周期是用SetTimer()函數,這在數據采集中很有用,在控制中指令的傳送也可能用到定時發送。
</P>
<P class=style29
align=left> 方法是:在ClassWizard中選上MessageMap卡,然后在Objects
IDs選中CSCommTestDlg類,再在Messages框中選上WM_TIMER消息,單擊ADD_FUNCTION加入void
CSCommTestDlg::OnTimer(UINT nIDEvent)
函數,這個函數是放入“時間到”后要處理的代碼: </P>
<P class=style29 align=left>void
CSCommTestDlg::OnTimer(UINT nIDEvent) <BR>{ <BR>// TODO:
Add your message handler code here and/or call default
<BR>OnButtonManualsend();
<BR>CDialog::OnTimer(nIDEvent); <BR>} <BR></P>
<P class=style29
align=left> 再在在主對話框中加入一個復選接鈕,ID為IDC_CHECK_AUTOSEND
Caption: 自動發送(周期1秒),再利用ClassWizard為其添加BN_CLICK消息處理函數void
CSCommTestDlg::OnCheckAutosend(): </P>
<P class=style29 align=left>void
CSCommTestDlg::OnCheckAutosend() <BR>{ <BR>// TODO: Add
your control notification handler code here
<BR>m_bAutoSend=!m_bAutoSend; <BR>if(m_bAutoSend) <BR>{
<BR>SetTimer(1,1000,NULL);//時間為1000毫秒 <BR>} <BR>else
<BR>{ <BR>KillTimer(1); //取消定時 <BR>} <BR>} </P>
<P class=style29
align=left> 其中:m_bAutoSend為BOOL型變量,在CLASSVIEW中為CSCommTestDlg類加入,并在構造函數中初始化:
</P>
<P class=style29 align=left>m_bAutoSen=FALSE;
<BR>現在可以運行程序測試了。 <BR></P>
<P class=style29
align=left><STRONG><A>11.什么是VARIANT數據類型?如何使用VARIANT數據類型?
</A></STRONG></P>
<P class=style29 align=left> 不知如何使用VARIANT數據類型,
有不少朋友對VARIANT這個新的數據類型大感頭疼。SetOutput()函數中
需要的VARIANT參數還可以使用COleVariant類的構造函數簡單生成,現在GetInput()函數的返回值也成了VARIANT類型,那么如何從返回的值中提取有用的內容。
VARIANT及由之而派生出的COleVariant類主要用于在OLE自動化中傳遞數據。實際上VARIANT也只不過是一個新定義的結構罷了,它的主要成員包括一個聯合體及一個變量。該聯合體由各種類型的數據成員構成,
而該變量則用來指明聯合體中目前起作用的數據類型。我們所關心的接收到的數據就存儲在該聯合體的某個數據成員中。
該聯合體中包含的數據類型很多,從一些簡單的變量到非常復雜的數組和指針。由于通過串口接收到的內容常常是一個字節串,我們將使用其中的某個數組或指針來訪問接收到的數據。這里推薦給大家的是指向一個SAFEARRAY(COleSafeArray)類型變量。新的數據類型SAFEARRAY正如其名字一樣,是一個“安全數組”,它能根據系統環境自動調整其16位或32
位的定義,并且不會被OLE改變(某些類型如BSTR在16位或32位應用程序間傳遞時會被OLE翻譯從而破壞其中的二進制數據)。大家無須了解SAFEARRAY的具體定義,只要知道它是另外一個結構,其中包含一個
(void *)類型的指針pvData,其指向的內存就是存放有用數據的地方。
簡而言之,從GetInput()函數返回的VARIANT類型變量中,找出parray
指針,再從該指針指向的SAFEARRAY變量中找出pvData指針,就可以向訪問數組一樣取得所接收到的數據了。具體應用請參見void
CSCommTestDlg::OnComm()函數。 </P>
<P class=style29
align=left> 大概我現在也說不清這個問題,我自己從第一次接觸這個東西,到現在還是給別人講不清。
</P>
<P class=style28
align=left><BR> </P></TD></TR></TBODY></TABLE></TD></TR>
<TR>
<TD align=right width="100%" height=17><BR><A
href="http://www.51kaifa.com/zxyd/read.php?ID=166">返回</A> <A
href="http://www.51kaifa.com/zxyd/read_z.php?ID=948&BigClass=6">上一頁</A>
<A
href="http://www.51kaifa.com/zxyd/read_z.php?ID=950&BigClass=6">下一頁</A>
信息發布:工號01 轉引自: 【<A
href="javascript:fontzoom(16)">大</A> <A
href="javascript:fontzoom(14)">中</A> <A
href="javascript:fontzoom(12)">小</A>】【<A
onclick=window.print();
href="http://www.51kaifa.com/zxyd/read_z.php?ID=949&BigClass=6#">打印</A>】【<A
href="javascript:window.close()">關閉</A>】
<BR><BR></TD></TR></TBODY></TABLE></TD>
<TD vAlign=top width=1 bgColor=#808080><IMG height=1 alt=""
src="串口調試助手源程序及編程詳細過程- 無憂電子開發網-在線閱讀_files/xu2.gif" width=1
border=0></TD>
<TD vAlign=top width=169 bgColor=#edf0f5 height=500><!-- 廣告位 --><!-- $sign哪個頁面$digit位置$way等h不循環TR;X循環TR;$num顯示個數 --></TD></TR></TBODY></TABLE><!-- 尾部 -->
<SCRIPT language=JavaScript>document.write("<img src='http://www.51kaifa.com/HostAdmin/count/Count.php?Referer=http://www.51kaifa.com/zxyd/read_z.php&Ip=127.0.0.1&Width="+escape(screen.width)+"&Height="+escape(screen.height)+"' border=0 width=0 height=0>");</SCRIPT>
<TABLE cellSpacing=0 cellPadding=0 width=760 align=center border=0>
<TBODY>
<TR>
<TD>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD width="100%"
background="串口調試助手源程序及編程詳細過程- 無憂電子開發網-在線閱讀_files/sy_top1.gif"><IMG
height=16
src="串口調試助手源程序及編程詳細過程- 無憂電子開發網-在線閱讀_files/sy_top1.gif"
width=4></TD></TR>
<TR>
<TD align=middle><A
href="http://www.51kaifa.com/gywm.php?action=guanyu">關于我們</A> ┋ <A
href="http://www.51kaifa.com/FriendSiteReg/F_read.php"
target=_blank>友情鏈接</A> </TD></TR></TBODY></TABLE>
<TABLE height=1 cellSpacing=0 cellPadding=0 width="100%"
background="串口調試助手源程序及編程詳細過程- 無憂電子開發網-在線閱讀_files/xu2.gif"
border=0><TBODY>
<TR>
<TD width="100%"></TD></TR></TBODY></TABLE>
<TABLE height=60 cellSpacing=0 cellPadding=0 width="100%"
border=0><TBODY>
<TR>
<TD width="100%">
<P align=center><A
href="mailto:E-mail:webmaster@51kaifa.com"><BR>E-mail:webmaster@51kaifa.com</A>
<BR>Copyright©2005 無憂電子開發網版權所有 <BR><!-- <a href="mailto:E-mail:nan-ji-hu@sohu.com">南極狐工作室制作與維護</a> QQ:348322455 <br> -->
<CENTER><A href="http://www.miibeian.gov.cn/"
target=_blank>粵ICP備05064233號</A></CENTER><BR>
<CENTER>
<SCRIPT
src="串口調試助手源程序及編程詳細過程- 無憂電子開發網-在線閱讀_files/count.htm"></SCRIPT>
<SCRIPT language=JavaScript
src="串口調試助手源程序及編程詳細過程- 無憂電子開發網-在線閱讀_files/click.htm"
type=text/javascript></SCRIPT>
</CENTER><BR></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></BODY></HTML>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -