数码管显示ADC采样的数值

 

芯片:atmega16

软件:Atmel studio 7

 

------------------------------------------------------------------------------------------------------------------

数码管显示相关函数

unsigned char const Number[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,};//显示的数值

//延迟函数

void tim(uint ms)

{

uint i,j;

for(i=0;i

{

for(j=0;j<1141;j++);

}

}

//数码管显示函数   

// 硬件上用了2个573锁存,PA6控制573-1,PA7控制573-2

void Number_Show(unsigned int Num)

{

unsigned int Thousand,Hundred,Ten,One;

Thousand=Num/1000; //取千位

Hundred=Num00/100; //取百位

Ten=Num000/10; //取十位

One=Num; //取个位

//显示百位

PORTB=Number[Hundred]; //送模码

PORTA|=(1<

PORTA&=~(1<

PORTB=~(1<

PORTA|=(1<

PORTA&=~(1<

tim(10); //稍微延迟

//以下原理一样

//显示十位

PORTB=Number[Ten]; //送模码

PORTA|=(1<

PORTA&=~(1<

PORTB=~(1<

PORTA|=(1<

PORTA&=~(1<

tim(10); //稍微延迟

//显示个位

PORTB=Number[One]; //送模码

PORTA|=(1<

PORTA&=~(1<

PORTB=~(1<

PORTA|=(1<

PORTA&=~(1<

tim(10); //稍微延迟

}

//IO 初始化函数

void LED7_Init()

{

DDRA|=(1<

DDRA|=(1<

DDRB|=0xff; //PB 状态为输出

}

-----------------------------------------------------------------------------------------------------------

//ADC相关函数

void ADCIO_init()//ADCIO初始化

{

DDRA &= ~(1<<0);//输入状态

PORTA &= ~(1<<0);//高阻态输入

}

void ADC_init()//ADC设置

{

ADCSRA |= (1<

SFIOR |= 0xC0;//设为定时器1计数溢出触发        

ADMUX = 0x02;

}

 

ISR (ADC_vect)//ADC中断函数

{

         unsigned int Result;      

         Result = ADCL;

         Result = Result+(ADCH<<8);//取得ADC采样值

 //接下来可以把Result放入一个数组,比如放入一个adt[8],代表可以放8次取得的值,然后求平均

         //也可以把值直接赋值给一个变量,比如就是赋值给Result

}

------------------------------------------------------------------------------------------------------------

void main()

{

         //一些初始化程序

         //adc的初始化

         //定时器1的初始化

         SREG |=(1<<7);//开全局中断

         while(1)

         {

             ADC的值放到数码管显示;

          }

}

---------------------------------------------------------------------------------------------------------------

定时器1的中断

ISR (TIMER1_OVF_vect)

{

TCNT1H = (unsigned char)(tmp>>8);

TCNT1L = (unsigned char)tmp;

         ADC的值放到数码管显示;//这里不放,就不能正确显示

}

--------------------------------------------------------------------------------------------------------------

 

该芯片ADC的第一次采样转化,数值应当忽略,可以在程序中加入适当的延时;

 

注意定时器中断时间要配合ADC采样转化的时间(查手册);

 

比如ADC是10位,也就是1024了,基准5V,Vin是硬件上5V电压被电阻分配后的值

1024/5*Vin=ADC

有的时候还需要在软件中设置相关计算,保证显示数值的正确;

你可能感兴趣的:(新浪博客迁移)