我使用3路ADC采集,将数据显示在12864上,但下面这段代码在执行时使用1通道ADC会影响2通道 2通道会影响3通道 3通道会影响1通道,。,不知道问题在哪
#include <iom16v.h>
#include <macros.h>
#define uchar unsigned char
#define uint unsigned int
#include "LCD12864.c"
void delay(uint MS)
{
uint m,n;
for( m=0;m<MS;m++)
for(n=0;n<500;n++);
}
uint mega16_ad(uchar adx)
{
uint addata;
DDRA&=~BIT(adx); //PA1为输入状态
PORTA&=~BIT(adx); //PA1为高阻态输入
ADMUX=0X40|adx; //AVCC为基准电,AD1为输入通道 01000001
ADCSRA=0X80; //10000000
ADCSRA|=BIT(ADSC);
while(!(ADCSRA&(BIT(ADIF))));
ADCSRA|=BIT(ADIF);
addata=ADCL;
addata=addata+ADCH*256;
return addata;
}
void main()
{
uint ada[3];
uchar cnt,i,m;
uchar a[3][5];
DDRD|=BIT(4)|BIT(5)|BIT(6);//设置PD4、5、6为输出
PORTD&=~BIT(6);//液晶使能拉低
InitLcd12864();
while(1)
{
for(m=0;m<3;m++)
{
switch(m)
{
case 0:
ada[0]=mega16_ad(0);
delay(10);
break;
case 1:
ada[1]=mega16_ad(1);
delay(10);
break;
case 2:
ada[2]=mega16_ad(3);
delay(10);
break;
}
for(i=0;i<4;i++)
{
a[m][3-i]=(ada[m]%10+0x30);
ada[m]=ada[m]/10;
}
a[m][4]='\0';
}
LcdShowStr(0, 0, a[0]);
LcdShowStr(0, 1, a[1]);
LcdShowStr(0, 2, a[2]);
}
} |