智能车制作

标题: AD转换加显示代码问题 [打印本页]

作者: gracesky1194    时间: 2011-2-14 14:19
标题: AD转换加显示代码问题
本人用XS128做电压表,就是想看看AD采样的数据对不对,可是显示的结果就是不对,只能正确的显示0.000.其他的电压值就不对了,只要接上电压,就显示一个代码。任何电压都一样,恳请高手解答:、

//前面的显示程序没有问题,我就不发了,很简单的查表。

下面的是主要的程序:

void ADCInit()
{
  ATD0CTL2=0xC0;  //AD模块上电, 快速清零, 无等待模式, 禁止外部触发, 中断禁止
  ATD0CTL3=0x22; // 每个序列4次转换,转换完成后睡眠
  ATD0CTL4=0x45; //0100.0101 10位, 8个AD时钟,12div
  ATD0CTL5=0xa0; //右对齐无符号,单通道采样,通道0
  ATD0DIEN=0x00;
}

void main(void)
{  /* put your own code here */
   
ADCInit();   //AD初始化   
  
  DDRA = 0xFF;   //端口定义为out
  DDRB = 0xFF;   //端口定义为OUT
  PORTA  = 0xFF;   //端口拉1, on  LED
  PORTB  = 0xFF;   //端口拉1,off LED
  
  /* put your own code here */
  EnableInterrupts;
  for(;;)
  {   ATD0CTL5=0xA0;  //因为有  ATD0CTL3=0x22;转换完成休眠,故每次要重新启动
           
      while(!ATD0STAT0_SCF);  //等待转换结束
      
      data=(ATD0DR0+ATD0DR1+ATD0DR2+ATD0DR3)/4 ;//一个通道采4次求平均。
  
      t=((data)/1023)*5000;  //我觉得关键的就是这里,能不能这样换算?我用的是10位的AD,满量程1023.
      dispbuf[0]=t%10; // 个位
      dispbuf[1]=t/10%10;//十位
      dispbuf[2]=t/100%10;//百位
      dispbuf[3]=t/1000;//千位
      Display();
  
  }
}




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2