

下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、发送十六进制字符9.在接收框中以十六进制显示10.如何设置自动发送11.什么是VARIANT数据类型?如何使用VARIANT数据类型?这是串口调试助手源程序及编程详细过程(一)的续篇,首先谢谢朋友们的支持与鼓励。8.发送十六进制字符在主对话框中加入一个复选接钮,ID为IDC_CHECK_HEXSENDCaption:十六进制发送,再利用ClassWizard为其添加控制变量:m_ctrlHexSend;在ClassView中为SCommTestDlg类添加以下两个PUBLIC成员函数,并输入相应代码;/由于这个转换函数的格式限制,在发送框中的十六制字符应该每两个字符之间插入一个空隔/如:A12
2、3450B0029/CByteArray是一个动态字节数组,可参看MSDN帮助intCSCommTestDlg:String2Hex(CStringstr,CByteArray&senddata)inthexdata,lowhexdata;inthexdatalen=0;intlen=str.GetLength();senddata.SetSize(len/2);for(inti=0;i=len)break;lstr=stri;hexdata=ConvertHexChar(hstr);lowhexdata=ConvertHexChar(lstr);if(hexdata=16)|(lowhexd
3、ata=16)break;elsehexdata=hexdata*16+lowhexdata;i+;senddatahexdatalen=(char)hexdata;hexdatalen+;senddata.SetSize(hexdatalen);returnhexdatalen;/这是一个将字符转换为相应的十六进制值的函数/好多C语言书上都可以找到/功能:若是在0-F之间的字符,则转换为相应的十六进制字符,否则返回-1charCSCommTestDlg:ConvertHexChar(charch)if(ch=0)&(ch=A)&(ch=a)&(ch=f)returnch-a+10;elser
4、eturn(-1);再将CSCommTestDlg:OnButtonManualsend()修改成以下形式:voidCSCommTestDlg:OnButtonManualsend()/TODO:AddyourcontrolnotificationhandlercodehereUpdateData(TRUE);/读取编辑框内容if(m_ctrlHexSend.GetCheck()CByteArrayhexdata;intlen=String2Hex(m_strTXData,hexdata);/此处返回的len可以用于计算发送了多少个十六进制数m_ctrlComm.SetOutput(COleV
5、ariant(hexdata);/发送十六进制数据elsem_ctrlComm.SetOutput(COleVariant(m_strTXData);/发送ASCII字符数据现在,你先将串口线接好并打开串口调试助手V2.1,选上以十六制显示,设置好相应串口,然后运行我们这个程序,在发送框中输入00010203A1CC等十六进制字符,并选上以十六进制发送,单击手动发送,在串口调试助手的接收框中应该可以看到00010203A1CC了。9.在接收框中以十六进制显示这就容易多了:在主对话框中加入一个复选接钮,IDC_CHECK_HEXDISPLAYCaption:十六进制显示,再利用ClassWiza
6、rd为其添加控制变量:m_ctrlHexDiaplay。然后修改CSCommTestDlg:OnComm()函数:voidCSCommTestDlg:OnComm()/TODO:AddyourcontrolnotificationhandlercodehereVARIANTvariant_inp;COleSafeArraysafearray_inp;LONGlen,k;BYTErxdata2048;/设置BYTE数组An8-bitintegerthatisnotsigned.CStringstrtemp;if(m_ctrlComm.GetCommEvent()=2)/事件值为2表示接收缓冲区内
7、有字符variant_inp=m_ctrlComm.GetInput();/读缓冲区safearray_inp=variant_inp;/VARIANT型变量转换为ColeSafeArray型变量len=safearray_inp.GetOneDimSize();/得到有效数据长度for(k=0;klen;k+)safearray_inp.GetElement(&k,rxdata+k);/转换为BYTE型数组for(k=0;klen;k+)/将数组转换为Cstring型变量BYTEbt=*(char*)(rxdata+k);/字符型if(m_ctrlHexDisplay.GetCheck()s
8、trtemp.Format(%02X,bt);/将字符以十六进制方式送入临时变量strtemp存放,注意这里加入一个空隔elsestrtemp.Format(%c,bt);/将字符送入临时变量strtemp存放m_strRXData+=strtemp;/加入接收编辑框对应字符串UpdateData(FALSE);/更新编辑框内容测试:在串口调试助手发送框中输入00010203A1CC等十六进制字符,并选上以十六进制发送,单击手动发送,在本程序运行后选上以十六进制显示,在串口调试助手中单击手动发送或自动发送,则在本程序的接收框中应该可以看到00010203A1CC了。10.如何设置自动发送最简单
9、的设定自动发送周期是用SetTimer()函数,这在数据采集中很有用,在控制中指令的传送也可能用到定时发送。方法是:在ClassWizard中选上MessageMap卡,然后在ObjectsIDs选中CSCommTestDlg类,再在Messages框中选上WM_TIMER消息,单击ADD_FUNCTION加入voidCSCommTestDlg:OnTimer(UINTnIDEvent)函数,这个函数是放入“时间到”后要处理的代码:voidCSCommTestDlg:OnTimer(UINTnIDEvent)/TODO:Addyourmessagehandlercodehereand/orca
10、lldefaultOnButtonManualsend();CDialog:OnTimer(nIDEvent);再在在主对话框中加入一个复选接钮,ID为IDC_CHECK_AUTOSENDCaption:自动发送(周期1秒),再利用ClassWizard为其添加BN_CLICK消息处理函数voidCSCommTestDlg:OnCheckAutosend():voidCSCommTestDlg:OnCheckAutosend()/TODO:Addyourcontrolnotificationhandlercodeherem_bAutoSend=!m_bAutoSend;if(m_bAutoSe
11、nd)SetTimer(1,1000,NULL);/时间为1000毫秒elseKillTimer(1);/取消定时其中:m_bAutoSend为BOOL型变量,在CLASSVIEW中为CSCommTestDlg类加入,并在构造函数中初始化:m_bAutoSen=FALSE;现在可以运行程序测试了。11.什么是VARIANT数据类型?如何使用VARIANT数据类型?不知如何使用VARIANT数据类型,有不少朋友对VARIANT这个新的数据类型大感头疼。SetOutput()函数中需要的VARIANT参数还可以使用COleVariant类的构造函数简单生成,现在GetInput()函数的返回值也成
12、了VARIANT类型,那么如何从返回的值中提取有用的内容。VARIANT及由之而派生出的COleVariant类主要用于在OLE自动化中传递数据。实际上VARIANT也只不过是一个新定义的结构罢了,它的主要成员包括一个联合体及一个变量。该联合体由各种类型的数据成员构成,而该变量则用来指明联合体中目前起作用的数据类型。我们所关心的接收到的数据就存储在该联合体的某个数据成员中。该联合体中包含的数据类型很多,从一些简单的变量到非常复杂的数组和指针。由于通过串口接收到的内容常常是一个字节串,我们将使用其中的某个数组或指针来访问接收到的数据。这里推荐给大家的是指向一个SAFEARRAY(COleSafeArray)类型变量。新的数据类型SAFEARRAY正如其名字一样,是一个“安全数组”,它能根据系统环境自动调整其16位或32位的定义,并且不会被OLE改变(某些类型如BSTR在16位或32位应用程序间传递时会被OLE翻译从而破坏其中的二进制数据)。大家无须了解SAFEARRA
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度七年级政治下册全册基础知识点期末复习提纲
- 会计的笔试题目及答案
- 教师教育教学反思与落地措施试题及答案
- 废旧电子产品回收2025年行业现状与未来发展趋势报告
- 2025汽车工程知识测试题及答案
- 直播平台内容监管2025:自律发展路径与监管策略研究报告
- 百货商场数字化会员体系构建与忠诚度提升研究报告
- 供应链金融助力中小微企业融资的2025年创新路径与模式研究报告
- 现代家具设计趋势对消费者行为的影响探讨试题及答案
- 新能源汽车跨界发展研究试题及答案
- GA 1812.2-2024银行系统反恐怖防范要求第2部分:数据中心
- 2025至2030中国智慧消防行业发展状况及未来前景研究报告
- 联锁系统设备调试施工作业指导书
- 热网工程施工组织设计方案
- 2025年上半年黑龙江牡丹江市“市委书记进校园”活动暨“雪城优才”企事业单位人才招聘1324人重点基础提升(共500题)附带答案详解
- 2025年重庆市中考物理模拟试卷(一)(含解析)
- 髌骨骨折的中医护理查房
- 希尔顿管理制度
- 2022继电保护微机型试验装置技术条件
- 2025年浙江宁波交通工程建设集团有限公司招聘笔试参考题库含答案解析
- 消毒供应中心管理制度
评论
0/150
提交评论