測量范圍2nF~2uF。
只能測電容。
數碼管共陰。
數碼管四位。
不用小數點。
四個檔位。
通過測這個電容充電的時間來算出電容容量挺不錯的的,適合新手學習。
這2051或AT89C2051本身就沒有 P3.6 端口,要是沒注意這點會讓新手走彎路滴
- #include <reg51.h>
- unsigned char j,n,t,DispBuf[4];
- unsigned int cap;
- unsigned char code
- BitTab[4]={0xbf,0xdf,0xef,0xf7};//位驅動碼
- unsigned char code
- DispTab[11]={0xfe,0x70,0xed,0xf9,0x73,0xdb,0xdf,0xf0,0xff,0xfb,0x40};//字形碼
- sbit P1_2=P1^2;
- sbit P1_0=P1^0;
- void main() //主程序
- { TMOD=0x11;//定時器T0、T1均工作于定時方式1
- TH1=0xec;
- TL1=0x78;//T1定時時間為5ms
- IE=0X88; //開中斷
- TR1=1; //開定時器T1
- for(;;) //無限循環,定時中斷返回點
- ;
- }
- void Timer1() interrupt 3 //定時中斷服務程序
- { TH1=0xec;
- TL1=0x78;
- t=BitTab[j]; //取位值
- P1=P1|0x78; //P1.3-P1.6送1
- P1=P1&t; //P1.3-P1.6輸出取出的位值
- t=DispBuf[j];//取出待顯示的數
- t=DispTab[t];//取字形碼
- P3=t; //字型碼由P3輸出顯示
- j++; //j作為數碼管的計數器,取值0-3,顯示程序通過它確認顯示哪個數碼管
- if(j==4)
- j=0;
- n++;
- if(n==48) //每過48個中斷測一次電容量
- {
- n=0;
- TH0=0;
- TL0=0;
- P1_2=1; //電容開始充電
- TR0=1; //開定時器T0
- for(;P1_0==0;)//判斷充電電壓達到參考電壓否
- ;
- TR0=0; //充電電壓達到參考電壓,關定時器T0
- P1_2=0;
- cap=TL0|(TH0<<8); //取定時器T0中的數值
- cap=cap-3; //修正誤差
- if(cap>=2000)
- {
- DispBuf[3]=10;
- DispBuf[2]=10;
- DispBuf[1]=10;
- DispBuf[0]=1; //超量程,最高位顯示1,其余各位不顯示(滅)
- }
- if(cap<6000) //不超量程,取各位數值
- {
- DispBuf[3]=cap%10;//取個位數
-
- DispBuf[2]=cap%100/10;//取十位數
-
- DispBuf[1]=cap%1000/100;//取百位數
- DispBuf[0]=cap/1000;//取千位數
- }
- }
- }
復制代碼
|