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

📄 scommtestdlg.cpp

📁 这是一个用VC编写的MSCOMM控件的串口通讯调试软件示例工程源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
        variant_inp=m_ctrlComm.GetInput(); //读缓冲区
        safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
        len=safearray_inp.GetOneDimSize(); //得到有效数据长度
        for(k=0;k<len;k++) safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
        //for(k=0;k<len;k++) //将数组转换为Cstring型变量
        //{

            //BYTE bt=*(char*)(rxdata+k); //字符型
			//HandleCommand(rxdata);//这是接收数据处理函数
//---------------------------------------------------------------
/* CByteArray m_Array;
 
 m_Array.RemoveAll();
 m_Array.SetSize(Count);
 
 for(i=0;i<m_Array.SetAt(i,m_SendData[i]);
 m_MSComm.SetOutput(COleVariant(m_Array));*/
//------------------------------------------------
/*
BYTE strBuf[1]; 
CByteArray OutBuf; 
COleVariant varOutput; 

//命令字
strBuf[0] = commandID;

OutBuf.SetSize(1); 
OutBuf[0] = strBuf[0]; 
varOutput = OutBuf; 
m_msComm.SetOutput(varOutput); 
*/

//---------------------------------------------------------------
			//--------------------------------
		switch(rxdata[0])
		{	
			case 'S':
				{
					//AfxMessageBox("now send data!");
					//--------------------
					Send_Data_Numb=EEPROM_File_Buffer[Head_Offset-1];//0x02!!!!!!!!
					Send_Byte_Numb=Send_Data_Numb*Send_Data_Array_Numb;
					//Send_Data_Numb=Test[0]-0x30;
					//Send_Byte_Numb=Send_Data_Numb*2;
				
					m_strTXData+="S";
					UpdateData(false);

					p=EEPROM_File_Buffer;
					//Tx_Data=Test[0];
					Tx_Data=Send_Data_Numb;
					//Tx_Data.Format("%s",p);
					m_ctrlComm.SetOutput(COleVariant(Tx_Data));//发送数据
					
					n=0;

					break;
					
					//timer_switch=1;
					//------------------
				}//start send
			//-----------------------------
			case 'K':
				{
					//Send_Next=1;
					//AfxMessageBox("Send next!");
					//timer_switch=1;
					p=EEPROM_File_Buffer;
					if(n<Send_Byte_Numb) 
					{	
						//Tx_Data.Format("%s",p+n+Head_Offset);
						//Tx_Data=EEPROM_File_Buffer[n+Head_Offset];
						//Tx_Data=p+n+Head_Offset;
						//m_ctrlComm.SetOutput(COleVariant(Tx_Data));//发送数据			
						//m_strTXData+=table[n];
						//m_strTXData+=Tx_Data;
						strBuf[0]=EEPROM_File_Buffer[n+Head_Offset];
						OutBuf.SetSize(1); 
						OutBuf[0]=strBuf[0]; 
						varOutput=OutBuf; 
						m_ctrlComm.SetOutput(varOutput); 

						t=EEPROM_File_Buffer[n+Head_Offset];
						
						h=(t&0xf0)>>4;if(h>9) h+=0x57;else h+=0x30;
						l=(t&0x0f);if(l>9) l+=0x57;else l+=0x30;
	
						
						m_strRXData+="0x";
						m_strRXData+=h;
						m_strRXData+=l;
						m_strRXData+=",";
						m_strRXData+=0x0d;
						m_strRXData+=0x0a;

						m_strTXData+=n+0x31;
						m_strTXData+=0x0d;
						m_strTXData+=0x0a;
						UpdateData(false);
						n++;

					}
					else if(n==Send_Byte_Numb) 
					{	
						
						if(Send_Over==0) AfxMessageBox("Send Data Over!");
						Send_Over=1;
						//timer_switch=0;
					}
					break;
				}
			default:break;
		}
			//--------------------------------
       // strtemp.Format("%c",rxdata); //将字符送入临时变量strtemp存放
       // m_strRXData+=strtemp; //加入接收编辑框对应字符串 
        //}
	//	UpdateData(FALSE); //更新编辑框内容
		//-------------------------------------------------
  }
}
///////////////////////////////////////
/*
unsigned char g=0;
//////////////////////////////////////////////////////////////////
void CSCommTestDlg::OnHex() 
{
	unsigned char h,l,t;
	// TODO: Add your control notification handler code here
		CFile file;


	//----------------------------------
	
	if(file.Open("EEPROM.txt",CFile::modeRead|CFile::shareDenyNone,NULL)==0)
	{	
		//读取文件失败
		AfxMessageBox("无法打开文件!",MB_OK,0);
		return;
	}
	//file.SeekToBegin();
	file.Read(EEPROM_File_Buffer,257);



	t=EEPROM_File_Buffer[g++];
	//t=EEPROM_File_Buffer[0+Head_Offset];
						
	h=(t&0xf0)>>4;if(h>9) h+=0x57;else h+=0x30;
	l=(t&0x0f);if(l>9) l+=0x57;else l+=0x30;
				
	m_strRXData+="0x";
	m_strRXData+=h;
	m_strRXData+=l;
	m_strRXData+=",";
	m_strRXData+=0x0d;
	m_strRXData+=0x0a;

	UpdateData(false);
}
*/
//////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////



/////////////////////////////////////////////////////////////////////

void CSCommTestDlg::OnButtonManualsend() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE); //读取编辑框内容
	m_ctrlComm.SetOutput(COleVariant(m_strTXData));//发送数据
}

/////////////////////////////////////////////////////////////////////
//最后说明一下,由于用到VC控件,在没有安装VC的计算机上运行时
//要从VC中把mscomm32.ocx、msvcrt.dll、mfc42.dll拷到Windows目录
//下的System子目录中(win2000为System32)并再进行注册设置
/////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////


void CSCommTestDlg::OnSelchangeCom() 
{
	// TODO: Add your control notification handler code here
	//m_strTXData=m_ComSelect.GetCurSel()+0x30;
	//UpdateData(false);
	unsigned char N;
	
	N=m_ComSelect.GetCurSel()+1;

	if(m_ctrlComm.GetPortOpen()) m_ctrlComm.SetPortOpen(FALSE);
	m_ctrlComm.SetCommPort(N); //选择comn

	if( !m_ctrlComm.GetPortOpen()) m_ctrlComm.SetPortOpen(TRUE);//打开串口
	else AfxMessageBox("所选串口不存在或被占用!");

	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::OnRXEnable() 
{
	// TODO: Add your control notification handler code here
	UpdateData(true);//!!!!!!!!!!!!!
	if(m_RXEnable) 	
	{
		if(!m_ctrlComm.GetPortOpen()) 
		{
			m_ctrlComm.SetPortOpen(true);
			m_ctrlComm.GetInput();//先预读缓冲区以清除残留数据
		}
		//m_strRXData="RX ON";
	}
	else 
	{
		m_ctrlComm.SetPortOpen(false);
		//m_strRXData="RX OFF";
	}
	UpdateData(false);
}


//////////////////////////////////////////////////////////////////////



//////////////////////////////////////////////////////////////////////


//////////////////////////////////////////////////////////////////////

////////////////////////////////////////////
void CSCommTestDlg::OnTest() 
{
	// TODO: Add your control notification handler code here
	unsigned char i=0;
	
	CFile file;


	//----------------------------------
	
	if(file.Open("EEPROM.txt",CFile::modeRead|CFile::shareDenyNone,NULL)==0)
	{	
		//读取文件失败
		AfxMessageBox("无法打开文件!",MB_OK,0);
		return;
	}
	file.Read(EEPROM_File_Buffer,257);
	
	//--------------------
	Tx_Data="W";
	m_ctrlComm.SetOutput(COleVariant(Tx_Data));//发送数据
		//------------

}

⌨️ 快捷键说明

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