89C52与ADC0809还有LCD1602实现数字电压表功能,但是一直不管如何调整电压显示一直是4.980

89C52与ADC0809还有LCD1602实现数字电压表功能,但是一直不管怎么调整电压显示一直是4.980
#include<reg52.h>#include<intrins.h>         //调用_nop_();延时函数用
#define uchar unsigned char#define uint unsigned int
uchar code table[]="0123456789.";//定义显示的数组
   
sbit lcden=P3^5;//定义管脚
sbit lcdrs=P3^3;
sbit lcdrw=P3^4;
sbit a=P2^1;
sbit b=P2^2;
sbit c=P2^3;
sbit st=P2^4;
sbit eoc=P2^5;
sbit oe=P2^6;
uchar num,flag;
void delay(uint z)//延时函数
{
 uint x,y;
 for(x=z;x>0;x--)
 for(y=110;y>0;y--);
}
void write_com(uchar com)//1602读指令
{ lcdrw=0;
 lcdrs=0;
 P1=com;
 delay(5);
 lcden=1;
 delay(5);
 lcden=0;
}

 
void write_data(uchar date)//1602读数据
{ lcdrw=0;
 lcdrs=1;
 P1=date;
 delay(5);
 lcden=1;
 delay(5);
 lcden=0;
}

 
void lcd_init()//1602初始化函数
{
 
 lcden=0;
 write_com(0x38);
 write_com(0x0c);
 write_com(0x06);
 write_com(0x01);
 
}

 
void main()

 uchar date=0;
 float temp=0.0;
    uchar q,b,s,g;
  a=1;//选着ADC0809的第7通道
  b=1;
  c=1;
     lcd_init();   
     oe=0;
    while(1) 
   {
       st=0;
    st=1;
    st=0;
       delay(5); 
    while(!eoc)
     {
       oe=1;
    date=P0;
    oe=0;
 temp= (float) date*5.0/256;//数据处理
    
 
 temp=temp/100.0;
 temp=temp*100000.0;
 q=(int)temp/1000;
 b=(int)temp%1000/100;
 s=(int)temp%1000%100/10;
 g=(int)temp%10;
   

 
     write_com(0x80);//1602显示处理好的数据
  write_data(table[q]);
  delay(20);
  write_data(table[11]);
  delay(20);
  write_data(table[b]);
  delay(20);
  write_data(table[s]);
  delay(20);
  write_data(table[g]);
  delay(20);
     }
   
   }    
       
}

 
同时加入有1Mhz的有源晶振
------解决方案--------------------
该回复于2012-11-05 12:48:28被版主删除
------解决方案--------------------
该回复于2012-11-05 12:48:49被版主删除
------解决方案--------------------
是单纯你自己的设备不能用呢?还是放到别人设备和你的设备都不能用。
如果就你的不能用很有可能是时钟源的芯片坏了,或者AD芯片坏了。(时钟源的可能性较高)
------解决方案--------------------
程序直接对变量temp赋值 检测外围电路问题
------解决方案--------------------
硬件连接是否有有问题?
------解决方案--------------------
贴电路图哦,要不然还是会有问题的