VC++MSComm串口接收程序 and VC上位机For51Word格式.docx
- 文档编号:15794991
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:26
- 大小:520.18KB
VC++MSComm串口接收程序 and VC上位机For51Word格式.docx
《VC++MSComm串口接收程序 and VC上位机For51Word格式.docx》由会员分享,可在线阅读,更多相关《VC++MSComm串口接收程序 and VC上位机For51Word格式.docx(26页珍藏版)》请在冰豆网上搜索。
弹出如图3对话框。
图3添加MSComm控件
按照图上所选的,打开寻找MSComm控件即可。
如图4所示。
(注意:
安装的软件要是小于100MB的绿色版软件是没有这两个文件夹的,估计需要手动添加,具体的步骤我不知道,大家要是找不到的话,可以去网上找找。
或者和我一样,下载一个破解安装版的。
)
图4MSComm控件(小电话)
图5确定添加MSComm控件?
图6点击OK
添加完之后就可以在控件里找到了。
如图7:
图7MSComm控件添加完成
4.给对话框添加控件
添加的控件为一个编辑框和一个MSComm控件。
添加MSComm控件的方法是直接把它拖进编辑框里既可以了。
运行后不会显示那个小电话的图标。
添加后就如图8所示。
图8添加控件
5.设置控件的属性和添加变量。
首先是设置编辑框的属性,为多行,垂直滚动。
如图9所示。
图9设置编辑框的属性
图10编辑框效果
下面更改一下控件的名字,把编辑框的ID改为IDC_EDIT_RXDATA,如图11所示。
改动的方法是右击编辑框,选择属性。
图11更改编辑框ID
随后是添加变量,打开类向导(Ctrl+W),为编辑框添加CString变量m_strRXData,为MSComm控件(IDC_MSCOMM1)添加控制变量:
m_ctrlComm。
添加如图12所示。
图12添加变量
6.下面是我们添加函数代码的时候了。
首先是添加串口响应函数。
方法:
双击MSComm控件,弹出如图13所示的对话框。
图13添加COMM响应函数
在调出的函数编辑框中添加如下代码:
VARIANTvariant_inp;
COleSafeArraysafearray_inp;
LONGlen,k;
BYTErxdata[2048];
//设置BYTE数组An8-bitintegerthatisnotsigned.
CStringstrtemp;
if(m_ctrlComm.GetCommEvent()==2)//事件值为2表示接收缓冲区内有字符
{
////////以下你可以根据自己的通信协议加入处理代码
variant_inp=m_ctrlComm.GetInput();
//读缓冲区
safearray_inp=variant_inp;
//VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize();
//得到有效数据长度
for(k=0;
k<
len;
k++)
safearray_inp.GetElement(&
k,rxdata+k);
//转换为BYTE型数组
k++)//将数组转换为Cstring型变量
{
BYTEbt=*(char*)(rxdata+k);
//字符型
strtemp.Format("
%c"
bt);
//将字符送入临时变量strtemp存放
m_strRXData+=strtemp;
//加入接收编辑框对应字符串
}
UpdateData(FALSE);
//更新编辑框内容
//**********************************注:
本代码直接转自龚建伟技术网站(代码未改动)
代码中有一行是
strtemp.Format("
其中的%C是一个字符型变量,我们要的是显示16进制的数据,所以改为
02X"
其他的就不用改动了。
最后的代码如图14所示。
图14串口响应函数代码
下面编译一下,应该不会有编译错误了。
但是点击
,出现了错误。
如图15
图15编译中出现的错误1
图16定位错误
双击错误,对错误定位,结果如上图所示。
网上有人说把工程所在的文件夹里的debug文件夹下的文件都删除就可以了。
我不知道是不是我弄错了还是怎么的,就是不管用。
不过,这个错误不用管它。
直接在点击
就可以解除错误了…………呵呵,我也不大明白。
7.初始化串口
上面的没有了错误了,下面就是要初始化串口了。
现在我们在主对话框的CMyDlg:
:
OnInitDialog()打开串口,加入如下代码:
//TODO:
Addextrainitializationhere
if(m_ctrlComm.GetPortOpen())
m_ctrlComm.SetPortOpen(FALSE);
m_ctrlComm.SetCommPort
(1);
//选择com1
if(!
m_ctrlComm.GetPortOpen())
m_ctrlComm.SetPortOpen(TRUE);
//打开串口
else
AfxMessageBox("
cannotopenserialport"
);
m_ctrlComm.SetSettings("
9600,n,8,1"
//波特率9600,无校验,8个数据位,1个停止位
m_ctrlComm.SetInputModel
(1);
//1:
表示以二进制方式检取数据
m_ctrlComm.SetRThreshold
(1);
//参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件
m_ctrlComm.SetInputLen(0);
//设置当前接收区数据长度为0
m_ctrlComm.GetInput();
//先预读缓冲区以清除残留数据
//*****************************代码来源同上(未作修改)
这个代码使用了几次,发现不大适合我安装的VC6,因为这个代码来自的文章是2001年发表的,现在都是2010年了。
呵呵,不过也可能你的不会出现这种情况。
在直接进行编译的时候,系统会提示有一个错误。
错误如图17.
图17编译中出现的错误2
出现这种错的原因是我的vc6的版本中没有使用程序设置MODE的选项。
所以只有注销掉这句话,手动设置。
方法是打开MSComm控件的属性。
如图18、19所示。
图18COMM属性1
图19COMM属性2
从图19可以看出,没有MODE项!
!
只能在全部里面设置了……如图20。
图20COMM属性3
这样设置完之后,那句话注销了就可以了……如图21所示。
图21修改二进制方式后编译结果
好了,现在在编译一下,没有错误了……这个小程序也可以用了。
打开之后,它自动占用COMM1口,用单片机连接comm1口,发送数据,程序运行结果如图22所示。
图22接收效果
如果函数中的%02x改为大写%02X,如图23,则效果如图24所示。
图23修改函数
图24接收效果(大写)
8.下面我就附上源程序(单片机方面)。
至于VC的,打包后会发在我的EDN博客上。
//单片机为STC89C52RC。
//该程序实现了,按一次按键将其对应的数值以9600波特率发送到串口上,注意用的是4X4键盘
//将JP8跳线帽联接到P1。
#include<
reg52.h>
intrins.h>
#defineucharunsignedchar
#defineuintunsignedint
#defineshujuP0
#definebusP1
sbitbeep=P3^4;
voiddelayms(inti)
intj;
for(j=0;
j<
i;
j++);
voidchushi()//初始化串口
{//***晶振:
11.0592MHZ,波特率:
9600***
TMOD=0x20;
SCON=0x50;
TH1=0xfA;
TL1=0xfA;
PCON=0x80;
TR1=1;
EA=1;
ES=0;
RI=0;
TI=0;
voiddisplay(uchari)
SBUF=i;
while(!
TI);
voidjianpan()//键盘检测
{
uchara;
uchark;
bus=0xff;
//清P1口
bus=0xef;
delayms(6000);
a=bus;
a=a&
0x0f;
if(a!
=0x0f)
delayms(2000);
{
switch(a)
{
case0x0e:
k=0x01;
break;
case0x0d:
k=0x02;
case0x0b:
k=0x03;
case0x07:
k=0x04;
}
display(k);
while(a!
{beep=0;
bus=0x0f;
delayms(2000);
a=bus;
}
}
beep=1;
bus=0xdf;
switch(a)
case0x0e:
k=0x05;
break;
case0x0d:
k=0x06;
case0x0b:
k=0x07;
shuju=0x07;
case0x07:
k=0x08;
display(k);
while(a!
{beep=0;
bus=0x0f;
delayms(2000);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VC+MSComm串口接收程序 and VC上位机For51 VC MSComm 串口 接收 程序 上位 For51