|
程序:
//******ADC初始化********//
void ADC0INIT(void)
{
ADMUX=0xC0; //片内2.56v基准压,结果右对齐,通道为ADC0
ADCSRA=0x83; //使能ADC,单次转换,预分频为8
ADCSRA|=(1<
while(!(ADCSRA&(1<
ADCSRA|=(1<
}
//*********获取ADC的采样值*********//
int get_ADCdata(void)
{
int a,b;
a=b=0;
b=ADCL; //读高位后数据更新
a=ADCH; //再读取ADCH数据
a=(a<<8); //右对齐,左移八位
a=(a|b); //组成10位二进制数据
return a;
}
//*********去头去尾,获取平均值*********//
float get_ave(int a[8])
{
float v;
unsigned char i;
float sum=0;
for(i=1;i<7;i++) //从第2次到第6次数据
{
sum=sum+a[i];
}
v=sum/6;
return v;
}
//********获取ADC0采样8次的平均值**********//
float get_ADC0data(void)
{
unsigned char i=0;
float v;
int buf[8]={0};
for(i=0;i<8;i++)
{
ADC0INIT();
buf[i]=get_ADCdata();
}
v=get_ave(buf);
return v;
}
//*********将数据拆分送显示*******//
void calculate_AD()
{
int a,b;
uchar s[6],k[6];
uchar i,j;
a=get_ADC0data()*REF*2/1024*1000;
b=get_ADC0data();
s[0]=a/1000+'0';
s[1]='.';
s[2]=a%1000/100+'0';
s[3]=a%100/10+'0';
s[4]=a%10+'0';
s[5]='V';
k[0]='D';
k[1]=':';
k[2]=b/1000+'0';
k[3]=b%1000/100+'0';
k[4]=b%100/10+'0';
k[5]=b%10+'0';
write_com(0xC0);
for(i=0;i<6;i++)
{
write_dat(s[i]);
}
write_com(0xC8);
for(j=0;j<6;j++)
{
write_dat(k[j]);
}
}
|
|