📄 scommtestdlg.cpp
字号:
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 + -