自己做的板子 AD0832不能工作
下载程序后 数码管只能显示 205 转动电位器 没有反应 他妈的 快把我逼疯了
两天了 真他妈想不管了 但他又像自己的儿子
不管怎么能行?
这是我的程序 拜托帮我搞定!!!!
#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);
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>