📄 fft_projectview.cpp
字号:
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 + -