[求助]求高手帮我看下这个单片机程序我在做单片机实现数字电压表的毕业设计,现有一程序,但是小女子太笨了,翻了一天的书也看不懂,现拿出来给各位高手看看,希望大家能帮帮我,感激啊

我的qq:726643557
#include
<at89x51.h>
#define
uchar
unsigned
char
//*定义宏uchar=unsigned
char**//
uchar
code
dispbitcode[]={0xfe,0xfd,0xfb,0xf7};
//*位地址代码*//
uchar
code
dispcode[]={0xc0,0x0f9,0x0a4,0x0b0,0x99,//*0~9,和不显示代码,共阳*//
0x92,0x82,0x0f8,0x80,0x90,0xff};
uchar
dispbuf[4];
//*定义数组类型*//
uchar
dispcount;
//*定义dispcount类型*//
uchar
getdata;
//*定义getdata类型*//
unsigned
int
temp;
//*定义temp类型*//
uchar
i;
//*定义i
类型*//
sbit
st=p3^0;
//*定义st的位地址为p3的第一位*//
sbit
oe=p3^1;
//定义oe的位地址p3的第二位*//
sbit
eoc=p3^2;
//定义eoc的位地址p3的第三位*//
sbit
clk=p3^3;
//定义clk的位地址p3的第四位*//
void
main(void)
{
st=0;
//*禁止a/d转换器启动*//
oe=0;
//*禁止a/d输出*//
et0=1;
//*允许t0启动*//
et1=1;
//*允许t1启动*//
ea=1;
//*打开总开关*//
tmod=0x12;
//*设置t0
t1工作方式
。t0
为方式2
,8位自动重装;t1为方式1,16位计数器*//
th0=216;
//*装初值,输出频率为:f=1/(40*2)*1000000=12500hz*//
tl0=216;
th1=(65536-3000)/256;
//*给t1定时器赋初值*//
tl1=(65536-3000)%256;
tr1=1;
//*启动t1*//
tr0=1;
//*启动t0*//
st=1;
//*形成一个正脉冲,启动a/d转换器*//
st=0;
while(1)
//*等待a/d转换完成*//
{
if(eoc==1)
//*a/d转换完成*//
{
oe=1;
//*允许a/d转换器输出*//
getdata=p2;
//单片机通过p2口读取数据*//
oe=0;
//*禁止a/d
转换器输出*//
temp=getdata*251;
temp=temp/128;
//*数据处理。如:输入模拟量为5,得到数字量255,temp=255*251/128=500。在数码管显示5.00*//
i=3;
dispbuf[0]=10;
//*屏蔽一位。因为精度为:5*1/255=0.020,所以第三位小数号无意义;取两位小数*//
dispbuf[1]=0;
//*初次显示为0.00*//
dispbuf[2]=0;
dispbuf[3]=0;
while(temp/10)
//将十进制的位的数值分别放到数组里边,等待显示*//
{
dispbuf[i]=temp%10;
temp=temp/10;
i--;
}
dispbuf[i]=temp;
st=1;
//*进入下一轮转换*//
st=0;
}
}
}
void
t0(void)
interrupt
1
using
0
//*中断1子程序,使用0区寄存器组*//
{
clk=~clk;
//*从p3.3输出12.5khz的时钟信号*//
}
void
t1(void)
interrupt
3
using
0
//*中断3子程序,使用0区寄存器组*//
th1=(65536-3000)/256;
//*重装初值*//
tl1=(65536-3000)%256;
p0=dispcode[dispbuf[dispcount]];
//*显示电压值*//
p1=dispbitcode[dispcount];
//*动态扫描*//
if(dispcount==3)
{
p0=p0-0x80;
//*显示小数点*//
}
dispcount++;
if(dispcount==4)
//*进入下一轮显示*//
{
dispcount=0;
}
}