VS之MFC串口通信的编写教程.doc
《VS之MFC串口通信的编写教程.doc》由会员分享,可在线阅读,更多相关《VS之MFC串口通信的编写教程.doc(33页珍藏版)》请在冰豆网上搜索。
![VS之MFC串口通信的编写教程.doc](https://file1.bdocx.com/fileroot1/2022-10/7/4d150aa6-078d-4d43-92b9-04a10d261eea/4d150aa6-078d-4d43-92b9-04a10d261eea1.gif)
VS2010之MFC串口通信教程
说明:
本人也是刚刚入门MFC,参照一些资料和源代码就实验做了这么一个串口通信工具!
资料来源主要有鸡啄米博客网站,里面有详细的学习教程!
网上的VS2010源代码都比较少,建议大家先理解一个源代码的构架和结构再深入学习!
本文档可以一步一步教你从建立工程到实验调试,是一个非常完整的教程!
非常适合新手练习!
——贺州学院大学生创新基地实验室
在制作串口通信所遇到的问题:
编辑框的滚动条不会随着数据的更新保持在最后一行!
接下来我们开始讲解MFC串口通信的制作:
一、打开VS2010软件,然后新建一个项目,如下图所示;
我们要用到就是对话框模块,所以选择如下图所示
最大化框最好别选,因为本人现在也没搞出来;
点击完成就新建好一个工程了,等资源就绪之后我们就可以进行制作了;
我们可以看到就绪之后的界面如下图所示,按照步骤把原来的静态文本框和确定按钮、取消按钮删掉;
二、为我们的对话框添加控件
添加两个组合边框,并放置好位置;
修改组合边框显示的名称;
在组合边框里面添加编辑文本框;
在这一步一定要小心选择右边的属性;
这一步是把串口控件添加到对话框中来;
选择我们需要的串口控件如下图所示;
三、为编辑框,Combox框,串口控件添加变量;
四、为按钮和串口控件添加程序函数
voidC串口V2Dlg:
:
OnBnClickedButtonOpen()//打开串口按钮程序
{
//TODO:
在此添加控件通知处理程序代码?
CStringstr,str1,n; //定义字符串
GetDlgItemText(IDC_BUTTON_OPEN,str);
CWnd*h1;
h1=GetDlgItem(IDC_BUTTON_OPEN); //指向控件的caption
if(!
m_mscom.get_PortOpen())
{
m_comb2.GetLBText(m_comb2.GetCurSel(),str1);//取得所选的字符串,并存放在str1里面
str1=str1+','+'n'+','+'8'+','+'1'; //这句话很关键
m_mscom.put_CommPort((m_comb1.GetCurSel()+1)); //选择串口
m_mscom.put_InputMode
(1); //设置输入方式为二进制方式
m_mscom.put_Settings(str1); //波特率为(波特率组Á合框)无校验,8数据位,1个停止位
m_mscom.put_InputLen(1024); //设置当前接收区数据长度为1024
m_mscom.put_RThreshold
(1); //缓冲区一个字符引发事件
m_mscom.put_RTSEnable
(1); //设置RT允许
m_mscom.put_PortOpen(true); //打开串口
if(m_mscom.get_PortOpen())
{
str=_T("关闭串口");
UpdateData(true);
h1->SetWindowText(str); //改变按钮名称为‘’关闭串口”
}
}
else
{
m_mscom.put_PortOpen(false);
if(str!
=_T("打开串口))
{
str=_T("打开串口");
UpdateData(true);
h1->SetWindowText(str); //改变按钮名称为打开串口
}
}
}
voidC串口V2Dlg:
:
OnBnClickedButtonSend()//发送数据按钮程
{
//TODO:
在此添加控件通知处理程序代码?
UpdateData(true); //更新控件数据
m_mscom.put_Output(COleVariant(m_Editsend));//把发送编辑框的数据发送出去
}
voidC串口V2Dlg:
:
OnBnClickedButtonClean()//清除数据按钮程序
{
//TODO:
在此添加控件通知处理程序代码
m_EditReceive=_T(""); //给接收编辑框发送空格符
UpdateData(false); //更新数据
}
voidC串口V2Dlg:
:
OnBnClickedButtonClose()//退出按钮程序
{
//TODO:
在此添加控件通知处理程序代码
if(m_mscom.get_PortOpen())
m_mscom.put_PortOpen(false);
CDialogEx:
:
OnCancel();
}
voidC串口V2Dlg:
:
OnCommMscomm1()//串口控件程序
{
//TODO:
在此处添加消息处理程序代码
if(m_mscom.get_CommEvent()==2)
{
charstr[1024]={0};
longk;
VARIANTInputData=m_mscom.get_Input(); //读缓冲区
COleSafeArrayfs;
fs=InputData; //VARIANT型变À量转换为COleSafeArray型变量
for(k=0;k fs.GetElement(&k,str+k); //转换为BYTE型数组
m_EditReceive+=str;// 接收到编辑框里面
//SetTimer(1,10,NULL); //延时10ms
UpdateData(false);
}
}
//串口选择组合框
CStringstr;
inti;
for(i=0;i<15;i++)
{
str.Format(_T("com%d"),i+1);
m_comb1.InsertString(i,str);
}
m_comb1.SetCurSel(0);//预置COM口
//波特率选择组合框
CStringstr1[]={_T("300"),_T("600"),_T("1200"),_T("2400"),_T("4800"),_T("9600"),
_T("19200"),_T("38400"),_T("43000"),_T("56000"),_T("57600"),_T("115200")};
for(inti=0;i<12;i++)
{
intjudge_tf=m_comb2.AddString(str1[i]);
if((judge_tf==CB_ERR)||(judge_tf==CB_ERRSPACE))
MessageBox(_T("buildbauderror!
"));
}
m_comb2.SetCurSel(5);//预置波特率为"9600"
写完之后编译程序
五、调试我们写好的串口工具
我们下面用51单片机调试一下,结果也是成功的;
m_Edit.SetSel(-1,-1);
this->SetDlgItemTextW(IDC_EDIT1,m_EditReceive);//将m_EditReceive内容显示到ID为IDC_EDIT1的编辑框的最后位置
m_Edit.LineScroll(m_Edit.GetLineCount()-1,0);//将垂直滚动条滚动到最后一
修改一下接收编辑框的属性,发送编辑框不用做修改;
再调试一下发现问题解决了!
六、修改图标和软件信息
我们去到项目所在的文件夹中,如下图所示;
TheEnd!
作者:
刘小二
2014年5月2日星期五