VC++用第三方类实现串口通信
来源:互联网 发布:天津大学网络远程教育 编辑:程序博客网 时间:2024/06/05 19:47
【原文】http://dev.yesky.com/29/2310029.shtml
与通过WIN32 API进行串口访问相比,通过MScomm这个Activex控件进行串口访问要来的方便许多,它基本上可以向用户屏蔽多线程的细节,以事件(发出OnComm消息)方式实现串口的异步访问。尽管如此,MScomm控件的使用仍有诸多不便,譬如其发送和接收数据都要进行VARIANT类型对象与字符串的转化等。因此,国内外许多优秀的程序员自己编写了一些串口类,使用这些类,我们将可以更方便的操作串口。本文将向您展示由程序员llbird编写的cnComm(中国串口?)串口类。
llbird是一位优秀的程序员,他的代码风格简洁而紧凑,类的声明和实现都被定义在一个头文件中,使用这个类的朋友只需要在工程中包含这CnComm.h一头文件即可。网上一搜就可下载,这里就不贴了。
1,新建mfc对话框程序,界面布局如图
2,在App类头文件中包含CnComm.h
3,为接收框,发送框分别绑定CString类型的变量 m_receive 和 m_send,位各个按钮添加消息响应函数。
4,Dlg类头文件中添加CnComm com;成员变量。位Dlg类添加自定义消息
ON_MESSAGE(ON_COM_RECEIVE, &CSerialPortDlg::OnComReceive)
这个消息是固定宏,不必定义ID
afx_msg LRESULT OnComReceive(WPARAM wParam, LPARAM lParam);
5,在 打开串口 按钮中添加初始化代码
void CSerialPortDlg::OnBnClickedButtonOpen(){// TODO: Add your control notification handler code here if(com.IsOpen()) //如果已经打开,则直接返回 return; com.Open(3,115200,NOPARITY,8,ONESTOPBIT); //打开串口3,波特率9600,无奇偶校验,字节8位,1个停止位。这个函数有四个重载以及很多缺省值 com.SetWnd(AfxGetMainWnd()->m_hWnd); //设置消息处理窗口,关联消息处理句柄,也可以写成com.SetWnd(m_hWnd) 总之,对应需要处理的窗口句柄即可}
6,在 发送 按钮中添加发送数据代码
void CSerialPortDlg::OnBnClickedButtonSend(){// TODO: Add your control notification handler code here UpdateData(true); char buf[1024]; buf[wcstombs(buf, m_send, 1023)] = 0; DWORD dwSend = com.Write(buf);}7,清屏
void CSerialPortDlg::OnBnClickedButtonClear(){ //TODO: Add your control notification handler code here m_receive=L""; UpdateData(false);}8,接收数据的代码
afx_msg LRESULT CSerialPortDlg::OnComReceive(WPARAM wParam, LPARAM lParam){UpdateData(true); ////读取串口上的字符 char str[1024]; com.ReadString(str, 1024); //ReadString适合读一般字符串,Read函数适合读取任意数据 m_receive += str; UpdateData(false); return 0;}9,关闭串口
void CSerialPortDlg::OnBnClickedButtonClose(){// TODO: Add your control notification handler code here if(com.IsOpen()) //只有在打开的情况下才关闭 com.Close();}
注意事项:
- 通信双方的波特率,奇偶校验,停止位等参数一定要一致。
- 自定义的消息宏名称一定要是 ON_COM_RECEIVE 其他的名字会导致收不到数据
- 端口号可以放在下拉框里选择,其他很多代码放置的位置可以自己调整,比如初始化代码
- VC++用第三方类实现串口通信
- 深入浅出VC++串口编程--第三方类
- 深入浅出VC++串口编程之第三方类
- 深入浅出VC++串口编程之第三方类
- vc6.0利用第三方串口类实现串口编程
- VC实现串口通信例程
- VC实现串口通信例程
- VC实现串口通信例程
- VC实现串口通信例程
- VC实现串口通信例程
- VC实现串口通信例程
- VC实现串口通信例程
- VC++控件实现串口通信
- VC实现串口通信例程
- VC++ API实现串口通信
- VC 串口通信实现方式
- VC 6.0 实现串口通信
- Qt串口通信第三方类flush函数不能清空串口解决办法
- Sublime Text 2 使用技巧
- MR OutputFormat 初解
- WinDebug的一些基本使用命令
- Qt下利用QWT绘制波形图
- eclipse下执行wordcount报错 java.lang.ClassNotFoundException
- VC++用第三方类实现串口通信
- 八皇后
- Android异步加载网络图片
- WEB设计
- svn使用教程-windows和Linux下常用操作总结
- MySQL查询执行计划学习
- SharedPreferences详解(二)——存取对象
- So you want to program the web with FSharp?
- 【OpenCV入门教程之七】 玩转OpenCV源代码:生成OpenCV工程解决方案与OpenCV源码编译