打印
[STC单片机]

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

[复制链接]
1582|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 碳纤维钢铁侠X 于 2015-3-27 22:33 编辑

各位大神们好,希望给菜鸟解解答,在此感激不尽!我用的是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;
}

相关帖子

沙发
NE5532| | 2015-3-28 10:50 | 只看该作者
应该是AD芯片没有工作,建议按AD的数据手册,一步一步的打断点来调,看哪里没对。

使用特权

评论回复
板凳
碳纤维钢铁侠X|  楼主 | 2015-3-29 21:34 | 只看该作者
直接用STC12c5a60s2了,方便了很多。还是得谢谢你的评论

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

8

帖子

0

粉丝