 |
| 昵称: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(); } } |