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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8508|回復(fù): 6
收起左側(cè)

51單片機自動換擋測電容最終版原理圖與程序源碼

  [復(fù)制鏈接]
ID:313175 發(fā)表于 2018-4-21 16:34 | 顯示全部樓層 |閱讀模式
自動測量電容,通過555構(gòu)成多諧振蕩器測量頻率,因為頻率與555定時器2和6腳的RC有關(guān),固定R大小,來測量電容大小,
所謂換擋是因為51單片機晶振有限不能測太高的頻率,則需換固定R為另一個R將頻率降低,以便能測出。

電路原理圖如下:
圖片1.png

0.jpg

單片機源程序如下:
  1. #include<reg52.h>
  2. #include "lcd1602.h"

  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. sbit Key1M=P1^0;
  6. sbit Key1K=P1^1;
  7. sbit  Key1=P1^2;
  8. sbit  Key2=P1^3;
  9. sbit  Key3=P1^4;

  10. uchar plv[]={"        Hz"};
  11. uchar cap1[]={"0000000000 uF"};
  12. uchar cap2[]={"0000000 nF"};
  13. uchar cap3[]={"000 pF"};
  14. uchar    n[]={"             "};

  15. unsigned long Frequency;
  16. unsigned long C1,C2;
  17. uchar num;
  18. uchar T1count;
  19. uchar D1M,D1K,ZD;
  20. bit flag;

  21. void dangwei();
  22. void display();
  23. void main()
  24. {
  25.    init_lcd1602();
  26.         Key1M=1;
  27.         Key1K=0;
  28.     TMOD=0x51;

  29.         TH0=(65536-50000)/256;
  30.         TL0=(65536-50000)%256;

  31.     TH1=0;
  32.         TL1=0;

  33.         EA=1;
  34.         TR0=1;                                                                                  
  35.         ET0=1;
  36.         TR1=1;
  37.         ET1=1;
  38.         while(1)
  39.         {
  40.           dangwei();
  41.           if(flag==1)
  42.            {
  43.                     flag=0;
  44.                     Frequency=T1count*65536+TH1*256+TL1;

  45.                     plv[0]=Frequency/1000000+48;
  46.                         plv[1]=Frequency/100000%10+48;
  47.                         plv[2]=Frequency/10000%10+48;
  48.                         plv[3]=Frequency/1000%10+48;
  49.                         plv[4]=Frequency/100%10+48;
  50.                         plv[5]=Frequency/10%10+48;
  51.                         plv[6]=Frequency%10+48;
  52.                         display_lcd1602_text(1,0,plv);

  53.                         if(D1K==1)
  54.                            {
  55.                              Key1M=0;
  56.                                  Key1K=1;
  57.                                  C1=1.4398*1000000/(1000+2*1000)/Frequency*1000000;
  58.                                  display();  
  59.                            }
  60.                         if(D1M==1)
  61.                            {
  62.                              Key1M=1;
  63.                                  Key1K=0;
  64.                                  C1=1.4398*1000000/(1000+2*1000000)/Frequency*1000000;
  65.                                  display();
  66.                            }
  67.                
  68.                          if(ZD==1)
  69.                            {
  70.                               if(Frequency>50 && Key1M==1)         //一旦頻率大于50HZ,且為1M檔   
  71.                                           {
  72.                                                 C1=1.4398*1000000/(1000+2*1000000)/Frequency*1000000;
  73.                                         display();                 //將頻率用1M阻值換算               
  74.                                           }
  75.                                                                        
  76.                                   if(Frequency<50000 && Key1K==1)         //一旦頻率小于50000HZ,且為1k檔         
  77.                                          {
  78.                                                 C1=1.4398*1000000/(1000+2*1000)/Frequency*1000000;
  79.                                         display();                 //將頻率用1k阻值換算       
  80.                                          }
  81.                                
  82.                                   if(Frequency<50 && Key1M==1)         //一旦頻率小于50HZ,且為1M檔       因為6800pf  真實頻率比100HZ小,但比50HZ大
  83.                                          {                                                                                                                   //從而避免一直切換
  84.                                                 Key1M=0;
  85.                                         Key1K=1;                          //切換為1M檔,讓頻率重新更新?lián)Q算
  86.                                          }
  87.                                
  88.                                   if(Frequency>50000 && Key1K==1)         //一旦頻率大于50000HZ,且為1k檔           因為10000pf  真實頻率比48000HZ大,但比50000小
  89.                                                                                                                                                                                    //從而避免一直切換
  90.                                          {
  91.                                                 Key1M=1;                          //切換為1M檔,讓頻率重新更新?lián)Q算
  92.                                         Key1K=0;                                         
  93.                                          }            
  94.                  }
  95.                                 num=0;           
  96.                                 T1count=0;                                            
  97.                                 TH1=0;              
  98.                                 TL1=0;            
  99.                                 TR1=1;
  100.               }
  101.      }
  102. }

  103. void display()
  104. {
  105.     if(C1<1000)
  106.           {
  107.                 C2=C1;
  108.                 C2=C2-26;               
  109.                 cap3[0]=C2/100+48;
  110.                 cap3[1]=C2/10%10+48;
  111.                 cap3[2]=C2%10+48;
  112.                 display_lcd1602_text(0,0,n);
  113.             display_lcd1602_text(0,0,cap3);       
  114.            }
  115.          if(C1>=1000&&C1<1000000)
  116.            {
  117.                  C2=C1;
  118.                  C2=C2-26;
  119.                  cap2[0]=C2/100000+48;
  120.                  cap2[1]=C2/10000%10+48;
  121.                  cap2[2]=C2/1000%10+48;
  122.                  cap2[3]='.';
  123.                  cap2[4]=C2/100%10+48;
  124.                  cap2[5]=C2/10%10+48;
  125.                  cap2[6]=C2%10+48;
  126.                  display_lcd1602_text(0,0,n);
  127.                  display_lcd1602_text(0,0,cap2);
  128.            }
  129.          if(C1>=1000000&&C1<=600000000)
  130.                 {
  131.                   C2=C1;
  132.                   C2=C2-26;
  133.                   cap1[0]=C2/100000000+48;
  134.                   cap1[1]=C2/10000000%10+48;
  135.                   cap1[2]=C2/1000000%10+48;
  136.                   cap1[3]='.';
  137.                   cap1[4]=C2/100000%10+48;
  138.                   cap1[5]=C2/10000%10+48;
  139.                   cap1[6]=C2/1000%10+48;
  140.                   cap1[7]=C2/100%10+48;
  141.                   cap1[8]=C2/10%10+48;
  142.                   cap1[9]=C2%10+48;
  143.                   display_lcd1602_text(0,0,n);
  144.                   display_lcd1602_text(0,0,cap1);
  145.                 }
  146. }

  147. void dangwei()
  148. {
  149. //         D1K=0;
  150. //         D1M=0;
  151. //         ZD=1;
  152.     if(Key1==0)        //1K檔位
  153.            {
  154.                  delay(20);
  155.                  if(Key1==0)
  156.                    {
  157.                      D1K=1;
  158.                          D1M=0;
  159.                          ZD=0;
  160.                    }
  161.            }
  162.         if(Key2==0)        // 1M檔位
  163.            {
  164.                  delay(20);
  165.                  if(Key2==0)
  166.                    {
  167.                      D1K=0;
  168.                          D1M=1;
  169.                          ZD=0;
  170.                    }
  171.            }
  172.         if(Key3==0)         //        自動換檔位
  173.            {
  174.                  delay(20);
  175.                  if(Key3==0)
  176.                    {
  177.                      D1K=0;
  178.                          D1M=0;
  179.                          ZD=1;
  180.                    }
  181.            }
  182. }

  183. void jishu() interrupt 3 using 0   //定時器1 計數(shù)
  184. {
  185.      T1count++;
  186. }

  187. void timer0() interrupt 1  using 0 //定時0 定時1s
  188. {
  189.       num++;
  190. ……………………

  191. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
自動換擋測電容最終版.zip (50 KB, 下載次數(shù): 161)

評分

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

查看全部評分

回復(fù)

使用道具 舉報

ID:258743 發(fā)表于 2018-4-21 19:18 | 顯示全部樓層
附件不能下載啊
回復(fù)

使用道具 舉報

ID:313428 發(fā)表于 2018-4-21 22:57 | 顯示全部樓層
樓主厲害啊!
回復(fù)

使用道具 舉報

ID:443448 發(fā)表于 2018-12-10 17:11 | 顯示全部樓層
樓主,有pcb嗎
回復(fù)

使用道具 舉報

ID:597781 發(fā)表于 2019-8-8 15:42 | 顯示全部樓層
樓主厲害啊,希望自己也可以做出來,不過想問一下這個測電容的可以精確到那個單位啊
回復(fù)

使用道具 舉報

ID:597781 發(fā)表于 2019-8-8 16:17 | 顯示全部樓層
樓主,我想知道一下這個單片機stc89c52為什么在proteus里面找不到呢,這個單片機是您自己設(shè)計的還是只是我沒找到你喜歡,求解答
回復(fù)

使用道具 舉報

ID:807126 發(fā)表于 2020-7-23 15:57 | 顯示全部樓層
能發(fā)下這個的仿真嗎
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产高清视频在线观看 | 在线观看国产 | 操操日 | 精品蜜桃一区二区三区 | 国产视频在线一区二区 | 高清免费在线 | 在线免费黄色小视频 | 在线精品一区 | 欧美激情综合色综合啪啪五月 | 国外成人免费视频 | 欧美日韩国产一区二区三区不卡 | 婷婷久久五月天 | 91久久精品国产91久久性色tv | 成人免费视频网站在线看 | 一级片免费视频 | 成人免费在线视频 | 亚洲综合色视频在线观看 | 国产精品视频一二三区 | 国产成人精品一区二区三区在线 | 99这里只有精品视频 | 一区二区中文字幕 | 人干人人| 欧美精品一区二区三区在线播放 | 亚洲国产欧美一区二区三区久久 | 成人h视频在线 | 91亚洲精品国偷拍自产在线观看 | 午夜精品一区 | 人人干人人舔 | 国产精品久久久久久久7电影 | 精品国产乱码久久久久久丨区2区 | 精品国产一区二区国模嫣然 | 国产精品色综合 | 亚洲综合视频 | 国产婷婷 | 欧美中文 | 男女羞羞视频在线免费观看 | 日韩亚洲一区二区 | 免费在线观看一区二区 | 日本精品视频在线 | 丝袜 亚洲 另类 欧美 综合 | 99精品久久 |