📄 unit1.~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 + -