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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于單片機開發的電阻電容測量儀仿真+源程序

  [復制鏈接]
跳轉到指定樓層
樓主
設計中采用利用振蕩頻率來完成對電阻電容的測量。需要注意的是,對電阻電容的測量需要自己通過按鍵功能來選擇。電容測量的范圍0-10000pf,電阻這邊是小于1兆歐的可以測量。下面是程序。

電阻電容測量儀仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)



單片機源程序如下:
  1. #include"reg52.h"
  2. #include"stdio.h"
  3. #include"math.h"
  4. #include"absacc.h"
  5. #include"intrins.h"

  6. typedef unsigned char uchar;
  7. typedef unsigned int  uint;

  8. unsigned char inte=0;                                
  9. float  uu=0;                                
  10. unsigned long int ff=0;       
  11. unsigned long int DL,DH;

  12. sbit sc=P1^6;
  13. sbit sr=P1^7;
  14. sbit fw=P3^5;       
  15. sbit srg=P1^2;
  16. sbit srd=P1^3;       
  17. sbit scg=P1^4;
  18. sbit scd=P1^5;  
  19. sbit fr=P1^0;
  20. sbit fc=P1^1;
  21. sbit LED=P3^7;

  22. sbit rs=P2^2;            
  23. sbit rw=P2^1;           
  24. sbit en=P2^0;

  25. sbit CS   = P3^4;
  26. sbit Clk = P3^3;
  27. sbit DATI = P3^2;
  28. sbit DATO = P3^2;


  29. /*******************************定義全局變量********************************/
  30. unsigned char dat = 0x00;                      //AD值
  31. unsigned char CH;  

  32. unsigned char code table[]={"0123456789"};

  33. #define count_M1 50000
  34. #define H_0 (65536-count_M1)/256
  35. #define L_0 (65536-count_M1)%256
  36. char times=0;

  37. bit status_F=1;
  38. char scan=1;
  39. unsigned int freq=0;
  40. sfr16 DPTR=0x82;

  41. void delay1ms(int);
  42. void display(uint x);
  43. void display1(uint dat);

  44. //入口參數:CH  出口參數:dat
  45. unsigned char adc0832(unsigned char CH)
  46. {
  47.         unsigned char i,test,adval;
  48.     adval = 0x00;
  49.     test = 0x00;

  50.     Clk = 0;       //初始化
  51.     DATI = 1;
  52.         _nop_();
  53.     CS = 0;
  54.     _nop_();
  55.     Clk = 1;
  56.            _nop_();

  57.         if ( CH == 0x00 )      //通道選擇
  58.            {
  59.              Clk = 0;
  60.                DATI = 1;      //通道0的第一位
  61.                _nop_();
  62.               Clk = 1;
  63.         _nop_();
  64.         Clk = 0;
  65.               DATI = 0;      //通道0的第二位
  66.               _nop_();
  67.               Clk = 1;
  68.               _nop_();
  69.     }
  70.     else
  71.     {
  72.                 Clk = 0;
  73.               DATI = 1;      //通道1的第一位
  74.                _nop_();
  75.                Clk = 1;
  76.                _nop_();
  77.               Clk = 0;
  78.               DATI = 1;      //通道1的第二位
  79.             _nop_();
  80.              Clk = 1;
  81.              _nop_();
  82.     }

  83.     Clk = 0;
  84.     DATI = 1;

  85.     for( i = 0;i < 8;i++ )      //讀取前8位的值
  86.     {
  87.                 _nop_();
  88.                adval <<= 1;
  89.                Clk = 1;
  90.                _nop_();
  91.                Clk = 0;
  92.                if (DATO)
  93.                 adval |= 0x01;
  94.               else
  95.                   adval |= 0x00;
  96.     }

  97.         for (i = 0; i < 8; i++)      //讀取后8位的值
  98.     {
  99.                 test >>= 1;
  100.         if (DATO)
  101.                 test |= 0x80;
  102.         else
  103.         test |= 0x00;
  104.         _nop_();
  105.         Clk = 1;
  106.         _nop_();
  107.         Clk = 0;
  108.     }
  109.         if (adval == test)      //比較前8位與后8位的值,如果不相同舍去。若一直出現顯示為零,請將該行去掉
  110.             dat = test;
  111.               _nop_();
  112.                CS = 1;        //釋放ADC0832
  113.                DATO = 1;
  114.                Clk = 1;
  115.               return dat;
  116. }

  117. void delay(uint n)                          
  118. {
  119.     uint x,y;
  120.     for(x=n;x>0;x--)
  121.     for(y=110;y>0;y--);
  122. }


  123. void lcd_wcom(uchar com)           
  124. {
  125.     rs=0;               
  126.     rw=0;               
  127.     P0=com;           
  128.     delay(5);      
  129.     en=1;           
  130.     en=0;
  131. }


  132. void lcd_wdat(uchar dat)      
  133. {
  134.     rs=1;            
  135.     rw=0;            
  136.     P0=dat;        
  137.     delay(5);      
  138.     en=1;        
  139.     en=0;
  140.   }


  141. void lcd_init(void)            
  142. {
  143.     lcd_wcom(0x38);           
  144.     lcd_wcom(0x0c);      
  145.     lcd_wcom(0x06);   
  146.     lcd_wcom(0x01);   
  147. }


  148. void lcd_xianshi1(void)            
  149. {
  150.         lcd_wcom(0x80+0x40);
  151.     lcd_wdat('D');
  152.     lcd_wdat('i');
  153.     lcd_wdat('a');
  154.     lcd_wdat('n');
  155.     lcd_wdat('Z');
  156.     lcd_wdat('u');

  157.         lcd_wdat(':');
  158.         lcd_wcom(0x80+0x4e);
  159.     lcd_wdat(' ');
  160.     lcd_wdat('K');
  161. }


  162. void lcd_xianshi2()            
  163. {
  164.     lcd_wcom(0x80+0x40);
  165.     lcd_wdat('D');
  166.     lcd_wdat('i');
  167.     lcd_wdat('a');
  168.     lcd_wdat('n');
  169.     lcd_wdat('R');
  170.     lcd_wdat('o');
  171.     lcd_wdat('n');
  172.     lcd_wdat('g');

  173.     lcd_wdat(':');
  174.     lcd_wcom(0x80+0x4e);
  175.     lcd_wdat('p');
  176.     lcd_wdat('F');
  177. }



  178. void xuanze()
  179. {
  180.         lcd_wcom(0x80+0x00);  //Please choose
  181.    
  182.     lcd_wdat(' ');
  183.     lcd_wdat('P');
  184.     lcd_wdat('l');
  185.     lcd_wdat('e');
  186.     lcd_wdat('a');
  187.     lcd_wdat('s');
  188.     lcd_wdat('e');
  189.     lcd_wdat(' ');

  190.         lcd_wdat('c');
  191.         lcd_wdat('h');
  192.         lcd_wdat('o');
  193.         lcd_wdat('o');
  194.         lcd_wdat('s');
  195.         lcd_wdat('e');
  196.         lcd_wdat(':');

  197.         lcd_wcom(0x80+0x40);   //Cap or Res
  198.                
  199.         lcd_wdat(' ');
  200.         lcd_wdat(' ');
  201.         lcd_wdat(' ');

  202.         lcd_wdat('C');
  203.         lcd_wdat('a');
  204.         lcd_wdat('p');
  205.         lcd_wdat(' ');

  206.         lcd_wdat('o');
  207.         lcd_wdat('r');
  208.         lcd_wdat(' ');

  209.         lcd_wdat('R');
  210.         lcd_wdat('e');
  211.         lcd_wdat('s');
  212. }


  213. void huanying()
  214. {
  215.         lcd_wcom(0x80+0x00);  //Welcome to use
  216.     lcd_wdat(' ');
  217.     lcd_wdat('W');
  218.     lcd_wdat('e');
  219.     lcd_wdat('l');
  220.     lcd_wdat('c');
  221.     lcd_wdat('o');
  222.     lcd_wdat('m');
  223.     lcd_wdat('e');
  224.     lcd_wdat(' ');

  225.         lcd_wdat('t');
  226.         lcd_wdat('o');
  227.         lcd_wdat(' ');

  228.         lcd_wdat('u');
  229.         lcd_wdat('s');
  230.         lcd_wdat('e');
  231. }

  232. void measure(void)
  233. {       
  234.         IE=0x8a;  
  235.         EA=1;
  236.         ET1=1;
  237.         ET0=1;
  238.         TMOD=0x51;
  239.         TH0=H_0;
  240.         TL0=L_0;
  241.         TH1=0;
  242.         TL1=0;

  243.         TR0=1;
  244. //        while(fw==1);                                          //測得引腳P3^5為高電平
  245.     TR1=1;                                                          //timer1 開始計數
  246. //  while(fw==0);                                        //測得引腳P3^5為低電平
  247. //  TR1=0;
  248.                                                                 //timer1 停止計數
  249. //  DL=TL1;                                                        //讀當前計數值
  250. //  DH=TH1;
  251. ///        freq=DPTR;
  252. //        TH1=100;
  253. //        TL1=100;
  254. //  uu=DH*256+DPL+inte*65536;                        //計算總計數值  
  255. //  inte=0;                                                        //清累計溢出計數
  256. //  tt=uu/(12*1000000.0/12.0);                //求振蕩周期
  257. //  ff=(unsigned long int)(1.0/tt);         //頻率值       求震蕩頻率
  258. }

  259. void yunsuan (void)
  260. {
  261.         float tt=0;  
  262. //        DPH=11;
  263. //        DPL=12;
  264.         uu=DH*256+DL+inte*65536;                        //計算總計數值  
  265.         inte=0;                                                        //清累計溢出計數
  266.         tt=uu/(12*1000000.0/12.0);                //求振蕩周期
  267.         ff=(unsigned long int)(1.0/tt);         //頻率值       求震蕩頻率                       
  268. }
  269. void judgekey1()
  270. {   
  271.     long int R=0;


  272. //  R=(dat*1000)/(255-dat);
  273.         R=10*dat-130;
  274.         display(R);
  275.         LED=~LED;
  276. }

  277. void judgekey2()
  278. {   
  279.     long int C=0;
  280.         if(scd==0)
  281.         {                  
  282. //      C=3193333.0/freq;
  283.                 C=((9.4*ff)-200)*0.8;
  284.                 display1(C);
  285.                 LED=~LED;            
  286.         }
  287.         else if (scg==0)
  288.         {  
  289. //                C=3193333.0/ff;
  290.                 C=(9.4*ff)-200;
  291.                 display1(C);
  292.                 LED=~LED;
  293.         }                
  294. }
  295.                
  296.                  

  297. void display(uint x)
  298. {
  299.     uchar qian,bai1,shi1,ge1;
  300.     qian=x/1000;
  301.     bai1=(x%1000/100);
  302.     shi1=(x%100/10);
  303.     ge1=x%10;
  304. //  lcd_wcom(0x80+0x0b);
  305.         lcd_wcom(0x80+0x49);
  306.         if(qian==0)
  307.         {lcd_wdat(' ');}
  308.         else if(qian!=0)
  309.         {lcd_wdat(table[qian]);}
  310.     lcd_wdat(table[bai1]);
  311.     lcd_wdat(table[shi1]);
  312.     lcd_wdat(table[ge1]);
  313. }
  314. void display1(uint y)
  315. {
  316.         uchar qian0,bai0,shi0,ge0;
  317.         qian0=y/1000;
  318.     bai0=(y%1000/100);
  319.     shi0=(y%100/10);
  320.     ge0=y%10;
  321.         lcd_wcom(0x80+0x49);
  322.         if(qian0==0)
  323.         {lcd_wdat(' ');}
  324.         else if(qian0!=0)
  325.         {lcd_wdat(table[qian0]);}
  326.     lcd_wdat(table[bai0]);
  327.     lcd_wdat(table[shi0]);
  328.     lcd_wdat(table[ge0]);
  329. }

  330. void main(void)
  331. {       
  332. //  fw=1;
  333.         LED=0;
  334.     CH = 0x00;       //在這里選擇通道 0x00或0x01
  335.         lcd_init();
  336.         measure();
  337.         sr=sc=1;   
  338.         while(1)
  339.     {
  340.         if(sr==0)
  341.         {
  342.         lcd_init();
  343.         while(sr==0)
  344.        {  
  345.                  huanying();
  346. //             fr=1;
  347. //       fc=0;
  348. //                 TR0=1;
  349. //       TR1=1;
  350. //                  measure();
  351. //                 status_F=0;
  352. //                 measure();
  353. //                 while(status_F==0);
  354.                  lcd_xianshi1();
  355. //                 TR1=1;                            
  356. //                 yunsuan();
  357.                  dat=adc0832(CH);
  358. //            dat=123;
  359. //                 display(dat);
  360.                  judgekey1();
  361. //           display();
  362.         }
  363.         }


  364.         else if(sc==0)
  365.         {
  366.         lcd_init();
  367.     while(sc==0)
  368. ……………………

  369. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
基于單片機的電阻電容測量 程序 仿真.rar (119 KB, 下載次數: 284)


評分

參與人數 2黑幣 +51 收起 理由
z207965750 + 1 很給力!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:340538 發表于 2018-5-29 13:40 | 只看該作者
學習一下
回復

使用道具 舉報

板凳
ID:162514 發表于 2018-5-29 14:38 | 只看該作者
試一試,看看行不行!
回復

使用道具 舉報

地板
ID:368485 發表于 2018-7-10 10:27 | 只看該作者
aing123 發表于 2018-5-29 14:38
試一試,看看行不行!

可以用嗎
回復

使用道具 舉報

5#
ID:482193 發表于 2019-4-8 16:37 | 只看該作者
51做的產品符合工業級嗎?
回復

使用道具 舉報

6#
ID:500108 發表于 2019-4-8 16:50 | 只看該作者
學習,謝謝分享。。。。。。。。。。。。。。。。。
回復

使用道具 舉報

7#
ID:469694 發表于 2019-5-7 19:49 | 只看該作者

不可以
回復

使用道具 舉報

8#
ID:531496 發表于 2019-5-9 17:57 | 只看該作者
給力。。。。。
回復

使用道具 舉報

9#
ID:532147 發表于 2019-5-10 04:08 來自手機 | 只看該作者
新手 上路 回去試試
回復

使用道具 舉報

10#
ID:597549 發表于 2019-8-8 16:55 | 只看該作者
學習一下
回復

使用道具 舉報

11#
ID:611931 發表于 2019-9-17 10:59 | 只看該作者
有基于51單片機的電容測量儀的整個資料嗎?我覺得你這個還是很好的 但是我只想要電容的 而且要詳細的 感謝
回復

使用道具 舉報

12#
ID:138119 發表于 2019-9-17 13:40 | 只看該作者
挺好的,加油!
回復

使用道具 舉報

13#
ID:624946 發表于 2019-10-16 11:38 | 只看該作者
學習一下  
回復

使用道具 舉報

14#
ID:498463 發表于 2019-11-17 16:41 | 只看該作者
下載下來了,卻不知道怎么用,程序跟圖對不上
回復

使用道具 舉報

15#
ID:695764 發表于 2020-5-10 12:17 | 只看該作者
程序里面有條解釋是:啟用ADC0832,但仿真里面為什么沒有這個軟件
回復

使用道具 舉報

16#
ID:729886 發表于 2020-5-10 16:13 | 只看該作者
想裝一臺不知道測量阻值精度如何
回復

使用道具 舉報

17#
ID:639106 發表于 2020-5-10 16:59 | 只看該作者
真牛。頂一個
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产人久久人人人人爽 | 国产一区二区三区在线视频 | 国产乱码精品一区二区三区忘忧草 | 久久这里只有精品首页 | 懂色av一区二区三区在线播放 | 午夜视频网站 | 91精品在线播放 | 免费视频久久久久 | 精品欧美一区免费观看α√ | 日韩欧美国产电影 | 红桃视频一区二区三区免费 | 在线精品国产 | 一区中文字幕 | 91精品国产综合久久久久久丝袜 | 中文字幕一区在线观看视频 | 一级毛片大全免费播放 | 久久久久久国产 | 999精品视频 | 亚洲午夜网 | 在线观看亚洲专区 | 久久久高清 | 人人干人人干人人 | 亚洲成人久久久 | 国产极品91 | 免费人成在线观看网站 | 国产一区亚洲 | 日韩欧美视频 | 91中文在线观看 | 一区中文字幕 | 国产伦精品一区二区三区在线 | 亚洲女人天堂网 | 91精品国产91久久久久久密臀 | 国产目拍亚洲精品99久久精品 | 日韩精品一区二区三区在线观看 | 91性高湖久久久久久久久_久久99 | 国产在线视频三区 | 亚洲第一免费播放区 | 91高清在线观看 | 久久久免费电影 | 中文在线日韩 | 中文字幕一区二区在线观看 |