我用的STC12C5A60S2自带的A/D转换,想把结果提取出来然后显示到四个八段数码管上,请高手帮忙,谢谢~

这个是我的程序,AD部分是照手册抄的,应该没有问题,但是不知道要怎么把结果从寄存器里取出来并显示,还想问下,是把模拟电压直接接到单片机的I/O口上然后得到一个数字值吗,那这个模拟电压的范围是多少?谢谢啦~~
#include <reg52.h>
#include <intrins.h>
#define FOSC 18432000L
#define BAUD 9600
#define scanp P2
#define segled P0
typedef unsigned char BYTE;
typedef unsigned int WORD;
sfr ADC_CONTR = 0xBC;
sfr ADC_RES = 0xBD;
sfr ADC_LOW2 = 0xBE;
sfr P1ASF = 0x9D;
#define ADC_POWER 0x80
#define ADC_FLAG 0x10
#define ADC_START 0x08
#define ADC_SPEEDLL 0x00
#define ADC_SPEEDL 0x20
#define ADC_SPEEDH 0x40
#define ADC_SPEEDHH 0x60
#define output P3
unsigned char const disply[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char code seg[]={0,1,2,3,4,5,6,7};
void InitUart();
void SendData(BYTE dat);
void Delay(WORD n);
void InitADC();
void leddata(unsigned char);
BYTE ch = 0;

void main()
{
InitUart();
InitADC();
IE = 0xa0;
output=0x01;
while(1);

}

void adc_isr() interrupt 5
{
ADC_CONTR &= !ADC_FLAG;
SendData(ch);
SendData(ADC_RES);

if (++ch > 7) ch = 0;
ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ch;

}

void InitADC()
{
P1ASF = 0xff;
ADC_RES = 0;
ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ADC_START | ch;
Delay(2);
}

void InitUart()
{
SCON = 0x5a;
TMOD = 0x20;
TH1 = TL1 = -(FOSC/12/32/BAUD);
TR1 = 1;
}

void SendData(BYTE dat)
{
while (!TI);
TI = 0;
SBUF = dat;
leddata(ADC_RES);
}
void leddata(unsigned char data_in)
{
int result;
char i,j;
result=data_in*5/256;
for(i=0;i<4;i++)
{
if(i==0)
{
j=result/10;
segled=disply[j];
scanp=seg[i];
Delay(2);
}
if(i==1)
{
j=result%10;
segled=disply[j];
scanp=seg[i];
Delay(2);
}
if(i==2)
{
j=(result*10)%10;
segled=disply[j];
scanp=seg[i];
Delay(2);
}
if(i==3)
{
j=(result*100)%10;
segled=disply[j];
scanp=seg[i];
Delay(2);
}
}
}
void Delay(WORD n)
{
WORD x;

while (n--)
{
x = 50000;
while (x--);
}
}

5v单片机是0-5v,必须接到stc单片机的ad输入口,即标有ADC的io口。,8个通道都进行ad转换,并且,显示出来,通过串口发送通道和ad转换值
温馨提示:答案为网友推荐,仅供参考