基本信息
源码名称:AD7682.zip
源码大小:1.43KB
文件格式:.zip
开发语言:Java
更新时间:2019-08-04
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 2 元 
   源码介绍


/*******************************************************************************
** 文件名称:ad7682.c
** 功    能:
** 修改日志:
********************************************************************************/
#include "ad7682.h"
#include "includes.h"
/*******************************************************************************
** 函数名称:void Delay_1us(uint count)
** 功   能: count为1时延时1us
** 修改日志:
*******************************************************************************/
static void Delay_1us(uint count)
{
 for(uchar i=0 ; i<count ;i  )
   
 {
   for(uchar j=0; j<1;j   )
  {
   _NOP();
  }
 }
}
/******************************************************************************
** 函数名称:INT16U AD7682_spi(INT8U ch)
** 功    能: reg寄存器内容,data转换数据
** 修改日志:
*******************************************************************************/
 INT16U AD7682_spi(INT8U ch)
{
  INT16U reg=0;
  INT16U data=0;
  CS_LOW;
  SCLK_LOW;
  reg = (1<<13)|(7<<10)|(ch<<7)|(1<<6)|(1<<0);
  reg <<=2; //寄存器只用到了14位,所以要先移出高两位
 
  Delay_1us(10);
  for(INT8U i=0; i<16; i  )
  {
    if(reg&0x8000) DIN_HIGH;
    else           DIN_LOW;
    
    Delay_1us(10);
    reg<<=1;
    SCLK_HIGH;
    Delay_1us(20);
    data<<=1; 
    if(DOUT_READ)  data|=1;
    SCLK_LOW;
    Delay_1us(20);
  }
  CS_HIGH;
  Delay_1us(20);
  return (data);
}
/******************************************************************************
** 函数名称:void AD7682_init(void)
** 功    能:
** 修改日志:
*******************************************************************************/
void AD7682_init(void)
{
   DOUT_DIR_INPUT;   
   CS_DIR_OUTPUT;
   DIN_DIR_OUTPUT;
   SCLK_DIR_OUTPUT; 
   CS_HIGH;
   DIN_HIGH;
   SCLK_HIGH;
   Delay_1us(30);
   AD7682_spi(0);
   AD7682_spi(0); 
}

/******************************************************************************
** 函数名称:float Get_ADC_Value(ch) 
** 功    能:采样 ch 选择通道  前三次采集无效
** 修改日志:
*******************************************************************************/
float Get_ADC_Value(INT8U ch)
{
  float AD_Value1 = 0,AD_Value2 = 0;
  AD7682_spi(ch);
  AD7682_spi(ch);

  for(INT8U i = 0; i<10; i  ){
      AD_Value1  = AD7682_spi(ch);
      AD_Value2  = AD_Value1;
  }
  
  return (AD_Value2*0.25/65536);// AD_Value/65536*2.5/5
}