📄 scommtestdlg.cpp
字号:
if(m_ctrlHexDiaplay.GetCheck())
{
if(bt >= '0' && bt<'9')
strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放
else if(bt>'a' && bt<'f')
strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放
else
strtemp.Format("%02X ",bt); //将字符以十六进制方式送入临时变量strtemp存放,注意这里加入一个空隔
}
else
{
strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放
}
m_strRXData+=strtemp; //加入接收编辑框对应字符串
}
}
m_strRXData+=" ";
UpdateData(FALSE);
////////////////////////修改接收的次数并且填充到编辑框中///////////////
m_jieshoucishu ++;
CString strjieshou;
strjieshou.Format("%d",m_jieshoucishu);
GetDlgItem(IDC_JIESHOUCISHU)->SetWindowText(strjieshou);
////////////////////////////////////////////////////////////////////////
UpdateData(TRUE); //更新编辑框内容
}
void CSCommTestDlg::OnButtonManualsend()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE); //读取编辑框内容
m_ctrlComm.SetOutput(COleVariant(m_strTXData));//发送数据,需将内容先转换成COleVariant类型
///////////////////////改变发送的次数并且填充编辑框/////////////////////////
m_fasongcishu ++;
CString str;
str.Format("%d",m_fasongcishu);
GetDlgItem(IDC_FASONGCISHU)->SetWindowText(str);
/////////////////////////////////////////////////////////////////////////////
UpdateData(TRUE);
}
void CSCommTestDlg::OnOpen()
{
//打开串口和设置串口参数
UpdateData(TRUE);
if(m_ctrlComm.GetPortOpen())
{
m_ctrlComm.SetPortOpen(FALSE);//检测串口的状态,如果处于打开状态则关闭
//MessageBox("串口关闭");
}
long int import;
if(m_chuankou == "COM1")
import =1;
else if(m_chuankou == "COM2")
import =2;
else if(m_chuankou == "COM3")
import =3;
else if(m_chuankou == "COM4")
import =4;
else import =1;
m_ctrlComm.SetCommPort(import); //选择串口号
if( !m_ctrlComm.GetPortOpen())
{
m_ctrlComm.SetPortOpen(TRUE);//打开串口
int i = m_ctrlComm.GetCommPort();
CString ss;
ss.Format("%d",i);
ss = "串口已经打开 串口号:"+ss;
MessageBox(ss,"串口开启",MB_OK | MB_ICONINFORMATION);
m_animate.Play(0,-1,-1);
}
else
AfxMessageBox("cannot open serial port");
//////////////////通讯设置,格式转换,默认string类型////////////
int bote=9600,shuju=8,tingzhi=1;
char c;
bote = atoi(m_bote);
shuju = atoi(m_shuju);
tingzhi = atoi(m_tingzhi);
if(m_jiaoyan =="NONE")
c = 'n';
else if(m_jiaoyan == "ODD")
c= 'o';
else if(m_jiaoyan == "EVEN")
c = 'e';
else if(m_jiaoyan == "MARK")
c = 'm';
else if(m_jiaoyan == "SPACE")
c = 's';
else c = 'n';
set.Format("%d,%c,%d,%d",bote,c,shuju,tingzhi); //波特率,无校验,数据位,停止位
//MessageBox(set);
m_ctrlComm.SetSettings(set);//调用函数设置
/* int jinzhi;
if(m_erjinzhi==0)
jinzhi = 1;
else jinzhi = 0;
*/
m_ctrlComm.SetInputMode(1); //1:表示以二进制方式检取数据//如果用jizhi来赋值则出现严重错误!!!!
m_ctrlComm.SetRThreshold(1);
//参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件
m_ctrlComm.SetInputLen(0); //设置当前接收区数据长度为0,表示全部读取
m_ctrlComm.GetInput();//先预读缓冲区以清除残留数据
}
void CSCommTestDlg::OnClear()
{
// TODO: Add your control notification handler code here
UpdateData(true);
m_strRXData.Empty();
GetDlgItem(IDC_EDIT_RXDATA)->SetWindowText("");
}
void CSCommTestDlg::OnSave()
{
// TODO: Add your control notification handler code here
UpdateData(true);
CFileDialog cf(false,NULL,"MyFileName",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,NULL,NULL);;
if(cf.DoModal()==IDOK)
{
CFile file(cf.GetFileName()+".txt",CFile::modeCreate|CFile::modeWrite);
file.Write(m_strRXData,strlen(m_strRXData));
file.Close();
}
}
void CSCommTestDlg::OnFsclear()
{
// TODO: Add your control notification handler code here
UpdateData(true);
m_strTXData.Empty();
GetDlgItem(IDC_EDIT_TXDATA)->SetWindowText("");
}
void CSCommTestDlg::OnReaddata()
{
// TODO: Add your control notification handler code here
CFileDialog cf(true,NULL,"MyFileName",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,NULL,NULL);
if(cf.DoModal()==IDOK)
{
CString filename;
CFile file;
filename = cf.GetPathName();
file.Open(filename.GetBuffer(_MAX_PATH),CFile::modeReadWrite);
DWORD dw;
char *bf;
dw=file.GetLength();
bf=new char[dw+1];
bf[dw]=0;
file.Read(bf,dw);
m_strTXData.Empty();
m_strTXData.Format("%s",bf);
UpdateData(true);
MessageBox(bf);
GetDlgItem(IDC_EDIT_TXDATA)->SetWindowText(bf);
file.Close();
}
}
void CSCommTestDlg::On16jinzhi()
{
// TODO: Add your control notification handler code here
UpdateData(true);
if(!m_strTXData.IsEmpty())
{
int i,len,k;
len = m_strTXData.GetLength();
char *ch = new char[len+1];
strcpy(ch,m_strTXData);
ch[len]='\0';
CString s,str;
str.Format("");
char c[9];
for(i =0;i<len +1;i++)
{
itoa((int)ch[i],c,2);
s.Format("%s",c);
str += (s+" ");
}
GetDlgItem(IDC_EDIT_TXDATA)->SetWindowText("");
GetDlgItem(IDC_EDIT_TXDATA)->SetWindowText(str);
}
}
void CSCommTestDlg::OnXunhuan()
{
// TODO: Add your control notification handler code here
if(m_index % 2 ==0)
{
GetDlgItem(IDC_XUNHUANZHI)->EnableWindow(true);
GetDlgItem(IDC_GO)->EnableWindow(true);
m_index ++;
}
else
{
KillTimer(1);
m_xunhuanjinxing = FALSE;
GetDlgItem(IDC_XUNHUANZHI)->EnableWindow(FALSE);
GetDlgItem(IDC_GO)->EnableWindow(FALSE);
m_index=0;
}
}
void CSCommTestDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
OnButtonManualsend();
CDialog::OnTimer(nIDEvent);
}
void CSCommTestDlg::OnFuwei()
{
// TODO: Add your control notification handler code here
m_fasongcishu = m_jieshoucishu =0;
CString str;
str.Format("%d",m_fasongcishu);
GetDlgItem(IDC_FASONGCISHU)->SetWindowText(str);
str.Format("%d",m_jieshoucishu);
GetDlgItem(IDC_JIESHOUCISHU)->SetWindowText(str);
UpdateData(FALSE);
}
void CSCommTestDlg::OnGo()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
SetTimer(1,m_xunhuan,NULL);
m_xunhuanjinxing = true;
}
void CSCommTestDlg::OnDefault()
{
// TODO: Add your control notification handler code here
if(m_ctrlComm.GetPortOpen())
m_ctrlComm.SetPortOpen(FALSE);//如果串口开,则关闭
m_ctrlComm.SetCommPort(2); //选择com2
if( !m_ctrlComm.GetPortOpen())
m_ctrlComm.SetPortOpen(TRUE);//打开串口
else
AfxMessageBox("cannot open serial port");
m_ctrlComm.SetSettings("9600,n,8,1"); //波特率9600,无校验,8个数据位,1个停止位
m_ctrlComm.SetInputMode(1); //1:表示以二进制方式检取数据
m_ctrlComm.SetRThreshold(1);
//参数1表示每当串口接收缓冲区中有多于或等于1个字符时将引发一个接收数据的OnComm事件
m_ctrlComm.SetInputLen(0); //设置当前接收区数据长度为0
m_ctrlComm.GetInput();//先预读缓冲区以清除残留数据
}
void CSCommTestDlg::OnClose()
{
// TODO: Add your control notification handler code here
if(m_ctrlComm.GetPortOpen())
{
if(!m_xunhuanjinxing)
{
m_ctrlComm.SetPortOpen(FALSE);
MessageBox("串口已经关闭","串口关闭",MB_OK | MB_ICONINFORMATION);
m_animate.Close();
}
else
MessageBox("请先关闭循环发送然后再关闭串口","警告",MB_OK | MB_ICONWARNING);
}
else
MessageBox("串口处于关闭状态,无需再次关闭","串口状态",MB_OK | MB_ICONWARNING);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -