这个实验利用avr的adc读取外部电压的值,实现数据采集功能.详情见附件.
平台:FDRAVR开发板
代码:
#include <mega16.h>
#include <delay.h>
#define ADC_VREF_TYPE 0xC0 //2.5V 内部参考电压
// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX="adc"_input | (ADC_VREF_TYPE & 0xff);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;//十位数据
}
//num,要显示的数据(0~9);pos,要显示的位置(从右到左)
void display(uchar num,uchar pos)
{
DDRA="0XFF";//定义PORTA口输出
PORTA="0XFF";//输出高电平
switch(pos)
{
case 3:PORTA=0X01;break;
case 2:PORTA=0X02;break;
case 1:PORTA=0X04;break;
case 0:PORTA=0X08;break;
default:PORTA=0X00;
}
num<<=4;//取数字,送CD4511
PORTA|=num;
}
// Declare your global variables here
void main(void)
{
uint adcin="0";
uchar t;
// ADC initialization
// ADC Clock frequency: 250.000 kHz
// ADC Voltage Reference: Int., cap. on AREF
// ADC Auto Trigger Source: None
ADMUX="ADC"_VREF_TYPE & 0xff;
ADCSRA="0x84";
while (1)
{
display(adcin%10,0);delay_ms(5);
display((adcin/10)%10,1);delay_ms(5);
display((adcin/100)%10,2);delay_ms(5);
display((adcin/1000),3);delay_ms(5);
if(t==50){adcin=read_adc(0);t=0;} //读AD0,十位模式
t++;
};
}
文章评论(0条评论)
登录后参与讨论