標(biāo)題: 哪位朋友用AT89C2051單片機(jī)制作過簡易電容表的? [打印本頁]

作者: lmn2005    時間: 2023-2-20 11:52
標(biāo)題: 哪位朋友用AT89C2051單片機(jī)制作過簡易電容表的?
請問哪位朋友用AT89C2051做過簡易電容表?請談一談,這款電容表可以用嗎?

基于AT89C2051單片機(jī)的數(shù)字電容表設(shè)計.pdf

322.34 KB, 下載次數(shù): 17


作者: angmall    時間: 2023-2-20 17:03
測量范圍2nF~2uF。
只能測電容。
數(shù)碼管共陰。
數(shù)碼管四位。
不用小數(shù)點(diǎn)。
四個檔位。

通過測這個電容充電的時間來算出電容容量挺不錯的的,適合新手學(xué)習(xí)。

這2051或AT89C2051本身就沒有 P3.6 端口,要是沒注意這點(diǎn)會讓新手走彎路滴

  1. #include <reg51.h>
  2. unsigned char j,n,t,DispBuf[4];
  3. unsigned int cap;
  4. unsigned char code
  5. BitTab[4]={0xbf,0xdf,0xef,0xf7};//位驅(qū)動碼
  6. unsigned char code
  7. DispTab[11]={0xfe,0x70,0xed,0xf9,0x73,0xdb,0xdf,0xf0,0xff,0xfb,0x40};//字形碼
  8. sbit P1_2=P1^2;
  9. sbit P1_0=P1^0;
  10. void main()         //主程序
  11. {       TMOD=0x11;//定時器T0、T1均工作于定時方式1
  12.         TH1=0xec;
  13.         TL1=0x78;//T1定時時間為5ms
  14.         IE=0X88; //開中斷
  15.         TR1=1;   //開定時器T1
  16.         for(;;)  //無限循環(huán),定時中斷返回點(diǎn)
  17.                 ;
  18. }
  19. void Timer1() interrupt 3 //定時中斷服務(wù)程序
  20. {       TH1=0xec;
  21.         TL1=0x78;
  22.         t=BitTab[j]; //取位值
  23.         P1=P1|0x78;  //P1.3-P1.6送1
  24.         P1=P1&t;     //P1.3-P1.6輸出取出的位值
  25.         t=DispBuf[j];//取出待顯示的數(shù)
  26.         t=DispTab[t];//取字形碼
  27.         P3=t; //字型碼由P3輸出顯示
  28.         j++;  //j作為數(shù)碼管的計數(shù)器,取值0-3,顯示程序通過它確認(rèn)顯示哪個數(shù)碼管
  29.         if(j==4)
  30.         j=0;
  31.         n++;
  32.         if(n==48) //每過48個中斷測一次電容量
  33.         {      
  34.                 n=0;
  35.                 TH0=0;
  36.                 TL0=0;
  37.                 P1_2=1;  //電容開始充電
  38.                 TR0=1;   //開定時器T0
  39.                 for(;P1_0==0;)//判斷充電電壓達(dá)到參考電壓否
  40.                         ;
  41.                 TR0=0; //充電電壓達(dá)到參考電壓,關(guān)定時器T0
  42.                 P1_2=0;
  43.                 cap=TL0|(TH0<<8); //取定時器T0中的數(shù)值
  44.                 cap=cap-3;        //修正誤差
  45.                 if(cap>=2000)
  46.                 {
  47.                         DispBuf[3]=10;
  48.                         DispBuf[2]=10;
  49.                         DispBuf[1]=10;
  50.                         DispBuf[0]=1;  //超量程,最高位顯示1,其余各位不顯示(滅)
  51.                 }
  52.                 if(cap<6000)  //不超量程,取各位數(shù)值
  53.                 {
  54.                     DispBuf[3]=cap%10;//取個位數(shù)
  55.                        
  56.                     DispBuf[2]=cap%100/10;//取十位數(shù)
  57.                        
  58.                     DispBuf[1]=cap%1000/100;//取百位數(shù)
  59.                     DispBuf[0]=cap/1000;//取千位數(shù)

  60.                 }
  61.         }
  62. }


復(fù)制代碼



作者: lmn2005    時間: 2023-2-20 19:13
準(zhǔn)確度應(yīng)該可以吧?雖然比不上專業(yè)的電容表。
專業(yè)的電容表,小電容可能采用振蕩電路,大些的電容也好像是利用電容的充電原理。
作者: man1234567    時間: 2023-2-21 08:37
lmn2005 發(fā)表于 2023-2-20 19:13
準(zhǔn)確度應(yīng)該可以吧?雖然比不上專業(yè)的電容表。
專業(yè)的電容表,小電容可能采用振蕩電路,大些的電容也好像是 ...

表的精確程度取決于測量原理和器件選取等,這個表也就是比不知道要好。
作者: lmn2005    時間: 2023-2-21 10:14
我想要測量P級的小電容,用充電原理,精度是不是比振蕩電路測頻率的差得多?
作者: coody_sz    時間: 2023-2-21 10:43
我十幾年前做的簡易電容計,用 充電+比較器 的方式實(shí)現(xiàn),誤差不超過1%,4位有效數(shù)字,量程100nF~50000uF,最小分辨率10pF。




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1