图析VC++6.0中使用mscomm串口控件

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

图析VC++6.0中使用mscomm串口控件东南大学计算机学院杨全胜按下列图所示建立一个基于对话框的MFC程序这样就得到了下图所示的界面:右键点击sport的对话框界面,在弹出的菜单中选择属性,打开下面的属性对话框:建立下图所示的对话框控件:各控件属性如下:下面再做第二个对话框——配置对话框右键点击下图左边的Dialog,在弹出的菜单中选择InsertDialog这样就得到下图鼠标右键点击上图右边的对话框,在弹出的菜单中选择属性,并建立下列属性:建立下图的各种控件:其中“串口号“、”波特率“、“数据位”、“停止位”、“奇偶位”字样都是staticText控件,如“串口号:”文字的控件属性为:这些文字的下拉框都是ComboBox控件,他们的属性为:下面右键点击工具栏的空白处,在打开的菜单中选择“定制窗口…”,在下面的定制对话框中查看分类里将下面的两个按钮移动到某个菜难栏中,其中左上的那个按钮是”类生成“按钮。设置好后,左键点击刚才的“串口配置”对话框,然后再点击“类生成”按钮。出现下面的对话框点击OK后出现下面对话框,按下面图填好点击Change按钮,按下图来设置ChangeFiles对话框按OK后得到下面的对话框这样得到新的类如下图:双击下图IDC_COMN控件,按下图设置其成员变量:得到下图的结果使用上述方法建立下列控件的成员函数下面我们来将mscomm控件加进项目:在sportDlg.h中加入MSComm控件:#includemscomm.hprotected:CMSCommm_ComPort;public:CSportDlg(CWnd*pParent=NULL);//standardconstructorintm_baund;intm_comn;intm_databit;intm_jiaoyan;intm_stopbit;在CSportDlg::OnInitDialog()中:DWORDstyle=WS_VISIBLE|WS_CHILD;if(!m_ComPort.Create(NULL,style,CRect(0,0,0,0),this,ID_COMMCTRL)){TRACE0(FailedtocreateOLECommunicationsControl\n);return-1;//failtocreate}m_baund=2;//配置窗口参数初始化m_comn=0;m_databit=3;m_jiaoyan=0;m_stopbit=0;//缺省的串口初始化m_ComPort.SetCommPort(1);//选择串口号m_ComPort.SetInBufferSize(1024);//接收缓冲区m_ComPort.SetOutBufferSize(1024);//发送缓冲区m_ComPort.SetInputLen(0);//设置当前接收区数据长度为0,表示全部读取m_ComPort.SetInputMode(1);//以二进制方式读写数据m_ComPort.SetRThreshold(1);//接收缓冲区有大于等于1个字符时,将引发接收数据的OnCommMscomm事件m_ComPort.SetSettings(9600,n,8,1);//设置波特率等参数if(!m_ComPort.GetPortOpen())//打开串口m_ComPort.SetPortOpen(TRUE);elsem_ComPort.SetOutBufferCount(0);按照下列图为“配置”按钮添加功能函数:双击BN_CLICKED得到功能函数voidCSportDlg::Onconfig(){//TODO:Addyourcontrolnotificationhandlercodehere}添上下面的代码,就可以得到该函数的功能voidCSportDlg::Onconfig()//配置按钮被按下{//TODO:AddyourcontrolnotificationhandlercodehereCSconfigcon;//将端口配置初始化数据传递的配置对话框中con.m_baund=m_baund;con.m_comn=m_comn;con.m_databit=m_databit;con.m_jiaoyan=m_jiaoyan;con.m_stopbit=m_stopbit;if(con.DoModal()==IDOK)//配置对话框是“确定”按钮按下,需要重新配置端口{m_ComPort.SetPortOpen(FALSE);m_ComPort.SetCommPort(m_comn+1);//设置串口号m_ComPort.SetInBufferSize(1024);//接收缓冲区m_ComPort.SetOutBufferSize(1024);//发送缓冲区m_ComPort.SetInputLen(0);//设置当前接收区数据长度为0,表示全部读取m_ComPort.SetInputMode(1);//以二进制方式读写数据m_ComPort.SetRThreshold(1);//接收缓冲区有1个及1个以上字符时,将引发接收数据的OnCommMscomm事件CStringconf;switch(m_baund)//设置波特率{case0:conf=2400,;break;case1:conf=4800,;break;case2:conf=9600,;break;default:conf=9600,;}switch(m_jiaoyan)//设置校验方法{case0:conf=conf+n,;break;case1:conf=conf+o,;break;case2:conf=conf+e,;break;default:conf=conf+n,;break;}switch(m_databit)//设置数据位{case0:conf=conf+5,;break;case1:conf=conf+6,;break;case2:conf=conf+7,;break;case3:conf=conf+8,;break;default:conf=conf+8,;break;}switch(m_stopbit)//设置停止位{case0:conf=conf+1;break;case1:conf=conf+1.5;break;case2:conf=conf+2;break;default:conf=conf+1;break;}m_ComPort.SetSettings(conf);//设置波特率等参数if(!m_ComPort.GetPortOpen())//打开串口m_ComPort.SetPortOpen(TRUE);}}用上述方法添加发送按钮的功能函数voidCSportDlg::Onsendbtn(){//TODO:AddyourcontrolnotificationhandlercodehereUpdateData(TRUE);intlen;CByteArrayarray;len=m_send.GetLength();array.RemoveAll();array.SetSize(len);for(inti=0;ilen;i++)array.SetAt(i,m_send[i]);m_ComPort.SetOutput(COleVariant(array));//发送数据}下面我们经过增加事务截获功能来增加串口接收功能:在sportDlg.h中增加:protected:afx_msgvoidOnCommMscomm();DECLARE_EVENTSINK_MAP()在sportDlg.cpp中增加:BEGIN_EVENTSINK_MAP(CMainFrame,CFrameWnd)ON_EVENT(CMainFrame,ID_COMMCTRL,1,OnCommMscomm,VTS_NONE)//映射//ActiveX控件事件END_EVENTSINK_MAP()voidCSportDlg::OnCommMscomm()//串口事件到来{VARIANTvariant_inp;COleSafeArraysafearray_inp;LONGlen,k;BYTErxdata[2048];//设置BYTE数组An8-bitintegerthatisnotsigned.CStringstrtemp;switch(m_ComPort.GetCommEvent()){case1://comEvSend发送数据break;case2://comEvReceive读取数据串口接收事件到来//MessageBox(_T(读取数据事件),_T(TRACE),MB_OK);variant_inp=m_ComPort.GetInput();//读缓冲区safearray_inp=variant_inp;//VARIANT型变量转换为ColeSafeArray型变量len=safearray_inp.GetOneDimSize();//得到有效数据长度//接受数据for(k=0;klen;k++){safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组BYTEbt=*(char*)(rxdata+k);//字符型strtemp.Format(%c,bt);//将字符送入临时变量strtemp存放m_receive+=strtemp;}break;default://传输事件出错m_ComPort.SetOutBufferCount(0);break;}UpdateData(FALSE);//更新对话框内容}华赛的这个offer算是我感觉比较有发展的offer之一,所以有此文章纪念~华为今年招收的总体人数是6k-7k人,十分的多。在面试的时候常常有北邮的xdjm,就像一位xd说的,到处都有北邮帮。呵呵~北邮今年在华为的招聘中体现出来的优势也算是在IT领域各个公司的一个缩影吧~各位xdjm还需要继续加油,保持我们的这个优势,并留给后来人~我向华为投递简历之时,对于华为的印象其实不是特别好的,从胡新宇到前几天的集体辞职,等等,像后来华赛一位经理说的,的确有些被妖魔化了。到现在为止,我依然感觉得到华为的狼性,他对于人的苛刻要求,尤其是对于销售和技术支持岗位。周围有一些人,一心想去海外锻炼而不得,有人只是去华为攒面经而据掉华为的offer,各式各样的目标再加上华为今年巨大的招聘人数,成了论坛上的一道风景。;我投的是销售工程师,在最开始投的时候,由于之前的一些个人想法,只是想试试——因为要求硕士学历,我还是小本。'_后来看到论坛上有人说华为开始通知面试,不知为什么,心理也从未紧张,只是慢慢的等,直到第一批得到营销类的一面通知……[B]销售工程师一面,周二,西苑4层。看了下之前各位分享的经验,了解到一面只是华为的面试官聊天类的面试,就带着要求的东西过去了~填表,等待……先介绍一下流程:1,自我介绍我刚坐下,面试官(姑且成为A吧)低头看着我的表格以及简历,说了一句,做一个自我介绍吧~我当时很诧异,我还从来没做过不和人进行眼神交流的自我介绍,于是决定不按之前准备的来,换了个思路,准备用自己的言语和经历打动他。于是blabla,果然有了效果,半分钟不到,A就抬起了头,开始看着我了。自我介绍我用了2分钟,之后他对我的成绩很感兴趣,问我成绩单和CCNA证书带没带,拿给他之后,向他大概介绍了一下自己的成绩曲线以及奖学金。看得出来他很满意~由于暑假时候在IBM实习,A又问了我关于IBM和华为如果同时给offer会如何选择,听了我的答案之后,A向我说了一些他对于在外企和华为类国企不同发展的看法~2,工作地点讨论我选择的是B——仅限国内分配。A就这个选择向我介绍了说华为技术(我的志愿公司)国内的销售,各个办事处几乎都满了,想留国内几乎不可能。我跟他说明了这个是按照网申时候填写的,现在的顾虑主要是家庭方面反对。又询问表上AA与A的区别,尤其是人身安全方面,A

1 / 36
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功