MFC中串口类的使用
来源:互联网 发布:如何检查网络是否正常 编辑:程序博客网 时间:2024/04/30 14:19
串口控件
//自动获取串口:
voidCENVVAR_CONFIGDlg::GetCom()
{
//程序启动时获取全部可用串口
HANDLE hCom;
int i,num,k;
CString str;
BOOL flag;
((CComboBox *)GetDlgItem(IDC_COMBO_COM))->ResetContent();
flag = FALSE;
num = 0;
for (i = 1;i <= 16;i++)
{//此程序支持16个串口
str.Format("\\\\.\\COM%d",i);
hCom = CreateFile(str, 0, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,0);
if(INVALID_HANDLE_VALUE != hCom )
{//能打开该串口,则添加该串口
CloseHandle(hCom);
str = str.Mid(4);
((CComboBox *)GetDlgItem(IDC_COMBO_COM))->AddString(str);
if (flag == FALSE)
{
flag = TRUE;
num = i;
}
}
}
i= ((CComboBox *)GetDlgItem(IDC_COMBO_COM))->GetCount();
if (i == 0)
{//若找不到可用串口则禁用“打开串口”功能
((CComboBox *)GetDlgItem(IDC_COMBO_COM))->EnableWindow(FALSE);
}
else
{
k = ((CComboBox *)GetDlgItem((IDC_COMBO_COM)))->GetCount();
((CComboBox *)GetDlgItem(IDC_COMBO_COM))->SetCurSel(k - 1);
//mCom.BindCommPort(num);
}
}
//响应函数
void CENVVAR_CONFIGDlg::OnOnCommMscomm1()
{
//TODO: Add your control notification handler code here
VARIANTvariant_inp;
COleSafeArraysafearray_inp;
LONGlen,k;
//BYTErxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.
BYTErxdata[4096];
CStringstrtemp;
if(m_Comm1.GetCommEvent()==2)//事件值为2表示接收缓冲区内有字符
{
variant_inp=m_Comm1.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型变量
{
BYTEbt=*(char*)(rxdata+k); //字符型
strtemp.Format("%c",bt);//将字符送入临时变量strtemp存放
m_EditRxData+=strtemp;//加入接收编辑框对应字符串
}
}
UpdateData(FALSE);//更新编辑框内容
m_EditRxCtrl.LineScroll(m_EditRxCtrl.GetLineCount()-1,0); //让显示到当前打印行
}
//打开串口:
void CENVVAR_CONFIGDlg::OnBtnOpen()
{
//TODO: Add your control notification handler code here
staticbool x=false;
intcomport = 0;
intbaudrate = 0;
intcomportindex = 0;
//intbaudrateindex = 0;
CStringdata;
inti;
i= ((CComboBox *)GetDlgItem(IDC_COMBO_COM))->GetCurSel();
((CComboBox*)GetDlgItem(IDC_COMBO_COM))->GetLBText(i,data);
data= data.Mid(3);
i= atoi(data);
comport= i;
//comportindex= m_comport.GetCurSel();
//comport= comportindex+1; //序号加1 刚好为串口号
//baudrate= 115200;
if(!x)
{
x= true;
GetDlgItem(IDC_BtnOpen)->SetWindowText("关闭串口");
if(m_Comm1.GetPortOpen())
{
m_Comm1.SetPortOpen(FALSE);
}
m_Comm1.SetCommPort(comport);//选择com1,可根据具体情况更改
m_Comm1.SetInBufferSize(4096);//设置输入缓冲区的大小,Bytes
m_Comm1.SetOutBufferSize(4096);//设置输入缓冲区的大小,Bytes//
m_Comm1.SetSettings("115200,n,8,1");//波特率9600,无校验,8个数据位,1个停止位
m_Comm1.SetInputMode(1);//1:表示以二进制方式检取数据
m_Comm1.SetRThreshold(1);//参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件
m_Comm1.SetInputLen(0);//设置当前接收区数据长度为0
if(!m_Comm1.GetPortOpen())
{
m_Comm1.SetPortOpen(TRUE);//打开串口
AfxMessageBox(" 串口打开成功!");
}
else
{
m_Comm1.GetInput();//先预读缓冲区以清除残留数据
AfxMessageBox(" 串口已打开!");
}
}
else
{
x=false;
GetDlgItem(IDC_BtnOpen)->SetWindowText("打开串口");
m_Comm1.SetPortOpen(FALSE);
AfxMessageBox(" 串口已关闭!");
}
#if0
if(m_Comm1.GetPortOpen())
{
m_Comm1.SetPortOpen(FALSE);
}
m_Comm1.SetCommPort(comport);//选择com1,可根据具体情况更改
m_Comm1.SetInBufferSize(1024);//设置输入缓冲区的大小,Bytes
m_Comm1.SetOutBufferSize(1024);//设置输入缓冲区的大小,Bytes//
m_Comm1.SetSettings("115200,n,8,1");//波特率9600,无校验,8个数据位,1个停止位
m_Comm1.SetInputMode(1);//1:表示以二进制方式检取数据
m_Comm1.SetRThreshold(1);//参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件
m_Comm1.SetInputLen(0);//设置当前接收区数据长度为0
if(!m_Comm1.GetPortOpen())
{
m_Comm1.SetPortOpen(TRUE);//打开串口
AfxMessageBox("openserial port success!");
}
else
{
m_Comm1.GetInput();//先预读缓冲区以清除残留数据
AfxMessageBox("open serial port failed!");
}
#endif
UpdateData(false);
}
//发送函数:
CString Dec_EnvVar[10];
CMSComm m_Comm1;
m_Comm1.SetOutput(COleVariant(Dec_EnvVar[i]));
- MFC中串口类的使用
- MFC中使用串口控件
- MFC-串口控件的使用
- MFC简单的串口使用
- 基于MFC的串口类CSerialPort的使用
- [MFC]使用强大的第三方串口类 CSerialPort
- MFC中串口通信的编程
- MFC串口控件MSComm的使用
- mfc-串口控件的添加和使用
- 在MFC对话框中使用CChart--基于串口的温度采集
- MFC中使用串口控件后程序无法打开的问题解决
- qt中串口的使用
- ros中串口的使用
- MFC容器MFC中容器类的使用
- MFC使用mscomm串口通信
- MFC使用mscomm串口通信
- MFC中动态检测串口热插拔的实现
- MFC中利用MSComm控件实现串口通信的例子
- iOS 万能跳转界面方法 (runtime实用篇一)
- Mysql 常用函数总结(字符串操作函数)
- linux常用命令(二)
- Android弹出选项框及指示箭头动画选择
- JavaScript资源大全中文版(Awesome最新版)
- MFC中串口类的使用
- Install boost on ubuntu
- iOS富文本编辑器之更"优雅的"实现方法
- oracle收集表的统计信息
- storm集群统一启动和停止shell脚本开发
- 【C++】读入一行
- Xamarin.Android编译CPU类型选择方式
- js函数声明和函数表达式
- 安卓自定义View基础-颜色