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

📄 ctrlbord.cpp

📁 USB接口虚拟示波器软件软件工程
💻 CPP
📖 第 1 页 / 共 2 页
字号:
       m_displayWnd.DrawLine();
   } 
   else
	 send_req=true;

}

void CCtrlBord::OnCheckTrige() 
{
UpdateData(1);
if(m_TrigeMode)
{m_check_trige_button.SetWindowText("↑沿触发");
 code[0]='G';

}
else
{
m_check_trige_button.SetWindowText("↓沿触发");
code[0]='F';
}
m_displayWnd.m_nTriggerType=m_TrigeMode;
 if(!isRun)
	SendMessageToCom(code,5);  
   else
	   send_req=true;

}

void CCtrlBord::OnScaleline() 
{
m_displayWnd.DisScaleLine();
	
}

void CCtrlBord::OnSave() 
{
CFile file;
	if( !file.Open( "C:\\test.bin",CFile::modeCreate | CFile::modeWrite ) )
		MessageBox("Create file error!");
	else
	{   file.Write(addata,1000);
		file.Close();
	}
}

void CCtrlBord::OnSignalTrig() 
{
UpdateData(1);
if(m_single_trige){code[0]='H';
m_single_trige_button.SetWindowText("单次触发");
}
else{code[0]='J';
m_single_trige_button.SetWindowText("自动触发");
}
 if(!isRun)
	SendMessageToCom(code,5);  
   else
	   send_req=true;
	
}

void CCtrlBord::OnAc() 
{
m_dc_button.SetCheck(0);
m_gnd_button.SetCheck(0);
}

void CCtrlBord::OnDc() 
{
m_ac_button.SetCheck(0);
m_gnd_button.SetCheck(0);
}

void CCtrlBord::OnGnd() 
{
m_dc_button.SetCheck(0);
m_ac_button.SetCheck(0);
}

void CCtrlBord::OnSelchangeComboSelectFt() 
{
	unsigned char ItemID=(unsigned char)m_FT_comb.GetCurSel ();
//	CString mes;
//	mes.Format("%d",ItemID);
//	MessageBox(mes);
   code[0]='E';
   code[1]=ItemID;
// while(busy_flag);
   if(!isRun)
	SendMessageToCom(code,5);  
   else
	   send_req=true;

}

void CCtrlBord::OnKeyUp() 
{

}

void CCtrlBord::OnKeyLeft() 
{
}

void CCtrlBord::OnKeyRight() 
{
}

void CCtrlBord::OnKeyDown() 
{
}

void CCtrlBord::OnKeyOk() 
{
}

void CCtrlBord::OnKeyExit() 
{
}

BEGIN_EVENTSINK_MAP(CCtrlBord, CFormView)
    //{{AFX_EVENTSINK_MAP(CCtrlBord)
	ON_EVENT(CCtrlBord, IDC_MSCOMM, 1 /* OnComm */, OnOnCommMscomm, VTS_NONE)
	//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()

void CCtrlBord::OnOnCommMscomm() 
{  
	VARIANT vR;
    static int count;
//	MessageBeep(-1); 
   
	if(m_ComPort.GetCommEvent()!=2)
	return;
	int l=m_ComPort.GetInBufferCount();
    if(l!=1032)return;
  //  if(!isRun)
//	return;
	
    busy_flag=true;
    unsigned char * data;
	m_ComPort.SetBreak(0);   
	m_ComPort.SetInputLen(1032); //12
    vR=m_ComPort.GetInput();
    data=(unsigned char *)vR.parray->pvData;

    if(isRun)
	{
	memcpy(adbuffer,data,1032);
	Data_analyse();
	m_displayWnd.DrawLine();

    m_mes.Format("正在采集%d",count++);
    UpdateData(0);
	
	if(send_req)
    { SendMessageToCom(code,5);
       send_req=false;
	   Sleep(10);
	}
    
//	else
//	{
	code[0]='C';   //启动采集数据
 	SendMessageToCom(code,5);  
//	}
	}

	busy_flag=false;	
}

void CCtrlBord::OnInitialUpdate() 
{
	CFormView::OnInitialUpdate();
    code[0]='A';
	code[1]=0;
	code[2]='O';
	code[3]='O';
	code[4]='O';
    m_FT_comb.SetCurSel(2);
	m_select_ch1.SetCheck(1);
	m_ch1_button.SetCheck(1);
 	m_trig_ctrl.SetRange(0,1024,1);
	
       m_trig_ctrl.SetPos(512);
       m_ComPort.SetCommPort(1);  //选择串行端口
	   m_ComPort.SetPortOpen(TRUE);   
	   m_ComPort.SetSettings("115200,n,8,1");  
	   m_ComPort.SetInputMode(1);
	   m_ComPort.SetRThreshold(1032);//12
	   m_ComPort.SetInputLen(0);
	   m_ComPort.GetInput();

	  //code[0]='D';   //开始采集数据
	  //code[0]='D';   //开始采集数据
      //SendMessageToCom(code,5);  
}

void CCtrlBord::SendMessageToCom(unsigned char *data, int n)
{
//#ifdef COMM
	int i;
//	COleVariant varOutput;
	unsigned char Sum=0;
	CByteArray array;
	array.RemoveAll();
	array.SetSize(n);
	for(i=0;i<n;i++)
	array.SetAt(i,data[i]);

	if(!m_ComPort.GetPortOpen())
	m_ComPort.SetPortOpen(1);
	m_ComPort.SetOutput(COleVariant(array));
	
//	#endif
}

void CCtrlBord::OnOff() 
{
//unsigned char c='F';
//SendMessageToCom(&c,1);
	
}

void CCtrlBord::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	UpdateData(1);
    WORD v,t;
//	unsigned char * p;
	CSliderCtrl	*pSlider = (CSliderCtrl *)pScrollBar;

	if(pSlider == &m_trig_ctrl) 
	{
		m_trig_vlot = pSlider->GetPos ();
	    v=1024-m_trig_vlot;
		m_vlot_dis.Format ("%.2fV",(0.852*v)/1024.0);
	   // v=m_trig_vlot;
		
		v<<=2;
		t=v;
		code[0]='B';
		t>>=8;
	    code[1]=(unsigned char ) t&0x00ff;
		code[2]=(unsigned char )v&0x00ff;
		if(!isRun)
			SendMessageToCom(code,5);  
			  else
				   send_req=true;
      //	SendMessageToCom(code,5);
	//	code[0]='A';
	}

	UpdateData(0);		
	CFormView::OnVScroll(nSBCode, nPos, pScrollBar);
}

void CCtrlBord::OnJk1() 
{
 UpdateData(1);
 code[0]='A';
   if(m_JK1)
	   code[1]=0x11;
   else
	   code[1]=0x10;
  
   if(!isRun)
	SendMessageToCom(code,5);  
   else
	   send_req=true;
     //SendMessageToCom(code,5);
		
}

void CCtrlBord::OnJk2() 
{
UpdateData(1);
code[0]='A';
   if(m_JK2)
	   code[1]=0x13;
   else
	   code[1]=0x12;
    if(!isRun)
	SendMessageToCom(code,5);  
   else
	   send_req=true;
	
}

void CCtrlBord::OnJk3() 
{
 UpdateData(1);
 code[0]='A';
   if(m_JK3)
	   code[1]=0x15;
   else
	   code[1]=0x14;
    if(!isRun)
	SendMessageToCom(code,5);  
   else
	   send_req=true;
	
}

void CCtrlBord::OnJk4() 
{
UpdateData(1);
code[0]='A';
   if(m_JK4)
	   code[1]=0x17;
   else
	   code[1]=0x16;
     if(!isRun)
	SendMessageToCom(code,5);  
   else
	   send_req=true;
	
}

void CCtrlBord::OnDb10() 
{
  UpdateData(1);
  code[0]='A';
   if(m_db10)
	   code[1]=0x18;
   else
	   code[1]=0x19;
     if(!isRun)
	SendMessageToCom(code,5);  
   else
	   send_req=true;
}

void CCtrlBord::OnDb2() 
{
  UpdateData(1);
  code[0]='A';
   if(m_db2)
	   code[1]=0x1c;
   else
	   code[1]=0x1d;
     if(!isRun)
	SendMessageToCom(code,5);  
   else
	   send_req=true;
	
}

void CCtrlBord::OnDb5() 
{
UpdateData(1);
code[0]='A';
   if(m_db5)
	   code[1]=0x1a;
   else
	   code[1]=0x1b;
    if(!isRun)
	SendMessageToCom(code,5);  
   else
	   send_req=true;
}

void CCtrlBord::OnCh1andch3() 
{
	// TODO: Add your control notification handler code here
	
}

void CCtrlBord::OnCh1subch2() 
{
	// TODO: Add your control notification handler code here
	
}

void CCtrlBord::OnCha() 
{
m_select_ch2.SetCheck(0);
  UpdateData(1);
  code[0]='A';
   code[1]=0x3a;
    if(!isRun)
	SendMessageToCom(code,5);  
   else
	   send_req=true;
 			
}

void CCtrlBord::OnChb() 
{
m_select_ch1.SetCheck(0);
	code[0]='A';
   code[1]=0x3b;
    if(!isRun)
	SendMessageToCom(code,5);  
   else
	   send_req=true;
}

/*
	unsigned int sampleT;  //采样频率的周期,ns为单位
	unsigned int T_div;    //显示每点的时间,ns为单位 

  */


void CCtrlBord::Data_analyse()
{
     int dv=T_div/sampleT;
     int i,j,n;
	 
	 for(i=0;i<8;i++)
		 addata[1024+i]=adbuffer[1024+i];

	 switch(dv=0)
	 {  case 0:
			n=0;
		// 丢掉第0个数据
		for(i=sampleT*3;i<2*DISWIDTH*T_div;i+=T_div)
		{  
			if(i%sampleT==0)
			    addata[n]=adbuffer[i/sampleT];
		     else
			//disbuffer[n]=Intrepol_lagrange(i,pbuf);
			 addata[n]=Intrepol_sin(i,adbuffer);
				 n++;
		}
         break;
		 case 400:
		
		 for(j=400;j<1024;j+=400)
		 {	 for(i=0;i<1023;i++)
				addata[i]=addata[i+1];
             addata[1024]=adbuffer[j];
		 }
    	 break;
		case 1000:
		 for(i=0;i<1023;i++)
	      addata[i]=addata[i+1];
       
		 addata[1024]=adbuffer[1000];
		 
		 break;
		default:
		memcpy(addata,adbuffer,1032);
		 break;
	 }
      
}
/*正弦内插计算公式
     ∞         sin[PI*(t-nTs)/Ts]
X(t)=∑ X(nTs)* ------------------
	-∞         (PI*(t-nTs)/Ts)
	其中Ts :采样周期
	t给定的时间
*/

#define IntMM 15
unsigned char CCtrlBord::Intrepol_sin(int t, LPBYTE pbuf)
{
  int n=t/sampleT;
  //int x1=(n+1)*Sample_T;
  //int x0=n*Sample_T;
  float q=PI/sampleT;
  int a[2*IntMM+1],s,m;
  float tt;
   s=0;
   for(int i=0;i<IntMM;i++)
  {  tt=q*(t-(n-(IntMM-i))*sampleT);
     a[i]=(int)1000.0*sin(tt)/tt;
     m=n-(IntMM-i);
	 if(m<=0)
		 m=0;
	 s+=pbuf[m]*a[i];
  }
   tt=q*(t-(n-(IntMM-i))*sampleT);
   a[i]=(int)1000.0*sin(tt)/tt;

     m=n-(IntMM-i);
	 if(m<=0)
		 m=0;
	 s+=pbuf[m]*a[i];

   i++;
	for(;i<2*IntMM+1;i++)
	{tt=q*(t-(n+(i-IntMM))*sampleT);
      a[i]=(int)1000.0*sin(tt)/tt;
       m=n+(i-IntMM);
		   if(m<0)
			   m=0;
		    s+=pbuf[m]*a[i];

	}
 

  s/=1000;
  if(s>255)
	  s=255;
  if(s<0)
	  s=0;
 return (BYTE)(s);
}

unsigned char CCtrlBord::Intrepol_lagrange(int t, LPBYTE pbuf)
{
int n=t/sampleT;
  int x1=(n+1)*sampleT;
  int x0=n*sampleT;
  int n_3,n_2,n_1;
  BYTE s;
  n_3=n-3;
  n_2=n-2;
  n_1=n-1;
  if(n_3<0)n_3=0;
  if(n_2<0)n_2=0;
  if(n_1<0) n_1=0;
 // s=-0.0909*(pbuf[n_3]+pbuf[n+4])+0.1273*(pbuf[n_2]+pbuf[n+3])-0.2122*(pbuf[n_1]+pbuf[n+2])
  //	  +0.6366*(pbuf[n]+pbuf[n+1]);
 s=(BYTE)(pbuf[n]*(t-x1)/(x0-x1) + pbuf[n+1]*(t-x0)/(x1-x0));
  return s;
}

⌨️ 快捷键说明

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