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

📄 dwgview.cpp

📁 发送数字波形,可以选择方形
💻 CPP
📖 第 1 页 / 共 3 页
字号:
            data[i]=0;
	data[255]=int(pp*255/5);
	n=4*Shiji*Freq*256;
	for(i=0;i<=n;i++)
	{
		if(i>(k*256-1))
		{
			k++;
			p=256*(k-1);
		}
		X0=X;
		X=int(203.0+198*i/n);
		x0=x;
		x=int(203.0-198*i/n);
		Y0=Y;
		Y=int(240-230.0*data[i-p]/255.0);
		y0=y;
		y=int(240-230.0*data[255-(i-p)]/255.0);
		pDC->MoveTo(X0,Y0);
		pDC->LineTo(X,Y);
		pDC->MoveTo(x0,y0);
		pDC->LineTo(x,y);
	}

	pDC->SelectObject(pOldPen);


	OutputWave();

}




void CDWGView::Hanshubo(CDC *pDC)
{
//  	MessageBox("函数波");
	CBitmap mBit;
	CDC MemDC;
	MemDC.CreateCompatibleDC(NULL);
    mBit.LoadBitmap(IDB_Display);
	CBitmap *pOldBit=MemDC.SelectObject(&mBit);
	pDC->BitBlt(2,7,900,700,&MemDC,0,0,SRCCOPY);
	MemDC.SelectObject(pOldBit);
//	CHanshuboDlg hanshu;
	//hanshuView
	int i;
	double pi=3.1415926;
	for (i=0;i<256;i++)
	{
		if(i<126)
			data[i]=int(255*sin(2*pi*(i-127)/127)/(2*pi*(i-127)/127));
		else if(i<127)
			data[126]=254;
		else if(i<128)
			data[127]=255;
		else if(i<129)
			data[128]=254;
		else
			data[i]=int(255*sin(2*pi*(i-127)/127)/(2*pi*(i-127)/127));
	}
	
  	CPen pen; 
	pen.CreatePen(PS_SOLID,1,RGB(255,0,0));//创建一个红色的2个象素的实线画笔 
	CPen *pOldPen=pDC->SelectObject(&pen);//将该画笔选到你绘图的DC设备中 
   	pDC->MoveTo(4,int(190-150.0*data[0]/255.0));
	int k=1,p=0;
	double n;
	int  X=203,Y=240,x=203,y=240,X0=203,Y0=240,x0=203,y0=240;
	n=8*Shiji*Freq*256;
	for(i=0;i<=n;i++)
	{
		if(i>(k*256-1))
		{
			k++;
			p=256*(k-1);
		}
	//	X0=X;
		X=int(4+394*i/n);
	//	Y0=Y;
		Y=int(190-170.0*data[i-p]/255.0);
	//	pDC->MoveTo(X0,Y0);
		pDC->LineTo(X,Y);
	}

	pDC->SelectObject(pOldPen);


	OutputWave();


}

void CDWGView::Renyibo(CDC *pDC)
{
 //MessageBox("任意波");
	CBitmap mBit;
	CDC MemDC;

	MemDC.CreateCompatibleDC(NULL);
    mBit.LoadBitmap(IDB_Display);
	CBitmap *pOldBit=MemDC.SelectObject(&mBit);
	pDC->BitBlt(2,7,900,700,&MemDC,0,0,SRCCOPY);
	MemDC.SelectObject(pOldBit);

	CPen pen; 
	pen.CreatePen(PS_SOLID,1,RGB(255,0,0));//创建一个红色的2个象素的实线画笔 
	CPen *pOldPen=pDC->SelectObject(&pen);//将该画笔选到你绘图的DC设备中 
	
	int i,k=1,p=0;
	double n;
	int  X=4,Y=240,X0=4,Y0=240;
	pDC->MoveTo(4,240);
	if(Counter==1)
	{
		//根据data画任意波的波形!!!
		//MessageBox("May to graphics!!");
		n=8*Shiji*Freq*256;
		for(i=0;i<=n;i++)
		{
			if(i>(k*256-1))
			{
				k++;
				p=256*(k-1);
			}
		//	X0=X;
			X=int(4+394*i/n);
		//	Y0=Y;
			Y=int(240-230.0*data[i-p]/255.0);
		//	pDC->MoveTo(X0,Y0);
			pDC->LineTo(X,Y);
		
		}
	
	}
	pDC->SelectObject(pOldPen);


	OutputWave();
}
void CDWGView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	// TODO: Add your message handler code here and/or call default
	
	CFormView::OnHScroll(nSBCode, nPos, pScrollBar);
	CSliderCtrl* pSlide1=(CSliderCtrl*)pScrollBar;
	CString str1;
//	pSlide1->SetPos(4500);
	int n=pSlide1->GetPos();
//	PPLedDisplay(n);
	str1.Format("%d",n);
	SetDlgItemText(IDC_STATIC_TRACK2,str1+"mv");
	UpdateData(TRUE);
	pp=float(m_pp/1000.0);
	OnPaint();

}

void CDWGView::OnChangeFreq() 
{
	// TODO: If this is a RICHEDIT control, the control will not
	// send this notification unless you override the CFormView::OnInitDialog()
	// function and call CRichEditCtrl().SetEventMask()
	// with the ENM_CHANGE flag ORed into the mask.
	
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	int n=m_Freq;

	Freq=n;
	CString str;


	double shiji;
	
	if(n<32)
	{
		 shiji=31.25*pow(10,-3);
		 UpdateData(TRUE);
	     Shiji=shiji;
		 str.Format("%.2f",31.25);
	     SetDlgItemText(IDC_STATIC_shiji,str+"毫秒/格");
	}
	else if(n<128)
	{
		 shiji=7.81*pow(10,-3);
		 UpdateData(TRUE);
	     Shiji=shiji;
		 str.Format("%.2f",7.81);
	     SetDlgItemText(IDC_STATIC_shiji,str+"ms/格");
	}
	else if(n<512)
	{
		 shiji=1.95*pow(10,-3);
		 UpdateData(TRUE);
	     Shiji=shiji;
		 str.Format("%.2f",1.95);
	     SetDlgItemText(IDC_STATIC_shiji,str+"毫秒/格");
	}
	else if(n<2048)
	{
		 shiji=488.28*pow(10,-6);
		 UpdateData(TRUE);
	     Shiji=shiji;
		 str.Format("%.2f",488.28);
	     SetDlgItemText(IDC_STATIC_shiji,str+"微秒/格");
	}
	

	if(n>=1000)
	{    
		float f;
		f=float(n/1000.0);
		str.Format("%.3f",f);
		str=str+"KHz";
	}
	else
	{
		str.Format("%d",n);
		str=str+"Hz";
	}
	SetDlgItemText(IDC_STATIC_TRACK1,str);
	Freq=n;
	OnPaint();
}

int CDWGView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CFormView::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	// TODO: Add your specialized creation code here
	//设置spin
	//m_updown.SetBuddy
	


/*
	m_2ndSpin.Create(WS_CHILD | WS_VISIBLE | WS_BORDER |
        UDS_ALIGNLEFT | UDS_ARROWKEYS,
        CRect(0, 0, 0, 0), this, IDC_2ndSPIN);
    m_2ndSpin.SetBuddy(&m_Freq);
    m_2ndSpin.SetRange(0, 500000);

    m_2ndSpin2.Create(WS_CHILD | WS_VISIBLE | WS_BORDER |
        UDS_ALIGNRIGHT  | UDS_ARROWKEYS,
        CRect(0, 0, 0, 0), this, IDC_2ndSPIN2);
    m_2ndSpin2.SetBuddy(&m_Freq);
    m_2ndSpin2.SetRange(0, 500000);
	*/
	//renyibo.DoModal();
	return 0;
}

void CDWGView::OnMouseMove(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	 // 作图窗口坐标(155,108)(551,337)
	CFormView::OnMouseMove(nFlags, point);
	if(Counter==2)
	{
		Counter=1;
		m_nMouseButtonDown=FALSE;

		//清空data
	}
	if(m_nMouseButtonDown&(Select==7)&(point.x>155)&(point.y>108)&(point.x<551)&(point.y<337))
	{
       
		

		//  MessageBox("Down!!");
		CDWGDoc* pDoc = GetDocument();
		CDC* pDC=GetDC();
		m_pntMouseLoc=point;
		m_nMouseFlags=nFlags;
		if(m_pntMouseLoc.x<m_pntPrevLoc.x)
		{
		//	Invalidate(TRUE);
		//	m_pntPrevLoc=CPoint(152,221);
			Counter=2;
			CString str;
			str.Format("\n\n因为前一点横坐标为%d,当前点横坐标为%d",m_pntMouseLoc.x,m_pntPrevLoc.x-5);
		//	OnPaint();
			AfxMessageBox("你的横坐标不满足要求!"+str+"\n\n请画单值函数波,否则不予接受!!\n\n   若要再画,请点击“任意波”按钮!!");
			return;
		}

		CPen penStroke(PS_SOLID,3,RGB(255,0,0));
		CPen *ppenPrevious=pDC->SelectObject(&penStroke);
		CPen pen; 
		pen.CreatePen(PS_SOLID,1,RGB(255,0,0));//创建一个红色的2个象素的实线画笔 
		CPen *pOldPen=pDC->SelectObject(&pen);//将该画笔选到你绘图的DC设备中 

		//写入data,等待改变频率
		int i;
		float k,c;
		for(i=0;i<256;i++)
		{
			c=float(395.0*i/255.0+155.0);
			if((m_pntPrevLoc.x<=c)&(c<m_pntMouseLoc.x))
			{
				k=float((m_pntPrevLoc.y-m_pntMouseLoc.y)/(m_pntPrevLoc.x-m_pntMouseLoc.x));
				data[i]=int((227-k*(c-m_pntPrevLoc.x)-m_pntMouseLoc.y+110)*256/227);
			}
		}

		pDC->MoveTo(m_pntPrevLoc);
		pDC->LineTo(m_pntMouseLoc);
		m_pntPrevLoc=m_pntMouseLoc;
		pDC->SelectObject(&pOldPen);
	}


}


void CDWGView::OnRButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	
	CFormView::OnRButtonDown(nFlags, point);
	m_pntPrevLoc=m_pntMouseLoc=point;
	m_nMouseFlags=nFlags;
	CString str;
	str.Format("(%d,%d)",point.x-155,point.y-110);
//	MessageBox(str);
	if(Counter==0)
	{
		m_nMouseButtonDown=TRUE;
		Counter+=1;
	}
	else 
		m_nMouseButtonDown=FALSE;

}

void CDWGView::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	
	CFormView::OnLButtonDown(nFlags, point);
		GetParentFrame()->PostMessage(WM_NCLBUTTONDOWN ,
		                          HTCAPTION , 
								  MAKELPARAM (point.x,point.y));
}






void CDWGView::OnButtonUp() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	int n=m_Freq;
	n+=1;
//	CString str;
//	str.Format("%d",n);
	//MessageBox(str);
	if(n>1900)
		n=1;
	m_Freq=n;
	
	UpdateData(FALSE);
	OnChangeFreq() ;

	
}

void CDWGView::OnButtonDown() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);
	int n=m_Freq;
	n-=1;
	if(n<1)
		n=1900;
	m_Freq=n;
	UpdateData(FALSE);
	OnChangeFreq() ;
}


void CDWGView::OutputWave()
{
	//从示波器上输出波形的代码
	//data[256]是系统的全局变量,由高级语言产生的int数据
	//范围在0~255之间。

	//以下是写6116的代码
/*	int Address=0;//定义地址变量
	int Data;		//定义数据变量
	__asm
	{
		mov al,10B 
		mov dx,398h
		out dx,al
	}	//将74LS374的Q1置0,Q2置1,使系统处于写数据状态
	int i;
	for(i=0;i<256;i++)
	{
		Data=data[i];
		Address=i;
		__asm
		{
		
			mov eax,Address
			mov dx,390h
			out dx,al //用74LS374锁存地址
			
			mov eax,Data
			mov dx,380h
			out dx,al      //向对应的地址写数据
		
		}
	}

    //以下是从6116中读出数据到DAC中,然后显示在示波器上
	//的代码
	//从控件中获得要输出波的频率Freq(全局变量),CLK信号为500KHz
	//先对8253初始化,然后将系统处于输出状态。输出波形的
	//频率在1Hz~1.95KHz 
        //则实际频率应该定在1Hz~1.5KHz
	int ControlData=int(500000/256/Freq);
	//计算写入的初始值的大小
	__asm
	{
		mov dx,38fh
		mov al,01110100b  //控制字,选择计数器1,写16位寄存器
		out dx,al     //工作方式2(频率计),二进制写入

		mov eax,ControlData
		mov dx,389h
		out dx,al	//选择计数器1,先写低8位

		mov eax,ControlData
		mov al,ah
		mov dx,389h
		out dx,al  //写高8位

		mov al,01B
		mov dx,398h
		out dx,al  //将74LS374的Q1置1,Q2置0,系统处于输出状态.
	}*/

}

void CDWGView::SetPowerLed()
{
   	CWnd* pWnd=GetDlgItem(IDC_STATIC_power);
	CDC* pControlDC=pWnd->GetDC();
	pWnd->Invalidate();
	pWnd->UpdateWindow();
	pControlDC->SelectStockObject(BLACK_BRUSH);

	CBitmap mBit;
	CDC MemDC;
	MemDC.CreateCompatibleDC(NULL);
    mBit.LoadBitmap(IDB_BITMAP_power);
	CBitmap *pOldBit=MemDC.SelectObject(&mBit);
	pControlDC->BitBlt(0,0,900,700,&MemDC,0,0,SRCCOPY);
	MemDC.SelectObject(pOldBit);
//设置mv
/*
	CWnd* pWnd1=GetDlgItem(IDC_STATIC_mv);
	CDC* pControlDC1=pWnd1->GetDC();
	pWnd1->Invalidate();
	pWnd1->UpdateWindow();
	pControlDC1->SelectStockObject(BLACK_BRUSH);
	CBitmap mBit1;
	CDC MemDC1;
	MemDC1.CreateCompatibleDC(NULL);
    mBit1.LoadBitmap(IDB_BITMAP_mv);
	CBitmap *pOldBit1=MemDC1.SelectObject(&mBit1);
	pControlDC1->BitBlt(0,0,900,700,&MemDC1,0,0,SRCCOPY);
	MemDC1.SelectObject(pOldBit1);

//设置hz
	CWnd* pWnd2=GetDlgItem(IDC_STATIC_hz);
	CDC* pControlDC2=pWnd2->GetDC();
	pWnd2->Invalidate();
	pWnd2->UpdateWindow();
	pControlDC2->SelectStockObject(BLACK_BRUSH);
	CBitmap mBit2;
	CDC MemDC2;
	MemDC2.CreateCompatibleDC(NULL);
    mBit2.LoadBitmap(IDB_BITMAP_HZ);
	CBitmap *pOldBit2=MemDC2.SelectObject(&mBit2);
	pControlDC2->BitBlt(0,0,50,50,&MemDC2,0,0,SRCCOPY);
	MemDC2.SelectObject(pOldBit2);
	*/
}

void CDWGView::SetFangboLed()
{
	CWnd* pWnd=GetDlgItem(IDC_STATIC_fangbo);
	CDC* pControlDC=pWnd->GetDC();
	pWnd->Invalidate();
	pWnd->UpdateWindow();
	pControlDC->SelectStockObject(BLACK_BRUSH);

	CBitmap mBit;
	CDC MemDC;
	MemDC.CreateCompatibleDC(NULL);
	if(Select==1)
		mBit.LoadBitmap(IDB_ON);
	else
		mBit.LoadBitmap(IDB_OFF);
	CBitmap *pOldBit=MemDC.SelectObject(&mBit);
	pControlDC->BitBlt(0,0,900,700,&MemDC,0,0,SRCCOPY);
	MemDC.SelectObject(pOldBit);

}

void CDWGView::SetJuchiboLed()
{
	CWnd* pWnd=GetDlgItem(IDC_STATIC_jucibo);
	CDC* pControlDC=pWnd->GetDC();
	pWnd->Invalidate();
	pWnd->UpdateWindow();
	pControlDC->SelectStockObject(BLACK_BRUSH);

	CBitmap mBit;
	CDC MemDC;
	MemDC.CreateCompatibleDC(NULL);
	if(Select==2)
		mBit.LoadBitmap(IDB_ON);
	else
		mBit.LoadBitmap(IDB_OFF);
	CBitmap *pOldBit=MemDC.SelectObject(&mBit);
	pControlDC->BitBlt(0,0,900,700,&MemDC,0,0,SRCCOPY);
	MemDC.SelectObject(pOldBit);

}

void CDWGView::SetSinLed()
{
   	CWnd* pWnd=GetDlgItem(IDC_STATIC_sin);
	CDC* pControlDC=pWnd->GetDC();
	pWnd->Invalidate();

⌨️ 快捷键说明

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