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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 9380|回復(fù): 5
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)電容測(cè)量電路+程序設(shè)計(jì)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:510819 發(fā)表于 2019-4-13 22:02 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
非原創(chuàng),和大家分享一下
基于AT89C51單片機(jī)和555芯片構(gòu)成的多諧振蕩電路設(shè)計(jì)一電容測(cè)量電路,這種測(cè)量方法主要是通過(guò)一塊555芯片來(lái)測(cè)量電容大小。讓555芯片工作在直接反饋無(wú)穩(wěn)態(tài)的狀態(tài)下,555芯片輸出一定頻率的方波,其頻率的大小跟被測(cè)量的電容之間的關(guān)系是:f=0.772/(R*Cx) ,固定R的大小,其公式就可以寫(xiě)為:f=k/Cx,只要能夠測(cè)量出555芯片輸出的頻率,就可以計(jì)算出測(cè)量的電容。計(jì)算頻率的方法可以利用單片機(jī)的計(jì)數(shù)器T0和中斷INT0配合使用來(lái)進(jìn)行測(cè)量。
1.3.1 系統(tǒng)硬件電路設(shè)計(jì)
該電路主要由單片機(jī)AT89C51、按鍵、繼電器、74HC08、LCD16028、555芯片等構(gòu)成,整體設(shè)計(jì)電路如圖1-7所示。
圖1-7
555模塊簡(jiǎn)介
NE555管腳功能介紹:
1腳為地。2腳為觸發(fā)輸入端;3腳為輸出端,輸出的電平狀態(tài)受觸發(fā)器控制,而觸發(fā)器受上比較器6腳和下比較器2腳的控制。
當(dāng)觸發(fā)器接受上比較器A1從R腳輸入的高電平時(shí),觸發(fā)器被置于復(fù)位狀態(tài),3腳輸出低電平;
2腳和6腳是互補(bǔ)的,2腳只對(duì)低電平起作用,高電平對(duì)它不起作用,即電壓小于1Ucc/3,此時(shí)3腳輸出高電平。6腳為閾值端,只對(duì)高電平起作用,低電平對(duì)它不起作用,即輸入 電壓大于2Ucc/3,稱高觸發(fā)端,3腳輸出低電平,但有一個(gè)先決條件,即2腳電位必須大于Ucc/3時(shí)才有效。3腳在高電位接近電源電壓Ucc,輸出電流最大可打200mA。
4腳是復(fù)位端,當(dāng)4腳電位小于0.4V時(shí),不管2、6腳狀態(tài)如何,輸出端3腳都輸出低電平。5腳是控制端。7腳稱放電端,與3腳輸出同步,輸出電平一致,但7腳并不輸出電流,所以3腳稱為實(shí)高(或低)、7腳稱為虛高。
555集成電路的框圖及工作原理:
555集成電路開(kāi)始是作定時(shí)器應(yīng)用的,所以叫做555定時(shí)器或555時(shí)基電路。但后來(lái)經(jīng)過(guò)開(kāi)發(fā),它除了作定時(shí)延時(shí)控制外,還可用于調(diào)光、調(diào)溫、調(diào)壓、調(diào)速等多種控制及計(jì)量檢測(cè)。此外,還可以組成脈沖振蕩、單穩(wěn)、雙穩(wěn)和脈沖調(diào)制電路,用于交流信號(hào)源、電源變換、頻率變換、脈沖調(diào)制等。由于它工作可靠、使用方便、價(jià)格低廉,目前被廣泛用于各種電子產(chǎn)品中,555集成電路內(nèi)部有幾十個(gè)元器件,有分壓器、比較器、基本R-S觸發(fā)器、放電管以及緩沖器等,電路比較復(fù)雜,是模擬電路和數(shù)字電路的混合體,如圖1所示。
555振蕩器電路(無(wú)穩(wěn)電路):
    由555定時(shí)器構(gòu)成的多諧振蕩器如圖9(a)所示,其工作波形見(jiàn)圖9(b)。
      接通電源后,電源VDD通過(guò)R1和R2對(duì)電容C充電,當(dāng)Uc<1/3VDD時(shí),振蕩器輸出Vo=1,放電管截止。當(dāng)Uc充電到≥2/3VDD后,振蕩器輸出Vo翻轉(zhuǎn)成0,此時(shí)放電管導(dǎo)通,使放電端(DIS)接地,電容C通過(guò)R2對(duì)地放電,使Uc下降。當(dāng)Uc下降到≤1/3VDD后,振蕩器輸出Vo又翻轉(zhuǎn)成1,此時(shí)放電管又截止,使放電端(DIS)不接地,電源VDD通過(guò)R1和R2又對(duì)電容C充電,又使Uc從1/3VDD上升到2/3VDD,觸發(fā)器又發(fā)生翻轉(zhuǎn),如此周而復(fù)始,從而在輸出端Vo得到連續(xù)變化的振蕩脈沖波形。脈沖寬度TL≈0.7R2C,由電容C放電時(shí)間決定;TH=0.7(R1+R2)C,由電容C充電時(shí)間決定,脈沖周期T≈TH+TL。
1.3.2系統(tǒng)軟件設(shè)計(jì)
系統(tǒng)主程序設(shè)計(jì)流程如圖3-4所示,主要完成定時(shí)器的初始化,啟動(dòng)555芯片工作,等待中斷,若有中斷,則計(jì)算電容大小,顯示電容大小,然后等待下一次中斷。

proteus仿真
載入hex文件,如圖1-8
圖1-8
可以改變單刀雙擲開(kāi)關(guān)SW1,切換被測(cè)量的電容。LCD1602上即可顯示被測(cè)電容的值,仿真時(shí)會(huì)有誤差。

程序清單如下:
用keil c編譯
本工程包含一個(gè)文件
電容測(cè)量.c
  1. /******************************文件Main.c 如下****************************/
  2. //編譯環(huán)境 :keil c51
  3. //mpu型號(hào):stc89c52rc
  4. //晶振頻率:12M
  5. //操作系統(tǒng):win x
  6. /*************************************************************************/
  7. #include "reg51.h"
  8. #include"intrins.h"                                                                                                                              //庫(kù)函數(shù)

  9. #define DATA P0
  10. sbit RW=P2^1;                                                                                                                                            //1602寫(xiě)數(shù)據(jù)
  11. sbit RS=P2^0;                                                                                                                                            //1602寫(xiě)地址
  12. sbit EN=P2^2;                                                                                                                                             //1602工作使能
  13. sbit b_test=P3^7;                                                                                                                                 //控制小燈的亮滅
  14. sbit _reset=P3^5;                                                                                                                                 //555時(shí)基芯片工作控制信號(hào)
  15. unsigned int T_flag,N,C,i,Dis1,Dis0;
  16. unsigned int b[6]={0X13,0X0D,0X00,0X00,0X40,0X16};                          //顯示C=00pF

  17. /*******************************延時(shí)1ms*********************************/
  18. void Delay1ms(unsigned int mm)
  19. {unsigned int i;
  20. for(mm;mm>0;mm--)
  21.    for(i=100;i>0;i--);
  22. }
  23. /********************************檢查忙否********************************/
  24. void Checkstates()
  25. {
  26. unsigned char dat;
  27. RS=0;
  28. RW=1;
  29. do{EN=1;                                                                                                                                                          //下降沿
  30.    _nop_();                                                                                                                                                          //保持一定間隔
  31.               _nop_();
  32.     dat=DATA;
  33.     _nop_();
  34.               _nop_();
  35.     EN=0;
  36. }while((dat&0x80)==1);
  37. }
  38. /*******************************LCD寫(xiě)命令函數(shù)****************************/
  39. void wcomd(unsigned char cmd)
  40. {
  41. Checkstates();
  42. RS=0;
  43. RW=0;
  44. DATA=cmd;
  45. EN=1;
  46. _nop_();
  47. _nop_();
  48. _nop_();
  49. _nop_();
  50. EN=0;
  51. }
  52. /******************************LCD寫(xiě)數(shù)據(jù)函數(shù)*******************************/
  53. void wdata(unsigned char dat)
  54. {
  55. Checkstates();
  56. RS=1;
  57. RW=0;
  58. DATA=dat;
  59. EN=1;
  60. _nop_();
  61. _nop_();
  62. _nop_();
  63. _nop_();
  64. EN=0;
  65. }
  66. /********************************初始化***********************************/
  67. void LCDINIT()
  68. {
  69. Delay1ms(15);
  70. wcomd(0x38);                                                                                                                              //功能設(shè)置
  71. Delay1ms(5);
  72. wcomd(0x38);                                                                                                                              //功能設(shè)置
  73. Delay1ms(5);
  74. wcomd(0x01);                                                                                                                              //清屏
  75. Delay1ms(5);
  76. wcomd(0x08);                                                                                                                              //關(guān)顯示
  77. Delay1ms(5);
  78. wcomd(0x0c);                                                                                                                              //開(kāi)顯示,不開(kāi)光標(biāo)

  79. }

  80. /********************************顯示函數(shù)********************************/
  81. void Display(void) //顯示函數(shù)
  82. {
  83. unsigned char i,j;
  84. unsigned char a[12]={0X4D,0X45,0X41,0X53,0X55,0X52,0X45,0X4D,0X45,0X4E,0X54,0X53};//顯示measurements
  85. LCDINIT();
  86. for(i=0;i<12;i++)                                                                                                                              //寫(xiě)顯示第一行
  87. { wcomd(0x80+i);
  88.     Delay1ms(1);
  89.     wdata(a[i]);
  90.     Delay1ms(1);
  91.    }

  92. for(j=0;j<6;j++)                                                                                                                              //寫(xiě)顯示第二行
  93. {
  94. wcomd(0xc0+j);
  95.   Delay1ms(1);
  96.   wdata(0x30+b[j]);
  97.   Delay1ms(1);
  98. }
  99. Delay1ms(150);

  100. }
  101. /********************************主程序函數(shù)********************************/

  102. void main()
  103. {
  104.   IE=0x81;                                                                                  //打開(kāi)全部的中斷控制,并開(kāi)啟外部中斷允許
  105. TMOD=0x09;                                                                  //T0為16位計(jì)數(shù)工作方式1
  106.   IT0=1;                                                                                    //設(shè)置外部中斷的觸發(fā)的方式為脈沖觸發(fā)
  107.   TH0=0x00;
  108.   TL0=0x00;
  109.   T_flag=0;
  110. _reset=0;
  111.   b_test=1;
  112.   while(1)
  113. {
  114.     //while(!b_test)                                                             //如果有測(cè)量按鍵輸入就往下執(zhí)行
  115.     //{
  116.      i=0;
  117.      _reset=1;                                                                              //啟動(dòng)555時(shí)基芯片
  118.      EX0=1;                                                                                              //開(kāi)啟中斷0
  119.      while(_reset)                                                                         //超出等待時(shí)間,中斷還沒(méi)有過(guò)來(lái),就退出
  120.       {
  121.        i++;
  122.        if(i>50000)                                                                         //設(shè)置最長(zhǎng)等待時(shí)間
  123.         {
  124.          _reset=0;                                                                                      //最長(zhǎng)等待時(shí)間到還沒(méi)有中斷,停止555
  125.         }
  126.      }
  127.      if(N<100)                                                                               //如果計(jì)數(shù)值小于100,顯示SM,表示應(yīng)換用小一點(diǎn)的量程
  128.      {
  129.        b[3]=0X1D;
  130.        b[2]=0X23;
  131.       }
  132. if(N>50000)                                                                              //如果計(jì)數(shù)值大于5000,顯示LA,表示應(yīng)換用大一點(diǎn)的量程
  133.       {
  134.        b[3]=0X11;
  135.        b[2]=0X1C;
  136.       }
  137.      if(N>=100 && N<=50000)
  138.       {
  139.        C=N/100;                                                                               //計(jì)算電容的大小
  140.        b[2]=C/10;                                                                             //計(jì)算電容值的十位
  141.        b[3]=C-b[2]*10;                                                                        //計(jì)算電容值的個(gè)位
  142.       }
  143.      //}
  144.     Display();                                                                                     //顯示電容的大小
  145.               if(C>40)
  146.                 b_test=0;
  147.                 else
  148.                  b_test=1;
  149.   }

  150. /******************************外中斷0服務(wù)函數(shù)*****************************/

  151. void int0(void) interrupt 0                                                           //第一次中斷開(kāi)始計(jì)數(shù),第二個(gè)中斷停止計(jì)數(shù)
  152. {
  153.   T_flag=!T_flag;
  154.   if(T_flag==1)
  155.   {
  156.    TR0=1;                                                                                             //開(kāi)始計(jì)時(shí)
  157.   }
  158.   if(T_flag==0)
  159.   {
  160.    TR0=0;                                                                                             //停止計(jì)時(shí)
  161.    EX0=0;                                                                                             //關(guān)閉中斷
  162.    _reset=0;                                                                                          //停止發(fā)出方

  163. ^^^^^^^^^^^^^^^^^^
  164. 余下內(nèi)容下載附件
  165.    
復(fù)制代碼


全部資料51hei下載地址:
啊啊.docx (214.44 KB, 下載次數(shù): 179)


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

使用道具 舉報(bào)

沙發(fā)
ID:722171 發(fā)表于 2020-4-6 12:31 來(lái)自觸屏版 | 只看該作者
有沒(méi)有詳細(xì)介紹
回復(fù)

使用道具 舉報(bào)

板凳
ID:724239 發(fā)表于 2020-4-7 18:05 | 只看該作者
右下角那個(gè)元件是什么啊
回復(fù)

使用道具 舉報(bào)

地板
ID:819012 發(fā)表于 2020-9-14 21:57 | 只看該作者
請(qǐng)問(wèn)樓主,這個(gè)原創(chuàng)出自哪里,急求~~!
回復(fù)

使用道具 舉報(bào)

5#
ID:902516 發(fā)表于 2021-4-25 11:02 來(lái)自觸屏版 | 只看該作者
樓主問(wèn)個(gè)問(wèn)題,這個(gè)程序直接燒錄到主芯片就可以用了嗎?顯示屏需不需要
回復(fù)

使用道具 舉報(bào)

6#
ID:927124 發(fā)表于 2021-5-25 16:55 | 只看該作者
出不來(lái)
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久aⅴ乱码一区二区三区 亚洲国产成人精品久久久国产成人一区 | 久久久女女女女999久久 | 国产成人精品一区二区三区视频 | 在线一区 | 青青草精品视频 | 国产精品久久精品 | 久久久久91| 欧美成人自拍 | 国产精品毛片无码 | 精品久久久久久一区二区 | 国产精品揄拍一区二区 | 伊人久久伊人 | 国产精品久久久久久久7777 | 亚洲五码久久 | 国产免费人成xvideos视频 | 97超碰在线播放 | 午夜影院在线观看 | 欧美日韩精品一区 | 国产一区二区三区在线视频 | 国产福利在线看 | 一区二区三区回区在观看免费视频 | 美女日皮网站 | 色视频在线播放 | 久久久精品黄色 | 91视频在线观看 | 久久久久国产一区二区三区四区 | 日韩亚洲一区二区 | 91精品国产91久久久久久吃药 | 日本免费小视频 | 久久精品国产久精国产 | 超碰在线人人 | 亚洲精品一区二区三区丝袜 | 免费在线精品视频 | 成人午夜视频在线观看 | 成人在线小视频 | 国产91av视频在线观看 | 91久久夜色 | 中文字幕99 | 午夜国产一级片 | 国产精品国产三级国产aⅴ中文 | 日本精品999 |