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

📄 main.cpp

📁 信号生成:可以生成各种类型的信号包括正弦波、方波、三角波、扫频信号、调幅波、白噪声、窄带随机信号等
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include <FileCtrl.hpp>
#include "Main.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
     //                     0       1      2         3          4         5       6          7            8          9
    AnsiString Type[10]={"正弦波","方波","三角波","扫频信号","调幅波","白噪声","冲击脉冲","窄带随机","窄带随机","瞬态随机"};
    SignalList=new TList;
    TSignal *Obj;
    //默认为8个通道
     Obj= new TSinSignal();
     SignalList->Add(Obj);
     Obj= new TRectSignal();
     SignalList->Add(Obj);
     Obj= new TTriSignal();
     SignalList->Add(Obj);
     Obj= new TScanSignal();
     SignalList->Add(Obj);
     Obj= new TAmSignal();
     SignalList->Add(Obj);
     Obj= new TNoiseSignal();
     SignalList->Add(Obj);
     Obj= new TPulseSignal();
     SignalList->Add(Obj);
     Obj= new TNarrowNoiseSignal();
     SignalList->Add(Obj);
     for (int i=0;i<9;i++)
     {
        Obj= new TSinSignal();
        SignalList->Add(Obj);
     }
    CurSetChan=-1; //没有设置通道
    for (int i=0;i<8;i++)
    {
        Obj=(TSignal *)SignalList->Items[i];
        ChLabel[i]=new TLabel(GrbSignal);
        ChLabel[i]->Parent=GrbSignal;
        ChLabel[i]->Left=GrbSignal->Left+4;
        ChLabel[i]->Top=GrbSignal->Top+16+i*30;
        ChLabel[i]->Caption="CH"+IntToStr(i+1);
        ChLabel[i]->Visible=true;

        ChType[i]=new TComboBox(GrbSignal);
        ChType[i]->Parent=GrbSignal;
        ChType[i]->Left=GrbSignal->Left+4+25;
        ChType[i]->Top=GrbSignal->Top+16+i*30;
        ChType[i]->Width=70;
        ChType[i]->Style=csDropDownList;
        for (int j=0;j<8;j++)
        {
            ChType[i]->Items->Add(Type[j]);
        }
        ChType[i]->ItemIndex=Obj->ID;
        ChType[i]->Tag=i;
        ChType[i]->OnChange=ChTypeChange;
        ChType[i]->OnEnter=ChTypeEnter;
        ChType[i]->Visible=true;
    }

    for (int i=8;i<16;i++)
    {
        Obj=(TSignal *)SignalList->Items[i];
        ChLabel[i]=new TLabel(GrbSignal);
        ChLabel[i]->Parent=GrbSignal;
        ChLabel[i]->Left=GrbSignal->Left+4+110;
        ChLabel[i]->Top=GrbSignal->Top+16+(i-8)*30;
        ChLabel[i]->Caption="CH"+IntToStr(i+1);
        ChLabel[i]->Visible=true;

        ChType[i]=new TComboBox(GrbSignal);
        ChType[i]->Parent=GrbSignal;
        ChType[i]->Left=GrbSignal->Left+4+135;
        ChType[i]->Top=GrbSignal->Top+16+(i-8)*30;
        ChType[i]->Width=70;
        ChType[i]->Style=csDropDownList;
        for (int j=0;j<8;j++)
        {
            ChType[i]->Items->Add(Type[j]);
        }
        ChType[i]->ItemIndex=Obj->ID;
        ChType[i]->Tag=i;
        ChType[i]->OnChange=ChTypeChange;
        ChType[i]->OnEnter=ChTypeEnter;
        ChType[i]->Visible=true;
    }

    AnsiString  file= ExtractFilePath(Application->ExeName)+"system.ini";
    TIniFile *pIniFile = new TIniFile(file);
    EdtSavePath->Text=pIniFile->ReadString("信号源", "SavePath", "d:\\data");
    EdtSaveName->Text=pIniFile->ReadString("信号源", "SaveName", "test");
    CmbTestNo->ItemIndex=pIniFile->ReadInteger("信号源", "TestNo", 1)-1;
    EdtSpeed->Text=pIniFile->ReadString("信号源", "Speed", "1000");
    EdtLength->Text=pIniFile->ReadString("信号源", "Length", "1");
    CmbMaxChannel->ItemIndex=pIniFile->ReadInteger("信号源", "MaxChannel", 4)-1;
    delete pIniFile;


}
void __fastcall TForm1::ChTypeEnter(TObject *Sender)
{
    TSignal *Obj;
    int type=PgcType->ActivePageIndex;
    Update(CurSetChan,type);
    CurSetChan=((TComboBox *)Sender)->Tag;
    type=((TComboBox *)Sender)->ItemIndex;
    PgcType->ActivePageIndex=type;
    Obj = (TSignal *) SignalList->Items[CurSetChan];
    if (type==0)  //当前选择是正弦波
    {
            TxtSinAmp->Text=FloatToStrF(((TSinSignal *) Obj)->Amp,2,6,2);
            TxtSinFreq->Text=FloatToStrF(((TSinSignal *) Obj)->Freq,2,6,2);
            TxtSinPhase->Text=FloatToStrF(((TSinSignal *) Obj)->Phase,2,6,2);
            TxtSinRatio->Text=FloatToStrF(((TSinSignal *) Obj)->Ratio,2,6,2);
    }
    else if (type==1)
    {
            TxtRectAmp->Text=FloatToStrF(((TRectSignal *) Obj)->Amp,2,6,2);
            TxtRectFreq->Text=FloatToStrF(((TRectSignal *) Obj)->Freq,2,6,2);
            TxtRectRatio->Text=FloatToStrF(((TRectSignal *) Obj)->Ratio,2,6,2);
            TxtRectPhase->Text=FloatToStrF(((TRectSignal *) Obj)->Phase,2,6,2);
    }
    else if (type==2)
    {
            TxtTriAmp->Text=FloatToStrF(((TTriSignal*) Obj)->Amp,2,6,2);
            TxtTriFreq->Text=FloatToStrF(((TTriSignal *) Obj)->Freq,2,6,2);
            TxtTriPhase->Text=FloatToStrF(((TTriSignal *) Obj)->Phase,2,6,2);
    }
    else if (type==3)
    {
            TxtScanAmp->Text=FloatToStrF(((TScanSignal*) Obj)->Amp,2,6,2);
            TxtScanStartFreq->Text=FloatToStrF(((TScanSignal *) Obj)->StartFreq,2,6,2);
            TxtScanStopFreq->Text=FloatToStrF(((TScanSignal *) Obj)->StopFreq,2,6,2);
            TxtScanStartFreq->Text=FloatToStrF(((TScanSignal *) Obj)->StartFreq,2,6,2);
            TxtScanTime->Text=FloatToStrF(((TScanSignal *) Obj)->ScanTime,2,6,2);
            RdgScanMode->ItemIndex=((TScanSignal *) Obj)->ScanMode;
    }
    else if (type==4)
    {
            TxtAmAmp->Text=FloatToStrF(((TAmSignal*) Obj)->Amp,2,6,2);
            TxtAmCarrierFreq->Text=FloatToStrF(((TAmSignal *) Obj)->CarrierFreq,2,6,2);
            TxtAmSignalFreq->Text=FloatToStrF(((TAmSignal *) Obj)->SignalFreq,2,6,2);
    }
    else if (type==5)
    {
            TxtNoiseAmp->Text=FloatToStrF(((TNoiseSignal*) Obj)->Amp,2,6,2);
            TxtNoiseFangCha->Text=FloatToStrF(((TNoiseSignal*) Obj)->FangCha,2,6,2);
    }
    else if (type==6)
    {
            TxtPulseAmp->Text=FloatToStrF(((TPulseSignal*) Obj)->Amp,2,6,2);
            TxtPulseWidth->Text=FloatToStrF(((TPulseSignal*) Obj)->PulseWidth,2,6,4);
            CmbPulseType->ItemIndex=((TPulseSignal*) Obj)->Type;
    }
    else if (type==7)
    {
            TxtNarrowNoiseAmp->Text=FloatToStrF(((TNarrowNoiseSignal*) Obj)->Amp,2,6,2);
            TxtNarrowNoiseFangCha->Text=FloatToStrF(((TNarrowNoiseSignal*) Obj)->FangCha,2,6,2);
            TxtNarrowNoiseStartFreq->Text=FloatToStrF(((TNarrowNoiseSignal*) Obj)->StartFreq,2,6,4);
            TxtNarrowNoiseStopFreq->Text=FloatToStrF(((TNarrowNoiseSignal*) Obj)->StopFreq,2,6,4);
    }
}
void __fastcall TForm1::ChTypeChange(TObject *Sender)
{
    TSignal *Obj;
    int type=PgcType->ActivePageIndex;
    Update(CurSetChan,type);
    CurSetChan=((TComboBox *)Sender)->Tag;
    type=((TComboBox *)Sender)->ItemIndex;
    PgcType->ActivePageIndex=type;
    Obj = (TSignal *) SignalList->Items[CurSetChan];
    if (Obj->ID!=type) //没有改变信号类型,将信号的参数填上
    {
         if (type==0)
                Obj=new TSinSignal();
         else if (type==1)
                Obj=new TRectSignal();
         else if (type==2)
                Obj=new TTriSignal();
         else if (type==3)
                Obj=new TScanSignal();
         else if (type==4)
                Obj=new TAmSignal();
         else if (type==5)
                Obj=new TNoiseSignal();
         else if (type==6)
                Obj=new TPulseSignal();
         else if (type==7)
                Obj=new TNarrowNoiseSignal();
    }

    if (type==0)
    {
            TxtSinAmp->Text=FloatToStrF(((TSinSignal *) Obj)->Amp,2,6,2);
            TxtSinFreq->Text=FloatToStrF(((TSinSignal *) Obj)->Freq,2,6,2);
            TxtSinPhase->Text=FloatToStrF(((TSinSignal *) Obj)->Phase,2,6,2);
            TxtSinRatio->Text=FloatToStrF(((TSinSignal *) Obj)->Ratio,2,6,2);
    }
    else if (type==1)
    {
            TxtRectAmp->Text=FloatToStrF(((TRectSignal *) Obj)->Amp,2,6,2);
            TxtRectFreq->Text=FloatToStrF(((TRectSignal *) Obj)->Freq,2,6,2);
            TxtRectRatio->Text=FloatToStrF(((TRectSignal *) Obj)->Ratio,2,6,2);
            TxtRectPhase->Text=FloatToStrF(((TRectSignal *) Obj)->Phase,2,6,2);
    }
    else if (type==2)
    {
            TxtTriAmp->Text=FloatToStrF(((TTriSignal*) Obj)->Amp,2,6,2);
            TxtTriFreq->Text=FloatToStrF(((TTriSignal *) Obj)->Freq,2,6,2);
            TxtTriPhase->Text=FloatToStrF(((TTriSignal *) Obj)->Phase,2,6,2);
    }
    else if (type==3)
    {
            TxtScanAmp->Text=FloatToStrF(((TScanSignal*) Obj)->Amp,2,6,2);
            TxtScanStartFreq->Text=FloatToStrF(((TScanSignal *) Obj)->StartFreq,2,6,2);
            TxtScanStopFreq->Text=FloatToStrF(((TScanSignal *) Obj)->StopFreq,2,6,2);
            TxtScanStartFreq->Text=FloatToStrF(((TScanSignal *) Obj)->StartFreq,2,6,2);
            TxtScanTime->Text=FloatToStrF(((TScanSignal *) Obj)->ScanTime,2,6,2);
            RdgScanMode->ItemIndex=((TScanSignal *) Obj)->ScanMode;
    }
    else if (type==4)
    {
            TxtAmAmp->Text=FloatToStrF(((TAmSignal*) Obj)->Amp,2,6,2);
            TxtAmCarrierFreq->Text=FloatToStrF(((TAmSignal *) Obj)->CarrierFreq,2,6,2);
            TxtAmSignalFreq->Text=FloatToStrF(((TAmSignal *) Obj)->SignalFreq,2,6,2);
    }
    else if (type==5)
    {
            TxtNoiseAmp->Text=FloatToStrF(((TNoiseSignal*) Obj)->Amp,2,6,2);
            TxtNoiseFangCha->Text=FloatToStrF(((TNoiseSignal*) Obj)->FangCha,2,6,2);
    }
    else if (type==6)
    {
            CmbPulseType->ItemIndex=((TPulseSignal*) Obj)->Type;
            TxtPulseAmp->Text=FloatToStrF(((TPulseSignal*) Obj)->Amp,2,6,2);

⌨️ 快捷键说明

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