找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1577|回复: 5
打印 上一主题 下一主题
收起左侧

哪位朋友用AT89C2051单片机制作过简易电容表的?

[复制链接]
跳转到指定楼层
楼主
ID:71233 发表于 2023-2-20 11:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问哪位朋友用AT89C2051做过简易电容表?请谈一谈,这款电容表可以用吗?

基于AT89C2051单片机的数字电容表设计.pdf

322.34 KB, 下载次数: 17

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:155507 发表于 2023-2-20 17:03 | 只看该作者
测量范围2nF~2uF。
只能测电容。
数码管共阴。
数码管四位。
不用小数点。
四个档位。

通过测这个电容充电的时间来算出电容容量挺不错的的,适合新手学习。

这2051或AT89C2051本身就没有 P3.6 端口,要是没注意这点会让新手走弯路滴

  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};//位驱动码
  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(;;)  //无限循环,定时中断返回点
  17.                 ;
  18. }
  19. void Timer1() interrupt 3 //定时中断服务程序
  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];//取出待显示的数
  26.         t=DispTab[t];//取字形码
  27.         P3=t; //字型码由P3输出显示
  28.         j++;  //j作为数码管的计数器,取值0-3,显示程序通过它确认显示哪个数码管
  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;)//判断充电电压达到参考电压否
  40.                         ;
  41.                 TR0=0; //充电电压达到参考电压,关定时器T0
  42.                 P1_2=0;
  43.                 cap=TL0|(TH0<<8); //取定时器T0中的数值
  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)  //不超量程,取各位数值
  53.                 {
  54.                     DispBuf[3]=cap%10;//取个位数
  55.                        
  56.                     DispBuf[2]=cap%100/10;//取十位数
  57.                        
  58.                     DispBuf[1]=cap%1000/100;//取百位数
  59.                     DispBuf[0]=cap/1000;//取千位数

  60.                 }
  61.         }
  62. }


复制代码


回复

使用道具 举报

板凳
ID:71233 发表于 2023-2-20 19:13 | 只看该作者
准确度应该可以吧?虽然比不上专业的电容表。
专业的电容表,小电容可能采用振荡电路,大些的电容也好像是利用电容的充电原理。
回复

使用道具 举报

地板
ID:584814 发表于 2023-2-21 08:37 | 只看该作者
lmn2005 发表于 2023-2-20 19:13
准确度应该可以吧?虽然比不上专业的电容表。
专业的电容表,小电容可能采用振荡电路,大些的电容也好像是 ...

表的精确程度取决于测量原理和器件选取等,这个表也就是比不知道要好。
回复

使用道具 举报

5#
ID:71233 发表于 2023-2-21 10:14 | 只看该作者
我想要测量P级的小电容,用充电原理,精度是不是比振荡电路测频率的差得多?
回复

使用道具 举报

6#
ID:1034262 发表于 2023-2-21 10:43 | 只看该作者
我十几年前做的简易电容计,用 充电+比较器 的方式实现,误差不超过1%,4位有效数字,量程100nF~50000uF,最小分辨率10pF。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表