智能车制作

标题: AD转换 [打印本页]

作者: 179170821    时间: 2013-11-19 19:03
标题: AD转换
#include "derivative.h"
#include <stdio.h>
#include <string.h>
#include"OLED.h"   //液晶
int AD_wValue;//AD转换结果
void delay(int n) \
{
   int i,j;
   for(i=0;i<n;i++)
       for(j=0;j<2670;j++);
}
   
//-----时钟初始化程序--------//
void PLL_Init(void)      
{                    
  REFDV=1;           
  SYNR=2;
  while(!(CRGFLG&0x08));
  CLKSEL=0x80;
}
//--------------总线时钟=48/2=24MHz------------//
//-----ATD初始化程序--------//
void AD_Init(void)     
{
  ATD0CTL1=0x00; //00000000  选择AD0通道为外部触发,8 位精度,采样前不放电
  ATD0CTL2=0x40; //01000000  标志位自动清零,禁止外部触发, 禁止中断
  ATD0CTL3=0x88; //10001000  右对齐无符号,每次转换1 个序列, No FIFO, Freeze 模式下继续转
  ATD0CTL4=0x01; //00000001  采样时间为4 个AD 时钟周期,PRS=1,ATDClock=24/(2*(1+1))=6MHz
  ATD0CTL5=0x20; //00100000  特殊通道禁止,连续转换,单通道转换,输入通道为0
  ATD0DIEN=0x00; //00000000  禁止数字输入
}
//-----读取AD转换结果--------//
void AD_GetValue(int *AD_wValue)
{
  *AD_wValue=ATD0DR0;  //读取结果寄存器的值
}
//-----主函数--------//
void main(void)
{
  double a=23,b=32;
  char c[20] ;
  PLL_Init();
  AD_Init();
  DDRM=0XFF;
  LCD_Init();
  delay(2);   
  EnableInterrupts;
   
  for(;;)
  {
    while(!ATD0STAT2_CCF0);    // 等待转换结束while(ATDOSTAT2_CCF0==1)
          AD_GetValue(&AD_wValue);   // 读取转换结果
    a = (double)AD_wValue;   // 在B口显示转换值
      
/******************液晶显示*************************/
  sprintf (c, "%f", a);
  LCD_Print(0,2,c);
/******************************************/
  delay(1000);
  }
}

运行之后,当AD0什么都不接时,液晶显示的数值在160附近跳变,当插上杜邦线之后,不管杜邦线接5V还是GND,液晶显示一直是从0逐渐跳变到255,然后又循环从0跳变到255,请为什么会这样子呢?

作者: 【征程】    时间: 2013-12-21 21:22
能把这个程序全发给我吗,学习一下,谢谢906724893@qq.com
作者: somebodyes    时间: 2014-3-27 17:40





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