title
收藏本站
联系站长
关于本站
首页 信息发布 产品宣传 论坛交流 学习文章 技术人生 项目源码 技术资料 人才收录
 今天是: 2010年9月7日 星期 二
欢迎光临!单片机群号:25930265 71062262 21829895 64584393 26583231(只限加一群)  
 当前位置: 欢迎话题互动专区 --> 技术交流版 --> AVR专区
 关于M8的多路ADC同时采集  
1111
昵称:tamson
级别:
贡献值:33832
经验值:13390
给他留言
来自:广东-深圳
//###################################################### 
//#日期:06/11/15 
//#编写:陈志华 
//#功能:ADC多路采集 
//#编译:WINAVR20050214(2.0.5.48) 
//#芯片:ATmega8 
//#时钟:内睷 RC 8M 
//#硬件:PB0到PB5数码管位选 
//#      PD接数码管 

//###################################################### 

#include <avr/io.h>  
#include <avr/delay.h>  
#include <avr/signal.h> 
#include <avr/interrupt.h> 
#define        uchar        unsigned        char 
#define uint        unsigned        int 
#define        ulong        unsigned        long 

uchar   number1,number2,number3,number4,number5,number6; 

uint  voldata0,voldata1; 


unsigned char leddata[]={  
  
                0x3F,  //"0" 
                0x06,  //"1" 
                0x5B,  //"2" 
                0x4F,  //"3" 
                0x66,  //"4" 
                0x6D,  //"5" 
                0x7D,  //"6" 
                0x07,  //"7" 
                0x7F,  //"8" 
                0x6F,  //"9" 
                                           }; 

void  disp(void)///////////////////////显示函数 

  
  


number1=voldata0/100%10; 
number2=voldata0/10%10; 
number3=voldata0%10; 

number4=voldata1/100%10; 
number5=voldata1/10%10; 
number6=voldata1%10; 

         
PORTB=~(1<<PB0); 
PORTD=leddata[number1]; 
_delay_ms(2); 

PORTB=~(1<<PB1); 
PORTD=leddata[number2]; 
_delay_ms(2); 

PORTB=~(1<<PB2); 
PORTD=leddata[number3]; 
_delay_ms(2); 

PORTB=~(1<<PB3); 
PORTD=leddata[number4]; 
_delay_ms(2); 

PORTB=~(1<<PB4); 
PORTD=leddata[number5]; 
_delay_ms(2); 

PORTB=~(1<<PB5); 
PORTD=leddata[number6]; 
_delay_ms(2); 








uint  ADC_convert(uchar channel) ////adc读函数,有一个 channel参与 
{  
        uchar  adccount;              /////定义ADC的累计次数 
        uint  adcdata=0;                          /////定义ADC的总数据值 
        uint  ADCdata;               /////定义ADC的平均值 
        uint   vol;                                         /////定义取样的平均电压 
        ADMUX=channel;                                ///将参与的值放到ADC选择寄存器,从而来选择不同的模式 
        for(adccount=0;adccount<4;adccount++)/////累计ADC转换4次,并且将ADC数据累加到adcdata里 
                { 
                        ADCSR|=(1<<ADSC);                         /////开ADC,进行单次转换 
                        _delay_ms(1);                                /////开ADC到读到准确数据件的延时 
                        adcdata+=ADC;                                //累加 
                        ADCSR|=(0<<ADSC);                         //关ADC 
                         
                } 
        ADCdata=adcdata/4;                                        //平均 
        vol=ADCdata*25.6/1024;                                //算滴平均电压 
        return(vol);                                                 //将平均电压返回 
}  




int main(void)  
{  

DDRB=0xFF; /////设置 
PORTB=0xFF;  
DDRD=0XFF; 
PORTD=0XFF; 
DDRC=0X00; 
PORTC=0X00; 

ADCSR|=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0); 
                                        /////单次转换,128分频  关中断 

    

while(1) 
{         
         
        voldata0=ADC_convert(0xc0); ///读通道0 
        voldata1=ADC_convert(0xc1); ///读通道1 
        disp(); 
                         

2008-11-03 14:43:28
资料 邮箱
登录之后才能发表新的讨论或者回复
本网站部分资料转自网上,如有侵权请来信告明,我们会尽快删除  | 网站地图
Copyright @ 2007-2010 深圳单片机交流网.版权所有
网站创办者:詹长亮,周发辉,李林盛
网站支持:zcl843@163.com QQ:380476830 13723787271詹长亮