原创 avr单片机 ADC采集实验 实验(八)

2008-5-12 12:56 5355 9 9 分类: MCU/ 嵌入式

点击下载


这个实验利用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++;
    };
}

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
9
关闭 站长推荐上一条 /3 下一条