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

📄 unit1.cpp

📁 LMS软件是用来进行自适应滤波的最小均方误差算法
💻 CPP
📖 第 1 页 / 共 3 页
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#include <Clipbrd.hpp>
#include <Printers.hpp>
#pragma hdrstop

#include "Unit1.h"
#include "unit3.h"
#include "comm.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TF1 *F1;
Graphics::TBitmap *pic;
bool cfgflag=false;
bool StopDisplay=false;
bool portopen=false;
long RXcount=0,TXcount=0;
int oldcmd;
unsigned char RxChar;
unsigned char *TxBuf;
Node PORT[PortMax],BAUD[BaudMax],BYTEs[ByteMax];
Tools Tool[ToolMax];
Command CMD[CmdMax];
Node Identify[3];
TFont  *font;
COMM *Comm;
BYTE Parity,StopBit;
//---------------------------------------------------------------------------
__fastcall TF1::TF1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TF1::FormResize(TObject *Sender)
{
  E2->Width=F1->Width-154;
}
//---------------------------------------------------------------------------

void __fastcall TF1::FormCreate(TObject *Sender)
{
    int j,i;
    Comm=new COMM(Handle);
    if(Comm==NULL) {ShowMessage("   分配内存错误!  ");return;}
    IL1->GetBitmap(3,topimg->Picture->Bitmap);
    M1->Visible=false;
    try
    {
        M1->Lines->LoadFromFile("Project1.ini");
        for(i=0;i<M1->Lines->Count;i++)
        {
            M1->Lines->Strings[i]=M1->Lines->Strings[i].Trim();
            M1->Lines->Strings[i]=M1->Lines->Strings[i].UpperCase();
            if(M1->Lines->Strings[i].Length()<3) {M1->Lines->Delete(i--);continue;}
            if(!((M1->Lines->Strings[i].Pos("["))||(M1->Lines->Strings[i].Pos("=")))) {M1->Lines->Delete(i--);continue;}
            if(M1->Lines->Strings[i].Pos("=")==1) {M1->Lines->Delete(i--);continue;}
            if(M1->Lines->Strings[i].Pos("=")==M1->Lines->Strings[i].Length()) {M1->Lines->Delete(i--);continue;}
            if(M1->Lines->Strings[i].Pos("[")>1) {M1->Lines->Delete(i--);continue;}
            if((M1->Lines->Strings[i].Pos("]")!=M1->Lines->Strings[i].Length())&&(M1->Lines->Strings[i].Pos("[")==1)) {M1->Lines->Delete(i--);continue;}
        }
        LoadPort();
        LoadIdentify();
        LoadWindow();
        LoadTool();
        LoadCMD();
        M1->WordWrap=true;
    }
    catch(...)
    {
        char temp[MAX_PATH];AnsiString Path;
        GetModuleFileName(NULL,temp,MAX_PATH);
        Path=AnsiString(temp);
        Path=Path.Delete(Path.Length()-2,3);
        ShowMessage(Path+"INI文件打开错误!");
    }
    M1->Lines->Clear();
    M1->Visible=true;
    oldcmd=CB4->ItemIndex;
    CB4Change(Sender);
    portopen=PortIni();
    font=new TFont();
    if(font==NULL) {ShowMessage("   分配内存错误!  ");return;}
    font=RE1->Font;
    Comm->SetTimeOut(INFINITE,5000);
    pic= new Graphics::TBitmap;
}
//---------------------------------------------------------------------------
void __fastcall TF1::E1KeyPress(TObject *Sender, char &Key)
{
    static bool HexFlag=false;
    if(Key=='\r') {B2Click(B2);return;}
    if((Key>='0')&&(Key<='9')) return;
    if((Key==8)) return;
    if((Key>='A')&&(Key<='F')&&(HexFlag)) return;
    if((Key>='a')&&(Key<='f')&&(HexFlag)) return;
    if(Key==' ')
    {
      if(E1->Text.Length()==0) {HexFlag=false;return;}
      if((*(E1->Text.AnsiLastChar())!='-')&&(*(E1->Text.AnsiLastChar())!='x')){HexFlag=false;return;}
    }
    if(Key=='-')
    {
      if(E1->Text.Length()==0) return;
      if(*(E1->Text.AnsiLastChar())==' ') return;
    }
    if(((Key=='X')||(Key=='x'))&&(E1->Text.Length()!=0))
    { Key='x';
      if(*(E1->Text.AnsiLastChar())=='0') if(E1->Text.Length()==1) {HexFlag=true;return;}
      if(*(E1->Text.AnsiLastChar())=='0') if(E1->Text.SubString(E1->Text.Length()-1,1)==' '){HexFlag=true; return;}
    }
    Key=0;
}
//---------------------------------------------------------------------------


void __fastcall TF1::E1MouseMove(TObject *Sender, TShiftState Shift, int X,
      int Y)
{
    E1->Hint=E1->Text;
}
//---------------------------------------------------------------------------

void __fastcall TF1::E2KeyPress(TObject *Sender, char &Key)
{
    if(RG1->ItemIndex==1) return;
    if((Key>='0')&&(Key<='9')) return;
    if((Key==8)||(Key==' ')) return;
    if((Key>='A')&&(Key<='F')) return;
    if((Key>='a')&&(Key<='f')) {Key=Key-0x20;return;}
    if(Key==13) BB3Click(Sender);
    Key=0;
}
//---------------------------------------------------------------------------

void __fastcall TF1::E3KeyPress(TObject *Sender, char &Key)
{
    if((Key>='0')&&(Key<='9'))  return;
    if((Key==8)||(Key==' ')) return;
    Key=0;
}
//---------------------------------------------------------------------------
bool TF1::PortIni()
{
    if(Comm->Open(PORT[F1->CB1->ItemIndex+1].Value.c_str(),
               BAUD[F1->CB2->ItemIndex+1].Value.ToInt(),
               BYTEs[F1->CB3->ItemIndex+1].Value.ToInt(),
               Parity,StopBit)==(DWORD)-1)
    {
        AnsiString temp="  打开 "+PORT[F1->CB1->ItemIndex+1].Value+" 端口错误! ";
        ShowMessage(temp);
        return false;
    }
    if(PORT[F1->CB1->ItemIndex+1].Value.SubString(1,3)=="COM")
    {
        F1->CB2->Enabled=true;
        F1->CB3->Enabled=true;
    }
    else
    {
        F1->CB2->Enabled=false;
        F1->CB3->Enabled=false;
    }
    if(TxBuf!=NULL) delete [] TxBuf;
    TxBuf=NULL;
    if(Comm->Read((char*)&RxChar,1,FALSE)==(DWORD)-1) Comm->ShowLastError();
    return true;
}
//---------------------------------------------------------------------------

void __fastcall TF1::CB1Change(TObject *Sender)
{
    portopen=PortIni();
}
//---------------------------------------------------------------------------

void __fastcall TF1::FormClose(TObject *Sender, TCloseAction &Action)
{
   Comm->Close();
   delete Comm;
   if(!cfgflag)
    {
        M1->Visible=false;
        M1->Clear();
        SaveWindow();
        SavePort();
        SaveTool();
        SaveCMD();
        SaveIdentify();
        M1->Lines->Add("[END]");
        M1->Lines->SaveToFile("Project1.ini");
    }
    delete pic;
}
//---------------------------------------------------------------------------



void __fastcall TF1::N2Click(TObject *Sender)
{
    N2->Checked=true;
    N3->Checked=false;
}
//---------------------------------------------------------------------------

void __fastcall TF1::N3Click(TObject *Sender)
{
    N3->Checked=true;
    N2->Checked=false;
}
//---------------------------------------------------------------------------
void TF1::CharToHex(char ch,char *buf)
{
    char temp1,temp2;
    temp2=(ch&0x0f)+0x30;
    temp1=((ch>>4)&0x0f)+0x30;
    if(temp1>0x39) temp1+=7;
    if(temp2>0x39) temp2+=7;
    buf[0]=temp1;
    buf[1]=temp2;
    buf[2]=' ';
}
//---------------------------------------------------------------------------

void __fastcall TF1::BB3Click(TObject *Sender)
{
    int count;
    if(TxBuf!=NULL) return;
    if(!portopen) {ShowMessage(" 端口未打开 ! "); return;}
    L9->Caption="";
    if(RG1->ItemIndex)
    {
        count=E2->Text.Length();
        TxBuf=new char[count+1];
        if(TxBuf==NULL) {ShowMessage("   分配内存错误!  ");return;}
        StrPCopy(TxBuf,E2->Text);
    }
    else
    {
      AnsiString temp="",temp1="";
      temp1=E2->Text.TrimLeft()+" ";
      temp1=temp1.UpperCase();
      while(temp1.Length()!=0)
      {
         temp+=temp1.SubString(1,(temp1.Pos(" ")-1)&0xfffffffe);
         temp1=temp1.Delete(1,temp1.Pos(" ")-1);
         temp1=temp1.TrimLeft();
      }
      for(int i=0;i<temp.Length();i++)
      {
        if((temp.SubString(i+1,1)<"0")||(temp.SubString(i+1,1)>"F")||((temp.SubString(i+1,1)>"9")&&((temp.SubString(i+1,1)<"A"))))
        {
            if(Sender==T2) {L9->Caption="敬告:有非十六进制字符!!";ChB1->Checked=false;return;}
            ShowMessage("  有非十六进制字符! ");
            return;
        }
      }
      count=temp.Length();
      TxBuf=new char[count+1];
      if(TxBuf==NULL) {ShowMessage("   分配内存错误!  ");return;}
      StrPCopy(TxBuf,temp);
      count=count/2;
      unsigned short sum = 0;
      for(int i=0;i<count;i++)
      {
         TxBuf[i]=HexToChar(&TxBuf[i*2]);
         sum += TxBuf[i] ;
      }
      TxBuf[count]=0;
      if((count)&&(CBSUM->Checked))
      {
         TxBuf[count++] = sum;
         TxBuf[count++] = sum >> 8;
      }
    }
    if(Comm->Write(TxBuf,count,FALSE)==(DWORD)-1)
    {
        ShowMessage(" 发送错误 !  ");
        if(Sender==T2) {ChB1->Checked=false; ChB1Click(Sender);}
        delete [] TxBuf;
        TxBuf=NULL;
    }
}
//---------------------------------------------------------------------------

void __fastcall TF1::N1Click(TObject *Sender)
{
    M1->Clear();
}
//---------------------------------------------------------------------------

void __fastcall TF1::N7Click(TObject *Sender)
{
    M1->SelectAll();
}
//---------------------------------------------------------------------------

void __fastcall TF1::M1KeyPress(TObject *Sender, char &Key)
{
    if(Key==8) return;
    Key=0;
}
//---------------------------------------------------------------------------

void __fastcall TF1::N4Click(TObject *Sender)
{
    if(!StopDisplay)
    {
        StopDisplay=true;
        N4->Caption="开始显示(&D)";
    }
    else
    {
        StopDisplay=false;
        N4->Caption="停止显示(&D)";
    }
}
//---------------------------------------------------------------------------


void __fastcall TF1::PM1Popup(TObject *Sender)
{
    if(M1->SelLength) N6->Enabled=true; else N6->Enabled=false;
    if(M1->Text.Length()){N1->Enabled=true;N7->Enabled=true;}else{N1->Enabled=false;N7->Enabled=false;}
}
//---------------------------------------------------------------------------

void __fastcall TF1::N6Click(TObject *Sender)
{
    M1->CopyToClipboard();
}
//---------------------------------------------------------------------------
char TF1::HexToChar(char *buf)
{
    char temp1,temp2;
    if((buf[0]>='0')&&(buf[0]<='9')) temp1=buf[0]-0x30;else temp1=buf[0]-0x37;
    if((buf[1]>='0')&&(buf[1]<='9')) temp2=buf[1]-0x30;else temp2=buf[1]-0x37;
    return (temp1<<4)|(temp2);
}
//---------------------------------------------------------------------------


void __fastcall TF1::E3Change(TObject *Sender)
{   AnsiString temp; int k;
    temp=E3->Text;
    ParaFilter(&temp,&k,&k);
    temp=temp.Trim();
    T2->Interval=temp.ToInt();
}
//---------------------------------------------------------------------------

void __fastcall TF1::ChB1Click(TObject *Sender)
{
    if(ChB1->Checked) T2->Enabled=true; else T2->Enabled=false;
}
//---------------------------------------------------------------------------
void  TF1::LoadPort()
{
    int i=0,j=1;
    PORT[0].Description="0";PORT[0].Value="0";
    while((M1->Lines->Strings[i++]!="[PORT]")&&(i<M1->Lines->Count));
    while((i<M1->Lines->Count-1)&&(M1->Lines->Strings[i].SubString(1,1)!="[")&&(j<PortMax))
    {
        PORT[j].Description=M1->Lines->Strings[i].SubString(1,M1->Lines->Strings[i].Pos("=")-1);
        PORT[j].Value=M1->Lines->Strings[i++].SubString(M1->Lines->Strings[i].Pos("=")+1,M1->Lines->Strings[i].Length()-M1->Lines->Strings[i].Pos("="));
        if(PORT[j].Description=="DEFAULT") PORT[0].Description=PORT[j].Value; else  j++;
        PORT[0].Value=IntToStr(j);
    }
    i=0;j=1;
    BAUD[0].Description="0";BAUD[0].Value="0";
    while((M1->Lines->Strings[i++]!="[BAUD]")&&(i<M1->Lines->Count));
    while((i<(M1->Lines->Count-1))&&(M1->Lines->Strings[i].SubString(1,1)!="[")&&(j<BaudMax))
    {
        BAUD[j].Description=M1->Lines->Strings[i].SubString(1,M1->Lines->Strings[i].Pos("=")-1);
        BAUD[j].Value=M1->Lines->Strings[i++].SubString(M1->Lines->Strings[i].Pos("=")+1,M1->Lines->Strings[i].Length()-M1->Lines->Strings[i].Pos("="));
        if(BAUD[j].Description=="DEFAULT") BAUD[0].Description=BAUD[j].Value; else  j++;
        BAUD[0].Value=IntToStr(j);
    }
    i=0;j=1;
    BYTEs[0].Description="0";BYTEs[0].Value="0";
    while((M1->Lines->Strings[i++]!="[BYTE]")&&(i<M1->Lines->Count));
    while((i<M1->Lines->Count-1)&&(M1->Lines->Strings[i].SubString(1,1)!="[")&&(j<ByteMax))
    {
        BYTEs[j].Description=M1->Lines->Strings[i].SubString(1,M1->Lines->Strings[i].Pos("=")-1);
        BYTEs[j].Value=M1->Lines->Strings[i++].SubString(M1->Lines->Strings[i].Pos("=")+1,M1->Lines->Strings[i].Length()-M1->Lines->Strings[i].Pos("="));
        if(BYTEs[j].Description=="DEFAULT") BYTEs[0].Description=BYTEs[j].Value; else  j++;
        BYTEs[0].Value=IntToStr(j);
    }
    i=0; Parity = 0;
    while((M1->Lines->Strings[i++]!="[PARITY]")&&(i<M1->Lines->Count));
    while((i<M1->Lines->Count-1)&&(M1->Lines->Strings[i].SubString(1,1)!="["))
    {
        AnsiString tmp;
        tmp = M1->Lines->Strings[i].SubString(1,M1->Lines->Strings[i].Pos("=")-1);
        if(tmp == "PARITY")
        {
            tmp=M1->Lines->Strings[i++].SubString(M1->Lines->Strings[i].Pos("=")+1,M1->Lines->Strings[i].Length()-M1->Lines->Strings[i].Pos("="));
            Parity = StrToInt(tmp);
        }

⌨️ 快捷键说明

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