求大神帮助,关于NE555多谐振荡器测电容的问题

2019-07-16 13:37发布

本帖最后由 wkzww2 于 2017-2-27 20:32 编辑

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define LCD_Data P1
uchar Ji_s=0,Ji_s1=0,Ji_s2=0,m4,js=0,T_flag;
float R1=100,R2=100;//欧姆
uchar code table[]="THE CAP IS:";
uchar code table1[]="uF";
sbit lcden=P2^6;
sbit lcdrs=P2^4;
sbit lcdrw=P2^5;
sbit _reset=P2^3;
sbit start=P2^7;
uchar jishu=0;                        
  void delay(void)
{
    uint y;
    for(y=5552;y>0;y--);
}                             
  void write_com(uchar com)
{     
    lcdrs=0;
    lcdrw=0;
    P1=com;
    delay();
    lcden=1;
    delay();
    lcden=0;
}
    void write_data(uchar date)
{   
    lcdrs=1;
    lcdrw=0;
    P1=date;
    delay();
    lcden=1;
    delay();
    lcden=0;
}                                
  void init()
{
    uchar num,num1;
    lcden=0;
    write_com(0x38);        //显示模式设置
    write_com(0x0e);        //D=1开显示 C=1显示光标
    write_com(0x06);        //N=1读或写一个字符后地址指针加一且光标加一
    write_com(0x01);        //清屏
    write_com(0x80);    //设置数据地址指针
    for(num=0;num<11;num++)
    {
        write_data(table[num]);
        delay();                        
    }
    write_com(0xc8);   
    for(num1=0;num1<2;num1++)
    {
        write_data(table1[num1]);
        delay();               
    }
    }
    float Ji_sT()
{
  uchar nT;
  float T,CAP;
  nT=Ji_s;             //计数个数减1得到周期数  nT
  T=nT;                 //单位换算 单片机机器周期1US
  CAP=1.43*1000*T/(R1+2*R2) ; //多谐振荡器震荡周期
return CAP;
}
                                                                 
  void count()
{
     float C;
    float C1,C2,C3;
    uchar bai,shi,ge,sf,bf;
     C= Ji_sT();
    bai=C/100;
    write_com(0xc0);
    write_data(0x30+bai);
    C3=C/10;   
    shi= (int)C3%10;
    write_com(0xc1);
    write_data(0x30+shi);
    ge = (int)C%10;
    write_com(0xc2);
    write_data(0x30+ge);
    write_com(0xc3);
    write_data(0x2e);
    C1=    C*10;
    sf=(int)C1%10;
    write_com(0xc4);
    write_data(0x30+sf);
    C2=C*100;
    bf=(int)C2%10;
    write_com(0xc5);
    write_data(0x30+bf);
}                                                              
   



void main()
{  
    init();
    TMOD = 0x01;   // 定时器0工作在计时模式
    TH0 = 0x00;
    TL0 = 0x00;   
    ET0 = 1;
    TR0 = 0;
    EX0=1;
    EA = 1;
    while(1)
    count();        
}   
  void int0(void) interrupt 0   //第一次中断开始计数,第二个中断停止计数
{   
T_flag=!T_flag;
   if(T_flag==1)
  {
  _reset=1;
   TR0=1;         //开始计时
  }
  if(T_flag==0)
  {  TR0=0;         //停止计时
    EX0=0;         //关闭中断
   _reset=0;      //停止发出方波
   Ji_s=TH0*256+TL0; //计算计数器的值
   TH0=0x00;      //恢复初值
   TL0=0x00;
  }
}
     


CX为待测电容
求问哪里有问题

QQ截图20170227192852.jpg
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
李春明
1楼-- · 2019-07-16 17:55
wkzww2 发表于 2017-2-27 21:57
LZ小白,还请赐教,搞不清楚这种情况的R1 R2合适取值

你再看一下这个555的线路资料   最佳答案
李春明
2楼-- · 2019-07-16 21:24
 精彩回答 2  元偷偷看……
wkzww2
3楼-- · 2019-07-17 02:20
本帖最后由 wkzww2 于 2017-2-27 21:50 编辑
王栋春 发表于 2017-2-27 21:32
楼主要测量是电容量不同是输出的波形还是其他
测量CX的电容量
李春明
4楼-- · 2019-07-17 06:59
wkzww2 发表于 2017-2-27 21:45
测量CX的电容量

测量出波形频率 通过公式反推电容值如何
wkzww2
5楼-- · 2019-07-17 09:33
王栋春 发表于 2017-2-27 21:51
测量出波形频率 通过公式反推电容值如何

程序用的就是公式反推电容值的,就是测量结果和设的值差太多。
李春明
6楼-- · 2019-07-17 14:39
wkzww2 发表于 2017-2-27 21:53
程序用的就是公式反推电容值的,就是测量结果和设的值差太多。

这个可以加相对的补偿呀                 

一周热门 更多>