
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)
}
ActiveX选项,出现ActiveX控件导入窗口;(2)在其中选中MicrosoftCommControl
6.0(Version
1.1),并按需要选定Palette
pages、unitdirname、Search
path值(一般取默认值),最后选择Install按钮进行安装。即可将MSComm控件引入到Delphi
(3)在编程使用中,直接打开ActiveX控件,选取TMSComm控件,放在窗体上,设置其属性即可。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)