久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 13903|回復: 8
打印 上一主題 下一主題
收起左側

基于AT89C51單片機和555芯片構成的多諧振蕩電路電容測量

  [復制鏈接]
跳轉到指定樓層
樓主
ID:63924 發表于 2015-3-14 19:51 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

  1. /*********************************************************************************************************</這種電容測量方法主要是通過一塊555芯片來測量電容,讓555芯片工作在直接反饋無穩態的狀態下,555芯片輸出一定頻率的方波,其頻率的大小跟被測量的電容之間的關系是:f=0.772/(R*Cx),我們固定R的大小,其公式就可以寫為:f=k/Cx,只要我們能夠測量出555芯片輸出的頻率,就可以計算出測量的電容。計算頻率的方法可以利用單片機的計數器T0和中斷INT0配合使用來測量,這種研究方法相當的簡單。
  2. *********************************************************************************************************/
  3. #include "reg51.h"
  4. #include"intrins.h
  5. #define DATA P0
  6. sbit RW=P2^1;//1602寫數據
  7. sbit RS=P2^0;//1602寫地址
  8. sbit EN=P2^2; //1602工作使能
  9. sbit b_test=P3^7;   //控制小燈的亮滅
  10. sbit _reset=P3^5;   //555時基芯片工作控制信號
  11. unsigned int T_flag,N,C,i,Dis1,Dis0;
  12. unsigned int b[6]={0X13,0X0D,0X00,0X00,0X40,0X16};   //顯示C=00pF</FONT></P>
  13. /***********延時1MS******************/
  14. void Delay1ms(unsigned int mm)
  15. {unsigned int i;
  16. for(mm;mm>0;mm--)
  17.    for(i=100;i>0;i--);
  18. }
  19. /***************檢查忙否*****************/
  20. void Checkstates()
  21. {
  22. unsigned char dat;
  23. RS=0;
  24. RW=1;
  25. do{EN=1;//下降沿
  26.    _nop_();//保持一定間隔
  27. _nop_();
  28.     dat=DATA;
  29.     _nop_();
  30. _nop_();
  31.     EN=0;
  32. }while((dat&0x80)==1);
  33. }
  34. /**************LCD寫命令函數*********/
  35. void wcomd(unsigned char cmd)
  36. {
  37. Checkstates();
  38. RS=0;
  39. RW=0;
  40. DATA=cmd;
  41. EN=1;
  42. _nop_();
  43. _nop_();
  44. _nop_();
  45. _nop_();
  46. EN=0;
  47. }
  48. /**********LCD寫數據函數**************/
  49. void wdata(unsigned char dat)
  50. {
  51. Checkstates();
  52. RS=1;
  53. RW=0;
  54. DATA=dat;
  55. EN=1;
  56. _nop_();
  57. _nop_();
  58. _nop_();
  59. _nop_();
  60. EN=0;
  61. }
  62. /*****************初始化********************/
  63. void LCDINIT()
  64. {
  65. Delay1ms(15);
  66. wcomd(0x38);//功能設置
  67. Delay1ms(5);
  68. wcomd(0x38);//功能設置
  69. Delay1ms(5);
  70. wcomd(0x01);//清屏
  71. Delay1ms(5);
  72. wcomd(0x08);//關顯示
  73. Delay1ms(5);
  74. wcomd(0x0c);//開顯示,不開光標</FONT></P>
  75. <P><FONT color=black>}</FONT></P>
  76. <P><FONT color=black>/***********顯示函數**************/
  77. void Display(void) //顯示函數
  78. {
  79. unsigned char i,j;
  80. unsigned char a[12]={0X4D,0X45,0X41,0X53,0X55,0X52,0X45,0X4D,0X45,0X4E,0X54,0X53};//顯示measurements
  81. LCDINIT();
  82. for(i=0;i<12;i++)//寫顯示第一行
  83. { wcomd(0x80+i);
  84.     Delay1ms(1);
  85.     wdata(a[i]);
  86.     Delay1ms(1);
  87.    }

  88. for(j=0;j<6;j++)//寫顯示第二行
  89. {
  90. wcomd(0xc0+j);
  91.   Delay1ms(1);
  92.   wdata(0x30+b[j]);
  93.   Delay1ms(1);
  94. }
  95. Delay1ms(150);</FONT></P>
  96. <P><FONT color=black>}
  97. void main()
  98. {
  99.   IE=0x81;                          //打開全部的中斷控制,并開啟外部中斷允許
  100. TMOD=0x09;                        //T0為16位計數工作方式1
  101.   IT0=1;                            //設置外部中斷的觸發的方式為脈沖觸發
  102.   TH0=0x00;
  103.   TL0=0x00;
  104.   T_flag=0;
  105.   _reset=0;
  106.   b_test=1;
  107.   while(1)
  108. {
  109.     //while(!b_test)                   //如果有測量按鍵輸入就往下執行
  110.     //{
  111.      i=0;
  112.      _reset=1;                      //啟動555時基芯片
  113.      EX0=1;          //開啟中斷0
  114.      while(_reset)   //超出等待時間,中斷還沒有過來,就退出
  115.       {
  116.        i++;
  117.        if(i>50000)   //設置最長等待時間
  118.         {
  119.          _reset=0;  //最長等待時間到還沒有中斷,停止555
  120.         }
  121.      }
  122.      if(N<100)         //如果計數值小于100,顯示SM,表示應換用小一點的量程
  123.      {
  124.        b[3]=0X1D;
  125.        b[2]=0X23;
  126.       }
  127.     if(N>50000)        //如果計數值大于5000,顯示LA,表示應換用大一點的量程
  128.       {
  129.        b[3]=0X11;
  130.        b[2]=0X1C;
  131.       }
  132.      if(N>=100 && N<=50000)
  133.       {
  134.        C=N/100;         //計算電容的大小
  135.        b[2]=C/10;       //計算電容值的十位
  136.        b[3]=C-b[2]*10;  //計算電容值的各位
  137.       }
  138.      //}
  139.     Display(); //顯示電容的大小
  140. if(C>40)
  141.    b_test=0;
  142.    else
  143.     b_test=1;
  144.    }
  145. }
  146. void int0(void) interrupt 0   //第一次中斷開始計數,第二個中斷停止計數
  147. {
  148.   T_flag=!T_flag;
  149.   if(T_flag==1)
  150.   {
  151.    TR0=1;         //開始計時
  152.   }
  153.   if(T_flag==0)
  154.   {
  155.    TR0=0;         //停止計時
  156.    EX0=0;         //關閉中斷
  157.    _reset=0;      //停止發出方波
  158.    N=TH0*256+TL0; //計算計數器的值
  159.    N=N*5/3;
  160.    TH0=0x00;      //恢復初值
  161.    TL0=0x00;
  162.   }
  163. }[audio]http://play.baidu.com/?__m=mboxCtrl.playSong&__a=233111&__o=song/233111||playBtn&fr=altg3||www.baidu.com#[/audio]
復制代碼

單片機電容測量.rar

70.94 KB, 下載次數: 250, 下載積分: 黑幣 -5

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:162517 發表于 2017-1-22 09:47 | 只看該作者
謝謝樓主的分享,現在正在研究這個,剛好能用到
回復

使用道具 舉報

板凳
ID:185575 發表于 2017-4-2 15:02 | 只看該作者
最近我也在做這個東西 好東西 值得收藏
回復

使用道具 舉報

地板
ID:137653 發表于 2017-7-2 21:34 | 只看該作者
問一下為什么要N=N*5/3呢?
回復

使用道具 舉報

5#
ID:502429 發表于 2019-4-1 22:05 | 只看該作者
R1和R2應該多大?
回復

使用道具 舉報

6#
ID:726332 發表于 2020-4-13 23:01 | 只看該作者
有仿真電路嗎
回復

使用道具 舉報

7#
ID:813187 發表于 2020-10-3 09:35 | 只看該作者
可以,橫清楚
回復

使用道具 舉報

8#
ID:760449 發表于 2020-10-9 11:49 | 只看該作者
為什么LCD沒有顯示
回復

使用道具 舉報

9#
ID:948914 發表于 2021-10-7 20:18 | 只看該作者
樓主,你這個測試方法得到的電容值誤差咋樣,我也是用這個方法測的,但是誤差有時候大有時候小
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久久久久久一区 | 亚洲精品中文字幕在线观看 | 国产精品国产成人国产三级 | 99精品久久久久久中文字幕 | 国产精品a久久久久 | 最新国产精品 | 五月综合激情网 | 国产免费观看久久黄av片涩av | 日韩欧美亚洲 | 成人精品一区二区户外勾搭野战 | 午夜影院在线观看免费 | 人人干人人爽 | 日本小电影在线 | 青青久草| 成人亚洲精品 | 日本一区二区视频 | 中文字幕一二三区 | 欧美成人猛片aaaaaaa | 成人精品视频 | 国产乱码精品1区2区3区 | 久久国产精品一区二区 | 欧美一区二区成人 | 天天爱综合| 欧美激情久久久 | 久久久久国产精品一区三寸 | 欧美在线a | 亚洲国产高清高潮精品美女 | 国产免费一区二区 | 羞羞视频在线网站观看 | 精品久久一区 | 老牛嫩草一区二区三区av | 日本精品一区二区三区在线观看视频 | 国产精品成人在线 | 91资源在线 | 婷婷狠狠 | 国产精品成人品 | 久久看精品| 欧美日韩在线一区二区 | 国产精品永久免费视频 | 女同久久另类99精品国产 | 91热在线 |