【vc++精品源码栏目提醒】:网学会员为需要vc++精品源码的朋友们搜集整理了VC++串口上位机简单例程(源码及详细步骤) doc - 讲义教程相关资料,希望对各位网友有所帮助!
VC串口上位机简单例程源码及详细步骤 VC串口上位机简单例程.rar 4.33 MB VC编写简单串口上位机程序 2010年4月13日10:23:40 串口通信MCU跟PC通信经
常用到的一种通信方式做界面、写上位机程序的编程语言、编译环境等不少
VB、C、LABVIEW等等我会的语言很少C语言用得比较多但是还没有找到如何用C语言来写串口
通信上位机程序的资料在图书管理找到了用VC编写串口上位机的资料参考书籍用自己相当蹩脚的C写出了一个简单的串口上位机程序分享一下体验一下单片机和PC通信的乐趣。
编译环境VC6.0 操作
系统VMWare虚拟出来的Windows XP 程序实现功能 1、 PC初始化COM1口使用n81方式波特率57600与单片机通信。
PC的COM口编号可以通过如下方式修改 当然也可以通过上位机软件编写通过按钮来选择COM端口号但是此次仅仅是简单的例程就没有弄那么复杂了。
COM1口可用的话会提示串口初始化完毕。
否则会提示串口已经打开Port already open表示串口已经打开被占用了。
2、 点击开始转换串口会向单片机发送0xaa单片机串口中断接收到0xaa后启动ADC 转换一次并把转换结果ADCL、ADCH共两个字节的结果发送至PCPC进行数值转换后在窗口里显示。
见文章末尾图 3、 为防止串口被一只占用点击关闭串口可以关闭COM1供其它
程序使用点击后按钮变为打开串口点击可重新打开COM1。
程序的编写 1、 打开VC6.0建立基于对话框的MFC应用程序Test 2、 在项目中插入MSComm控件工程-增加到工程-Components and Controls-双击Registered ActiveX Controls-选择Microsoft Communications Control version 6.0-Insert按默认值添加你会发现多了个电话图标这是增加后串口通信控件。
3、 删除确认、取消和提示框添加“电话”、进程、静态文本、按钮、编辑框拖动添加的控件根据喜好布局。
4、 右击编辑框Edit选择属性在样式里设置勾选多行、垂直滚动其它可按默认值。
右击静态文本Text选择属性在常规设置里修改标题。
右击按钮PushButton选择属性在在常规设置里修改标题。
修改后界面如下程序写出来运行时“电话”标志会自动消失。
5、 查看-建立类向导MFC ClassWizard-Member Viariable选择ClassName为CTestDlg的类Control ID为MSCOMM1双击它为它添加控制变量m_comm1。
类似的选择IDC_BUTTON2添加控制变量m_serial。
建立类向导也可以右击然后在弹出的快捷菜单里选择建立类向导 至此基本框架已经出来了编译后运行可以看到如下所示的界面。
组建-全部组件然 后 组建-执行 6、 点击左侧的视图窗口可以在三种模式下切换第三个是打开我们的
源代码窗口第一个是类第二个是窗体的资源视图。
选择File View展开test files-Header Files打开testDlg.h在全局变量下添加如下代码然后保存 int gllen//定义整型标量gllen用于记录接收数据的个数 CProgressCtrl pbar //指向进度条的指针用于操作进度条 CString strRXDdata //编辑框显示的文本记录历次转换值 7、 点击Recourse View展开test recourses-Dialog双击IDD_TEST_DIALOG编辑我们的主界面对话框。
双击击“电话”弹出如下对话框按确认键 VC会进入源码编辑窗口这个函数是用来处理串口事件的当PC串口接收到数据时会产生一个数据缓冲区有数据的消息事件然后调用执行这个函数。
添加如下代码进行数据处理窗口更新等操作 VARIANT variant1//定义VARIANT型变量用于存放接收到的数据 COleSafeArray safearray//定义safearray型变量 LONG lenk//定义长整型变量lenk BYTE rxdata2048//定义BYTE型数组 CString stremp1stremp2//定义两个字符串 ifm_comm1.GetCommEvent2 //判断引起OnComm时间的原因 //如果是接收到特定个字节数则读取接收到的数据 variant1 m_comm1.GetInput//把接收到的数据存放到VARIANT型变量里 safearray variant1//VARIANT型变量转换为ColeSafeArray型变量 len safearray.GetOneDimSize fork0k SetPostemp//更新进度条的当前位置 strRXDdata stremp2//把新的数据放到全局的字符串里 strRXDdata stremp1 strRXDdata Vrn//字符串加单位V后换行 SetDlgItemTextIDC_EDIT1strRXDdata//更新文本控件的显示 这时重新编译一下看会不会有什么错误出现下面提示可以选择全部组建来清除。
LINK : LNK4073: cannot create map for .ILK file linking nonincrementally 出现下面错误请关闭运行的test.exe后重试。
LINK : fatal error LNK1104: cannot open file Debug/test.exe 出现下面错误两种错误是由于空间编号
问题引起的当我们添加了编辑框或者“电话”后再添加其编号自动加一就会出现控件没定义。
Z:vc串口上位机testtestDlg.cpp32 : error C2065: IDC_MSCOMM1 : undeclared identifier Z:vc串口上位机testtes