单片机51和adc0804模拟量转数字量,数码管显示乱码,知道的可以帮我看看的。

程序我也查了半天了,奈何小白总是照不出来问题,仿真电路也看了半天,好像也没啥问题。我先给大家看看电路图吧。图片说明图片说明图片说明图片说明

 #include <reg52.h>
 #include <intrins.h>
 #define uchar unsigned char 
 #define uint  unsigned int 
 sbit dula=P2^0;
 sbit wela=P2^1;
 sbit adwr=P3^6;
 sbit adrd=P3^7;
uchar code table[]={0x3f,0x06,0x5b,0x4f,    //定义一个阴极数码管的编码表。
                    0x66,0x6d,0x7d,0x07,
                    0x7f,0x6f,0x77,0x7c,
                    0x39,0x5e,0x79,0x71};
void delayms(uchar xms) 
{
 uint i,j;
 for(i=xms;i>0;i--)
   for(j=110;j>0;j--);
}
void display(uchar bai,uchar shi,uchar ge )
{
 wela=0;
 dula=0;
 P0=0X00;
 P0=table[bai];
 dula=1;
 dula=0;
 P0=0xff;
  P0=0x7e;
 wela=1;
 wela=0;
 delayms(10);
  wela=0;
 dula=0;
  P0=0X00;
  P0=table[shi];
 dula=1;
 dula=0;
 P0=0xff;
  P0=0x7d;
 wela=1;
 wela=0;
 delayms(10);
  wela=0;
 dula=0;
  P0=0X00;
  P0=table[ge];
  dula=1;
 dula=0;
 P0=0xff;
 P0=0x7b;
 wela=1;
 wela=0;
 delayms(10);
}
void main()
{
 uchar a,A1,A2,A3,adval;
 while(1)
 {
  adwr=1;
  _nop_();
  adwr=0;
  _nop_();
  adwr=1;
  _nop_();
  P1=0xff;
  adrd=1;
  _nop_();
  adrd=0;
  _nop_();
  adval=P1;
  adrd=1;
  delayms(10);
  A1=adval/100;
  A2=adval%100/10;
  A3=adval%10;
   for(a=10;a>0;a--)
  {
   display(A1,A2,A3);
  }
 }
}
不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 以帮助更多的人 ^-^