欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

vc做串口通信组选择框的有关问题

更新时间: 2014-05-18 10:57:26 责任编辑: Author_N8

 

VC做串口通信组选择框的问题
用VC做一个串口调试助手的软件,用的是MSComm控件!
软件要具有选择串口的功能,我用的是框组合的按钮,但是运行后不能选择串口,现在贴上这部分程序,请各位指导一下
BOOL CVCDlg::OnInitDialo***ialog::OnInitDialog(); // Add "About..." menu item to system menu. 
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
} // Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon

// TODO: Add extra initialization here 
m_ComboSeriou.AddString("COM1");
m_ComboSeriou.AddString("COM2");
m_ComboSeriou.AddString("COM3");
m_ComboSeriou.AddString("COM4");
m_ComboSeriou.SetCurSel(1);
if(m_ctrlComm.GetPortOpen()) //如果串口已经打开,则关闭
{
m_ctrlComm.SetPortOpen(FALSE); 
}
m_ctrlComm.SetCommPort(m_ComboSeriou.GetCurSel()); //(请问这一句有什么问题没 
if( !m_ctrlComm.GetPortOpen())
m_ctrlComm.SetPortOpen(TRUE); //打开串口
else
AfxMessageBox("cannot open serial port"); 

m_ctrlComm.SetInputMode(1);
m_ctrlComm.SetInBufferSize(1024);
m_ctrlComm.SetOutBufferSize(512);
m_ctrlComm.SetSettings("9600,n,8,1");
if(!m_ctrlComm.GetPortOpen())
m_ctrlComm.SetPortOpen(TRUE);
m_ctrlComm.SetRThreshold(1);
m_ctrlComm.SetInputLen(0);
m_ctrlComm.GetInput();

return TRUE; // return TRUE unless you set the focus to a control
}


--参考方法--
m_ctrlComm.SetCommPort(m_ComboSeriou.GetCurSel()+1); //(请问这一句有什么问题没
要加1,因为组合框是从0开始的,所以COM1就得到的是0,但SetCommPort不识别0,只是参数是1代表COM1,是2代表COM2,以此类推
--参考方法--
你把串口的2脚和3脚短接,这样自发自收,或者你先用串口助手来试试串口是不是好使,如果好使,你再试你的程序
OnComm事件,参数是2表示接收,网上有MSCOMM控件的代码,你可以查下
这是我的代码,没问题,已使用多年没出问题:
void CMy72V300AView::OnCommMscomm1()
{
VARIANT variant_inp;
COleSafeArray safearray_inp;
long i = 0,len;
switch (m_Comm1.get_CommEvent())
{
case 2:
//表示接收缓冲区内有字符
{

variant_inp = m_Comm1.get_Input();
safearray_inp = variant_inp;
len = safearray_inp.GetOneDimSize();
for (i = 0; i < len; i++)
{
safearray_inp.GetElement(&i, &m_ReceBuff[i]);
}
m_Comm1.put_OutBufferCount(0);// '清空发送缓冲区
m_Comm1.put_InBufferCount(0);// '滑空接收缓冲区
safearray_inp.Clear();
}
break;
default:
break;
}
}
串口初始化:
view1->m_Comm1.put_CommPort(1); //串口1
view1->m_Comm1.put_InBufferSize(4096); //设置输入缓冲区的大小,Bytes
view1->m_Comm1.put_OutBufferSize(2048); //设置输入缓冲区的大小,Bytes
if(!view1->m_Comm1.get_PortOpen()) //打开串口
{
view1->m_Comm1.put_PortOpen(true);
}
view1->m_Comm1.put_OutBufferCount(0);// '清空发送缓冲区
view1->m_Comm1.put_InBufferCount(0);// '滑空接收缓冲区

view1->m_Comm1.put_InputMode(1); //设置输入方式为二进制方式
view1->m_Comm1.put_Settings(str); //设置波特率等参数
view1->m_Comm1.put_RThreshold(8); //为8表示有8个字符即引发事件
view1->m_Comm1.put_InputLen(0);
看看我回复的贴子:
http://topic.csdn.net/u/20120312/10/047409be-ae49-4061-9a4e-e4338935c008.html 
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-05-18 10:57:26
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/903967/
本文WWW.DOC100.NET DOC100.NET版权所有。