智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1248|回复: 2
打印 上一主题 下一主题

AD转换问题

[复制链接]

8

主题

22

帖子

0

精华

高级会员

Rank: 4

积分
963

优秀会员奖章

威望
476
贡献
283
兑换币
294
注册时间
2013-10-30
在线时间
102 小时
毕业学校
广东海洋大学寸金学院
跳转到指定楼层
1#
发表于 2013-11-19 21:25:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1贡献
#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,请为什么会这样子呢?

10

主题

63

帖子

0

精华

高级会员

Rank: 4

积分
729
QQ
威望
373
贡献
224
兑换币
236
注册时间
2014-3-9
在线时间
66 小时
2#
发表于 2014-3-20 21:19:24 | 只看该作者
帮顶
回复

使用道具 举报

0

主题

11

帖子

0

精华

高级会员

Rank: 4

积分
757
威望
228
贡献
129
兑换币
141
注册时间
2013-10-12
在线时间
200 小时
毕业学校
山东科技大学
3#
发表于 2014-3-21 19:16:51 | 只看该作者
void AD_GetValue(int *AD_wValue)
{
  *AD_wValue=ATD0DR0;  //读取结果寄存器的值
}
要返回值吧,你试试加个return,子函数类型就返回值而定。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-9-19 12:16 , Processed in 0.041458 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表