用ADC0809做数字电压,为什么数码管总是显示5V?

2019-07-15 17:39发布

本帖最后由 菲菲快飞 于 2015-3-27 22:40 编辑

各位大神们好,希望给菜鸟解解答,在此感激不尽!我用的是STC89c52单片机,然后用ADC0809做转换器,通过4位共阳数码管显示出电压。那么问题来了,在ADC0809的模拟量输入端口输入0~5V的电压,为什么数码管总是显示05.00(v)?然后测了下ADC0809的数字量输出端口,8个端口都显示的是高电平。
以下是我的程序:
#include<reg52.h>
unsigned char code seg7[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char dispbuf[4];
unsigned char i;
unsigned char j;
unsigned char z;
unsigned char getdata;
unsigned int  temp;
unsigned char d;
sbit ST=P2^4;  //ADC0809启动信号
sbit OE=P2^5;    //ADC0809读数据控制端
sbit EOC=P2^6;    //ADC0809转换结束信号
sbit CLK=P2^7;    //ADC0809时钟信号输入端
sbit ADD_A=P3^4;   //选择AD的输入端
sbit ADD_B=P3^5;
sbit ADD_C=P3^6;
sbit D0=P2^0;     //数码管的位控制端
sbit D1=P2^1;
sbit D2=P2^2;
sbit D3=P2^3;
sbit P17=P1^7;    //确定小数点的位置

void timeInitial();
void Delay(unsigned int i);

void TimeInitial()
{
   TMOD=0x20;
   TH1=255-20;
   TL1=255-20;
   EA=1;
   ET1=1;
   TR1=1;
}
void Delay (unsigned int z)
{
    for (i=z;i>0;i--)
           for (j=25;j>0;j--)
             ;
}
void Display()
{   P1=seg7[dispbuf[3]];
         D0=0;
         Delay(10);
         D0=1;
        
         P1=seg7[dispbuf[2]];
         D1=0; P17=0;
         Delay(10);
         D1=1;
        
         P1=seg7[dispbuf[1]];
         D2=0;
         Delay(10);
         D2=1;
        
         P1=seg7[dispbuf[0]];
         D3=0;
         Delay(10);
         D3=1;
}
   void main ()
   {
           TimeInitial();
        while (1)
         {
                 ADD_A=0;
                ADD_B=0;
                ADD_C=0;
                 OE =0;
                ST=0;           //启动AD
                ST=1;
                ST=0;
                while (EOC==0);          //等待AD转换结束         
                OE=1;            //读AD转换数据
                for(d=0;d<1;d++)
                Display();
        
                getdata=P0;
                OE=0;

                temp=(getdata*1.0/255)*500;
                dispbuf[0]=temp%10;
                dispbuf[1]=temp/10%10;
                dispbuf[2]=temp/100%10;
                dispbuf[3]=temp/1000;
         }
   }

void t1(void) interrupt 3 using 0
{
  CLK=~CLK;
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。