在d出的窗口选择“Registered ActiveX Controls”,双击进入该文件夹,如下图所示
在列表中找到“Microsoft Communications Control, version 6.0”,点击“Insert”按钮,如下图所示
接下来就会在资源视图中看到一个电话图标,如下图所示
右键该电话图标,选择“ClassWizard...”,如下图所示
在Member Variables下为该控件添加一个控件变量,如下图所示
在Message Maps下为该控件添加OnComm消息,如下图所示
在OnInitDialog()函数中,加入窗口控件初始化函数,如下图所示
在OnComm() 函数中,加入串口消息处理函数,处理串口接收的数据,如下图所示
MSCOMM32.OCX,此文件在WIN9X中位于Windows/System目录夹内,在WINXP中位于Windows/System32目录夹内.你再仔细找找看是否有此控件.需在菜单栏工程(P)下拉菜单中选部件(O),在其属性页中找MICROSOFT COMM CONTROL6.0,对选钩方框打钩,就能在工具箱中出现电话机样的MSCOMM控件.如果上法找不到MICROSOFT COMM CONTROL6.0,则需从其它相同系统的System或System32目录夹将MSCOMM32.OCX复制到你机器系统的相同目录夹内,然后按文件下拉菜单中选部件(O),由浏览(B)去选中MSCOMM32.OCX文件,它就在部件(O)属性页中可找到,然后按前法 *** 作,工具箱中就会有MSCOMM控件了.
康暮皎阑垆缯委凌莘颍收邠店在髯萤福荠顺王润
1:添加MSComm控件
2:为对话框添加MSComm控件成员变量
右击MSComm控件,然后选择Add Variable...
3:为对话框添加OnComm事件
右击MSComm控件,然后选择Add Event Handle..
4:打开/关闭串口.
void Ctbox_debug_viewDlg::OnBnClickedBtOpen(){
// TODO: Add your control notification handler code here
if(m_mscomm.get_PortOpen())
{
m_mscomm.put_PortOpen(FALSE)
GetDlgItem(IDC_BT_OPEN)->SetWindowText(_T("打开"))
ShowInfo(_T("关闭串口成功!"))
m_OpenStatus =false
return
}
UpdateData(TRUE)
m_OpenStatus =true
//当前端口号
m_mscomm.put_CommPort(m_Port+1)//端口号
m_mscomm.put_InBufferSize(1024)//接收缓冲区
m_mscomm.put_OutBufferSize(1024)//发送缓冲区
m_mscomm.put_InputLen(0)//设置当前接收区数据长度为0,表示全部读取
m_mscomm.put_InputMode(1)//以二进制方式读写数据
m_mscomm.put_RThreshold(1)//接收缓冲区有1个及1个以上字符时,将引发接收数据的OnComm事件
//波特率
DWORD baudrate
switch(m_CombolBaudrate.GetCurSel())
{
case 0:
baudrate =115200
break
case 1:
baudrate =9600
break
default:
ASSERT(FALSE)
break
}
CString setting
setting.Format(_T("%d,n,8,1"),baudrate)
m_mscomm.put_Settings(setting/*_T("115200,n,8,1")*/)//波特率,无校验,8个数据位,1个停止1位
m_mscomm.put_PortOpen(TRUE)//打开串口
GetDlgItem(IDC_BT_OPEN)->SetWindowText(_T("关闭"))
ShowInfo(_T("打开串口成功!"))
}
5:接收串口数据
void Ctbox_debug_viewDlg::OnCommMscomm1()
{
// TODO: Add your message handler code here
short curEvent =m_mscomm.get_CommEvent()
switch(curEvent)
{
case CMscomm1::comEvReceive:
EvReceiveHandle()
break
}
}
void Ctbox_debug_viewDlg::EvReceiveHandle(void)
{
static unsigned int cnt=0
VARIANT variant_inp
COleSafeArray safearray_inp
long len,k
/*unsigned intdata[1024]={0}*/
BYTE rxdata[1024]//设置BYTE数组
CString strtemp
cnt++
variant_inp= m_mscomm.get_Input()//读取缓冲区
safearray_inp= variant_inp//变量转换
len= safearray_inp.GetOneDimSize()//得到有效的数据长度
for (k=0k<lenk++)
{
safearray_inp.GetElement(&k,rxdata+k)
}
/*char c_char */
for (k=0k<lenk++)
{
strtemp.Format(_T("%c"),*(rxdata+k))
m_RecveString +=strtemp
if(*(rxdata+k) =='\n')
{
ShowInfoByFilter(m_RecveString)
m_RecveString =""
}
}
}
6:发送串口数据
void Ctbox_debug_viewDlg::OnBnClickedBtSend()
{
// TODO: Add your control notification handler code here
if(m_OpenStatus ==false)
{
AfxMessageBox(_T("请先打开串口"))
return
}
UpdateData(TRUE)
if(m_SendString.IsEmpty())
return
if(m_AutoAddLF)
{
m_SendString +="\r\n"
}
m_mscomm.put_Output(COleVariant(m_SendString))
ShowInfo(m_SendString)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)