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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3946|回復: 1
收起左側

51單片機制作的電容測量儀Proteus仿真程序(可測uf和nf級別)

[復制鏈接]
ID:892621 發表于 2021-11-9 17:40 | 顯示全部樓層 |閱讀模式
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.gif 51hei.png

單片機源程序如下:
  1. #include <reg51.h>

  2. sbit nF_check = P1^0;         //測量電容(nF)                                 
  3. sbit uF_check = P1^1;         //測量電容(uF)
  4. sbit stop = P1^2;                 //停止測量按鈕
  5. sbit P20 = P2^0;                 //百位控制
  6. sbit P21 = P2^1;                 //十位控制
  7. sbit P22 = P2^2;                 //個位及小數點控制
  8. sbit P23 = P2^3;                 //十分位控制
  9. sbit P24 = P2^4;                 //“n”或“u”顯示控制
  10. sbit P25 = P2^5;                 //“F”顯示控制
  11. sbit P26 = P2^6;                 //
  12. sbit P27 = P2^7;                 //
  13. sbit P30 = P3^0;                 //電阻電容測量繼電器
  14. sbit P31 = P3^1;                 //
  15. sbit P32 = P3^2;                 //計時停止請求(中斷0)
  16. sbit P33 = P3^3;                 //計時開始請求(中斷1)及測量開始開關
  17. sbit P34 = P3^4;
  18. sbit P35 = P3^5;
  19. sbit P36 = P3^6;
  20. sbit P37 = P3^7;

  21. char code word[] = {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,
  22.                     0x7F,0x6F,0x37,0x3E,0x71,0x80};     
  23.                                         //'0'~'9'和n、u、F及小數點.等字形碼
  24. long int N=0;                //計數變量

  25. /********************************************************************
  26. 函數功能:延時函數
  27. 入口參數: us
  28. 出口參數:
  29. ********************************************************************/
  30. void delay(us)
  31. {
  32.    while(us--);
  33. }

  34. /********************************************************************
  35. 函數功能:中斷初始化
  36. 入口參數:
  37. 出口參數:
  38. ********************************************************************/
  39. void INT0_init()
  40. {
  41.    IE = 0x87;  //打開總中斷及外部中斷0、1,定時器中斷0
  42.    IT0 = 1;    //下降沿觸發
  43.    IT1 = 1;
  44. }

  45. /********************************************************************
  46. 函數功能:外部中斷0處理
  47. 入口參數:
  48. 出口參數:
  49. ********************************************************************/
  50. void INT0_pro(void) interrupt 0    //外部中斷0
  51. {
  52.   TR0 = 0;                               //T0停止計時
  53. }

  54. /********************************************************************
  55. 函數功能:外部中斷1處理
  56. 入口參數:
  57. 出口參數:
  58. ********************************************************************/
  59. void INT1_pro(void) interrupt 2    //外部中斷1
  60. {
  61.     TR0 = 1;                           //T0開始計時
  62. }
  63. /********************************************************************
  64. 函數功能:定時器0初始化
  65. 入口參數:
  66. 出口參數:
  67. ********************************************************************/
  68. void Timer_init() {
  69.         
  70.         TMOD = 0x02;            //定時器0工作于方式2(8位自動重裝定時器)
  71.         TH0  = 256-100;            //定時器0設定時間為100us(假設晶振為12MHz,
  72.         TL0  = 256-100;     //則時鐘周期為1/12us,機器周期為1us),頻率為10kHz。  
  73. }

  74. /********************************************************************
  75. 函數功能:定時器0中斷處理(時基)
  76. 入口參數:
  77. 出口參數:
  78. ********************************************************************/
  79. void _Timer_clock(void) interrupt 1   //定時器0(溢出)中斷,中斷1
  80. {
  81.     N++;
  82. }

  83. /********************************************************************
  84. 函數功能:數據顯示函數
  85. 入口參數:  CV
  86. 出口參數:
  87. ********************************************************************/
  88. void CV_disp(long int CV)
  89. {

  90. //數碼管位選方式--灌電流//
  91.         P2=0xff;         
  92.                 P0=word[CV/1000];         P20=0; delay(60);          //千位
  93.                 P2=0xff;         
  94.                 P0=word[(CV/100)%10];     P21=0; delay(60);          //百位
  95.         P2=0xff;     
  96.                 P0=word[(CV/10)%10];      P22=0; delay(60);          //十位
  97.         P2=0xff;        
  98.                 P0=word[CV%10];           P23=0; delay(60);          //個位
  99.                            
  100. }

  101. /********************************************************************
  102. 函數功能:主函數
  103. 入口參數:
  104. 出口參數:
  105. ********************************************************************/
  106. void main()
  107. {
  108.    long int C=0;
  109.    INT0_init();
  110.    Timer_init();
  111.    while(1){
  112.          
  113. //數碼管位選方式--灌電流//
  114.      while(!nF_check) {                                 //測量電容(nF)
  115.                  P30=1;
  116.                  if(TR0 && !P33) C=N*610/1000;//取R=10M,C為nF級,則時間常數t=RC=(10*10^6)*(C*10^-9)=C*10^-2;
  117.                                               //若在t期間對已知脈沖進行計數,且選脈沖頻率f=10k=10^4,
  118.                  else N=0;                                          //則計數值N=f*t=100C(nF),所以C=N/100。
  119.                                               //C=N*610/1000是算法修正
  120.                  P2=0xff;
  121.                  P0=word[10];        P24=0;  delay(60);             //第5位顯示n
  122.                  P2=0xff;
  123.                  P0=word[12];                 P25=0;         delay(60);             //第6位顯示F
  124.                  P2=0xff;
  125.                  P0=word[13];                 P22=0;         delay(60);             //第3位顯示小數點
  126.                  CV_disp(C);                                                                 //顯示測量值
  127.                  if(!stop) TR0=0;
  128.           }        
  129.         
  130.           while(!uF_check) {                        //測量電容(uF)        
  131.                  P30=0;                                                
  132.          if(TR0 && !P33) C=N*160/10000;//取R=100k,C為uF級,則時間常數t=RC=(100*10^3)*(C*10^-6)=C*10^-1;
  133.                                                //若在t期間對已知脈沖進行計數,且選脈沖頻率f=10k=10^4,
  134.                  else N=0;                                       //則計數值N=f*t=1000C(uF),于是應有C=N/1000。
  135.                                                //C=N*160/10000是為消除誤差所進行的補償運算
  136.          P2=0xff;
  137.                  P0=word[11];        P24=0;  delay(60);             //第5位顯示u
  138.                  P2=0xff;
  139.                  P0=word[12];                 P25=0;         delay(60);             //第6位顯示F
  140.                  P2=0xff;
  141.                  P0=word[13];                 P22=0;         delay(60);             //第3位顯示小數點
  142.                  CV_disp(C);                                                                 //顯示測量值
  143.                  if(!stop) TR0=0;
  144.           }        
  145.         }   
  146. }
復制代碼
51hei.png
所有資料51hei附件下載:
電容測量.7z (113.41 KB, 下載次數: 98)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:986271 發表于 2021-11-30 10:29 | 顯示全部樓層
你這個仿真的設計思路和方案能簡單的說下嗎
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久一区二区三区免费 | 国产激情视频 | 精品1区2区3区 | 久久久久久国产 | 国产精品免费小视频 | 欧美一级片 | a级大片免费观看 | 毛色毛片免费看 | 黄色一级大片在线免费看产 | 黄色激情毛片 | 国产成视频在线观看 | 精品福利在线 | 国产高清精品一区 | 干干干操操操 | 国产高清在线观看 | 欧美三级在线 | 日韩av视屏| 日本人麻豆 | 自拍偷拍3p | 国产在线精品一区二区 | 国产视频中文字幕在线观看 | 91精品国产乱码久久久 | 国产日韩欧美91 | 久久久91精品国产一区二区三区 | 国产特级毛片 | 视频一区二区三区中文字幕 | 国产精品99久久久久久久vr | 激情欧美一区二区三区中文字幕 | 精产国产伦理一二三区 | 美女福利视频网站 | 久久大陆 | 日韩在线视频免费观看 | 亚洲喷水 | 亚洲欧洲成人在线 | 婷婷久久一区 | 国产极品粉嫩美女呻吟在线看人 | 久久久久久久久久久高潮一区二区 | 久久久久国产 | 久久亚洲国产 | 国产一区 | av一级 |