˜Ë(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