VC串口传来的数据
我在编一个串口通信的界面。要求两台计算机通过串口传输数据。在串口调试助手中输入一些数如:123456,在另一台计算机中的运行程序,要显示出传来的数据。可是每次总是显示乱码...
我在编一个串口通信的界面。要求两台计算机通过串口传输数据。在串口调试助手中输入一些数如:12 34 56,在另一台计算机中的运行程序,要显示出传来的数据。可是每次总是显示乱码,而不显示传来的数据。这是怎么回事呢?是因为类型转换的问题吗?这是我的程序:
void CMySerialComDlg::OnSet()
{
// TODO: Add your control notification handler code here
UpdateData();
m_com.MakeUpper();//变成大写字母
if(m_com!="COM1"&&m_com!="COM2"&&m_com!="COM3"&&m_com!="COM4")
{
AfxMessageBox("不正确的串口号,请重新输入串口号!");
m_com="COM1";//默认为com1?
UpdateData();
return;
}
if(m_open)
{
m_ComConfig.CloseConnection();//
m_open=FALSE;//
}
char a[2]={m_com[3],'\0'};//
int i=atoi(a);//将字符型转换为整型
m_ComConfig.Set(i);//
if(m_ComConfig.OpenConnection()==FALSE)//
{
AfxMessageBox("无法打开该串口!");
m_com="COM1";
UpdateData(FALSE);
return;
}
else
{
AfxMessageBox("该串口已经被成功打开!");
}
m_open=TRUE;
}
void CMySerialComDlg::OnSend()
{
// TODO: Add your control notification handler code here
char buffer [1024];
int length=GetDlgItemText(IDC_SEND_EDIT,buffer,1024);
if(m_open)
{
if(::WriteCommBlock(m_ComConfig,buffer,length)==FALSE)//
{
AfxMessageBox("没有连接串口线!");
}
}
else
{
AfxMessageBox("该串口没有正确打开,请先设置串口!");
}
}
void CMySerialComDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
char buffer[1024];
ZeroMemory(buffer,1024);//将字符串结束,否则会显示烫烫烫,(ZeroMemory)是清空指定内存为零
buffer[0]='\0';
if(::ReadCommBlock(m_ComConfig,buffer,1024)!=0)
{
m_receive+=buffer;
UpdateData(FALSE);
}
CDialog::OnTimer(nIDEvent);
}
BOOL CMySerialComDlg::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Add your specialized code here and/or call the base class
return CDialog::PreCreateWindow(cs);
}
void CMySerialComDlg::OnOK()
{
// TODO: Add extra validation here
KillTimer(1);
if(m_ComConfig.IsConnected())
m_ComConfig.CloseConnection();
CDialog::OnOK();
}
哪位大侠帮我看看啊?谢谢拉! 展开
void CMySerialComDlg::OnSet()
{
// TODO: Add your control notification handler code here
UpdateData();
m_com.MakeUpper();//变成大写字母
if(m_com!="COM1"&&m_com!="COM2"&&m_com!="COM3"&&m_com!="COM4")
{
AfxMessageBox("不正确的串口号,请重新输入串口号!");
m_com="COM1";//默认为com1?
UpdateData();
return;
}
if(m_open)
{
m_ComConfig.CloseConnection();//
m_open=FALSE;//
}
char a[2]={m_com[3],'\0'};//
int i=atoi(a);//将字符型转换为整型
m_ComConfig.Set(i);//
if(m_ComConfig.OpenConnection()==FALSE)//
{
AfxMessageBox("无法打开该串口!");
m_com="COM1";
UpdateData(FALSE);
return;
}
else
{
AfxMessageBox("该串口已经被成功打开!");
}
m_open=TRUE;
}
void CMySerialComDlg::OnSend()
{
// TODO: Add your control notification handler code here
char buffer [1024];
int length=GetDlgItemText(IDC_SEND_EDIT,buffer,1024);
if(m_open)
{
if(::WriteCommBlock(m_ComConfig,buffer,length)==FALSE)//
{
AfxMessageBox("没有连接串口线!");
}
}
else
{
AfxMessageBox("该串口没有正确打开,请先设置串口!");
}
}
void CMySerialComDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
char buffer[1024];
ZeroMemory(buffer,1024);//将字符串结束,否则会显示烫烫烫,(ZeroMemory)是清空指定内存为零
buffer[0]='\0';
if(::ReadCommBlock(m_ComConfig,buffer,1024)!=0)
{
m_receive+=buffer;
UpdateData(FALSE);
}
CDialog::OnTimer(nIDEvent);
}
BOOL CMySerialComDlg::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Add your specialized code here and/or call the base class
return CDialog::PreCreateWindow(cs);
}
void CMySerialComDlg::OnOK()
{
// TODO: Add extra validation here
KillTimer(1);
if(m_ComConfig.IsConnected())
m_ComConfig.CloseConnection();
CDialog::OnOK();
}
哪位大侠帮我看看啊?谢谢拉! 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询