⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 串口调试助手源程序及编程详细过程- 无忧电子开发网-在线阅读.htm

📁 关于串口应用的很多方法及相关软件
💻 HTM
📖 第 1 页 / 共 3 页
字号:
                        <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&lt;len;k++) 
                        <BR>safearray_inp.GetElement(&amp;k,rxdata+k);//转换为BYTE型数组 
                        <BR>for(k=0;k&lt;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>&nbsp;</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&amp;BigClass=6">上一页</A> 
                  <A 
                  href="http://www.51kaifa.com/zxyd/read_z.php?ID=950&amp;BigClass=6">下一页</A> 
                  &nbsp;&nbsp; 信息发布:工号01&nbsp;&nbsp; 转引自: 【<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&amp;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>&nbsp;┋&nbsp;<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&copy;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 + -