|
adc0804输出一直为高,不知道是程序问题还是硬件连接问题,求解
#include<reg51.h>
#include<intrins.h>
//sbit Cs=P2^0;
sbit Write=P2^1;
sbit Read=P2^2;
sbit WeiEN=P2^6;
sbit DuanEN=P2^7;
unsigned char num;
unsigned char DuanMa[]= //段码数组为从0到9
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,
0x7d,0x07,0x7f,0x6f};
unsigned char WeiXuan[]={0xfe,0xfd,0xfb,0xf7};//位选
void delay(unsigned int xMs)
{ unsigned char x,y;
for(x=xMs;x>0;x--)
for(y=110;y>0;y--);
}
void xianshi(num)
{ unsigned char bai,shi,ge;
bai=num/100;
shi=num%100/10;
ge=num%10;
WeiEN=1;P1=WeiXuan[0];WeiEN=0; P1=0x00;
DuanEN=1;P1=DuanMa[bai];DuanEN=0;delay(1000);
WeiEN=1;P1=WeiXuan[1];WeiEN=0; P1=0x00;
DuanEN=1;P1=DuanMa[shi];DuanEN=0;delay(1000);
WeiEN=1;P1=WeiXuan[2];WeiEN=0;P1=0x00;
DuanEN=1;P1=DuanMa[ge];DuanEN=0;delay(1000);
}
void write()
{
Write=1;_nop_(); Write=0;_nop_(); Write=1;
//一个下降沿
}
unsigned char read()
{ unsigned char num;
P0=0XFF; //先将P0口全部置1
Read=1;_nop_();Read=0; _nop_(); num=P0; Read=1;
//上升沿之前将数值转化为中间变量num
return num;
}
int main()
{ //Cs=0;//片选
WeiEN=0;
DuanEN=0;//防止第一次显示错误
while(1)
{
write();
xianshi(num);
read();
}
}
|
|