微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 用ADC0809做数字电压,为什么数码管总是显示5V?

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

时间:10-02 整理:3721RD 点击:

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

http://bbs.elecfans.com/jishu_472128_1_1.html
给你参考一下!
我做的!我做的!我做的!
欢迎来proteus板块提问,请带好你的编译文件和仿真文件!

有电路图码?  先看看电路。

你用的1.0V做的基准?感觉这个计算仔细研究一下,而且这个基准电压太低了.

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top