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

📄 unit1.~cpp

📁 AVRUSBIR红外遥控器信号波形显示器
💻 ~CPP
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "Unit2.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
 usbasp_open();
// Chart1->BottomAxis->Automatic  =  false;
}
//---------------------------------------------------------------------------
__fastcall TForm1::~TForm1()
{
 usbasp_close();
}
//----------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
 Close();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
 Timer1->Enabled=true;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)
{
 Timer1->Enabled=false;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
//判断MCU是否繁忙
unsigned char send[4];
unsigned char buffer[244];
unsigned char count;
unsigned char outdata;
unsigned int iirdata[122],temp;
int i;
bool diff;
buffer[0]=0xff;
usbasp_transmit(USB_ENDPOINT_IN,getstata,send,buffer,1);
if(buffer[0]==0)//不忙,接着需要读取捕捉边沿个数
 {
   Timer1->Enabled=false;
   usbasp_transmit(USB_ENDPOINT_IN,getcount,send,buffer,1);
   count=buffer[0];
   if(count>0) //读取IR数据,启动(允许MCU)下一次IR输入,然后处理数据
    {
//读取已经获得的IR数据
     usbasp_transmit(USB_ENDPOINT_IN,getirdata,send,buffer,count*2);
//启动MCU下一次IR输入
     usbasp_transmit(USB_ENDPOINT_OUT,next_run,send,&outdata,0);
//数据处理
     for(i=0;i<count;i++)
      {
        temp=(unsigned int)(buffer[2*i]); //高8位
        temp=temp<<8;
        temp=temp+(unsigned int)(buffer[2*i+1]);//低8位
        iirdata[i]=temp;
      }
//显示数据 ,比较这次接受的数据是否与上次相同,如果相同则不刷新显示数据,否则显示新的数据
     diff=false;
     for(i=0;i<count;i++)
      {
        if(igirdata[i]>iirdata[i])
         temp=igirdata[i]-iirdata[i];
        else
         temp=iirdata[i]-igirdata[i];
        if(temp>20) //如果两个数据相差200×5.3US约等0.1MS则表示两个数据不同
         {
          diff=true;
          break;
         }
      }
//如果数据不同,则需要刷新显示数据以及更新数据,方便下一次比较
     if(diff)
      {
        AnsiString s;
        Series1->Clear();
        Series1->AddXY(-1.0,1.0,"-1ms",clRed);
        Series1->AddXY(0.0,1.0,"0ms",clRed);
        for(i=0;i<count;i++)
         {
           igirdata[i]=iirdata[i];
           s=FloatToStrF((iirdata[i]*5.333333)/1000,ffFixed,7,3);
           s=s+"ms";
           if(i%2==0)
           {
            Series1->AddXY((iirdata[i]*5.333333)/1000-0.0001,1.0,s,clRed);
            Series1->AddXY((iirdata[i]*5.333333)/1000,0.1,' ',clRed);
           }
           else
            {
             Series1->AddXY((iirdata[i]*5.333333)/1000-0.0001,0.1,s,clRed);
             Series1->AddXY((iirdata[i]*5.333333)/1000,1.0,' ',clRed);
            }
         }
      }
    }
 Timer1->Enabled=true;
 }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn3Click(TObject *Sender)
{
 Chart1->BottomAxis->Automatic=false;
 Chart1->LeftAxis->Maximum=1.2;
 Chart1->LeftAxis->Minimum=0.0;
 Chart1->BottomAxis->Minimum=Series1->XValues->First();
 Chart1->BottomAxis->Maximum=Series1->XValues->Last();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
 Chart1->BottomAxis->Automatic=false;
 Chart1->LeftAxis->Maximum=1.2;
 Chart1->LeftAxis->Minimum=0.0;
 if((Chart1->BottomAxis->Maximum-Chart1->BottomAxis->Minimum)>5.0)
  {
   if(Chart1->BottomAxis->Maximum>5.0)
     Chart1->BottomAxis->Maximum=Chart1->BottomAxis->Maximum-5.0;
  }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{
 Chart1->BottomAxis->Automatic=false;
 Chart1->LeftAxis->Maximum=1.2;
 Chart1->LeftAxis->Minimum=0.0;
 if((Series1->XValues->Last()-Chart1->BottomAxis->Maximum)>5.0)
  {
   Chart1->BottomAxis->Maximum=Chart1->BottomAxis->Maximum+5.0;
  }
 else
  Chart1->BottomAxis->Maximum=Series1->XValues->Last();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn4Click(TObject *Sender)
{
 Chart1->BottomAxis->Automatic=false;
 Chart1->LeftAxis->Maximum=1.2;
 Chart1->LeftAxis->Minimum=0.0;
 if((Chart1->BottomAxis->Minimum - Series1->XValues->First())>5.0)
  {
    Chart1->BottomAxis->Minimum=Chart1->BottomAxis->Minimum-5.0;
    Chart1->BottomAxis->Maximum=Chart1->BottomAxis->Maximum-5.0;
  }
 else
  {
   BitBtn3Click(Sender);
  }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn5Click(TObject *Sender)
{
 Chart1->BottomAxis->Automatic=false;
 Chart1->LeftAxis->Maximum=1.2;
 Chart1->LeftAxis->Minimum=0.0;
 if((Series1->XValues->Last() - Chart1->BottomAxis->Maximum)>5.0)
  {
    Chart1->BottomAxis->Maximum=Chart1->BottomAxis->Maximum+5.0;
    Chart1->BottomAxis->Minimum=Chart1->BottomAxis->Minimum+5.0;
  }
 else
  {
   BitBtn3Click(Sender);
  }
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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