是用51的吧
在主程序判断的时候,加上一句

if(t==200)//由于t=20为1s
t=0;
然后把你要写的写进去就行了,应该。
void init()
{
TMOD=0x01;//使用定时器0
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
//定时器中断程序
void Timer0()interrupt 0
{
t++;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
}

这是一个用89S52单片机或 89C52、89C51来读取AD值和控制数码管显示的电压表程序;AD转换单片机内部没有,用的是外部的ADC芯片ADC0809或ADC0808,芯片的具体介绍你可以百度一下;程序中定义了单片机和ADC0809芯片的接口:sbit ST=P3^0;
sbit OE=P3^1;
sbit EOC=P3^2;
sbit CLK=P3^3;ST:START: A/D转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)使其启动(脉冲上升沿使0809复位,下降沿启动A/D转换)。 EOC: A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。 OE:数据输出允许信号,输入,高电平有效。当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。 CLK:时钟脉冲输入端。要求时钟频率不高于640KHZ,单片要送出的CLK时序是用 TO定时中断完成的:void t0(void) interrupt 1 using 0
{
CLK=~CLK;//定时取反一次,制造脉冲
}
当EOC是高电平时,就是一次AD转换完成,单片机此时读ADC0809的值:if(EOC==1)
OE=1;
getdata=P0;
OE=0;
就是从P0口与ADC0809数据相连读出,读出8位的转换值 后存在getdata中,getdata再送入temp,temp再把采得的AD值转换为实际的电压值:temp=getdata*235;//这是要根据实际电路的电阻而定
temp=temp/128;
后把实际电压值送入数码管扫描的缓冲数组,在T1中断中进行扫描显示:dispbuf[0]=10;
dispbuf[1]=10;
dispbuf[2]=10;
dispbuf[3]=10;
dispbuf[4]=10;

dispbuf[5]=0;
dispbuf[6]=0;
dispbuf[7]=0;
P1=dispcode[dispbuf[dispcount]]; //数码管的字段码
P2=dispbitcode[dispcount //扫描数码管的每一位 说得差不多了,估计没人会一句句程序的给你分析,何况只有10分。


