首 页 用户登录 | ![]() |
|||
|
|||
按字母检索 | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z |
按声母检索 | A | B | C | D | E | F | G | H | J | K | L | M | N | O | P | Q | R | S | T | W | X | Y | Z | 数字 | 符号 |
|
![]() |
您的位置: 5VAR论文频道 → 论文中心 → 理工论文 → 电子通信 |
|
|||||
在VC++中用ActiveX控件实现与单片机的串行通信 | |||||
收集整理:佚名 来源:本站整理 时间:2009-01-10 22:14:35 点击数:[] ![]() |
|||||
个地方对控件的属性进行设置: (1)对话框资源编辑器中。在对话框模板上,用右键单击MSCOMM控件,然后选择Properties…菜单项,最后便可设置各项属性。此处只对以下几处进行改动,其他接受缺省设置:Rthershold:1,InputLen:1,DTREnable:不选,InputMode:1-Binary。 (2)对话框类的OnInitDialog()函数中。下面是以上设置的函数实现: BOOL CMyCOMMDlg::OnlnitDialog() { CDialog::OnlnitDialog(); //此处为应用框架自动生成代码,不予列出 //TODO:Add extra initialization here m_comm.SetCommPort(1);//使用串口1 m_comm.SetSettings("9600,N,8,1"); //波特率为9600,无奇偶校验,8位数据位,1位停止位 m_comm.SetRThreshold(10); //每接收10个字符就触发1次接收事件 m_comm.SetSThreshold(0); //不触发发送事件 m_comm.SetInputLen(10); //每次读操作从缓冲区中取10个字符 m_comm.SetInputMode(1); //二进制数据传输形式 m_comm.SetPortOpen(TRUE); //打开串口 return TRUE;//return TRUE unless you set the focus to a control } 4.发送二进制数据 如果需要发送二进制数据,可将数据作如下处理。具体代码如下: CByteArray bytOutArr; bytOutArr.Add(0x0); //给数组赋值 bytOutArr.Add(0x1); bytOutArr.Add(0x2); bytOutArr.Add(0x3); bytOutArr.Add(0x4); COleVariant varOut; varOut=COleVariant(bytOutArr); //将数据转换为变体数据类型 m_comm.SetOutput (varOut); //发送数据 5.接收二进制数据 当需要接收大量的数据时,最好采用事件驱动方式进行编程。具体步骤如下: (1)响应OnComm事件。在对话框资源编程器中,双击对话框模板上的MSCOMM控件,在弹出的对话框中填入您所希望的事件响应函数名,此处将其命名为OnCommMscomm1()。 (2)在事件响应函数中接收和处理数据。接收来的数据为变体数据,所以需要做一些处理,具体代码如下: void CMyCOMMDlg::OnCommMscomm1() { COleVariant varRcv; CByteArray byt; int i; long num; switch (m_comm.GetCommEvent()) { cass 1://数据发送事件 break; case 2://数据接收事件 varRcv=m_comm.GetInput(); varRcv.ChangeType (VT_ARRAY VT_UI1); BYTE HUGEP *pbstr; HRESULT hr; hr=SafeArrayAccessData (varRcv.parray,(void HUGEP*FAR*)&pbstr);//获取安全数组指针 if (FAILED (hr)){ AfxMessageBox("获取数组指针失败!"); break;} num=0; hr=SafeArrayGetUBound (varRcv.parray,1,&num);//获取数组上界 if (FAILED (hr)){ AfxMessageBox("获取数组上界失败!"); break;} for(i=0;i byt.Add(pbstr ); SafeArrayUnaccessData (varRcv.parray); //此时数据已保存在二进制数组byt中,可根据需要进行相关处理 break; default: break; } } 以上代码中的处理部分可以做成一个单独的函数,在此处调用即可。经过以上代码的处理,接收来的数据已存放在二进制数组byt中,可以根据自己的需要对其进行相关处理,如保存和显示等。 三、硬件接口 单片机与微机之间的硬件接口可以用1片MAX232或ICL232与几个电容即可实现,有许多文献讨论过,此处不再多述。 以上方法经过笔者在实践中的应用,感到非常简洁、方便,具有很强的实用意义。 |
提供人:佚名 | |
【返回上一页】【打 印】【关闭窗口】 |
![]() |
5VAR论文频道 |
![]() |
5VAR论文频道 |
![]() |
关于本站 -
网站帮助 -
广告合作 -
下载声明 -
网站地图
Copyright © 2006-2033 5Var.Com. All Rights Reserved . |