如何在vc6.0中为实现串口通信

如何在vc6.0中为实现串口通信,第1张

首先创建一个VC6.0基于对话框的程序,然后在资源视图中,Project --- >Add To Project --->compoents and controls...,如下图所示

在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)

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11900726.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存