串口调试助手VC++6.0程序
VC编写串口调试助手
void SetTextFont(int FontHight,LPCTSTR FontName);//设置字体
在MyButton.cpp的构造函数中初始化变量:
m_Style = 1;//m_Style = 0;//按钮形状风格
点击OK。项目创建完毕,进入项目。
删除界面上确定和取消按钮以及静态文字。
3.
保存后便可以开始创建界面了。
参考界面
仿照设计的界面,具体添加按钮或编辑框等的布局步骤就不用细说了。
4.
在资源视图中选择Icon右键InsertIcon加入打开和关闭的Icon图标或自行绘制,如下图
IDR_MAINFRAME原为MFC提供的图标,这里我直接改成自己的,生成EXE后将会显示这个图标。下面将帮助页面图标也改为自绘图标。
右键波特率对应的Combo Box,ID设置为IDC_BAUD,Type及Sort同上。
右键数据位对应的Combo Box,ID设置为IDC_BDATA,Type及Sort同上。
右键停止位对应的Combo Box,ID设置为IDC_BSTOP,Type及Sort同上。
右键校验位对应的Combo Box,ID设置为IDC_CAL,Type及Sort同上。
CRectm_ButRect;//按钮尺寸
CFont*p_Font; //字体
void DrawButton(CDC *pDC);//画正常按钮
//接口函数
public:
MyButton();
void SetText(CString str);//设置文字
void SetForeColor(COLORREF color);//设置文本颜色
使用VC6.0调试程序
结构体类型的定义
struct 结构体类型名 { 类型标识符 成员名1;
类型标识符 成员名2; ……
类型标识符 成员名n; };
如: struct student { char name[10];
long id; char gender; int age; }
注意: struct student 应作为一个类型整体, name[10]、id、gender、age都是其成员。 struct及花括号后的“;”不能省。
a
因此,在C语言中,将地 址形象化地称为指针
2012 35
b
….
2010 p
2012 q
定义一个指针变量
指针变量的定义一般形式为:
基类型 *指针变量名;
例如: int i, j, *pi, *pj; float x, y, *p1, *p2;
指针变量的赋值:使得指针变量指向变量 指针变量名=&变量名;
设有一个函数process,在调用它时,每次实现不同的功 能。输入a和b两个数,第一次调用时找出a与b中的大者,第
二次找出小者,第三次求和。
#include<stdio.h> void main() {int max(int,int); int min(int,int); int add(int,int); int process(int, int, int (*fun)()); int a,b; printf("enter a and b:"); scanf("%d%d",&a,&b); printf("\nmax="); process(a,b,max); printf("\nmin="); process(a,b,min); printf("\nsum="); process(a,b,add); }
利用VC++6.0编写串口发送程序
3 e ahr ( 号量 ).它与互斥对象相 似 ,但它可以 Sm p o 信 e 计数 例如可以允许 一个给定资源同时被三个线程访 问。其实
M t 就是虽大计数为一 的 Sm poe 使用方法如下 : ue x e ahr / 在窗体剖建 中
he S ma h r := p oe Cr a e e p o e n I l iaCo n l x t S ma h r { l l t I u t Ma i e ni mu mCo e ,p me1 u t INa
由于新的处理器 、电子盘 的出现 ,使得计算机能够 一种 更加小 巧 、灵活的方式 出现 从 而可 以满足车辆远程监控 、设
备远程诊 断维护和其他一些特殊方 面的不 同应用。在实旌这样
Байду номын сангаас
1 .打开美闭串 E通信资源 函数—— ce Hl Coe a- l r e和 l H n s
d 。在进程 中使用 串 口等通信 资源之前 ,首先应打开 通信资 l e
作中的超时值。如果 系统 从来没有打开过 ,那 么使 用系统缺省
配置:
编写 给出详细的介绍
一
3 读写通信资源 函数—— aFl 和 Wre i 。在读写通 di e i Fe t l
、
Wi3 n 2通 信 函数 介 绍
与 wj r 3 1下编写 通信 程序不 同 ,在 Wi o s 5和 n w d 9
源 ,返 回一个标识 该资源的句柄 。如果指定的资源( E) 串 1当前
正被别 的进程所使用 ,那么函数失败 。进程的任何线程均通过 使用该有效句柄来访 问相应 的资源 。 2 .配 置 串E通信 资源 函数—— G 岫 m tI 和 Sto - l 耐c sae e mm C Sa :在使 用 Cet i te t ra Fl e e函数打开 串行通信 资源时 ,系统将 根
VC6.0中如何调试程序说明大全
设置断点
将光标放到需要设置断点的行
设置断点
点击按钮
断点设置好
VC++程序调试演示
• 程序调试概述 • Debugger工具栏简介 • 启动Debugger • 变量跟踪 • 设置断点 • 快速执行到一个断点 • 结束Debugger • 快速查看变量类型
快速执行到一个断点
点击按钮
快速执行到断点设置行
* 选中Breakpoint对话框中的DATA标签,对应的页面将会弹出
* DATA页面中的Expression编辑框中写出逻辑表达式,如(X==3);
2、监视表达式发生变化断点: * 从EDIT 菜单中选中breakpoint命令,屏幕 上将会出现Breakpoint对话框。 * 选中Breakpoint对话框中的DATA标签,对 应的页面将会弹出。 * 在Expression编辑框中写出需要监视的表 达式。 * 最后按OK键返回。
4 控制程序的运行
从菜单Build到子菜单Start Debuging 选择Go程序开 始运行在Debug状态下,程序会由于断点而停顿下来后, 可以看到有一个小箭头,它指向即将执行的代码。按要求 来控制程序的运行,其中有四条命令:Step over, step Into , Step Out ,Run to Cursor。Leabharlann Debugger工具栏简介
(SHIFT+F11)确认当前子程序中没有程序错误时,该选项可 以快速执行该子程序,并停留在子程序后面的语句
Debugger工具栏简介
(CTRL+F10)快速执行到光标所在的代码处
Debugger工具栏简介
(SHIFT+F9)显示QuickWatch窗口,在该窗口可以计算表达 式的值
vc6.0安装教程与调试技巧
vc6.0安装教程与调试技巧vc6.0的安装过程1.首先解压安装文件的压缩包2.然后再选择安装的版本,VC6CN 表示的是中文版,VC6EN表示英文版。
3.打开VC6CN文件夹,其中有如下图标,鼠标双击。
4.如下图所示就是我们安装的第一步,单击下一步。
5.选择“接受协议”后单击下一步。
6.本软件属于破解版,故无需输入产品ID号码,直接单击下一步。
7.选择“安装visual c++6.0中文企业版(I)”,这就是我们要安装的程序,单击下一步。
8.单击下一步。
9.如下界面,单击“继续”,开始安装软件。
10.点击“确定”。
11.选择“是”,继续安装。
12.选择“typical”继续安装13.选择“ok”。
14.选择“确定”15.选择“确定”16.取消“安装MSDN”前面的勾号,选择“退出”。
17.选择“是”,取消MSDN的安装。
18.程序安装完毕,再电脑的“开始菜单”中,选择“所有程序”,在“Microsoft Visual C++ 6.0”目录中选择“Microsoft Visual C++6.0”就可以运行程序了。
也可以将这个图标发送到桌面快捷方式,这样就可以直接在桌面上运行程序。
调试技巧调试程序可以帮助的了解程序是怎样运行的。
1、如何快速地规范代码缩进格式选中所需要规范的代码,按shift+F82、如何在Release状态下进行调试Project->Setting…->Project Settings对话框,选择Release 状态。
“C/C++”标签页中的Category选General,Optimizations 选Disable(Debug),Debug info选Program Database。
在“Link”标签页中选中Generate debug info复选框。
注:只是一个介乎Debug和Release的中间状态,所有的ASSERT、VERIFY都不起作用,函数调用方式已经是真正的调用,而不查表,但是这种状态下QuickWatch、调用队列跟踪功能仍然有效,和Debug版一样。
串口调试助手VC60程序
串口调试助手VC60程序目次:1.建立项目那可能是你在安装VC6时没有把Active某一项选上,重新安装VC6,选上Active某就可以了),//{{AF某_INCLUDES()#include\(这时运行程序,如果有错,那就再从头开始)。
4.在对话框中添加控件向主对话框中添加两个编辑框,一个用于接收显示数据ID为IDC_EDIT_R某DATA,另一个用于输入发送数据,ID为IDC_EDIT_T某DATA,再添加一个按钮,功能是按一次就把发送编辑框中的内容发送一次,将其ID设为IDC_BUTTON_MANUALSEND。
别忘记了将接收编辑框的Propertie->Style中把Miltiline和VerticalScroll属性选上,发送编辑框若你想输入多行文字,也可选上Miltiline。
休息一会吧?我们天天与电脑打交道,要注意保重,我现在在单杠上做引体向上可以来40次,可我都32了,佩服吗?。
好了,再接着来,下面是关键了:{//TODO:AddyourcontrolnotificationhandlercodehereVARIANTvariant_inp;COleSafeArrayafearray_inp;LONGlen,k;BYTEr某data[2048];//设置BYTE数组An8-bitintegerthatinotigned.CStringtrtemp;afearray_inp=variant_inp;//VARIANT型变量转换为ColeSafeArray 型变量len=afearray_inp.GetOneDimSize();//得到有效数据长度for(k=0;kafearray_inp.GetElement(&k,r某data+k);//转换为BYTE型数组for(k=0;kBYTEbt=某(char某)(r某data+k);//字符型trtemp.Format(\将字符送入临时变量trtemp存放m_trR某Data+=trtemp;//加入接收编辑框对应字符串}}UpdateData(FALSE);//更新编辑框内容}到目前为止还不能在接收编辑框中看到数据,因为我们还没有打开串口,但运行程序不应该有任何错误,不然,你肯定哪儿没看仔细,因为我是打开VC6对照着做一步写一行的,运行试试。
VC(MFC)编写串口调试助手
VC(MFC)编写串口调试助手1.序确定基本功能:1.自动寻找串口,并自动添加到下拉框中共选择;2.有波特率、数据位、停止位、校验位的选择设置;3.串口打开控制按钮;4.发送、清除按钮;5.接收是自动实现的;6.有定时自动发送功能;7.有传送文件功能;8.有状态栏显示,指示串口状态,设置参数和发送接收显示。
下面就一步步实现,本人纯业余,只是记录下来这个学习过程,请勿拍砖。
开发平台Visual C++6.0英文版,电脑是i7-2670Q四核8G内存1G独显的笔记本,装的win7 64位旗舰版,因此VC6兼容不是太好,有些小毛病,不过不影响编写。
2.创建MFC项目File -> New -> Projects选择MFC AppWizard(exe),项目名称commassist选择OK选中Dialog based,点击Next> 。
默认选项,点击Next> ,继续默认选项,点击Next> ,如果选中As a statically linked library,生产的EXE可直接在没装VC的机器上运行。
可以在项目中进行更改。
选择第二个CCommassistDlg,点击Finish点击OK。
项目创建完毕,进入项目。
删除界面上确定和取消按钮以及静态文字。
3.创建界面保存后便可以开始创建界面了。
参考界面仿照设计的界面,具体添加按钮或编辑框等的布局步骤就不用细说了。
4.图标修改在资源视图中选择Icon右键InsertIcon加入打开和关闭的Icon图标或自行绘制,如下图IDR_MAINFRAME原为MFC提供的图标,这里我直接改成自己的,生成EXE后将会显示这个图标。
下面将帮助页面图标也改为自绘图标。
在打开按钮旁边加入自绘的打开和关闭图标:先加入工具条中的Picture,然后选中右键看属性,并如图将Image选为默认的IDI_ICON_CLOSE。
如下图5.基本设置下面对各个按钮及编辑框设置进行描述右键串口对应的Combo Box,ID设置为IDC_COMLIST,Type设置为Drop List,Sort不选择(我系统是WIN7 64位,不选中反而自动排序,至于XP得试试看了,以下的选择相同)。
图解VC++6.0中使用mscomm串口控件
m_ComPort.SetInputMode(1);//以二进制方式读写数据 m_ComPort.SetRThreshold(1);//接收缓冲区有大于等于 1 个字符时,将引发接收数据的 OnCommMscomm 事件 m_ComPort.SetSettings("9600,n,8,1"); //设置波特率等参数 if(!m_ComPort.GetPortOpen()) //打开串口
safearray_inp.GetElement(&k,rxdata+k); //转换为 BYTE 型数组 BYT E bt=*(char*)(rxdata+k); //字符型 strtemp.Format("%c",bt); //将字符送入临时变量 strtemp 存放 m_receive+=strtemp; } break; default: // 传输事件出错 m_ComPort.SetOutBufferCount(0); break;
在 sportDlg.cpp 中增加: BEGIN_EVENTSINK_MAP(CMainFrame,CFrameWnd )
ON_EVENT(CMainFrame,ID_COMMCTRL,1,OnCommMscomm,VTS_NONE) //映射 //ActiveX 控件事件
END_EVENTSINK_ M AP()
// TODO: Add your control notification handler code here UpdateData(TRUE); int len; CByteArray array; len=m_send.GetLength(); array.RemoveAll(); array.SetSize(len); for(int i=0;i<len;i++)
VC++6.0实现串口
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
(3)设置初始化函数OnInitDialog(),添加代码实现对话框串口通信的初始化工作,如下:
BOOLCPc_pcDlg::OnInitDialog()
{…//VC自动生成的代码
// TODO: Add extra initialization here
IsStop = False;
}
else
{
res = WaitForSingleObject(rOverLaped.hEvent,5000);
}
IsStop = False;
m_strReceive+=DataBuffer;
(1)掌握PC与PC串口通信的线路连接方法。
(2)利用VisualC++ API函数和MSComm控件实现PC与PC串口通信的程序设计方法。
6.1.2 PC
本设计用到的硬件和软件清单见表6-1。
表6-1设计用软、硬件
序号
名称
数量
1
PC或IPC
1
2
串口通信线(三线制)
1
3
Visual C++6.0
1
(2)按照弹出的应用向导对话框依次填写,第1步选择基于对话框,其他均采用默认。
(3)单击“完成”,将会弹出一个关于新工程信息的对话框。单击“确定”按钮。这样MFC向导便自动生成了一个名称为pc_pc_api的工程。
2
(1)应用程序中添加了一个对话框资源IDD_PC_PC_API_DIALOG,打开属性对话框,将对话框标题改为“PC与PC串口通信API”。
VC6.0MFC串口通信编写全过程(推荐文档)
其于MFC 的串口调试助手编辑过程一、新建打开VC6.0 文件 新建 工程 MFC AppWiard(exe)位置(选择保存工程位置) 工程名称(输入工程名XXXX )确定 选择基本对话框 下一步 下一步 下一步 选择(CXXXXDlg ) 完成 确定 在生成的基本对话框内将不需要按钮及提示框(自动生成的“确定”“取消” 及提示框)删除或修改使用,至此基本框架完成如下图:二、往生成的基本框架中添加控件1、因为控件列表框内没有串口通信用到的通信控件,所以要先添加到控件列表框内再将控件添加到基本框内使用,步骤如下:菜单栏 工程 添加到工程 Components and controls … Registered ActiveX Controls 选择“Microsoft Communications Control, version 6.0” Insert 确定 OK 关闭此子窗口完成添加操作标志如上图所示。
2、将刚才添加添加到控件列表框内的串口控件添加到基本框架内 点击控件列表框内的串口控件,此时光标变为“十”形,在基本框架内随意划取一矩形区域,即可以添加串口控件,不需要修改此控件的大小及位置,因为程编译运行后此控件是看不到的,步骤结果如下图:3、继续往基本框架内添加用于编辑发送数据的输入编辑框及输出编辑框,同理选择控件列表框内的“编辑框控件”,以相同的操作即可添加两个编辑窗口及一个按纽控件如下图所示:这两个窗口需要修改大小及位置,因为程序运行后将会显示而串口通信控件则不显示,上图是运行后的效果。
4、对以上四个控件编程步骤如下:a 、右击串口通信控件 建立类向导Member variables Control IDS 中选择IDC_MSCOMM1 add variable … Member variable name 中输入控件变量名m_ctrlComm (变量名可以随意选取,但程序中应与所取变量名一致) OK 确定b、右击编辑框、属性、常规、ID:中输入ID号,此编辑框用于接收显示数据的其ID 号为IDC_EDIT_RXDATA(可以随意选取,但程序中应与所取ID号一致),再在此窗口的样式中勾选”多行”,同时将“自动水平滚动(T)”勾选去掉,再勾选“垂直滚动(V)”,此勾选操作是用于垂直多行显示的,按回车后即可输入;同理右击另一编辑框输入ID号为IDC_EDIT_TXDATA此编辑框用于编辑发送数据的,同样也选上用于垂直多行显示,发送框可以不用垂直多行显示;再为按钮控件添加ID号,为IDC_BUTTON_MANUALSEND,并将标题中的“Button1”改为“发送”,功能是按一次就把发送编辑框中的内容发送一次。
串口调试助手使用说明和技术总结大全
串口调试助手使用说明和技术总结大全第一篇:串口调试助手使用说明和技术总结大全串口调试助手的技术报告1.软件简介串口调试助手是在Windows平台下开发的,工具是VC++6.0。
串口调试助手版支持常用的300 ~ 115200bps波特率,能设置校验、数据位和停止位,能以ASCII码或十六进制接收或发送数据或字符(包括中文),能发送文本文件,可以任意设定自动发送周期,并能将接收数据保存成文本文件。
是工程师调试串口的好助手工具。
2.软件特点(1)支持XP /Vista/Win7系统;(2)绿色软件,不需安装。
运行解压软件,将压缩包解压到指定目录即可。
卸载时只需将程序目录删除;(3)支持常用的300 ~ 115200bps波特率;(4)端口范围是COM1-COM4;(5)能设置校验、数据位和停止位;(6)能以字符或十六进制收发数据,支持中文字符的收发;(7)支持文件数据的发送;(8)数据发送端允许设置发送周期,自动发送数据;(9)支持键盘输入,将键盘数据发送到串口;(10)支持自动清空(若设置了“自动清空”,则达到50行后,自动清空接收编辑框中显示的数据)接收窗口数据;(11)如果没有“自动清空”,数据行达到400后,也自动清空,因为数据过多,影响接收速度,显示是最费CPU时间的操作(12)能够保存接收到的数据,保存地址默认的是C:COMDATA;(13)设置了“停止显示”和“继续显示”按钮,可以方便的照出要使用的信息;(14)图钉按钮功能使程序能浮在最上层。
3.软件界面图1串口调试助手V3.0界面4.软件的设计流程本软件使用的是Windows API 串口编程,其编程基本步骤如下:(1)打开串口;(2)建立串口通信事件;(3)初始化串口;(4)建立数据线程;(5)读写数据;(6)结束时关闭串口。
5.遇到的问题与相应的解决方案(1)串口打开或者关闭有明显的提示(2)界面的大小设置问题,起初只有最小化按钮,按要求加上最大化以及界面要按照一定的规则能进行缩放(3)能发送和接收汉字(4)串口接收显示的数据丢失原因:接收显示是影响程序性能的一个大问题,当接收到大量数据时,串口通信助手响应不太及时,这个可能与调用类中的使用机制有关,但显示也没能很好地处理,不过在实际的传输过程中是没有丢失数据的。
VC6.0 IDE的使用和程序调试技巧
项目工作区窗口
ClassView页
FileView页 ResourceView页
FileView页
ClassView页
File->New->Proj32 Application
基于WINDOWS平台的32位开发环境开发应用程序,SDK程序。 入口函数为WinMain
文件类型 Active Server Page Bitmap File C/C++ Header File HTML Page Resource Script Resource Template
Visual C++6.0 可以创建的文件类型 说明 文件类型 网页制作 Binary File 创建位图文件 C++ Source File 创建 C/C++头文件 Cursor File 创建 HTML 文件 Icon File 创建资源脚本文件 Text File 创建资源模板文件 SQL Script File
6:使用单步执行到程序结束
设置断点以后,调试运行程序时,程序 开始执行,并且运行到断点处暂停下来, 此时我们有机会观察程序的运行情况, 并且诊断程序目前的状态是否如我们所 预期的那样。 不过我们先不着急观察程序的状态,而 是来看看如何控制程序的运行,以便在 我们需要的时候让程序暂停下来,并且 以我们需要的方式走走停停!
方法是使用单步执行手段stepover让程序向前走一步停止调试停止调试并重新启动调试单步执行当前位置对比调试运行时出现的调试菜单debug和调试工具栏根据图标查找对应项设置断点调试运行程序此时程序暂停在断点处等待选择debug菜单找到最后一项quickwatch并点击输入想要观察的变量变量名变量的值点击addwatch点击addwatch看到如下画点击单步执行按钮或者菜单程序则向前单独运行一个步骤每向前执行一步就会暂停下来这样我们就有充足的时间观察所关心的变量名称按下f5键可以让程序从当前位置向前执行直到遇见下一个断点或者程序结束下面是赠送的ppt模板不需要朋友可以下载后编辑删除
VC6.0串口编程例程
引言在PC机的主板上,有一种类型的接口可能为我们所忽视,那就是RS-232C串行接口,在微软的Windows系统中称其为COM。
我们可以通过设备管理器来查看COM的硬件参数设置,如图1。
图1 在Windows上查看PC串口设置迄今为止,几乎每一台PC都包含COM。
本质而言,COM是PC为和外界通信所提供的一种串行数据传输的接口。
作为一种物理通信的途径和设备,它和目前风靡的另一种串行接口――USB所提供的功能是一致的。
不过RS-232C显然已经开始被后起之秀USB赶超,因为USB的传输速率已经远远超过了RS-232C。
尽管如此,RS-232C仍然具有非常广泛的应用,在相对长的一段时间里,难以被USB等接口取代。
RS-232C接口(又称EIA RS-232C),1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定,全名是"数据终端设备(DTE)和数据通讯设备(DCE)之间串行二进制数据交换接口技术标准"。
本文将对这一接口进行硬件原理的介绍,随后我们将逐章学习DOS平台的串口编程,及Windows平台下基于API、控件和第三方类的串口编程,最后本文将给出一个综合实例。
在本文的连载过程中,您可以通过如下方式联系作者(热忱欢迎读者朋友对本文的内容提出质疑或给出修改意见):作者email:21cnbao@(可以来信提问,笔者将力求予以回信解答,并摘取其中的典型问题,在本系列文章最后一次连载的《读者反馈》中予以阐述);硬件原理众所周知,CPU与存储芯片和I/O芯片的通信是并行的(并行传输的最大位数依赖于CPU的字长、数据总线的宽度),一种叫做UART(通用异步收发器,Universal Asynchronous Receiver/Transmitter)的芯片提供了并行数据传输和RS-232C串行数据传输方式的转换。
这样的设备通常有如图2所示的管脚分布,当其向外传输数据时,CPU并行的将数据写入这类芯片的寄存器,UART再将寄存器中的数据一位一位地移动并向外传输;当外界向其传输数据时,UART一位一位地接收数据,并将其移位组合为并行数据,CPU再并行地读取这些数据。
使用VC++6.0调试程序
a
因此,在C语言中,将地 址形象化地称为指针
2012 35
b
….
2010 p
2012 q
定义一个指针变量
指针变量的定义一般形式为:
基类型 *指针变量名;
例如: int i, j, *pi, *pj; float x, y, *p1, *p2;
指针变量的赋值:使得指针变量指向变量 指针变量名=&变量名;
1.概念
数组与指针
数组的指针──数组在内存中的起始地址,用数 组名表示
2.指向数组的指针变量---赋于数组名的指针变 量
例如,int a [10], *p=a (或*p=&a[0]); 或者:
int a [10], *p;
p=a;
3.通过指针引用数组元素
如果有“int a [10],*p=a;” ,则:
❖ 不过我们先不着急观察程序的状态,而是来 看看如何控制程序的运行,以便在我们需要 的时候让程序暂停下来,并且以我们需要的 方式走走停停!
6:使用单步执行到程序结束
❖ 程序停下来了,如何让程序从暂停的地方继 续向前执行?
❖ 方法是使用单步执行手段(Step Over)让 程序向前走一步
单步执行 当前位置 停止调试并重新启动调试 停止调试
❖ 注意观察,现在调试运行程序会如何G?o
5:再次调试运行阶乘程序(续)
调试(Debug)工具: 程序暂停之处控 查制 看程 程序 序前 当进 前步 状伐态
6:使用单步执行到程序结束
❖ 设置断点以后,调试运行程序时,程序开始 执行,并且运行到断点处暂停下来,此时我 们有机会观察程序的运行情况,并且诊断程 序目前的状态是否如我们所预期的那样。
熟悉调试工具栏和菜单(只在调试 运行时出现)பைடு நூலகம்
串口调试助手c开发
串口调试助手c开发1.建立项目:打开VC++6.0,建立一个基于对话框的MFC应用程序SCommTest(与我源代码一致,等会你会方便一点);2.在项目中插入MSComm控件选择Project菜单下Add To Project子菜单中的Componentsand Controls…选项,在弹出的对话框中双击Registered ActiveXControls项(稍等一会,这个过程较慢),则所有注册过的ActiveX控件出现在列表框中。
选择Microsoft Communications Control,version6.0,,单击Insert按钮将它插入到我们的Project 中来,接受缺省的选项。
(如果你在控件列表中看不到Microsoft Communications Control, version 6.0,那可能是你在安装VC6时没有把ActiveX一项选上,重新安装VC6,选上ActiveX就可以了),这时在ClassView 视窗中就可以看到CMSComm类了,(注意:此类在ClassWizard中看不到,重构clw文件也一样),并且在控件工具栏Controls中出现了电话图标(如图1所示),现在要做的是用鼠标将此图标拖到对话框中,程序运行后,这个图标是看不到的。
3.利用ClassWizard定义CMSComm类控制对象打开ClassWizard->Member Viariables选项卡,选择CSCommTestDlg类,为IDC_MSCOMM1添加控制变量:m_ctrlComm,这时你可以看一看,在对话框头文件中自动加入了//{{AFX_INCLUDES()#include "mscomm.h" //}}AFX_INCLUDES (这时运行程序,如果有错,那就再从头开始)。
4.在对话框中添加控件向主对话框中添加两个编辑框,一个用于接收显示数据ID为IDC_EDIT_RXDATA,另一个用于输入发送数据,ID为IDC_EDIT_TXDATA,再添加一个按钮,功能是按一次就把发送编辑框中的内容发送一次,将其ID设为IDC_BUTTON_MANUALSEND。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
串口调试助手源程序及编程详细过程作者:龚建伟 2001.6.20可以任意转载,但必须注明作者和说明来自,不得作为商用目次:1.建立项目2.在项目中插入MSComm控件3.利用ClassWizard定义CMSComm类控制变量4.在对话框中添加控件5.添加串口事件消息处理函数OnComm()6.打开和设置串口参数7.发送数据在众多网友的支持下,串口调试助手从2001年5月21日发布至今,短短一个月,在全国各地累计下载量近5000人次,在近200多个电子邮件中,20多人提供了使用测试意见,更有50多位朋友提出要串口调试助手的源代码,为了答谢谢朋友们的支持,公开推出我最初用VC控件MSComm编写串口通信程序的源代码,并写出详细的编程过程,姑且叫串口调试助手源程序V1.0或VC串口通讯源程序吧,我相信,如果你用VC编程,那么有了这个代码,就可以轻而易举地完成串口编程任务了。
(也许本文过于详细,高手就不用看)开始吧:1.建立项目:打开VC++6.0,建立一个基于对话框的MFC应用程序SCommTest(与我源代码一致,等会你会方便一点);2.在项目中插入MSComm控件选择Project菜单下Add To Project子菜单中的 Components and Controls…选项,在弹出的对话框中双击Registered ActiveX Controls项(稍等一会,这个过程较慢),则所有注册过的ActiveX 控件出现在列表框中。
选择Microsoft Communications Control, version 6.0,,单击Insert按钮将它插入到我们的Project中来,接受缺省的选项。
(如果你在控件列表中看不到Microsoft Communications Control, version6.0,那可能是你在安装VC6时没有把ActiveX一项选上,重新安装VC6,选上ActiveX就可以了),这时在ClassView视窗中就可以看到CMSComm类了,(注意:此类在ClassWizard中看不到,重构clw文件也一样),并且在控件工具栏Controls中出现了电话图标(如图1所示),现在要做的是用鼠标将此图标拖到对话框中,程序运行后,这个图标是看不到的。
3.利用ClassWizard定义CMSComm类控制对象打开ClassWizard->Member Viariables选项卡,选择CSCommTestDlg类,为IDC_MSCOMM1添加控制变量:m_ctrlComm,这时你可以看一看,在对话框头文件中自动加入了//{{AFX_INCLUDES() #include "mscomm.h" //}}AFX_INCLUDES (这时运行程序,如果有错,那就再从头开始)。
4.在对话框中添加控件向主对话框中添加两个编辑框,一个用于接收显示数据ID为IDC_EDIT_RXDATA,另一个用于输入发送数据,ID为IDC_EDIT_TXDATA,再添加一个按钮,功能是按一次就把发送编辑框中的内容发送一次,将其ID设为IDC_BUTTON_MANUALSEND。
别忘记了将接收编辑框的Properties->Styles中把Miltiline和Vertical Scroll 属性选上,发送编辑框若你想输入多行文字,也可选上Miltiline。
再打开ClassWizard->Member Viariables选项卡,选择CSCommTestDlg类,为IDC_EDIT_RXDATA添加CString变量m_strRXData,为IDC_EDIT_TXDATA添加CString变量m_strTXData。
说明: m_strRXData和m_strTXData分别用来放入接收和发送的字符数据。
休息一会吧?我们天天与电脑打交道,要注意保重,我现在在单杠上做引体向上可以来40次,可我都32了,佩服吗?。
好了,再接着来,下面是关键了:5.添加串口事件消息处理函数OnComm()打开ClassWizard->Message Maps,选择类CSCommTestDlg,选择IDC_MSCOMM1,双击消息OnComm,将弹出的对话框中将函数名改为OnComm,(好记而已)OK。
这个函数是用来处理串口消息事件的,如每当串口接收到数据,就会产生一个串口接收数据缓冲区中有字符的消息事件,我们刚才添加的函数就会执行,我们在OnComm()函数加入相应的处理代码就能实现自已想要的功能了。
请你在函数中加入如下代码:void CSCommTestDlg::OnComm(){// TODO: Add your control notification handler code hereVARIANT variant_inp;COleSafeArray safearray_inp;LONG len,k;BYTE rxdata[2048]; //设置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_inp.GetOneDimSize(); //得到有效数据长度for(k=0;k<len;k++)safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组for(k=0;k<len;k++) //将数组转换为Cstring型变量{BYTE bt=*(char*)(rxdata+k); //字符型strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放m_strRXData+=strtemp; //加入接收编辑框对应字符串}}UpdateData(FALSE); //更新编辑框内容}到目前为止还不能在接收编辑框中看到数据,因为我们还没有打开串口,但运行程序不应该有任何错误,不然,你肯定哪儿没看仔细,因为我是打开VC6对照着做一步写一行的,运行试试。
没错吧?那么做下一步:6.打开串口和设置串口参数你可以在你需要的时候打开串口,例如在程序中做一个开始按钮,在该按钮的处理函数中打开串口。
现在我们在主对话框的CSCommTestDlg::OnInitDialog()打开串口,加入如下代码:// TODO: Add extra initialization hereif(m_ctrlComm.GetPortOpen())m_ctrlComm.SetPortOpen(FALSE);m_ctrlComm.SetCommPort(1); //选择com1if( !m_ctrlComm.GetPortOpen())m_ctrlComm.SetPortOpen(TRUE);//打开串口elseAfxMessageBox("cannot open serial port");m_ctrlComm.SetSettings("9600,n,8,1"); //波特率9600,无校验,8个数据位,1个停止位m_ctrlComm.SetInputModel(1); //1:表示以二进制方式检取数据m_ctrlComm.SetRThreshold(1);//参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件m_ctrlComm.SetInputLen(0); //设置当前接收区数据长度为0m_ctrlComm.GetInput();//先预读缓冲区以清除残留数据现在你可以试试程序了,将串口线接好后(不会接?去看看我写的串口接线基本方法),打开串口调试助手,并将串口设在com2,选上自动发送,也可以等会手动发送。
再执行你编写的程序,接收框里应该有数据显示了。
7.发送数据先为发送按钮添加一个单击消息即BN_CLICKED处理函数,打开ClassWizard->Message Maps,选择类CSCommTestDlg,选择IDC_BUTTON_MANUALSEND,双击BN_CLICKED添加OnButtonManualsend()函数,并在函数中添加如下代码:void CSCommTestDlg::OnButtonManualsend(){// TODO: Add your control notification handler code hereUpdateData(TRUE); //读取编辑框内容m_ctrlComm.SetOutput(COleVariant(m_strTXData));//发送数据}运行程序,在发送编辑框中随意输入点什么,单击发送按钮,啊!看看,在另一端的串口调试助手(或别的调试工具)接收框里出现了什么。
如果你真是初次涉猎串口编程,又一次成功,那该说声谢谢我了,因为我第一次做串口程序时可费劲了,那时网上的资料也不好找。
开开玩笑,谢谢你的支持,有什么好东西别忘了给我寄一份。
最后说明一下,由于用到VC控件,在没有安装VC的计算机上运行时要从VC中把mscomm32.ocx、msvcrt.dll、mfc42.dll 拷到Windows目录下的System子目录中(win2000为System32)并再进行注册设置,请参考如何手工注册MSComm控件。
龚建伟 2001.6.20什么是VARIANT数据类型?如何使用VARIANT数据类型?怎么以十六进制或二进制发送和接收?如果还想再深入了解,请看:串口调试助手源程序及编程详细过程(二)2001.8.26串口调试助手源程序及编程详细过程(二)作者:龚建伟 2001.8.25可以任意转载,但必须注明作者和说明来自,不得作为商用目次:1.建立项目2.在项目中插入MSComm控件3.利用ClassWizard定义CMSComm类控制变量4.在对话框中添加控件5.添加串口事件消息处理函数OnComm()6.打开和设置串口参数7.发送数据8.发送十六进制字符9.在接收框中以十六进制显示10.如何设置自动发送11.什么是VARIANT数据类型?如何使用VARIANT数据类型?这是串口调试助手源程序及编程详细过程(一)的续篇,首先谢谢朋友们的支持与鼓励。