友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
VC语言6.0程序设计从入门到精通-第66部分
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!
void SetmPort(short nNewValue)和 short GetmPort() 。
(2 )Settings 属性
该属性用于设置或返回数据传输率、奇偶校验、数据位和停止位参数,其属性值格式为
“BBBB;P;D;S ”。
其中 BBBB 为数据传输率,P 为奇偶校验,D 为数据位,S 为停止位。默认值为
9600;N;8;1 ”。
“
该属性对应的函数为 void SetSettings(LPCTSTR lpszNewValue)和 String GetSettings()。
(3 )PortOpen 属性
该属性用于设置或返回串口状态,值为 TRUE 时打开,值为 FALSE 时关闭。如果要打
开端口,则必须现设置 mPort 属性。
该属性对应的函数为 void SetPortOpen(BOOL bNewValue)和 BOOL GetPortOpen() 。
(4 )Input 属性
该属性用于从接收缓冲区中读取数据,其对应的函数为 VARIANT GetInput() 。
(5 )InputMode 属性
该属性用于设置或返回从接收缓冲区读取数据的格式,属性值为 0 时表示以文本格式读
取数据;属性之为 1 时表示以二进制格式读取数据;属性值为 2 时表示以十六进制格式读取
数据。
该属性对应的函数分别为 void SetInputMode(long nNewValue)和 long GetInputMode() 。
(6 )InBufferCount 属性
该属性用于设置或返回在接收缓冲区中等待的字符数,该属性在端口未打开时不可用。
·322 ·
…………………………………………………………Page 334……………………………………………………………
第 11 章 网络编程
对应的函数为 void SetInBufferCount(short nNewValue)和 short GetInBufferCount() 。
(7 )InBufferSize 属性
该 属 性 用 于 设 置 或 返 回 接 收 缓 冲 区 大 小 的 字 节 数 , 其 对 应 的 函 数 分 别 为 void
SetInBufferSize(short nNewValue)和 short GetInBufferSize() 。
(8)Output 属性
该属性用于向发送缓冲区中写入数据,其对应的函数为 void SetOutput(const VARIANT&
newValue) 。
(9 )OutBufferCount 属性
该属性用于设置或返回在发送缓冲区中等待的字符数,该属性在端口未打开时不可用。
其对应的函数分别为 void SetOutBufferCount(short nNewValue)和 short GetOutBufferCount() 。
(10)OutBufferSize 属性
该 属 性 用 于 设 置 或 返 回 发 送 缓 冲 区 的 字 节 大 小 , 对 应 的 函 数 分 别 为 void
SetOutBufferSize(short nNewValue)和 short GetOutBufferSize() 。
(11)mEvent 属性
该属性用于设置或返回串口事件,其对应的函数分别为 void SetmEvent(short
nNewValue)和 short GetmEvent() 。常见的串口事件如表 11…13 所示。
表 11…13 常见串口事件
常数 取值 描述
EvSend 1 发送事件
EvReceive 2 接收事件
EvCTS 3 clear…to…send 线的状态发生变化
EvDSR 4 data…set ready 线的状态发生变化
EvCD 5 carrier detect 线的状态发生变化
EvRing 6 检测到震铃信号
EvEOF 7 收到文件结束字符
(12)RThreshold 属性
该属性用于设置或返回 RThreshold 数值,所谓 RThreshold 数值是通过 MSm 控件将
mEvent 属性设置为 EvReceive,并在产生 Onm 事件之前所接收的字符数。
该属性对应的函数为 void SetRThreshold(short nNewValue)和 short GetRThreshold() 。
11。5。2 利用 MSm 控件编程的基本流程
利用 MSm 控件编程的基本流程如下。
o 在当前 Project 中插入 MSm 控件;
o 初始化并打开串口;
o 捕捉串口事项;
o 串口读写;
o 关闭串口。
·323 ·
…………………………………………………………Page 335……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
11。5。3 利用 MSm 进行串口通信
实例 11…2:MSm 控件使用实例。源代码在光盘中“11实例 11…2MSm”目录下。
本节通过编写一个小程序来实现利用 MSm 控件进行串口数据传输。
新建一个基于对话框的 MFC 工程,取名为 MSm 。依次单击菜单栏的“Project ”→
“Add To Project ”→“ponents and Controls ”,弹出添加控件对话框,如图 11…16 所示。然
后打开“Registered ActiveX Controls ”文件夹,选中“Microsoft munications Control ,vision
6。0 ”控件,将其添加到工程中,如图 11…17 所示。
图 11…16 添加控件对话框 图 11…17 加入 MSm 控件
然后编辑对话框界面,完成后的效果如图 11…18 所示(本例中,用于选择串口的控件为
bo Box 控件,在为对话框添加 bo Box 控件的时候,需要为该 bo Box 控件加入
1 和 2 两个数据,分别表示串口 1 和串口 2 ),其中控件 就是 MSm 控件。
注意:在为 bo Box 控件添加数据的时候,如果数据多于一个,则在添加后面数据的时候,要
按住 Ctrl 键,同时按回车键进行换行,而不是直接用回车键进行换行。
图 11…18 对话框界面
为对话框添加完控件后,需要设置各控件 ID,并为其添加变量。各控件的 ID 及其对应
的变量如表 11…14 所示。
·324 ·
…………………………………………………………Page 336……………………………………………………………
第 11 章 网络编程
表 11…14 各控件 ID 及对应变量
控件 ID 变量
MSm 控件 IDC_MSM CMSm m_m
接收数据 Edit IDC_RECEIVEDATA CString m_Receive
发送数据 Edit IDC_SENDDATA CString m_Send
选择串口下拉列表 IDC_BOLIST int m_Port (初始化为0 )
打开串口按钮 IDC_OPENPORT 无
关闭串口按钮 IDC_CLOSTPORT 无
发送按钮 IDC_SEND 无
在文件“MSmDlg。h ”的头部加入语句#include 〃msm1。h〃 ,然后为对话框类加入
成员函数 void Initm() ,来初始化 MSm 控件,其代码如下:
void CMSmDlg::Initm()
{
//设置串口
m_m。SetmPort(m_Port+1);
// 设置数据读取格式为二进制方式
m_m。SetInputMode(1);
// 设置传输参数
m_m。SetSettings(〃9600;n;8;1〃);
//缓冲区内有一个字符就可以接收
m_m。SetRThreshold(1);
// 指定接收缓冲区大小
m_m。SetInBufferSize(1024);
//指定发送缓冲区大小
m_m。SetOutBufferSize(1024);
// 清空接收缓冲区
m_m。SetInBufferCount(0);
// 打开串口
if(!m_m。GetPortOpen())
{
m_m。SetPortOpen(TRUE);
}
}
当选择下拉列表中的端口时,会激发 CBN_SELCHANGE 消息,为其添加响应函数,代
码如下:
void CMSmDlg::OnSelchangebolist()
{
// TODO: Add your control notification handler code here
CString m_str;
//得到下拉列表内容
GetDlgItemText(IDC_BOLIST; m_str);
·325 ·
…………………………………………………………Page 337……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
//得到串口号
m_Port = atoi(LPCTSTR(m_str))…1;
}
为“打开串口”按钮添加响应函数,代码如下:
void CMSmDlg::OnOpenport()
{
// TODO: Add your control notification handler code here
Initm();
}
为“关闭串口”按钮添加响应函数,代码如下:
void CMSmDlg::OnClostport()
{
// TODO: Add your control notification handler code here
if( m_m。GetPortOpen() )
{
// 关闭串口
m_m。SetPortOpen(0);
}
}
为“发送”按钮添加响应函数,代码如下:
void CMSmDlg::OnSend()
{
// TODO: Add your control notification handler code here
//得到发送 Edit 控件的数据
UpdateData(TRUE);
int Count=m_Send。GetLength();
//将发送数据传给 m_Array
CByteArray m_Array;
m_Array。RemoveAll();
m_Array。SetSize(Count);
for(int i=0;i 0)
{
//得到接收数据
m_input = m_m。GetInput();
str = (char*)(unsigned char*)m_input。parray…》pvData;
}
//清除字符串中的不必要字符
i = 0;
str1 = str;
while(i 《 k)
{
i++;
str1++;
}
*str1 =’0’;
str2 = (const char*)str;
//得到最终数据
m_Receive += (LPCTSTR)str2;
default:
break;
}
// 显示数据
UpdateData(FALSE);
}
至此,程序设计完成。运行两个程序,分别选择串口 1 和串口 2 ,然后收发数据,如图
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!