用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做的基准?感觉这个计算仔细研究一下,而且这个基准电压太低了.