⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scommtestdlg.cpp

📁 专为毕业设计所设计的代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
            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 + -