˜Ë(bi¨¡o)î}: ADÞD(zhu¨£n)“QµÄCÕZ(y¨³)ÑÔ´ú´a [´òÓ¡±¾í“(y¨¨)]

×÷Õß: BIAOYE    •r(sh¨ª)ég: 2016-3-23 16:16
˜Ë(bi¨¡o)î}: ADÞD(zhu¨£n)“QµÄCÕZ(y¨³)ÑÔ´ú´a
/*¾ŽŒ‘(xi¨§)•r(sh¨ª)ég2016.2.9*/
#include <iom16v.h>
#include <macros.h>
#define uint unsigned int
#define uchar unsigned char
#define PC7_1 PORTC|=1<<7
#define PC7_0 PORTC&=~(1<<7)
#define PC6_1 PORTC|=1<<6
#define PC6_0 PORTC&=~(1<<6)

void m16_init()//†ÎƬ™C(j¨©)³õʼ»¯
{
DDRA=0x00;
PORTA=0x00;
DDRB=0xff;
PORTB=0x00;
DDRD=0xff;
PORTD=0x00;
DDRC=0xC0;
PORTC=0x00;
}

void delay(uint ms)        //ÑÓ•r(sh¨ª)0.25ms       
{
        uint i,j;
        for(i=0; i<ms; i++)
                for(j = 0; j < 250; j++);
}

//AD³õʼ»¯
void adc7_init()       
{                                       
ADMUX = 0x07;   //Íⲿ…¢¿¼ëŠÔ´,ÓÒŒ¦(du¨¬)ýRßx,“ñͨµÀ7
ADCSRA = 0x80;         //ʹÄÜ,ÞD(zhu¨£n)“QÆ÷2·ÖîlIE=0       
}       

/*  
uint16_t ADC_Convert(void)              // µÃµ½AD½Y(ji¨¦)¹û  
{  
    uint16_t temp1,temp2;  
    temp1=(uint16_t)ADCL;  
    temp2=(uint16_t)ADCH;  
    temp2=(temp2<<8)+temp1;  
    return(temp2);  
}  
*/   
uint ADC_Convert(void)   
{   
    uint i;   
    uint ret;   
    uint max_id, min_id, max_value, min_value;   

    ADMUX  = (1<<MUX0);               // Íⲿ…¢¿¼ëЉº£¬5ͨµÀ   
    ADCSRA = (1<<ADEN);               // ʹÄÜADC£¬†Î´ÎÞD(zhu¨£n)“Qģʽ   

    // ßBÀm(x¨´)ÞD(zhu¨£n)“Q8´Î   
    for(i=0;i<8;i++)   
    {   
        ADCSRA |= (1<<ADSC);          //é_(k¨¡i)ʼ   
        delay(100);   
        while(ADIF==1)   
        delay(100);   
        ret = ADCL;   
        ret |= (uint16_t)(ADCH<<8);   
        g_aAdValue[i] = ret;            //†Î´Î   
    }   
    ret = 0;   
    for(i=1;i<8;i++)   
        ret += g_aAdValue[i];   

    // ÕÒµ½×î´óºÍ×îСֵË÷Òý   
    ret /= 7;   
    max_id = min_id = 1;   
    max_value = min_value = 0;   
    for(i=1;i<8;i++)   
    {   
        if(g_aAdValue[i] > ret)   
        {   
            if(g_aAdValue[i] - ret > max_value)   
            {   
                max_value = g_aAdValue[i] - ret;   
                max_id = i;   
            }   
        }   
        else   
        {   
            if(ret - g_aAdValue[i] > min_value)   
            {   
                min_value = ret - g_aAdValue[i];   
                min_id = i;   
            }   
        }   
    }   

    // È¥µôµÚÒ»‚€(g¨¨)ºÍ×î´ó×îСֵºóµÄƽ¾ùÖµ   
    ret = 0;   
    for(i=1;i<8;i++)   
    {   
        if((i!=min_id) && (i!=max_id))   
            ret += g_aAdValue[i];   
    }   
    if(min_id != max_id)   
        ret /= 5;   
    else   
        ret /= 6;   

    ADCSRA = 0x00;                  // êP(gu¨¡n)é]ADC   

    return ret;   
}   

void Process(uint16_t i,uint8_t *p)   
{   
    p[0]=i/1000;   
    i=i%1000;   
    p[1]=i/100;   
    i=i%100;   
    p[2]=i/10;   
    i=i%10;   
    p[3]=i;   
}   

int main(void)   
{   
    uint16_t ret;   
    m16_init();
    adc7_init();//¾ÍÊÇß@À│סÁË  ²»ÍùψÌ(zh¨ª)ÐÐÁË
    while(1)   
    {   
        ret = ADC_Convert();   
        //i = (i*5.0/1024)*1000;    // ´ËÌŽ¸¡üc(di¨£n)Ò²,MCUé_(k¨¡i)Ö§¿É²»Ð¡£¡   
        ret *= 4.88;            // Ý”³öÔ­Öµ   
        Process(ret,Data);   
        Display(Data);   
    }   
    return 0;   
}






šgÓ­¹âÅR (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1