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

📄 fft_projectview.cpp

📁 用VC++实现串口通信
💻 CPP
📖 第 1 页 / 共 2 页
字号:
   CString str;
/*	if(pdlg==NULL)
{
 pdlg=new CDataTRAN(this);
 pdlg->Create(CDataTRAN::IDD,this);
 pdlg->m_mscomm1.SetCommPort(1);
 pdlg->m_mscomm1.SetCommPort(2);
}*/
// pdlg->ShowWindow(SW_SHOW);
 //SetTimer(1,1000,NULL);
if(!(pDoc->Com1Open||pDoc->Com2Open))	
{AfxMessageBox("目前还没打开任何串口,请选择一个串口");
 //pdlg->ShowWindow(SW_HIDE);
  return;
}
 if(pdlg==NULL)//如果传输对话框已创建,即打开传输对话框;否则,创建一个对话框;
 {pdlg=new CDataTRAN(this); //
 pdlg->Create(CDataTRAN::IDD,this);
 }
 pdlg->ShowWindow(SW_SHOW);//显示对话框;
 pDoc->receivedata=_T("");//清空接收字符串以备接收新的输入信号
 for(i=0;i<1024;i++)     //清空变换的数组,接收新的输入数据;
pDoc->origindata[i]=0;
 pDoc->nCount=0;        //
 pDoc->endChar=false;//
 if(pDoc->Com1Open)
 {  //if(	pdlg->m_mscomm2.GetPortOpen())
	//pdlg->m_mscomm2.SetPortOpen(false);
    pdlg->m_mscomm1.SetCommPort(1);               //设置与控件相连的串口;
	pdlg->m_mscomm1.SetInputMode(pDoc->datatyle); //设置相连的方式;
	pdlg->m_mscomm1.SetInBufferSize(1024);        //设置输入缓冲区的大小;
	pdlg->m_mscomm1.SetOutBufferSize(512);        //设置输出缓冲区的大小
	 str=pDoc->com1_baud;
	str+=",n,";
	str+=pDoc->com1_databits;
	str+=",";
	str+=pDoc->com1_datastopbits;
	pdlg->m_mscomm1.SetSettings(str);    //设置端口传输数据的属性;
    pdlg->m_mscomm1.SetRThreshold(1);             //设置触发接受事件的最小字符数;
    if(!pdlg->m_mscomm1.GetPortOpen())            //打开串口;
		//pdlg->m_mscomm1.SetPortOpen(false);
	    pdlg->m_mscomm1.SetPortOpen(true); 
	pdlg->m_mscomm1.SetInputLen(0);              //清除输入缓冲区;
	pdlg->m_mscomm1.GetInput();                  //预读,清空输入缓冲区;
   // pdlg->m_mscomm1.SetPortOpen(false);	
//	pdlg.m_mscomm1.SetCommPort(0);
    AfxMessageBox("串口1打开");
// pdlg.DoModal();
    str=_T("R");                                 //发送请求传输数据信号;
	 pdlg->m_mscomm1.SetOutput(COleVariant(str));
	Invalidate();
 }        
if(pDoc->Com2Open)
 {	//if(	pdlg->m_mscomm1.GetPortOpen())
	//pdlg->m_mscomm1.SetPortOpen(false);
	pdlg->m_mscomm2.SetCommPort(2);                    //设置与控件相连的串口;
	pdlg->m_mscomm2.SetInputMode( pDoc->datatyle);     //设置相连的方式
	pdlg->m_mscomm2.SetInBufferSize(1024);             //设置输入缓冲区的大小
	pdlg->m_mscomm2.SetOutBufferSize(512);             //设置输出缓冲区的大小
    str=pDoc->com2_baud;
	str+=",n,";
	str+=pDoc->com2_databits;
	str+=",";
	str+=pDoc->com2_datastopbits;
	pdlg->m_mscomm2.SetSettings(str);       //设置端口传输数据的属性
    pdlg->m_mscomm2.SetRThreshold(1);                  //设置触发接受事件的最小字符数;
	if(!pdlg->m_mscomm2.GetPortOpen())                  //打开串口;
	pdlg->m_mscomm2.SetPortOpen(true);                  
	pdlg->m_mscomm2.SetInputLen(0);                    //清除输入缓冲区;
	pdlg->m_mscomm2.GetInput();                        //预读,清空输入缓冲区;
//	pdlg->m_mscomm2.SetPortOpen(false);	
	//pdlg->m_mscomm2.SetCommPort(0);
    str=_T("R");                                       //发送请求传输数据信号;
	pdlg->m_mscomm2.SetOutput(COleVariant(str));      
	//pdlg->m_mscomm2.SetPortOpen(false);	
}
/*if(pdlg==NULL)
{
 pdlg=new CDataTRAN(this);
 pdlg->Create(CDataTRAN::IDD,this);
 pdlg->m_mscomm1.SetCommPort(1);
 pdlg->m_mscomm1.SetCommPort(2);}
 pdlg->ShowWindow(SW_SHOW);
 SetTimer(1,10000,NULL);
	

}*/
pDoc->endChar=false;
pDoc->datareceived=false;                                //设置结束字符以便于后面的数据接收
}
void CFFT_PROJECTView::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	pdlg->ShowWindow(SW_HIDE);
	KillTimer(1);
	CScrollView::OnTimer(nIDEvent);
    pdlg->GetDlgItem(IDC_STATIC)->SetWindowText("数据正在处理中,请稍等。。。。");
}

void CFFT_PROJECTView::OnFftstart() 
{
	// TODO: Add your command handler code here
CFFT_PROJECTDoc* pDoc = GetDocument();
if(!pDoc->datareceived)
{MessageBox("目前还没有数据输入,请输入数据后再操作!");
return;
}
CDC *pDC=GetDC();
/*if(pdlg==NULL)
 {pdlg=new CDataTRAN(this);
 pdlg->Create(CDataTRAN::IDD,this);
 }
 pdlg->ShowWindow(SW_SHOW);
 pdlg->GetDlgItem(IDC_STATIC)->SetWindowText("数据正在处理中,请稍等。。。。");*/
int i;
for(i=0;i<1024;i++)   //信号输入;
{pDoc->array[i].x=0;
 pDoc->array[i].y=0;
 pDoc->newarray[i].x=0;
 pDoc->newarray[i].y=0;
}
//pDoc->nCount=4;
for(i=0;i<pDoc->nCount;i++) 
// pDoc->array[i].x=1;
pDoc->array[i].x=pDoc->origindata[i];
 for(int len=i;len<pDoc->nFttLength;len++)
  pDoc->array[len].x=0;
/*for(i=0;i<N;i++)
{ array[i].x=cos(3.14*i/(float)i)+cos(3.14*i/4.0)+cos(3.14*i/8.0)+cos(3.14*i/16.0);
   if(i)
	array[i].x=sin(i*3.14)/3.14*i;
   else
	   array[i].x=1;
} */

for(i=0;i<pDoc->nFttLength;i++)    //倒序;
{pDoc->newarray[i]=pDoc->array[change(i,pDoc->desnCount)];
}

int b,p1,p,L,J,k;
float Tr,Ti;
for(L=1;L<=pDoc->desnCount;L++)   //分级计算碟型;
{b=(int)pow(2,L-1);
 p1=(int)pow(2,pDoc->desnCount-L);
 //printf("第%d\n",L);  //测试用;
 for(J=0;J<b;J++)    //计算每级下相同P的碟型;
 {p=J*p1;
 //printf("p=%d",p);
 for(k=J;k<pDoc->nFttLength;k+=(int)(pow(2,L))) //碟型计算;
 {Tr=pDoc->newarray[k+b].x*cos(p*2*3.14/(float)pDoc->nFttLength)+pDoc->newarray[k+b].y*sin(p*2*3.14/(float)pDoc->nFttLength);
  Ti=pDoc->newarray[k+b].y*cos(p*2*3.14/(float)pDoc->nFttLength)-pDoc->newarray[k+b].x*sin(p*2*3.14/(float)pDoc->nFttLength);
  pDoc->newarray[k+b].x=pDoc->newarray[k].x-Tr;
  pDoc->newarray[k+b].y=pDoc->newarray[k].y-Ti;
  pDoc->newarray[k].x=pDoc->newarray[k].x+Tr;
  pDoc->newarray[k].y=pDoc->newarray[k].y+Ti;
  //printf("J=%d\tk=%d\tk+b=%d\n",J,k,k+b);//测试用;
/*for(i=0;i<8;i++)
{CString str;
str.Format("%f",pDoc->newarray[i].y);
pDC->TextOut(100,50*i,str);
}*/
  }
 }
}

for(i=0;i<pDoc->nFttLength;i++)  //计算X(k)的模;
{pDoc->array[i].x=i;
pDoc->array[i].y=sqrt(pDoc->newarray[i].x*pDoc->newarray[i].x+pDoc->newarray[i].y*pDoc->newarray[i].y);
}
 for(i=0;i<8;i++)
{CString str;
str.Format("%f",pDoc->newarray[i].y);
pDC->TextOut(100,50*i,str);
}
 pDoc->nShowFtt=true;     //源信号和频谱一起显示
 pDoc->nShowsignal=true;
pDoc->nFttFinshed=true;    // 标志已经进行变换;
pDoc->showallrate=false;
pDoc->nShowrate=30;	   // 源信号视图不参与缩放;
pDoc->prenFttLength=pDoc->nFttLength;
pDoc->newchang=true;
Invalidate(true);
}
int change(int a,int b)  //倒序函数的定义;
{int des=0,i;
 for(i=0;i<b;i++)
 {des|=a&01;
  des=des<<1;
  a=a>>1;
 }
 des=des>>1;
// printf("%d",des);
 //printf("\t");
 
 return des;

}

void CFFT_PROJECTView::OnFftsetting() 
{
	// TODO: Add your command handler code here
	CFFT_PROJECTDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	CFttSetting dlg;
	CString str;
	int i=0,stemp;
	str.Format("%d",pDoc->nFttLength);
	dlg.m_fttlength=str;
    dlg.m_blackcolor=pDoc->colorset;
	UpdateData(false);
	if(dlg.DoModal()==IDOK)
	{pDoc->colorset=dlg.m_blackcolor;
	 str=dlg.m_fttlength;
	 pDoc->nFttLength=atoi(str);
     pDoc->colorset=pDoc->colorset;
	 stemp=pDoc->nFttLength;
	//	UpdateData(true);
		do
		{i++; stemp=stemp/2;
		}while(stemp);
    	//str.Format("%d",--i);
		//MessageBox(str);
        pDoc->desnCount=--i;
		UpdateData(true);
		pDoc->newchang=false;
		Invalidate(true);
	}
 


}

void CFFT_PROJECTView::OnShowsettings() 
{
	// TODO: Add your command handler code here
CFFT_PROJECTDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if(!pDoc->datareceived)
{MessageBox("数据目前还没输入,请输入后再操作","信息提示");
 return;
}
CShow dlg;
int i;
if(pDoc->nShowFtt&&pDoc->nShowsignal)
i=2;
else if(pDoc->nShowFtt)
i=0;
else
i=1;
dlg.m_nShow=i;
switch(pDoc->nShowrate)
{case 30 : i=0;
           break;
 case 20 : i=1;
           break;
 case 10 : i=2;
           break;
 default:   i=3;
}
dlg.m_nshowrate=i;
if(dlg.DoModal()==IDOK)
{switch(dlg.m_nShow)
{
case 0 :  pDoc->nShowFtt=true;
          pDoc->nShowsignal=false;
		  break;
case 1 :  pDoc->nShowFtt=false;
          pDoc->nShowsignal=true;
		  break;

default : pDoc->nShowFtt=true;
          pDoc->nShowsignal=true;
	      if(dlg.allrate)
		  pDoc->showallrate=true;
}
switch(dlg.m_nshowrate)
{case 0: pDoc->nShowrate=30;
         break;
 case 1: pDoc->nShowrate=20;
         break;
 case 2: pDoc->nShowrate=10;
         break;
default: pDoc->nShowrate=1;
}
UpdateData(true);
Invalidate(true);
}
}

void CFFT_PROJECTView::OnComSetting() 
{
	// TODO: Add your command handler code here
	CFFT_PROJECTDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    CString str;
   
if(psdlg==NULL)//如果传输对话框已创建,即打开传输对话框;否则,创建一个对话框;
 {psdlg=new CComsetting(this); //
 psdlg->Create(CComsetting::IDD,this);
 }
 
	
    //str.Format("%d",pDoc->com1_baud);
	psdlg->m_com1baud=pDoc->com1_baud;
    //str.Format("%d",pDoc->com1_databits);
    psdlg->m_com1databits=pDoc->com1_databits;
	//str.Format("%0.1f",pDoc->com1_datastopbits);
    psdlg->m_com1stopbits=pDoc->com1_datastopbits;
    psdlg->m_com1aparity=pDoc->com1_dataparity;
	
    //str.Format("%d",pDoc->com1_baud);
	psdlg->m_com2baud=pDoc->com2_baud;
    //str.Format("%d",pDoc->com1_databits);
    psdlg->m_com2databits=pDoc->com2_databits;
	//str.Format("%0.1f",pDoc->com1_datastopbits);
     psdlg->m_com2stopbits=pDoc->com2_datastopbits;
     psdlg->m_com2parity=pDoc->com2_dataparity;
	 UpdateData(false);
     psdlg->ShowWindow(SW_SHOW);//显示对话框;
	 if(pDoc->Com1Open)
	 {//dlg.m_hIcon1=AfxGetApp()->LoadIcon(IDI_ICON1);
	   psdlg->m_com1openoff.SetIcon(psdlg->m_comon);
     //dlg.GetDlgCtrlID(IDC_COM1STATUS)->SetIcon(dlg.m_hIcon1);}
	 
	// dlg.m_com1openoff.
	 //
	 //dlg.m_com1openoff.
	 //dlg.GetDlgItem(IDC_COM1STATUS)->SetIcon(HICON m_hIcon1;);
      //(dlg.GetDlgItem(IDC_COM1STATUS))->SetWindowText("打开");
	 }
	 else
    psdlg->m_com1openoff.SetIcon(psdlg->m_comoff);
	if(pDoc->Com2Open)
     psdlg->m_com2openoff.SetIcon(psdlg->m_comon);
    else
    psdlg->m_com2openoff.SetIcon(psdlg->m_comoff);

	UpdateData(false);
/*	if(dlg.DoModal()==IDOK)
    { pDoc->com1_baud=dlg.m_com1baud;
	  pDoc->com1_databits=dlg.m_com1databits;
	  pDoc->com1_datastopbits=dlg.m_com1stopbits;
      pDoc->com1_dataparity=dlg.m_com1aparity;
	   pDoc->com2_baud=dlg.m_com2baud;
	  pDoc->com2_databits=dlg.m_com2databits;
	  pDoc->com2_datastopbits=dlg.m_com2stopbits;
      pDoc->com2_dataparity=dlg.m_com2parity;
	 
	}*/
}

void CFFT_PROJECTView::OnUpdateAsii(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	CFFT_PROJECTDoc* pDoc = GetDocument();
	pCmdUI->SetCheck(!pDoc->datatyle);
}

void CFFT_PROJECTView::OnUpdateBit(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	CFFT_PROJECTDoc* pDoc = GetDocument();
	pCmdUI->SetCheck(pDoc->datatyle);
}

void CFFT_PROJECTView::OnUpdateCom1(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	CFFT_PROJECTDoc* pDoc = GetDocument();
    pCmdUI->SetCheck(pDoc->Com1Open);
}

void CFFT_PROJECTView::OnUpdateCom2(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	CFFT_PROJECTDoc* pDoc = GetDocument();
	pCmdUI->SetCheck(pDoc->Com2Open);
}

void CFFT_PROJECTView::OnBlue() 
{
	// TODO: Add your command handler code here
	CFFT_PROJECTDoc* pDoc = GetDocument();
	pDoc->colorset=2;
	Invalidate(true);
	
}

void CFFT_PROJECTView::OnSheepblue() 
{
	// TODO: Add your command handler code here
	CFFT_PROJECTDoc* pDoc = GetDocument();
	pDoc->colorset=1;
	Invalidate(true);
}

⌨️ 快捷键说明

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