#include<iom128v.h>
#include"LCD1602.h"
#define uchar unsigned char
#define uint unsigned int
#define REF 5.16 //参考电压
void ADC0INIT(void)
{
ADMUX=0x40;
ADCSRA=0x87; //使能ADC,单次转换,预分频为128
ADCSRA|=(1<<ADSC); //启动首次转换
while(!(ADCSRA&(1<<ADIF))); //等待转结束循环
ADCSRA|=(1<<ADIF); //清除ADIF位
}
int get_ADCdata(void)
{
int a,b;
a=b=0;
b=ADCL; //读高位后数据更新
a=ADCH;
a=(a<<8);
a=(a|b);
return a;
}
float get_ave(int a[8])
{
float v;
unsigned char i;
float sum=0;
for(i=1;i<7;i++)
{
sum=sum+a[i];
}
v=sum/6;
return v;
}
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 main(void)
{
int a;
uchar s[6];
uchar i;
init_1602();
while(1)
{
a=get_ADC0data()*REF/1.024;
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';
write_com(0x80);
for(i=0;i<6;i++)
{
write_dat(s[i]);
}
}
}
- 1
- 2
前往页