原创 ad操作

2008-11-13 22:18 1992 8 8 分类: MCU/ 嵌入式


以下程序是通过cvavr生成,然后加入显示和取数部分。
cvavr可以选择分频,参考电源,是否中断,采样方式。
#include <mega16.h>


#include <delay.h>


#define ADC_VREF_TYPE 0x00
flash int table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,


0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; 
  int i,ad[4];
  long ada;
 


// Read the AD conversion result  这是cvavr自动生成的采样函数,输入adc口就可以了。
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);  // 通过读中断标志位,看采样是否结束。
ADCSRA|=0x10;   //写1清零
return ADCW;   // 这个adcw,在头文件中有定义,是个16位的寄存器,就是高位+低位。这个返回值就是adc寄


存器的值。


}
 


  
void show(char j,char k)  // 数码管显示程序
{
    DDRA|=1<<(3);
 DDRA|=1<<(4);
 DDRB=0XFF;    
    PORTA|=1<<(3);
 PORTB=table[j];
 PORTA&=~(1<<(3));
 
 PORTB=0XFF;
 PORTB&=~(1<<(k));
 PORTA|=1<<(4);
 PORTA&=~1<<(4);
  delay_ms(1);
}


 


void main(void)
{


// ADC initialization
// ADC Clock frequency: 1000.000 kHz
// ADC Voltage Reference: AREF pin
// ADC Auto Trigger Source: Free Running
ADMUX=ADC_VREF_TYPE & 0xff;   
ADCSRA=0xA3;  //控制寄存器的初始化
SFIOR&=0x1F;



 while(1)
   {
      ada="read"_adc(0);//
   for(i=0;i<4;i++)  //变成4位 ,这个模块可以记忆一下,以后用。
   {
     ad[3-i]=ada%10;
  ada=ada/10;
   }
  
   for(i=0;i<4;i++)
   {
      show(ad,i);
     delay_ms(2);      
        DDRA|=1<<(3);  //这几句其实用不到了
 DDRA|=1<<(4);
 DDRB=0XFF;
   }
   }


 



 
PARTNER CONTENT

文章评论0条评论)

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