51单片机AD模拟转换出现的一个问题求大神解答 20
#include<reg52.h>#include<intrins.h>#defineXIERU0x90#defineDU0x91sbitSDA=P2^0;sbitSCL...
#include<reg52.h>
#include<intrins.h>
#define XIERU 0x90
#define DU 0x91
sbit SDA=P2^0;
sbit SCL=P2^1;
sbit DW=P2^7;
sbit DA=P2^6;
unsigned char code e[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x80};
unsigned char code s[]={0xfe,0xfd,0xfb,0xf7};
unsigned int y,p;
void start()
{SCL=1;
SDA=0;
_nop_();
SDA=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SDA=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
}
void stop()
{SCL=0;
SDA=0;
_nop_();
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SDA=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
void ACK()
{SCL=0;
SDA=0;
_nop_();
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
_nop_();
}
void NOACK()
{SCL=0;
SDA=1;
_nop_();
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
_nop_();
}
unsigned int read()
{unsigned int a,x=0;
for(a=0;a<8;a++)
{SCL=1;
x|=SDA;
x<<=1;
SCL=0;
}
return x;
}
void write(unsigned int b)
{unsigned int r;
for(r=0;r<8;r++)
{SCL=0;
SDA=b&0x80;
_nop_();
SCL=1;
_nop_();
_nop_();
SCL=0;
b<<=1;
}
}
unsigned int readset()
{start();
write(XIERU);
ACK();
write(0x40);
ACK();
start();
write(DU);
ACK();
y=read();
SCL=0;
NOACK();
stop();
return y;
}
void show(unsigned int w,unsigned int l)
{P0=s[w];
DW=1;
DW=0;
P0=e[l];
DA=1;
DA=0;
}
void delay(unsigned int z)
{for(z=0;z<1000;z++);
}
void main()
{unsigned int h,i,o;
h=readset();
i=(int)h/50;
o=(int)h%50;
show(0,i) ;
delay(0);
show(0,10);
delay(0);
show(1,o);
}
大神可以主要看AD模拟转换部分,因为数码管的显示已经调试过了,我把通道0接到vcc上可是数码管还是显示0。0v,为啥,AD模拟转换的时序部分不会有问题啊 展开
#include<intrins.h>
#define XIERU 0x90
#define DU 0x91
sbit SDA=P2^0;
sbit SCL=P2^1;
sbit DW=P2^7;
sbit DA=P2^6;
unsigned char code e[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x80};
unsigned char code s[]={0xfe,0xfd,0xfb,0xf7};
unsigned int y,p;
void start()
{SCL=1;
SDA=0;
_nop_();
SDA=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SDA=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
}
void stop()
{SCL=0;
SDA=0;
_nop_();
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SDA=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
void ACK()
{SCL=0;
SDA=0;
_nop_();
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
_nop_();
}
void NOACK()
{SCL=0;
SDA=1;
_nop_();
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
_nop_();
}
unsigned int read()
{unsigned int a,x=0;
for(a=0;a<8;a++)
{SCL=1;
x|=SDA;
x<<=1;
SCL=0;
}
return x;
}
void write(unsigned int b)
{unsigned int r;
for(r=0;r<8;r++)
{SCL=0;
SDA=b&0x80;
_nop_();
SCL=1;
_nop_();
_nop_();
SCL=0;
b<<=1;
}
}
unsigned int readset()
{start();
write(XIERU);
ACK();
write(0x40);
ACK();
start();
write(DU);
ACK();
y=read();
SCL=0;
NOACK();
stop();
return y;
}
void show(unsigned int w,unsigned int l)
{P0=s[w];
DW=1;
DW=0;
P0=e[l];
DA=1;
DA=0;
}
void delay(unsigned int z)
{for(z=0;z<1000;z++);
}
void main()
{unsigned int h,i,o;
h=readset();
i=(int)h/50;
o=(int)h%50;
show(0,i) ;
delay(0);
show(0,10);
delay(0);
show(1,o);
}
大神可以主要看AD模拟转换部分,因为数码管的显示已经调试过了,我把通道0接到vcc上可是数码管还是显示0。0v,为啥,AD模拟转换的时序部分不会有问题啊 展开
2个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询