1、#include unsigned char j,n,t,DispBuf4;unsigned int cap;unsigned char codeBitTab4=0xbf,0xdf,0xef,0xf7;/位驱动码unsigned char codeDispTab11=0xfe,0x70,0xed,0xf9,0x73,0xdb,0xdf,0xf0,0xff,0xfb,0x40;/字形码sbit P1_2=P12;sbit P3_6=P36;main() /主程序 TMOD=0x11;/定时器 T0、T1 均工作于定时方式 1TH1=0xec;TL1=0x78;/T1 定时时间为 5msIE=0X
2、88; /开中断TR1=1; /开定时器 T1for(;) /无限循环,定时中断返回点;Timer1() interrupt 3/定时 中断服务程序 TH1=0xec;TL1=0x78;t=BitTabj;/取位值P1=P1|0x78;/P1.3-P1.6 送 1P1=P1 /P1.3-P1.6 输出取出的位值t=DispBufj;/取出待显示的数t=DispTabt;/取字形码P3=t; /字型码由 P3 输出显示j+; /j 作为数码管的计数器,取值 0-3,显示程序通过它确认显示哪个数码管if(j=4)j=0;n+;if(n=48)/每过 48 个中断测一次电容量 n=0;TH0=0;T
3、L0=0;P1_2=1;/电容开始充电TR0=1; /开定时器 T0for(;P3_6=0;)/判断充电电压达到参考电压否;TR0=0;/充 电电压达到参考电压,关定时器 T0P1_2=0;cap=TL0|(TH0=2000)DispBuf3=10;DispBuf2=10;DispBuf1=10;DispBuf0=1; /超量程,最高位显示 1,其余各位不显示(灭)if(cap2000) /不超量程,取各位数值DispBuf3=cap%10;/取个位数cap=cap/10;DispBuf2=cap%10;/取十位数cap=cap/10;DispBuf1=cap%10;/取百位数DispBuf0=cap/10;/取千位数