串口调试助手c语言源程序

上传人:第*** 文档编号:32742409 上传时间:2018-02-12 格式:DOC 页数:10 大小:126KB
返回 下载 相关 举报
串口调试助手c语言源程序_第1页
第1页 / 共10页
串口调试助手c语言源程序_第2页
第2页 / 共10页
串口调试助手c语言源程序_第3页
第3页 / 共10页
串口调试助手c语言源程序_第4页
第4页 / 共10页
串口调试助手c语言源程序_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《串口调试助手c语言源程序》由会员分享,可在线阅读,更多相关《串口调试助手c语言源程序(10页珍藏版)》请在金锄头文库上搜索。

1、串口调试助手源程序及编程详细过程作者:龚建伟 2001.6.20可以任意转载,但必须注明作者和说明来自 http:/,不得作为商用目次:1.建立项目 2.在项目中插入 MSComm 控件 3.利用 ClassWizard 定义 CMSComm 类控制变量4.在对话框中添加控件 5.添加串口事件消息处理函数 OnComm()6.打开和设置串口参数7.发送数据在众多网友的支持下,串口调试助手从 2001 年 5 月 21 日发布至今,短短一个月,在全国各地累计下载量近5000 人次,在近 200 多个电子邮件中,20 多人提供了使用测试意见,更有 50 多位朋友提出要串口调试助手的源代码,为了答谢

2、谢朋友们的支持,公开推出我最初用 VC 控件 MSComm 编写串口通信程序的源代码,并写出详细的编程过程,姑且叫串口调试助手源程序 V1.0 或 VC 串口通讯源程序吧,我相信,如果你用 VC 编程,那么有了这个代码,就可以轻而易举地完成串口编程任务了。(也许本文过于详细,高手就不用看)开始吧:1.建立项目:打开 VC6.0,建立一个基于对话框的 MFC 应用程序 SCommTest(与我源代码一致,等会你会方便一点);2.在项目中插入 MSComm 控件 选择 Project 菜单下 Add To Project 子菜单中的 Components and Controls选项,在弹出的对话

3、框中双击 Registered ActiveX Controls 项(稍等一会,这个过程较慢),则所有注册过的ActiveX 控件出现在列表框中。 选择 Microsoft Communications Control, version 6.0,单击 Insert 按钮将它插入到我们的 Project 中来,接受缺省的选项。(如果你在控件列表中看不到 Microsoft Communications Control, version 6.0,那可能是你在安装 VC6 时没有把 ActiveX 一项选上,重新安装 VC6,选上 ActiveX 就可以了),这时在 ClassView 视窗中就可以

4、看到 CMSComm 类了,(注意:此类在 ClassWizard 中看不到,重构 clw 文件也一样),并且在控件工具栏 Controls 中出现了电话图标(如图 1 所示),现在要做的是用鼠标将此图标拖到对话框中,程序运行后,这个图标是看不到的。3.利用 ClassWizard 定义 CMSComm 类控制对象 打开 ClassWizardMember Viariables 选项卡,选择CSCommTestDlg 类,为 IDC_MSCOMM1 添加控制变量:m_ctrlComm,这时你可以看一看,在对话框头文件中自动加入了/AFX_INCLUDES() #include mscomm.h

5、 /AFX_INCLUDES (这时运行程序,如果有错,那就再从头开始)。4.在对话框中添加控件 向主对话框中添加两个编辑框,一个用于接收显示数据 ID 为 IDC_EDIT_RXDATA,另一个用于输入发送数据,ID 为 IDC_EDIT_TXDATA,再添加一个按钮,功能是按一次就把发送编辑框中的内容发送一次,将其 ID 设为 IDC_BUTTON_MANUALSEND。别忘记了将接收编辑框的 PropertiesStyles 中把 Miltiline 和 Vertical Scroll 属性选上,发送编辑框若你想输入多行文字,也可选上 Miltiline。再打开 ClassWizardM

6、ember Viariables 选项卡,选择 CSCommTestDlg 类, 为 IDC_EDIT_RXDATA 添加 CString变量 m_strRXData, 为 IDC_EDIT_TXDATA 添加 CString 变量 m_strTXData。说明: m_strRXData 和 m_strTXData 分别用来放入接收和发送的字符数据。休息一会吧?我们天天与电脑打交道,要注意保重,我现在在单杠上做引体向上可以来 40 次,可我都 32了,佩服吗? 。好了,再接着来,下面是关键了:5.添加串口事件消息处理函数 OnComm() 打开 ClassWizardMessage Maps,

7、选择类 CSCommTestDlg,选择IDC_MSCOMM1,双击消息 OnComm,将弹出的对话框中将函数名改为 OnComm,(好记而已)OK。这个函数是用来处理串口消息事件的,如每当串口接收到数据,就会产生一个串口接收数据缓冲区中有字符的消息事件,我们刚才添加的函数就会执行,我们在 OnComm()函数加入相应的处理代码就能实现自已想要的功能了。请你在函数中加入如下代码:void CSCommTestDlg:OnComm() / TODO: Add your control notification handler code hereVARIANT variant_inp;COleSa

8、feArray safearray_inp;LONG len,k;BYTE rxdata2048; /设置 BYTE 数组 An 8-bit integerthat is not signed.CString strtemp;if(m_ctrlComm.GetCommEvent()=2) /事件值为 2 表示接收缓冲区内有字符 /以下你可以根据自己的通信协议加入处理代码variant_inp=m_ctrlComm.GetInput(); /读缓冲区safearray_inp=variant_inp; /VARIANT 型变量转换为 ColeSafeArray 型变量len=safearray_

9、inp.GetOneDimSize(); /得到有效数据长度for(k=0;kMessage Maps,选择类 CSCommTestDlg,选择 IDC_BUTTON_MANUALSEND,双击 BN_CLICKED 添加 OnButtonManualsend()函数,并在函数中添加如下代码:void CSCommTestDlg:OnButtonManualsend() / TODO: Add your control notification handler code hereUpdateData(TRUE); /读取编辑框内容m_ctrlComm.SetOutput(COleVariant

10、(m_strTXData);/发送数据运行程序,在发送编辑框中随意输入点什么,单击发送按钮,啊!看看,在另一端的串口调试助手(或别的调试工具)接收框里出现了什么。如果你真是初次涉猎串口编程,又一次成功,那该说声谢谢我了,因为我第一次做串口程序时可费劲了,那时网上的资料也不好找。开开玩笑,谢谢你的支持,有什么好东西别忘了给我寄一份。最后说明一下,由于用到 VC 控件,在没有安装 VC 的计算机上运行时要从 VC 中把mscomm32.ocx、msvcrt.dll、mfc42.dll 拷到 Windows 目录下的 System 子目录中(win2000 为 System32)并再进行注册设置,请

11、参考如何手工注册 MSComm 控件。龚建伟 2001.6.20什么是 VARIANT 数据类型?如何使用 VARIANT 数据类型? 怎么以十六进制或二进制发送和接收?如果还想再深入了解,请看:新书:串口通信编程实践串口调试助手源程序及编程详细过程(二)作者:龚建伟 2001.8.25可以任意转载,但必须注明作者和说明来自 http:/,不得作为商用目次:1.建立项目 2.在项目中插入 MSComm 控件 3.利用 ClassWizard 定义 CMSComm 类控制变量4.在对话框中添加控件 5.添加串口事件消息处理函数 OnComm()6.打开和设置串口参数7.发送数据8.发送十六进制字

12、符9.在接收框中以十六进制显示10.如何设置自动发送11.什么是 VARIANT 数据类型?如何使用 VARIANT 数据类型?这是串口调试助手源程序及编程详细过程(一)的续篇,首先谢谢朋友们的支持与鼓励。8.发送十六进制字符在主对话框中加入一个复选接钮,ID 为 IDC_CHECK_HEXSEND Caption: 十六进制发送,再利用 ClassWizard 为其添加控制变量:m_ctrlHexSend;在 ClassView 中为 SCommTestDlg 类添加以下两个 PUBLIC 成员函数,并输入相应代码;/由于这个转换函数的格式限制,在发送框中的十六制字符应该每两个字符之间插入一

13、个空隔/如:A1 23 45 0B 00 29/CByteArray 是一个动态字节数组,可参看 MSDN 帮助int CSCommTestDlg:String2Hex(CString str, CByteArray &senddata)int hexdata,lowhexdata;int hexdatalen=0;int len=str.GetLength();senddata.SetSize(len/2);for(int i=0;i=len)break;lstr=stri;hexdata=ConvertHexChar(hstr);lowhexdata=ConvertHexChar(lstr

14、);if(hexdata=16)|(lowhexdata=16)break;else hexdata=hexdata*16+lowhexdata;i+;senddatahexdatalen=(char)hexdata;hexdatalen+;senddata.SetSize(hexdatalen);return hexdatalen;/这是一个将字符转换为相应的十六进制值的函数/好多 C 语言书上都可以找到/功能:若是在 0-F 之间的字符,则转换为相应的十六进制字符,否则返回-1char CSCommTestDlg:ConvertHexChar(char ch) if(ch=0)else i

15、f(ch=A)&(ch=a)&(ch=f)return ch-a+10;else return (-1);再将 CSCommTestDlg:OnButtonManualsend()修改成以下形式:void CSCommTestDlg:OnButtonManualsend() / TODO: Add your control notification handler code hereUpdateData(TRUE); /读取编辑框内容if(m_ctrlHexSend.GetCheck()CByteArray hexdata;int len=String2Hex(m_strTXData,hexd

16、ata); /此处返回的 len 可以用于计算发送了多少个十六进制数m_ctrlComm.SetOutput(COleVariant(hexdata); /发送十六进制数据else m_ctrlComm.SetOutput(COleVariant(m_strTXData);/发送 ASCII 字符数据现在,你先将串口线接好并打开串口调试助手 V2.1,选上以十六制显示,设置好相应串口,然后运行我们这个程序,在发送框中输入 00 01 02 03 A1 CC 等十六进制字符,并选上以十六进制发送,单击手动发送,在串口调试助手的接收框中应该可以看到 00 01 02 03 A1 CC 了。9.在接收框中以十六进制显示这就容易多了:

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 工程造价

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号