VC2010 用MSComm打开串口
来源:互联网 发布:centos无法挂载ntfs 编辑:程序博客网 时间:2024/06/05 03:38
1. 添加串口通信控件:
在对话框上右键:
2.给控件添加变量
在控件(电话图标)上右键
命名为m_mscomm, 点击完成,工程中会自动添加"mscomm.h"和“mscomm.cpp"两个文件。
3. 添加串口控件的事件处理程序:
点击”添加编辑“即可。
4. 打开串口及串口设置程序:
void CCommSet10Dlg::OnBnClickedBtnOpencomm()
{
// TODO: Add your control notification handler code here
if (m_mscomm.get_PortOpen())
m_mscomm.put_PortOpen(FALSE); //关闭串口
m_mscomm.put_CommPort(4); //设定串口为COM4
m_mscomm.put_Settings(_T("9600,n,8,1")); //设定波特率9600,无奇偶校验,8位数据位,1位停止位
m_mscomm.put_InputMode(1); //设定数据接收模式,1为二进制,0为文本
m_mscomm.put_InputLen(0); //设定当前接收区数据长度,0表示全部读取
m_mscomm.put_InBufferSize(1024); //设定输入缓冲区大小为1024 byte
m_mscomm.put_OutBufferSize(1024); //设定输出缓冲区大小为1024 byte
m_mscomm.put_RThreshold(1); //每接收到1个字符时,触发OnComm事件
m_mscomm.put_SThreshold(0); //设定每发送多少个字符触发OnComm事件,0表示不触发OnComm事件
if (!m_mscomm.get_PortOpen())
m_mscomm.put_PortOpen(TRUE); //打开串口
else
AfxMessageBox("can't open serial port");
}
5. 串口处理函数程序:
void CCommSet10Dlg::OnCommMscomm1()
{
// TODO: Add your message handler code here
//AfxMessageBox("T1");
int nEvent;
nEvent = m_mscomm.get_CommEvent();
VARIANT variant_inp;
COleSafeArray safearray_inp;
BYTE rxdata[1024];
long len,k;
if (nEvent==2)
{
variant_inp = m_mscomm.get_Input();
safearray_inp = variant_inp;
len = safearray_inp.GetOneDimSize();
for (k=0;k<len;k++)
{
safearray_inp.GetElement(&k,rxdata+k);
}
if (rxdata[2]==0x10)
AfxMessageBox("Get it!");
else
AfxMessageBox("With wrong");
}
}
6. 发送数据程序
void CCommSet10Dlg::OnBnClickedBtnSenddata()
{
// TODO: Add your control notification handler code here
BYTE TxData[18];
TxData[0] = 0xaa; //preamble code
TxData[1] = 0x10; //command
TxData[2] = 0x0C; //data length
TxData[3] = 0x00; //data type, date edit first byte
TxData[4] = 0x01; //real data
TxData[5] = 0x00; //预留位
TxData[6] = 0x00;
TxData[7] = 0x00;
TxData[8] = 0x00;
TxData[9] = 0x00;
TxData[10] = 0x00;
TxData[11] = 0x00;
TxData[12] = 0x00;
TxData[13] = 0x00;
TxData[14] = 0x00;
TxData[15] = TxData[1]+TxData[2]+TxData[3]+TxData[4]+TxData[5]+TxData[6]+TxData[7]+TxData[8]+TxData[9]
+TxData[10]+TxData[11]+TxData[12]+TxData[13]+TxData[14]; //check sum
if (TxData[15]==0x17)
TxData[15]=0x18;
else
TxData[15]=TxData[15];
TxData[16] = 0x17; //back code
TxData[17] = 0x17; //back code
CByteArray array;
int a;
array.RemoveAll();
array.SetSize(18);
for (a=0;a<18;a++)
{
array.SetAt(a,TxData[a]);
}
m_mscomm.put_Output(COleVariant(array));
}
参考:D:\Yifei\Download\VC++\MFC 目录下《在VS(VC)2010中使用MSComm控件实现串口通信详细步骤》 该文章讲解比较详细
- VC2010 用MSComm打开串口
- vc2010串口通信(使用mscomm控件)
- vc2010串口通信(使用mscomm控件)
- vc2010串口通信(使用mscomm控件)
- MSCOMM控件在VC2010中的使用
- VC2010如何使用串口
- VC2010如何使用串口
- mscomm串口通信
- mscomm串口控件初始化
- MSComm串口通信详解
- [MSComm]串口通信有关的MSComm控件
- VC++下用MSComm控件实现串口通讯
- VC++下用MSComm控件实现串口通讯
- VC++下用MSComm控件实现串口通讯
- VC++下用MSComm控件实现串口通讯
- VC++下用MSComm控件实现串口通讯
- VC++下用MSComm控件实现串口通讯
- VS2008下用MFC 的MSComm控件编写串口程序
- Leetcode 线性表 Remove Duplicates from Sorted Array II
- 正确选择报表工具的十大标准
- 简单的说
- NHibernate学习笔记(一):初识NHibernate
- functor(仿函数)初涉
- VC2010 用MSComm打开串口
- jeecms 数据被引用,不能删除。解决办法
- 【原创】Ubuntu 12.04开机弹出"检测到系统程序出现问题"的临时解决方法
- 图片异步加载框架 Android-Universal-Image-Loader
- rc.local自启动学习
- POJ训练计划2187_Beauty Contest(几何/凸包)
- NHibernate学习笔记(二):one-to-one关系映射
- js 获取页面高度和宽度(兼容 ie firefox chrome),获取鼠标点击位置
- 公司开发时候,使用svn进行版本控制,在提交代码的时候应该注意的问题,总结!!!!