微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > DIY AD0832

DIY AD0832

时间:10-02 整理:3721RD 点击:
谁能帮我看下  为什么我自己焊的AD不能工作?

相当蛋疼啊   两天了  就是找不到问题啊!

下面是我的程序

#include <intrins.h>
#include <reg52.h>
#include <stdio.h>
#define ulong unsigned long
#define uint unsigned int
#define uchar unsigned char
uchar k,i,j;
float l;
sbit ADCS =P2^0;  //ADC0832 chip seclect
sbit ADDI =P2^2;  //ADC0832 k in
sbit ADDO =P2^2;  //ADC0832 k out
sbit ADCLK =P2^1;  //ADC0832 clock signal
sbit a=P2^4;
sbit b=P2^5;
sbit c=P2^6;
sbit d=P2^7;
uchar code table[]={0x14,~0x03,~0xe5,~0xc7,~0x0f,~0xce,~0xee,0x7c,0x10,0x30};

void delay(int c)     //延时,C不能小于5
    {
    int i,j;
    for(i=0;i<c;i++)
        for(j=0;j<10;j++)
            ;
     }
/************
读ADC0832函数
************/
//采集并返回
unsigned int Adc0832(unsigned char channel)     //AD转换,返回结果
{
    uchar i=0;
    uchar j;
    uint dat=0;
    uchar ndat=0;
    if(channel==0)channel=2;
    if(channel==1)channel=3;
    ADDI=1;
    _nop_();
    _nop_();
    ADCS=0;//拉低CS端
    _nop_();
    _nop_();
    ADCLK=1;//拉高CLK端
    _nop_();
    _nop_();
    ADCLK=0;//拉低CLK端,形成下降沿1
    _nop_();
    _nop_();
    ADCLK=1;//拉高CLK端
    ADDI=channel&0x1;
    _nop_();
    _nop_();
    ADCLK=0;//拉低CLK端,形成下降沿2
    _nop_();
    _nop_();
    ADCLK=1;//拉高CLK端
    ADDI=(channel>>1)&0x1;
    _nop_();
    _nop_();
    ADCLK=0;//拉低CLK端,形成下降沿3
    ADDI=1;//控制命令结束
    _nop_();
    _nop_();
    dat=0;
    for(i=0;i<8;i++)
    {
        dat|=ADDO;//收数据
        ADCLK=1;
        _nop_();
        _nop_();
        ADCLK=0;//形成一次时钟脉冲
        _nop_();
        _nop_();
        dat<<=1;
        if(i==7)dat|=ADDO;
    }  
    for(i=0;i<8;i++)
    {
        j=0;
        j=j|ADDO;//收数据
        ADCLK=1;
        _nop_();
        _nop_();
        ADCLK=0;//形成一次时钟脉冲
        _nop_();
        _nop_();
        j=j<<7;
        ndat=ndat|j;
        if(i<7)ndat>>=1;
    }
    ADCS=1;//拉低CS端
    ADCLK=0;//拉低CLK端
    ADDO=1;//拉高数据端,回到初始状态
    dat<<=8;
    dat|=ndat;   //重要的一步!
    return(dat);            //return ad k
}
void display(uchar z)
{  uchar qian,bai,shi,ge;
//    qian=z/1000;
//  a=1;
//  b=0;
//  c=0;
//  d=0;
//  P0=table[qian];
//  delay(20);  
  bai=z%1000/100;
  a=0;
  b=1;
  c=0;
  d=0;
  P0=table[bai];
delay(20);
  shi=z/1000;
  a=0;
  b=0;
  c=1;
  d=0;
  P0=table[shi];
delay(20);  
  ge=z%10;
  a=0;
  b=0;
  c=0;
  d=1;
  P0=table[ge];
delay(20);
}
void main()
    {

    while(1)
    {
      k=Adc0832(0);   //AD转换结果
//      l=k/255.0*7.0;
      display(k);
   
    }
}

  补充一下  这是ADC0832加数码管   他妈的 快被逼疯了  
数码管只能显示 205   调电位器没有作用~~~~~~

我当初也遇到你这样的情况。耐心检查下每一步

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top