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

📄 chxadjdlg.cpp

📁 最新的USB示波器源码?可直接编译生成可执行程序,需要硬件支持
💻 CPP
字号:
// chxAdjDlg.cpp : implementation file
//

#include "stdafx.h"
#include "DSOTEST.h"
#include "chxAdjDlg.h"
//#include "usb100.h"
//#include "usbdi.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CchxAdjDlg dialog
#define COMM_NUMBER 8
BYTE txbuffer[COMM_NUMBER];

CchxAdjDlg::CchxAdjDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CchxAdjDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CchxAdjDlg)
	m_ch_jk1 = FALSE;
	m_ch_jk2 = FALSE;
	m_ch_jk3 = FALSE;
	m_ch_c8 = FALSE;
	m_ch_c9 = FALSE;
	m_ch_att_10db = FALSE;
	m_amp_ref = _T("");
	m_dbctrl_ref = _T("");
	m_dbctrl_vlot = _T("");
	m_txd_str = _T("");
	m_rxd_str = _T("");
	m_pwm1 = _T("50");
	m_pwm2 = _T("50");
	m_selcha_chb = FALSE;
	m_sel_dmm_ext_trg = FALSE;
	m_chb_ctl = FALSE;
	m_ad9513_s0 = FALSE;
	//}}AFX_DATA_INIT
     db_ref_vlot=0.35;
		 db_ctrl_vlot=0;
}


void CchxAdjDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CchxAdjDlg)
	DDX_Control(pDX, IDC_CH3_SLIDER, m_ch3_slider);
	DDX_Control(pDX, IDC_EDIT_COST, m_cost_edit);
	DDX_Control(pDX, IDC_SPIN_EXT_TRG_PWM, m_ext_trg_pwm);
	DDX_Control(pDX, IDC_PWM_CLT2, m_pwm_ctl2);
	DDX_Control(pDX, IDC_PWM_CTL1, m_pwm_ctl1);
	DDX_Control(pDX, IDC_AMP_REF, m_amp_ref_ctrl);
	DDX_Control(pDX, IDC_DB_VLOT, m_db_vlot_ctrl);
	DDX_Control(pDX, IDC_DBCTRL_REF, m_dbCtrl_ref_ctrl);
	DDX_Check(pDX, IDC_CH_JK1, m_ch_jk1);
	DDX_Check(pDX, IDC_CH_JK2, m_ch_jk2);
	DDX_Check(pDX, IDC_CH_JK3, m_ch_jk3);
	DDX_Check(pDX, IDC_CH_C8, m_ch_c8);
	DDX_Check(pDX, IDC_CH_C9, m_ch_c9);
	DDX_Check(pDX, IDC_CH_ATT_10DB, m_ch_att_10db);
	DDX_Text(pDX, IDC_EDIT_AMP_REF, m_amp_ref);
	DDX_Text(pDX, IDC_EDIT_DBCTRL_REF, m_dbctrl_ref);
	DDX_Text(pDX, IDC_EDIT_DBCTRL_VLOT, m_dbctrl_vlot);
	DDX_Control(pDX, IDC_MSCOMM, m_ComPort);
	DDX_Text(pDX, IDC_EDIT_TXD, m_txd_str);
	DDX_Text(pDX, IDC_EDIT_RXD, m_rxd_str);
	DDX_Text(pDX, IDC_PWM1, m_pwm1);
	DDX_Text(pDX, IDC_PWM2, m_pwm2);
	DDX_Check(pDX, IDC_SEL_CHA_CHB, m_selcha_chb);
	DDX_Check(pDX, IDC_SEL_DMM_EXTTRG, m_sel_dmm_ext_trg);
	DDX_Check(pDX, IDC_CHB_CTL, m_chb_ctl);
	DDX_Check(pDX, IDC_AD9513_S0, m_ad9513_s0);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CchxAdjDlg, CDialog)
	//{{AFX_MSG_MAP(CchxAdjDlg)
	ON_BN_CLICKED(IDC_CH_JK1, OnChJk1)
	ON_BN_CLICKED(IDC_CH_JK2, OnChJk2)
	ON_BN_CLICKED(IDC_CH_JK3, OnChJk3)
	ON_BN_CLICKED(IDC_CH_ATT_10DB, OnChAtt10db)
	ON_BN_CLICKED(IDC_CH_C8, OnChC8)
	ON_BN_CLICKED(IDC_CH_C9, OnChC9)
	ON_WM_CLOSE()
	ON_WM_DESTROY()
	ON_WM_HSCROLL()
	ON_BN_CLICKED(IDC_WRITE, OnWrite)
	ON_BN_CLICKED(IDC_WRITE2, OnWrite2)
	ON_BN_CLICKED(IDC_READ_EEPROM, OnReadEeprom)
	ON_BN_CLICKED(IDC_WRITE3, OnWrite3)
	ON_BN_CLICKED(IDC_SEL_CHA_CHB, OnSelChaChb)
	ON_BN_CLICKED(IDC_SEL_DMM_EXTTRG, OnSelDmmExttrg)
	ON_WM_VSCROLL()
	ON_BN_CLICKED(IDC_CHB_CTL, OnChbCtl)
	ON_BN_CLICKED(IDC_AD9513_S0, OnAd9513S0)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CchxAdjDlg message handlers

BOOL CchxAdjDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();

	m_dbCtrl_ref_ctrl.SetRange(1,1024,1);
	m_db_vlot_ctrl.SetRange(0,1024,1);
	m_amp_ref_ctrl.SetRange(0,1024,1);
   m_ch3_slider.SetRange(0,1024,1);

	m_pwm_ctl1.SetRange(0,255,1);
    m_pwm_ctl1.SetPos(211);

    m_pwm_ctl2.SetRange(0,255,1);
	 m_pwm_ctl2.SetPos(211);

	 m_ext_trg_pwm.SetBuddy(&m_cost_edit); 
	 m_ext_trg_pwm.SetRange(1,65);   
     m_ext_trg_pwm.SetPos(50);   

	/*
	m_ComPort.SetCommPort(1);  //选择串行端口
	m_ComPort.SetPortOpen(TRUE);   
	m_ComPort.SetSettings("115200,n,8,1");  
	m_ComPort.SetInputMode(1);
	m_ComPort.SetRThreshold(COMM_NUMBER);//12
	m_ComPort.SetInputLen(0);
	m_ComPort.GetInput();*/
for(int i=0;i<COMM_NUMBER;i++)
	txbuffer[i]=0;
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CchxAdjDlg::OnChJk1() 
{
 UpdateData(1);
  if(m_ch_jk1)
  txbuffer[1]=0x11;
  else
  txbuffer[1]=0x10;

 SendCommandToUSB(VR_USRCMD);	
}

void CchxAdjDlg::OnChJk2() 
{
 UpdateData(1);
  if(m_ch_jk2)
    txbuffer[2]=0x11;
  else
    txbuffer[2]=0x10;
   SendCommandToUSB(VR_USRCMD);	
}

void CchxAdjDlg::OnChJk3() 
{
  UpdateData(1);
  if(m_ch_jk3)
    txbuffer[3]=0x11;
  else
	 txbuffer[3]=0x10;	
  SendCommandToUSB(VR_USRCMD);
}

void CchxAdjDlg::OnChAtt10db() 
{
UpdateData(1);
  if(m_ch_att_10db)
   txbuffer[6]=0x03;
  else
	  txbuffer[6]=0x02;	
   SendCommandToUSB(VR_USRCMD);
}

void CchxAdjDlg::OnChC8() 
{
UpdateData(1);
  if(m_ch_c8)
     txbuffer[6]=0x0c;
  else
	    txbuffer[6]=0x08;
   SendCommandToUSB(VR_USRCMD);
}

void CchxAdjDlg::OnChC9() 
{
UpdateData(1);
  if(m_ch_c9)
     txbuffer[6]=0x30;
  else
	    txbuffer[6]=0x20;
   SendCommandToUSB(VR_USRCMD);		
}

void CchxAdjDlg::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));
}

void CchxAdjDlg::SendCommandToJK(unsigned char d)
{
	unsigned char ord[5];
		ord[0]='L';
		ord[1]='K';
	    ord[2]=d;
        ord[3]=d;
		ord[4]='X';

	SendMessageToCom(ord,5);  



}



void CchxAdjDlg::OnClose() 
{

	CDialog::OnClose();
}

void CchxAdjDlg::OnDestroy() 
{
	CDialog::OnDestroy();
//	if(m_ComPort.GetPortOpen())
//	   m_ComPort.SetPortOpen(false);
		
	// TODO: Add your message handler code here
	
}
/* AD5314 控制命令描述 10Bits SPI D/A Vout=Vref X D /1024
 * BIT15                                                  BIT0
 * A1   A0  PD  LDAC  D9  D8  D7  D6 D5 D4 D3 D2 D1 D0  X  X 
 * MSB               |<--------DATA BITS-------------------->| LSB
 * A1  A0  DAC Address                        
 * 0   0   DAC A Trig level
 * 0   1   DAC B CHA  REF
 * 1   0   DAC C CHB  REF 
 * 1   1   DAC D AD8001 IN+ vlot level offset
 * PD =0 :所有DAC 低功耗模式  DAC output a high impedance 1: 正常操作
 * LDAC =0 :所有DAC寄存器同时更新   1 : 仅被选中的DAC被更新
 * SPI Frist LSB  
    Q0 Q1 Q2  Q3  Q4 Q5 Q6 Q7 Q8 Q9 Q10 Q11 Q12 Q13 Q14 Q15 
	A1 A0 PD LDAC D9 D8 D7 D6 D5 D4 D3  D2  D1  D0  X    X
	0  0  1   1   0  0  0  0
*/
#define PD   0x2000
#define LDAC 0x1000
#define CMD_PWM 0x55
void CchxAdjDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
    WORD i,t;

	CSliderCtrl	*pSlider = (CSliderCtrl *)pScrollBar;
 txbuffer[0]='A';
	if(pSlider == &m_dbCtrl_ref_ctrl) 
	{
		i = pSlider->GetPos ();
        db_ref_vlot=3.25*(float)i/1024.0;
        m_dbctrl_ref.Format ("%0.3fV",db_ref_vlot);
	
	
        t=i;
     	t<<=2;
        t|=PD|0x4000;  //通道1
   	
        txbuffer[2]=(BYTE) t&0x00ff;
	    t>>=8;
    	txbuffer[1]=(BYTE) t&0x00ff;
	
		m_dbctrl_vlot.Format ("%0.3fV,dbH=0x%02x,dbL=0x%02x   ",db_ref_vlot,txbuffer[1],txbuffer[2]);

		SendCommandToUSB(VR_USRCMD);
	
	}else
		if(pSlider == &m_db_vlot_ctrl) 
	{
		i = pSlider->GetPos ();
        db_ctrl_vlot=3.25*(float)i/1024.0;
      
			
	
	    t=i;
		t<<=2;
        t|=PD;  //通道0
	
        txbuffer[2]=(BYTE) t&0x00ff;
		 t>>=8;
    	txbuffer[1]=(BYTE) t&0x00ff;

	    m_dbctrl_vlot.Format ("%0.3fV,dbH=0x%02x,dbL=0x%02x   ",db_ctrl_vlot,txbuffer[1],txbuffer[2]);

   	SendCommandToUSB(VR_USRCMD);
	}else
	
		if(pSlider == &m_amp_ref_ctrl) 
	{
		i = pSlider->GetPos ();
		ch2_vlot=3.25*(float)i/1024.0;
		m_amp_ref.Format ("%0.3fV",ch2_vlot);
		
		t=i;
		t<<=2;
		
        t|=PD|0x8000; //通道2
	
        txbuffer[2]=(BYTE) t&0x00ff;
		 t>>=8;
    	txbuffer[1]=(BYTE) t&0x00ff;

		m_dbctrl_vlot.Format ("%0.3fV,dbH=0x%02x,dbL=0x%02x   ",ch2_vlot,txbuffer[1],txbuffer[2]);
   
    
	}

    else
     
		if(pSlider == &m_ch3_slider) 
	{
		i = pSlider->GetPos ();
		ch3_vlot=3.25*(float)i/1024.0;
	//	m_amp_ref.Format ("%0.3fV",ch2_vlot);
		
		t=i;
		t<<=2;
		
        t|=PD|0xc000; //通道3
	
        txbuffer[2]=(BYTE) t&0x00ff;
		 t>>=8;
    	txbuffer[1]=(BYTE) t&0x00ff;

		m_dbctrl_vlot.Format ("%0.3fV,dbH=0x%02x,dbL=0x%02x   ",ch3_vlot,txbuffer[1],txbuffer[2]);
   
    
	}else



			if(pSlider == &m_pwm_ctl1) 
			{  	i = pSlider->GetPos ();
			    m_pwm1.Format("%d",i);
                txbuffer[0]=CMD_PWM;
				txbuffer[1]=i;
				txbuffer[2]=0;


			}

			else
              	if(pSlider == &m_pwm_ctl2) 
				{
                 	i = pSlider->GetPos ();
			    m_pwm2.Format("%d",i);
                txbuffer[0]=CMD_PWM;
				txbuffer[1]=i;
				txbuffer[2]=1;


				}
 
		// ord[0]='A';
       //  ord[1]=(BYTE)((dx>>8)&0x00ff);
		// ord[2]=(BYTE)(dx&0x00ff);
		
		 SendCommandToUSB(VR_USRCMD);



	UpdateData(0);			
	CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}

void CchxAdjDlg::SendCommandToComPort()
{ /* txbuffer[0]='L';
   BYTE sum=0;
   for(int i=0;i<COMM_NUMBER-1;i++)
		 sum+=txbuffer[i];
	 sum=~sum;//取反+1
	 sum+=1;
    txbuffer[7]=sum;
	m_txd_str.Format("0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X", txbuffer[0],
		txbuffer[1],txbuffer[2],txbuffer[3],txbuffer[4],txbuffer[5],txbuffer[6],txbuffer[7]);
	UpdateData(0);
	SendMessageToCom(txbuffer,COMM_NUMBER);  
    for( i=0;i<COMM_NUMBER;i++)
		 txbuffer[i]=0;
	Sleep(50);*/
}

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

void CchxAdjDlg::OnOnCommMscomm() 
{
 VARIANT vR;
    static int count,i;
   
	if(m_ComPort.GetCommEvent()!=2)
	return;
	int l=m_ComPort.GetInBufferCount();
	if(l!=COMM_NUMBER)return;
  
    unsigned char * data;
	m_ComPort.SetBreak(0);   
	m_ComPort.SetInputLen(COMM_NUMBER); //12
    vR=m_ComPort.GetInput();
    data=(unsigned char *)vR.parray->pvData;
	
   m_rxd_str.Format("0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X 0x%02X", data[0],
		data[1],data[2],data[3],data[4],data[5],data[6],data[7]);
	UpdateData(0);

}

void CchxAdjDlg::OnWrite() 
{
    txbuffer[6]=0x81;
    SendCommandToUSB(VR_USRCMD);	
}

void CchxAdjDlg::OnWrite2() 
{
      txbuffer[6]=0x82;
	  SendCommandToUSB(VR_USRCMD);	
}
void CchxAdjDlg::OnWrite3() 
{
      txbuffer[6]=0x83;
	  SendCommandToUSB(VR_USRCMD);		
}

void CchxAdjDlg::OnReadEeprom() 
{
      txbuffer[6]=0x40;
	  SendCommandToUSB(VR_USRCMD);	
	
}


BOOL CchxAdjDlg::SendCommandToUSB(BYTE order)
{
	VENDOR_OR_CLASS_REQUEST_CONTROL	myRequest;
    HANDLE  hInDevice = NULL;
    ULONG bufferSize = 8;
 
	BOOL bResult=false;
    char  DeviceName[20] = "Ezusb-0";  
   
	unsigned char sum;
    sum=0;
   for(int i=0;i<7;i++)
	   sum+=txbuffer[i];
	   sum=~sum+1;
       txbuffer[i]=sum;
	
	
	if (UsbOpenDriver (&hInDevice, DeviceName) != TRUE) 
	{
    //   MessageBox( "无效设备,请重试!","错误",MB_ICONERROR);
	    return false;
	}
  else
  {  DWORD dwReturned;
     myRequest.request = order;
	 myRequest.value = 8;
	 myRequest.index = 0xBEEF;
	 myRequest.direction = 0;
	 myRequest.requestType=2; // vendor specific request type (2)
	 myRequest.recepient=0; // recepient is device (0)
     bResult = DeviceIoControl(hInDevice,
    			IOCTL_EZUSB_VENDOR_OR_CLASS_REQUEST,
				&myRequest,
				sizeof(VENDOR_OR_CLASS_REQUEST_CONTROL),
				txbuffer,8,
				(unsigned long *)&dwReturned,
				NULL);
	if (bResult!=TRUE) 
 		MessageBox("命令失败!","错误",MB_ICONERROR);
		CloseHandle (hInDevice);
	
	 }
  return bResult;
	return 0;
}

BOOL CchxAdjDlg::UsbOpenDriver(HANDLE *phDeviceHandle, PCHAR devicename)
{

 char completeDeviceName[64] = "";   
   strcat (completeDeviceName,"\\\\.\\");   
   strcat (completeDeviceName,devicename);   

   *phDeviceHandle = CreateFile(completeDeviceName,
      GENERIC_WRITE,
      FILE_SHARE_WRITE,
      NULL,
      OPEN_EXISTING,
      0,
      NULL);

   if (*phDeviceHandle == INVALID_HANDLE_VALUE) 
      return (FALSE);
   else 
      return (TRUE);
}
#define  CHA_CTL_P 0x1E
#define  CHA_CTL_N 0x1F
#define  CHB_CTL_P 0x20
#define  CHB_CTL_N 0x21

void CchxAdjDlg::OnSelChaChb() 
{   UpdateData(1);
      txbuffer[0]='C';	
       if(m_selcha_chb)
           txbuffer[1]=CHA_CTL_P;	
	   else
            txbuffer[1]=CHA_CTL_N;	
    	SendCommandToUSB(VR_USRCMD);

}

void CchxAdjDlg::OnSelDmmExttrg() 
{
  UpdateData(1);	
   txbuffer[0]='L';	
       if(m_sel_dmm_ext_trg)
           txbuffer[1]=0x10;	
	   else
            txbuffer[1]=0x11;	
    txbuffer[2]=0;
	txbuffer[3]=0x74;

    	SendCommandToUSB(VR_USRCMD);



}

void CchxAdjDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	if(!(nSBCode==SB_LINEDOWN||nSBCode==SB_LINEUP||nSBCode==SB_THUMBPOSITION))return;
	 if(pScrollBar->GetDlgCtrlID()==IDC_SPIN_EXT_TRG_PWM)   

			{
			  
		      txbuffer[0]='L';	
			  txbuffer[1]=0;
			  txbuffer[2]=m_ext_trg_pwm.GetPos();
			  txbuffer[3]=0x74;

	        	SendCommandToUSB(VR_USRCMD);
			//	SendCommandToUSB(VR_USRCMD);
		}
	CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
}

void CchxAdjDlg::OnChbCtl() 
{
 UpdateData(1);
      txbuffer[0]='C';	
       if(m_chb_ctl)
           txbuffer[1]=CHB_CTL_P;	
	   else
            txbuffer[1]=CHB_CTL_N;	
    	SendCommandToUSB(VR_USRCMD);	
}

#define AD9513_S0_CTL_P   0x16
#define AD9513_S0_CTL_N   0x17
#define AD9513_SYNCB_P    0x18
#define AD9513_SYNCB_N    0x19


void CchxAdjDlg::OnAd9513S0() 
{
UpdateData(1);
      txbuffer[0]='C';	
       if(m_ad9513_s0)
         txbuffer[1]=AD9513_S0_CTL_P;	
	   else
         txbuffer[1]=AD9513_S0_CTL_N;	
    	
	     SendCommandToUSB(VR_USRCMD);
		 
		 txbuffer[0]='C';	
         txbuffer[1]=AD9513_SYNCB_N;
		 
		 SendCommandToUSB(VR_USRCMD);	
		 txbuffer[0]='C';
	     txbuffer[1]=AD9513_SYNCB_P;	
    	 
		 SendCommandToUSB(VR_USRCMD);	
}

⌨️ 快捷键说明

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