高手给个atmega16单片机的AD转换程序,转换的结果由数码管输出。

原理图也给一下。
用C语言编

#include <iom16v.h>

#include <macros.h>

#define  uchar unsigned char

#define  uint  unsigned int

#include "xianshi.c"

uint mega16_ad()

{

     uint addata;

  DDRA&=~BIT(PA0);

  PORTA&=~BIT(PA0);

  ADMUX=0;

  ADCSR=0X80;

  ADCSR|=BIT(ADSC);

  while(!(ADCSR&(BIT(ADIF))));

     addata=ADCL;

  addata=addata+ADCH*256;

  return addata;

}   

void main()

{

   uint ada,i,ad[4];

   while(1)

   {

      ada=mega16_ad();//999  0999

   for(i=0;i<4;i++)

   {

     ad[3-i]=ada%10;

  ada=ada/10;

   }

   

   for(i=0;i<4;i++)

   {

      show(ad[i],i);

   delay(2);       DDRA|=BIT(3);

 DDRA|=BIT(4);

 DDRB=0XFF;

   }

   }

}

=================================================================

<xianshi.c>

#pragma data:code 

const  table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,

             0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

void delay(uint ms)

{

        uint i,j;

 for(i=0;i<ms;i++)

    {

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

       }

}

void show(uchar j,uchar k)

{

    DDRA|=BIT(3);

 DDRA|=BIT(4);

 DDRB=0XFF;     

    PORTA|=BIT(3);

 PORTB=table[j];

 PORTA&=~BIT(3);

 

 PORTB=0XFF;

 PORTB&=~BIT(k);

 PORTA|=BIT(4);

 PORTA&=~BIT(4);

 delay(1);

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答