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

📄 usbwaveview.cpp

📁 进行USB通讯的源码 所用芯片为EZ-USB2131Q
💻 CPP
字号:
// USBWaveView.cpp : implementation file
//

#include "stdafx.h"
#include "USB.h"
#include "USBWaveView.h"
#include "UserDef.h"
#include "main.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//--------------------------------------------------------------------------

extern int m_ProcessGraphicMode;
extern WORD ADBuffer[MAX_SEGMENT][16384]; // 缓冲队列
extern BOOL m_FirstScreenStop;
extern BOOL m_BounceStop;
extern int m_BounceCount;
extern int  m_ScreenVolume;
extern int  m_TriggerVolt;
extern int nChannelCount; 
extern int m_MiddleLsb[32];
extern int  m_TriggerVolt;
extern float m_AnalyzeAllCount;
extern UINT m_OverLimitCount;
extern int m_ProcessMoveVolt;
extern BOOL m_bProgress;

extern Control_Mode m_Control;                   //控制参数传输
extern int m_nDrawPointNum;
extern BOOL bDeviceRun;
extern float VoltRange;
///////////////////////
int STEP;
static CPoint pointxy[32][8192];
extern int Center, PerY;
extern CRect ClientRect;
extern float middle1;
extern BOOL bDataProcessing;
extern int CurrentIndex;
extern int DrawIndex;

BOOL bWaveRedraw=FALSE;


//--------------------------------------------------------------------------
/////////////////////////////////////////////////////////////////////////////
// CUSBWaveView



IMPLEMENT_DYNCREATE(CUSBWaveView, CScrollView)

CUSBWaveView::CUSBWaveView()
{
	nChannelCount=1;
	m_Draw=false;
	Offset=0;
	
	//CurrentProgress=0;  // 置采集进度条起值为0
	Pen.CreatePen(PS_SOLID,1,RGB(255,0,0));
	PerY=ClientRect.Height()/nChannelCount; 
	
	middle1=(float)((((m_ScreenVolume)/VoltRange)*LSB_COUNT)/(PerY-2));//每像素对应的码值
}

CUSBWaveView::~CUSBWaveView()
{
}


BEGIN_MESSAGE_MAP(CUSBWaveView, CScrollView)
	//{{AFX_MSG_MAP(CUSBWaveView)
	ON_WM_KEYDOWN()
	ON_WM_SIZE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CUSBWaveView drawing



/////////////////////////////////////////////////////////////////////////////
// CUSBWaveView diagnostics

#ifdef _DEBUG
void CUSBWaveView::AssertValid() const
{
	CScrollView::AssertValid();
}

void CUSBWaveView::Dump(CDumpContext& dc) const
{
	CScrollView::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CUSBWaveView message handlers


void CUSBWaveView::OnDraw(CDC* pDC)
{
	if (m_ProcessGraphicMode==1)
	{
		UpdateFrame(pDC);
		
	}
	// TODO: add draw code here
}


BOOL CUSBWaveView::UpdateFrame(CDC *pDC)
{
	bDataProcessing = TRUE; // 表示正在处理数据,采集或处理线程不应该操作此段缓冲区    
	
	OldPen = pDC->SelectObject(&Pen);	
	PerY=ClientRect.Height()/nChannelCount; 
	middle1=(float)((((m_ScreenVolume)/VoltRange)*LSB_COUNT)/(PerY-2));//每像素对应的码值    
	Center=(int)(PerY/2.0);
	if(!bDeviceRun) DrawIndex=m_oldIndex;	//如果停止采集则使用上一屏数据
	m_oldIndex=DrawIndex;//保存本次索引号以便停止时使用
	for(j=0; j<nChannelCount; j++)
	{
		x=ClientRect.left;
		for(i=0; (i<ClientRect.Width()) && (i<m_nDrawPointNum); i++)	
		{
			pointxy[j][i].x=x+i;
			pointxy[j][i].y=(int)(Center-(int)(((((ADBuffer[DrawIndex][j+i*nChannelCount])^0x2000)&0x3fff)-LSB_HALF-m_MiddleLsb[j])/middle1));
		}
		Center+=PerY;
		pDC->Polyline(pointxy[j], i-2);
	}
	pDC->SelectObject(OldPen);
	if(bWaveRedraw)
	{
		CurrentIndex++;
		if(CurrentIndex==MAX_SEGMENT) CurrentIndex=0;
	}
	bWaveRedraw=FALSE;
	bDataProcessing = FALSE; // 表示数据已处理完,采集或处理线程可以操作此段缓冲区

	return TRUE;
}

void CUSBWaveView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint) 
{
	// TODO: Add your specialized code here and/or call the base class
 	if(lHint==2)  // 如果是波形方式,就执行父类的OnUpdate来调用其OnDraw
	{
		bWaveRedraw=TRUE;
		CScrollView::OnUpdate(pSender, lHint, pHint);
	}
}





void CUSBWaveView::OnInitialUpdate() 
{
	CScrollView::OnInitialUpdate();
	
	// TODO: Add your specialized code here and/or call the base class
		CSize sizeTotal;
	// TODO: calculate the total size of this view
	sizeTotal.cx = sizeTotal.cy = 100;
	SetScrollSizes(MM_TEXT, sizeTotal);
	CUSBDoc* pDoc = (CUSBDoc*)GetDocument();
	pDoc->m_hWndWave=m_hWnd;   // 取得视图句柄,以便在DOC中的线程使用
}

BOOL CUSBWaveView::PreCreateWindow(CREATESTRUCT& cs) 
{
	// TODO: Add your specialized code here and/or call the base class
		cs.style=cs.style^WS_HSCROLL;

	return CScrollView::PreCreateWindow(cs);
}

void CUSBWaveView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	// TODO: Add your message handler code here and/or call default
		switch(nChar)
	{
		case VK_LEFT:
			CurrentX--; 
			break;
		case VK_RIGHT:
			CurrentX++;
			break;
		case VK_UP:
			CurrentY--;
			break;
		case VK_DOWN:
			CurrentY++;
			break;
	}
	
	SetCursorPos(CurrentX, CurrentY); 
	CScrollView::OnKeyDown(nChar, nRepCnt, nFlags);
}

void CUSBWaveView::OnSize(UINT nType, int cx, int cy) 
{
	CScrollView::OnSize(nType, cx, cy);
	GetClientRect(&ClientRect);	 
	PerY=ClientRect.Height()/nChannelCount; 
	middle1=(float)((((m_ScreenVolume)/VoltRange)*LSB_COUNT)/(PerY));//每像素对应的码值    

	// TODO: Add your message handler code here
	
}

⌨️ 快捷键说明

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