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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4311|回復: 5
收起左側

基于51單片機的RLC測量儀Proteus仿真程序

[復制鏈接]
ID:658881 發表于 2019-12-8 15:52 | 顯示全部樓層 |閱讀模式
RLC測量,電容電阻采用555單穩態電路,電感采用三點振蕩式電路,電感誤差較大

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei截圖20191208154747.png 51hei截圖20191208154647.png

單片機源程序如下:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint  unsigned int
  5. sbit RS=P2^6;
  6. sbit RW=P2^5;
  7. sbit E=P2^7;
  8. sbit R=P1^0;
  9. sbit C=P1^1;
  10. sbit L=P1^2;
  11. sbit A1=P1^3;
  12. sbit A0=P1^4;

  13. #define LCD_data  P0                                       
  14. uchar   code  table1[11]={"R=       Ω"};
  15. uchar   code  table2[11]={"C=       pF"};
  16. uchar   code  table3[11]={"L=        H"};

  17. uchar code f_table[88]={13,14,15,16,17,        18,        19,        20,        21,        22,        23,        24,        25,        26,        27,        28,        29,        30,        31,        32,        33,        34,        35,        36,        37,        38,        39,        40,        41,        42,        43,        44,        45,        46,        47,        48,        49,        50,        51,        52,        53,        54,        55,        56,        57,        58,        59,        60,        61,        62,        63,        64,        65,        66,        67,        68,        69,        70,        71,        72,        73,        74,        75,        76,        77,        78,        79,        80,        81,        82,        83,        84,        85,        86,        87,        88,        89,        90,        91,        92,        93,        94,        95,        96,        97,        98,        99,        100};
  18. uchar code f_correct[88]={9,10,        11,        12,        12,        12,        13,        14,        15,        16,        17,        18,        18,        18,        19,        20,        21,        21,        22,        23,        24,        25,        25,        26,        26,        27,        28,        29,        29,        30,        30,        31,        32,        33,        33,        34,        35,        35,        36,        37,        38,        38,        39,        40,        41,        41,        42,        42,        43,        44,        45,        45,        46,        47,        48,        49,        49,        50,        51,        51,        52,        53,        54,        54,        55,        55,        56,        57,        57,        58,        59,        60,        60,        62,        62,        63,        64,        64,        65,        66,        66,        67,        67,        68,        69,        70,        71,        71,};

  19. uchar a7,a6,a5,a4,a3,a2,a1;
  20. uchar flag;
  21. unsigned long cnt,cnt1,count;
  22. uchar f_cnt;


  23. /********************************/

  24. void delay_us(); //18us
  25. void delay_ms(uint);
  26. void lcd_init();
  27. void lcd_write_com(uchar com);
  28. void lcd_write_dat(uchar dat);
  29. void lcd_init();
  30. void lcd_display(uchar add,uchar dat);
  31. /***********************************/

  32. void delay_us()
  33. {
  34.         uchar x;
  35.         for(x=0;x<5;x++);
  36. }

  37. void delay_ms(uint z)
  38. {
  39.         uint x,y;
  40.         for(x=0;x<z;x++)
  41.                 for(y=0;y<123;y++);
  42. }
  43. void lcd_write_com(uchar com)
  44. {
  45.   E=0;
  46.   RS=0;
  47.   RW=0;
  48.   delay_us();
  49.   LCD_data=com;
  50.   E=1;           //高脈沖寫入數據
  51.   delay_us();
  52.   E=0;
  53. }
  54. void lcd_write_dat(uchar dat)
  55. {
  56.   E=0;
  57.   RS=1;
  58.   RW=0;
  59.   delay_us();
  60.   LCD_data=dat;
  61.   E=1;           //高脈沖寫入數據
  62.   delay_us();
  63.   E=0;
  64. }
  65. void lcd_init()                  //lcd初始化
  66. {
  67.         delay_ms(15);
  68.         lcd_write_com(0x38);
  69.         delay_ms(10);
  70.         lcd_write_com(0x0c);
  71.         lcd_write_com(0x06);
  72.         lcd_write_com(0x01);
  73.         delay_ms(2);
  74.        
  75.        
  76. }
  77. void timer_init(void)  //定時器初始化
  78. {
  79.         TMOD=0X51;
  80.         PT0=1;     /*中斷優先*/
  81.         TH0=0x3c;
  82.         TL0=0xb0;
  83.         TH1=0;
  84.         TL1=0;
  85.         ET0=1;
  86.         ET1=1;
  87.         IT0=1;
  88.         EX0=1;
  89.         TR0=1;
  90.         TR1=1;
  91.         EA=1;       
  92. }
  93. void lcd_display(uchar add,uchar dat)           //lcd顯示(地址,數據)
  94. {

  95.         lcd_write_com(add);
  96.        
  97.         lcd_write_dat(dat);
  98.         delay_us();

  99. }
  100. void real_display(void)
  101. {
  102.             if(!R)
  103.                          {
  104. //                         while(!R);
  105.                          A1=A0=0;       
  106.                         lcd_display(0x80,table1[0]);
  107.                         lcd_display(0x80+1,table1[1]);
  108.                         lcd_display(0x80+9,0xf4);
  109.                         //lcd_display(0x80+10,0xf4);
  110.                           }
  111.                         else if(!C)
  112.                         {
  113.                         A0=0;A1=1;
  114.                         lcd_display(0x80,table2[0]);
  115.                         lcd_display(0x80+1,table2[1]);
  116.                         lcd_display(0x80+9,table2[9]);
  117.                         lcd_display(0x80+10,table2[10]);
  118.                         }
  119.                         else if(!L)
  120.                         {
  121.                         A0=1;A1=0;
  122.                         lcd_display(0x80,table3[0]);
  123.                         lcd_display(0x80+1,table3[1]);
  124.                         lcd_display(0x80+9,0xe4);
  125.                         lcd_display(0x80+10,table3[10]);
  126.                         }
  127.                         if(a7)
  128.                           lcd_display(0x80+2,0x30+a7);
  129.                         else
  130.                         lcd_display(0x80+2,' ');

  131.                         if(a7||a6)
  132.                           lcd_display(0x80+3,0x30+a6);
  133.                         else
  134.                         lcd_display(0x80+3,' ');


  135.                         if(a7||a6||a5)
  136.                         lcd_display(0x80+4,0x30+a5);
  137.                         else
  138.                                  lcd_display(0x80+4,' ');


  139.                         if(a7||a6||a5||a4)
  140.                         lcd_display(0x80+5,0x30+a4);       
  141.                         else
  142.                    lcd_display(0x80+5,' ');


  143.                         if(a7||a6||a5||a4||a3)
  144.                         lcd_display(0x80+6,0x30+a3);       
  145.                         else
  146.                     lcd_display(0x80+6,' ');


  147.                         if(a7||a6||a5||a4||a3||a2)
  148.                         lcd_display(0x80+7,0x30+a2);
  149.                         else
  150.                         lcd_display(0x80+7,' ');

  151.                        
  152.                         lcd_display(0x80+8,0x30+a1);
  153.                

  154. }

  155. void correct(void)                        //誤差修正函數
  156. {
  157.         uchar i,k;
  158.         unsigned long wucha;
  159.         if(cnt<100000)                   //100KHz以內的修正
  160.         {
  161.                 if(cnt>980&&cnt<2100)     cnt-=1;
  162.                 if(cnt>=2100&&cnt<3900)   cnt-=2;
  163.                 if(cnt>=3900&&cnt<4800)   cnt-=3;
  164.                 if(cnt>=4800&&cnt<5700)   cnt-=4;
  165.                 if(cnt>=5700&&cnt<8000)   cnt-=5;
  166.                 if(cnt>=8000&&cnt<9100)          cnt-=6;
  167.                 if(cnt>=9100&&cnt<10900)  cnt-=7;
  168.                 if(cnt>=10900&&cnt<11900) cnt-=8;
  169.                 if(cnt>=11900&&cnt<13000) cnt-=9;
  170.                 if(cnt>=13000&&cnt<=100000)
  171.                 {
  172.                         k=cnt/1000;
  173.                         for(i=0;i<88;i++)
  174.                         {
  175.                                 if(k==f_table[i])
  176.                                 {
  177.                                         cnt-=f_correct[i];
  178.                                 }
  179.                         }
  180.                 }
  181.                
  182.                
  183.         }
  184.         if(cnt>100000)         
  185.         {
  186.                 wucha=(cnt/1000)*73065/100000;
  187.                 cnt-=wucha;
  188.         }
  189. }

  190. void main()
  191. {

  192.     timer_init();
  193.         lcd_init();
  194.         while(1)
  195.         {               
  196.                    if(flag==1)
  197.                    {
  198.                         real_display();
  199.                         flag=0;
  200.                         }
  201.                
  202.        
  203.         }
  204.        
  205. }
  206. void timer0() interrupt 1
  207. {
  208.         uchar timer0;
  209.        
  210.         TH0=0x3c;          //50ms
  211.         TL0=0xb0;
  212.         timer0++;
  213.         if(timer0==20)
  214.         {
  215.                 TR1=0;          //關閉的計數器
  216.                 EA=0;
  217.                 //cnt=TL1+TH1+f_cnt*65536;
  218.                 cnt=count;
  219.                 correct();
  220.             //cnt1=(1e+9)/(2*0.693 *cnt)-20000/2;
  221.                 if(!R)
  222.                 {
  223. //                while(!R);
  224.                 cnt1=1000000/(0.2*0.693*cnt)-165;
  225.                 }
  226.                 else if(!C)
  227.                 {
  228.                 cnt1=1000000000/(0.693*3*510*cnt)-10000;
  229.                 }
  230.                 else if(!L)
  231.                 {
  232.                         cnt1=((38*(1e+6))/(cnt*cnt)-75);
  233.                  //cnt1=1000000000/(3.14*3.14*cnt*cnt*0.1);
  234.                 }
  235.                 timer0=0;
  236.                 count=0;
  237.                 a7=cnt1%100000000/1000000;                                                                                         
  238. ……………………

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

所有資料51hei提供下載:
RLC 仿真.zip (118.98 KB, 下載次數: 100)

評分

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

查看全部評分

回復

使用道具 舉報

ID:349647 發表于 2019-12-30 12:40 | 顯示全部樓層
下載附件中并沒有看到圖
回復

使用道具 舉報

ID:329571 發表于 2020-3-9 10:25 | 顯示全部樓層

下載附件中沒有看到圖
回復

使用道具 舉報

ID:705093 發表于 2020-3-9 12:41 | 顯示全部樓層
不錯不錯,我喜歡,謝謝的
回復

使用道具 舉報

ID:727862 發表于 2020-4-27 10:14 | 顯示全部樓層
下載附件中沒有看到圖
回復

使用道具 舉報

ID:635119 發表于 2020-5-14 19:32 | 顯示全部樓層
掛羊肉賣狗頭
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人免费影院 | 男人的天堂久久 | 91免费看片| 亚洲h视频 | 久久久国产精品一区 | 午夜久久久 | 日日摸天天添天天添破 | 国产亚洲一区二区三区在线观看 | 国产精品一区在线观看 | 欧美专区在线 | 毛片免费在线观看 | 亚洲一区免费 | 日韩有码一区 | 国产成人免费视频网站高清观看视频 | 久久99精品久久久久久国产越南 | 国产麻豆一区二区三区 | 亚洲午夜精品 | av在线一区二区 | 国久久 | 久久精品中文字幕 | 男人天堂网站 | 色欧美综合 | 亚洲视频中文字幕 | 色毛片 | 欧美色性 | 免费国产视频在线观看 | 久久夜色精品国产 | 视频在线观看一区 | 国产精品69毛片高清亚洲 | 日韩一区二区三区在线 | 免费黄色av网站 | 久久久久国产精品午夜一区 | 99精品在线观看 | 成人久久久 | 精品久久久久久久久久久久 | 国产午夜精品久久久久免费视高清 | 欧美在线视频一区二区 | 在线观看免费毛片 | 亚洲精品免费视频 | 国产精品高潮呻吟久久aⅴ码 | 一级黄色淫片 |