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

📄 scommtestdlg.cpp

📁 一个串口调试助手,可以将串口接收到的数据筛选并保存到数据,别保存数据到文件等.
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	CString fileName1;
	CTime   curTime = CTime::GetCurrentTime();
	fileName1.Format(_T("%d-%d-%d--%d-%d"), curTime.GetYear(),
	curTime.GetMonth(),
	curTime.GetDay(),
	curTime.GetHour(),
	curTime.GetMinute());
	fileName=fileName1+".txt";
	CFile f;
	if (f.Open(fileName, CFile::modeReadWrite|CFile::modeCreate))
	{
	//	f.SeekToEnd();
	 //   f.Flush();
		f.Close();
	//	UpdateData(false);
	}
	
}

void CSCommTestDlg::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	switch(nIDEvent)
	{
	case 1:
		{   
			CStdioFile f;
			GetDlgItem(IDC_EDIT_RXDATA)->GetWindowText(strtemp3);
			if (f.Open(fileName, CFile::modeReadWrite|CFile::modeNoTruncate))
			{
				f.SeekToEnd();  
				f.WriteString(strtemp3);
				f.Flush();
				f.Close();
				m_strRXData.Empty();
				strtemp3.Empty();
				UpdateData(false);
			}
			CopyFile("data2.txt","data.txt",FALSE);
			if (f.Open("data.txt", CFile::modeReadWrite|CFile::modeNoTruncate))
			{
				  
				f.WriteString(strtemp3);
				f.Flush();
				f.Close();
				
			}
		}
		break;
	}
	CDialog::OnTimer(nIDEvent);
}

void CSCommTestDlg::OnBdata() 
{
	// TODO: Add your control notification handler code here
	CopyFile(fileName,"采集数据.txt",0);
	WinExec("notepad.exe 采集数据.txt",SW_SHOW);
}

void CSCommTestDlg::OnMabout() 
{
	// TODO: Add your command handler code here
	CAboutDlg dlg;
	dlg.DoModal();
}

int CAboutDlg::DoModal() 
{
	// TODO: Add your specialized code here and/or call the base class
	
	return CDialog::DoModal();
}

void CSCommTestDlg::adddata(CString str1, CString str2, CString str3, CString str4,CString str5)
{
	db.Open("data.mdb");		// 打开已创建的demo数据库及DamoTable表
	RecSet.Open(AFX_DAO_USE_DEFAULT_TYPE,"SELECT * FROM kaoyan",NULL);
	LPTSTR aa =(LPTSTR)(LPCTSTR)str1;
	LPTSTR bb =(LPTSTR)(LPCTSTR)str2;
	LPTSTR cc =(LPTSTR)(LPCTSTR)str3;
	LPTSTR dd =(LPTSTR)(LPCTSTR)str4;
	LPTSTR ee =(LPTSTR)(LPCTSTR)str5;
		RecSet.AddNew();	
		RecSet.SetFieldValue("设定湿度",aa);
		RecSet.SetFieldValue("设定温度",bb);
		RecSet.SetFieldValue("湿度",cc);
		RecSet.SetFieldValue("温度",dd);
		RecSet.SetFieldValue("时间",ee);
		RecSet.Update();
		RecSet.Close();
		db.Close();	
}

void CSCommTestDlg::OnButtonManualsend2() 
{
	// TODO: Add your control notification handler code here
//	 str_shidu="80%"; str_temp="36.4"; str_time="20075";
//	adddata(str_set,str_shidu,str_temp,str_time);
	m_ctrlComm.SetOutput(COleVariant("11"));//发送数据
}

/*void CSCommTestDlg::OnBlist() 
{
	// TODO: Add your control notification handler code here
	Clist *dlg=new Clist;
	dlg->Create(IDD_Dlist,this);
	dlg->ShowWindow(SW_SHOW);
}

*/



void CSCommTestDlg::OnMdatabase() 
{
	// TODO: Add your command handler code here
	Clist dlg;
	dlg.DoModal();
}

BOOL CSCommTestDlg::PreTranslateMessage(MSG* pMsg) 
{
	// TODO: Add your specialized code here and/or call the base class
/*	if(pMsg->message == WM_KEYDOWN && pMsg->wParam == 'S')
{
	Clist dlg;
	dlg.DoModal();
	return TRUE;
}*/
	return CDialog::PreTranslateMessage(pMsg);
}

void CSCommTestDlg::adddata(CString str1, CString str2, CString str3, CString str4)
{
	db.Open("data.mdb");		// 打开已创建的demo数据库及DamoTable表
	RecSet.Open(AFX_DAO_USE_DEFAULT_TYPE,"SELECT * FROM kaoyan",NULL);
	LPTSTR aa =(LPTSTR)(LPCTSTR)str1;
	LPTSTR bb =(LPTSTR)(LPCTSTR)str2;
	LPTSTR cc =(LPTSTR)(LPCTSTR)str3;
	LPTSTR dd =(LPTSTR)(LPCTSTR)str4;
		RecSet.AddNew();	
		RecSet.SetFieldValue("设定温度",aa);
		RecSet.SetFieldValue("测量温度",bb);
		RecSet.SetFieldValue("偏差",cc);		
		RecSet.SetFieldValue("时间",dd);
		RecSet.Update();
		RecSet.Close();
		db.Close();	
}

void CSCommTestDlg::OnBopencom() 
{
	// TODO: Add your control notification handler code here
	int item_port=m_Port.GetCurSel();
	int item_bty=m_botelv.GetCurSel();

	if(m_ctrlComm.GetPortOpen())
	m_ctrlComm.SetPortOpen(FALSE);
	m_ctrlComm.SetCommPort(item_port+1); //选择com1
	if( !m_ctrlComm.GetPortOpen())
	{
		m_ctrlComm.SetPortOpen(TRUE);//打开串口
		GetDlgItem(IDC_STATIC11)->SetWindowText("串口已打开");

	}
	else
	AfxMessageBox("cannot open serial port");
	switch(item_bty+1)
	{
		case 1: m_ctrlComm.SetSettings("9600,n,8,1");break;
		case 2: m_ctrlComm.SetSettings("4800,n,8,1");break;
		case 3: m_ctrlComm.SetSettings("1200,n,8,1");break;
	}
//	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();//先预读缓冲区以清除残留数据

	
	GetDlgItem(IDC_Bclose)->EnableWindow(true);
	GetDlgItem(IDC_Bopen)->EnableWindow(false);
	GetDlgItem(IDC_BUTTON_MANUALSEND)->EnableWindow(true);
}

void CSCommTestDlg::OnBclosecom() 
{
	// TODO: Add your control notification handler code here
	m_ctrlComm.SetPortOpen(0);
	GetDlgItem(IDC_STATIC11)->SetWindowText("串口已关闭");
	GetDlgItem(IDC_Bopen)->EnableWindow(true);
	GetDlgItem(IDC_Bclose)->EnableWindow(false);
	GetDlgItem(IDC_BUTTON_MANUALSEND)->EnableWindow(false);
}

void CSCommTestDlg::OnChangeEditRxdata() 
{
	// TODO: If this is a RICHEDIT control, the control will not
	// send this notification unless you override the CDialog::OnInitDialog()
	// function and call CRichEditCtrl().SetEventMask()
	// with the ENM_CHANGE flag ORed into the mask.
	((CEdit*)GetDlgItem(IDC_EDIT_RXDATA))->SetSel(-1,-1);
	
//	((CEdit*)GetDlgItem(IDC_EDIT_RXDATA))->LineScroll( edit.GetLineCount() );

	// TODO: Add your control notification handler code here
	
}

void CSCommTestDlg::On1() 
{
	// TODO: Add your control notification handler code here

	UpdateData(true);
	int len=m_Edit1.GetLength();
	CString s1,s2,s3,temp1;
	temp1=m_Edit1;
	switch(len)
	{
	case 1:
		m_Edit1="000"+m_Edit1;
		 s1=m_Edit1+"1";
	m_ctrlComm.SetOutput(COleVariant(s1));
		break;
	case 2:
		m_Edit1="00"+m_Edit1;
		 s2=m_Edit1+"1";
	m_ctrlComm.SetOutput(COleVariant(s2));
		break;
	case 3:
		m_Edit1="0"+m_Edit1;
		 s3=m_Edit1+"1";
	m_ctrlComm.SetOutput(COleVariant(s3));
	case 4:
		 s3=m_Edit1+"1";
	m_ctrlComm.SetOutput(COleVariant(s3));
		break;
	default:
		MessageBox("输入的字符长度必须为1—4位");
		break;
	}
	m_Edit1=temp1;
	UpdateData(false);
	
}

void CSCommTestDlg::On2() 
{
	// TODO: Add your control notification handler code here
	UpdateData(true);
	int len=m_Edit2.GetLength();
	CString s1,s2,s3,temp2;
	temp2=m_Edit2;
	switch(len)
	{
	case 1:
		m_Edit2="000"+m_Edit2;
		 s1=m_Edit2+"2";
	m_ctrlComm.SetOutput(COleVariant(s1));
		break;
	case 2:
		m_Edit2="00"+m_Edit2;
		 s2=m_Edit2+"2";
	m_ctrlComm.SetOutput(COleVariant(s2));
		break;
	case 3:
		m_Edit2="0"+m_Edit2;
		 s3=m_Edit2+"2";
	m_ctrlComm.SetOutput(COleVariant(s3));
	case 4:
		 s3=m_Edit2+"2";
	m_ctrlComm.SetOutput(COleVariant(s3));
		break;
	default:
		MessageBox("输入的字符长度必须为1—4位");
		break;
	}
	m_Edit2=temp2;
	UpdateData(false);
}

void CSCommTestDlg::On3() 
{
	// TODO: Add your control notification handler code here
	UpdateData(true);
	int len=m_Edit3.GetLength();
	CString s1,s2,s3,temp3;
	temp3=m_Edit3;
	switch(len)
	{
	case 1:
		m_Edit3="000"+m_Edit3;
		 s1=m_Edit3+"3";
	m_ctrlComm.SetOutput(COleVariant(s1));
		break;
	case 2:
		m_Edit3="00"+m_Edit3;
		 s2=m_Edit3+"3";
	m_ctrlComm.SetOutput(COleVariant(s2));
		break;
	case 3:
		m_Edit3="0"+m_Edit3;
		 s3=m_Edit3+"3";
	m_ctrlComm.SetOutput(COleVariant(s3));
	case 4:
		 s3=m_Edit3+"3";
	m_ctrlComm.SetOutput(COleVariant(s3));
		break;
	default:
		MessageBox("输入的字符长度必须为1—4位");
		break;
	}
	m_Edit3=temp3;
	UpdateData(false);
}

void CSCommTestDlg::On4() 
{
	// TODO: Add your control notification handler code here
		UpdateData(true);
	int len=m_Edit4.GetLength();
	CString s1,s2,s3,temp4;
	temp4=m_Edit4;
	switch(len)
	{
	case 1:
		m_Edit4="000"+m_Edit4;
		 s1=m_Edit4+"4";
	m_ctrlComm.SetOutput(COleVariant(s1));
		break;
	case 2:
		m_Edit4="00"+m_Edit4;
		 s2=m_Edit4+"4";
	m_ctrlComm.SetOutput(COleVariant(s2));
		break;
	case 3:
		m_Edit4="0"+m_Edit4;
		 s3=m_Edit4+"4";
	m_ctrlComm.SetOutput(COleVariant(s3));
	case 4:
		 s3=m_Edit4+"4";
	m_ctrlComm.SetOutput(COleVariant(s3));
		break;
	default:
		MessageBox("输入的字符长度必须为1—4位");
		break;
	}
	m_Edit4=temp4;
	UpdateData(false);
}


void CSCommTestDlg::OnBsave() 
{
	// TODO: Add your control notification handler code here
	CStdioFile f;
			GetDlgItem(IDC_EDIT_RXDATA)->GetWindowText(strtemp3);
			if (f.Open(fileName, CFile::modeReadWrite|CFile::modeNoTruncate))
			{
				f.SeekToEnd();  
				f.WriteString(strtemp3);
				f.Flush();
				f.Close();
				m_strRXData.Empty();
				strtemp3.Empty();
				UpdateData(false);
			}
			CopyFile("data2.txt","data.txt",FALSE);
			if (f.Open("data.txt", CFile::modeReadWrite|CFile::modeNoTruncate))
			{
				  
				f.WriteString(strtemp3);
				f.Flush();
				f.Close();
				
			}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -