📄 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)
{
channels=2; //默认通道2
dataleng=8; //默认8位
vref=2; //默认片内2.56V
usbasp_open();
}
//---------------------------------------------------------------------------
__fastcall TForm1::~TForm1()
{
usbasp_close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
unsigned char send[4];
unsigned char buffer;
if(Timer1->Enabled==false)
{
send[0]=channels;
usbasp_transmit(USB_ENDPOINT_OUT,fID_channels,send,&buffer,0);
send[0]=dataleng;
usbasp_transmit(USB_ENDPOINT_OUT,fIDdatabit,send,&buffer,0);
send[0]=vref;
usbasp_transmit(USB_ENDPOINT_OUT,fID_Vref,send,&buffer,0);
usbasp_transmit(USB_ENDPOINT_OUT,fIDstart,send,&buffer,0);
}
Timer1->Enabled=true;
Button1->Enabled=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ComboBox1Change(TObject *Sender)
{
int i;
i=ComboBox1->ItemIndex;
if(i==8 || i==9)
i=6+i;
channels=(unsigned char)i;
Button2Click(Sender); //停止
Button1Click(Sender); //重新开始
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ComboBox2Change(TObject *Sender)
{
int i;
i=ComboBox2->ItemIndex;
vref=(unsigned char)i;
if(vref==0)
ShowMessage("现在没有完成设置外部参考电压源功能");
Button2Click(Sender); //停止
Button1Click(Sender); //重新开始
}
//---------------------------------------------------------------------------
//设置ADC数据长度
void __fastcall TForm1::RadioButton1Click(TObject *Sender)
{
if(RadioButton1->Checked)
dataleng=8;
if(RadioButton2->Checked)
dataleng=10;
Button2Click(Sender); //停止
Button1Click(Sender); //重新开始
}
//---------------------------------------------------------------------------
//设置ADC数据长度
void __fastcall TForm1::RadioButton2Click(TObject *Sender)
{
RadioButton1Click(Sender);
}
//-------------------------------------------------------------------------
//停止ADC
void __fastcall TForm1::Button2Click(TObject *Sender)
{
unsigned char send[4];
unsigned char buffer;
Timer1->Enabled=false;
Button1->Enabled=true;
usbasp_transmit(USB_ENDPOINT_OUT,fIDstop,send,&buffer,0);
}
//---------------------------------------------------------------------------
//先获得传输字节数的大小,然后读取ADC转换的结果
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
int i;
unsigned char adccount;
unsigned char send[4];
unsigned char buffer[254];
for(i=0;i<254;i++)
buffer[i]=0;
usbasp_transmit(USB_ENDPOINT_IN,fID_getcount,send,buffer,1);
adccount=buffer[0]; //获取ADC已经转换数据的个数
if(adccount>0)
{
if(dataleng==8)
usbasp_transmit(USB_ENDPOINT_IN,fID_read,send,buffer,adccount);
if(dataleng==10)
usbasp_transmit(USB_ENDPOINT_IN,fID_read,send,buffer,2*adccount);
display(buffer,adccount);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::display(unsigned char *buffer,unsigned char leng)
{
double adc;
unsigned int temp;
unsigned long int j;
unsigned char i;
j=0;
if(dataleng==8) //8 bit
{
for(i=0;i<leng;i++)
{
j=j+buffer[i];
}
j=j/leng;
}
if(dataleng==10) //10 bit
{
for(i=0;i<leng;i++)
{
temp=buffer[2*i]; //高8位
temp=temp & 0x3;
temp=temp<<8;
temp=temp+buffer[2*i+1]; //低八位
j=j+temp;
}
j=j/leng;
}
switch(vref)
{
case 0: break; //现在没有处理
case 1: if(dataleng==8) //片内AVCC参考电压源
adc=(j*4.65)/256; //这个4.65是根据电路上测量获得
if(dataleng==10)
adc=(j*4.65)/1024;
break;
case 2: if(dataleng==8) //片内2.56V参考电压源
adc=(j*2.56)/256;
if(dataleng==10)
adc=(j*2.56)/1024;
break;
default: break;
}
AnsiString playstr;
playstr=FloatToStr(adc);
if(playstr.Length()>9)
playstr=playstr.SubString(1,9);
playstr+='V';
Label1->Caption=playstr;
}
/////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -