关于ADC0809的编程问题!!高分哦!!急!

来源:百度知道 编辑:UC知道 时间:2024/06/20 11:01:41
#include<at89X52.h>
#define uint unsigned int
#define uchar unsigned char
sbit st=P3^2;
sbit eoc=P3^0;
sbit oe=P3^1;
uchar code dula[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98};
sbit ADC0809_AN = P3^5;
sbit ADC0809_BN = P3^6;
sbit ADC0809_CN = P3^7;
uchar temp,ad_data1,ad_data2,ad_data3,ad_0809;
void adc0809();
void display();
void delaynms(uint x);
void main()
{ P0=0x00;
while(1)
{
adc0809();
display();
}
}

void adc0809()
{
ADC0809_AN = 0;
ADC0809_BN = 0;
ADC0809_CN = 0;
oe=0;
st=0;
st=1;
st=0;
while(!eoc)
oe=1;
ad_0809=P1;
delaynms(1);
oe=0;
}

void delaynms(uint x)
{
uchar i;
while(x-->0)
{
for(i=0;i<125;i++)
{;}
}
}

void display()
{
u

(A)st=0;
st=1;
st=0;//要要延时一下(delaynms(3);等待转换完成。)
while(!eoc)
(B) for(a=0;a<10;a++)
//干嘛的?
(C)ad_data1=(ad_0809*49/25)/100;
//ad_data1为uchar型,无小数。ad_datal=ad_0809/100;//分离百位。
(D) P0=dula[ad_data3];
P2=0x07;
delaynms(3);
//这里要每次要先关闭上一个数码管(P2=0xff;)。不然小数点后第一位显示会加到第一个数码管上的,而第二个数码管此时还没打开。