#include<reg52.h>   //包含52系列单片机头文件 
#define uchar unsigned char   //宏定义
#define uint unsigned int
uint disnum,a;     //定义两个变量
sbit adrd=P3^7;   //A/D的端口进行位定义
sbit adwr=P3^6;   //A/D的端口进行位定义
sbit dula=P2^6;   //数码管段选进行位定义
sbit wela=P2^7;   //数码管位选进行位定义
uchar code table_du[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,
                    0x7c,0x39,0x5e,0x79,0x71};   //数码管段选编码
delay(uchar);   //函数声明
display(uint);

void main()  //主函数
{
	while(1)
	{
		wela=1;     
		P0=0x7f;   //给一个位电平
		adwr=1;    
		adwr=0;   
		adwr=1;    //电平变换形成一个低脉冲，启动A/D转换
		delay(10);  //延时，保证A/D把数据转换完成
		
		    P1=0xff;     //读A/D输出数据之前把P1口的值置1
		adrd=1;  
		adrd=0;      //电平变换，读使能
		disnum=P1;   //把从P1口得到的A/D输出数据，赋给disnum
		adrd=1;   
		for(a=20;a>0;a--)   //延时
		display(disnum);   //数码管显示disnum值
	}
}

delay(uchar x)  //延时函数
{
	uchar a,b;
	for(a=x;a>0;a--)
		for(b=200;b>0;b--);
}

display(uint disnum)   //数码管显示函数
{
	P0=table_du[disnum/100];    //百位数
	dula=1;
	dula=0;
	P0=0xfe;
	wela=1;
	wela=0;
	delay(10);

	P0=table_du[disnum%100/10];   //十位数
	dula=1;
	dula=0;
	P0=0xfd;
	wela=1;
	wela=0;	
	delay(10);

	P0=table_du[disnum%100%10];   //个位数
	dula=1;
	dula=0;
	P0=0xfb;
	wela=1;
	wela=0;
	delay(10);
}