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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

帶origin校正的精確度很高的頻率計仿真及源程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:137190 發(fā)表于 2016-9-9 00:23 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
帶origin校正的頻率計的仿真原理圖:



下面是數(shù)字頻率計的誤差分析:


誤差數(shù)據(jù):


高精度頻率計源程序:
  1. #include<reg52.h>
  2. #include<intrins.h>

  3. sbit RS=P2^6;
  4. sbit RW=P2^5;
  5. sbit E=P2^7;
  6. #define LCD_data  P0                                       
  7. uchar   code  table1[10]={"f=      Hz"};

  8. 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};
  9. 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,};

  10. uchar a6,a5,a4,a3,a2,a1;
  11. uchar flag;
  12. unsigned long cnt;
  13. uchar f_cnt;


  14. /********************************/

  15. void delay_us(); //18us
  16. void delay_ms(uint);
  17. void lcd_init();
  18. void lcd_write_com(uchar com);
  19. void lcd_write_dat(uchar dat);
  20. void lcd_init();
  21. void lcd_display(uchar add,uchar dat);
  22. /***********************************/

  23. void delay_us()
  24. {
  25.         uchar x;
  26.         for(x=0;x<5;x++);
  27. }

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

  84.         lcd_write_com(add);
  85.         
  86.         lcd_write_dat(dat);
  87.         delay_us();

  88. }
  89. void real_display(void)
  90. {
  91.         lcd_display(0x80,table1[0]);
  92.                         lcd_display(0x80+1,table1[1]);
  93.                         if(a6)
  94.                           lcd_display(0x80+2,0x30+a6);
  95.                         else
  96.                         lcd_display(0x80+2,' ');


  97.                         if(a6||a5)
  98.                         lcd_display(0x80+3,0x30+a5);
  99.                         else
  100.                                  lcd_display(0x80+3,' ');


  101.                         if(a6||a5||a4)
  102.                         lcd_display(0x80+4,0x30+a4);        
  103.                         else
  104.                    lcd_display(0x80+4,' ');


  105.                         if(a6||a5||a4||a3)
  106.                         lcd_display(0x80+5,0x30+a3);        
  107.                         else
  108.                     lcd_display(0x80+5,' ');


  109.                         if(a6||a5||a4||a3||a2)
  110.                         lcd_display(0x80+6,0x30+a2);
  111.                         else
  112.                         lcd_display(0x80+6,' ');

  113.                         
  114.                         lcd_display(0x80+7,0x30+a1);
  115.                
  116.                         lcd_display(0x80+8,table1[8]);
  117.                         lcd_display(0x80+9,table1[9]);
  118. }

  119. void correct(void)                        //誤差修正函數(shù)
  120. {
  121.         uchar i,k;
  122.         unsigned long wucha;
  123.         if(cnt<100000)                   //100KHz以內(nèi)的修正
  124.         {
  125.                 if(cnt>980&&cnt<2100)     cnt-=1;
  126.                 if(cnt>=2100&&cnt<3900)   cnt-=2;
  127.                 if(cnt>=3900&&cnt<4800)   cnt-=3;
  128.                 if(cnt>=4800&&cnt<5700)   cnt-=4;
  129.                 if(cnt>=5700&&cnt<8000)   cnt-=5;
  130.                 if(cnt>=8000&&cnt<9100)          cnt-=6;
  131.                 if(cnt>=9100&&cnt<10900)  cnt-=7;
  132.                 if(cnt>=10900&&cnt<11900) cnt-=8;
  133.                 if(cnt>=11900&&cnt<13000) cnt-=9;
  134.                 if(cnt>=13000&&cnt<=100000)
  135.                 {
  136.                         k=cnt/1000;
  137.                         for(i=0;i<88;i++)
  138.                         {
  139.                                 if(k==f_table[i])
  140.                                 {
  141.                                         cnt-=f_correct[i];
  142.                                 }
  143.                         }
  144.                 }
  145.                
  146.                
  147.         }
  148.         if(cnt>100000)         
  149.         {
  150.                 wucha=(cnt/1000)*73065/100000;
  151.                 cnt-=wucha;
  152.         }
  153. }

  154. void main()
  155. {

  156.     timer_init();
  157.         lcd_init();
  158.         while(1)
  159.         {               
  160.                    if(flag==1)
  161.                    {
  162.                         real_display();
  163.                         flag=0;
  164.                         }
  165.                
  166.         
  167.         }
  168.         
  169. }
  170. void timer0() interrupt 1
  171. {
  172.         uchar timer0;
  173.         
  174.         TH0=0x3c;          //50ms
  175.         TL0=0xb0;
  176.         timer0++;
  177.         if(timer0==20)
  178.         {
  179.                 TR1=0;          //關(guān)閉的計數(shù)器
  180.                 EA=0;
  181.                 cnt=TL1+TH1*256+f_cnt*65536;
  182.                 correct();
  183.                 timer0=0;
  184.         
  185.                 a6=cnt%10000000/100000;
  186.                 a5=cnt%100000/10000;
  187.                 a4=cnt%10000/1000;
  188.                 a3=cnt%1000/100;
  189.                 a2=cnt%100/10;
  190.                 a1=cnt%10;  
  191.                 flag=1;
  192.              TH1=0;
  193.                 TL1=0;
  194.                 TH0=0x3c;
  195.              TL0=0xb0;
  196.                 cnt=0;
  197.                 f_cnt=0;
  198.                 EA=1;
  199.                 TR1=1;           //打開計數(shù)器
  200.         
  201.         
  202.         }
  203.         

  204. }        

  205. void int1() interrupt 3
  206. {
  207.          f_cnt++;
  208. }
復(fù)制代碼


下載:
頻率計.zip (878.8 KB, 下載次數(shù): 27)

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

使用道具 舉報

沙發(fā)
ID:150693 發(fā)表于 2017-4-6 11:54 | 只看該作者
謝謝樓主的分享,51黑有你更精彩
回復(fù)

使用道具 舉報

板凳
ID:194701 發(fā)表于 2017-5-1 09:03 | 只看該作者
謝謝樓主的分享
回復(fù)

使用道具 舉報

地板
ID:345426 發(fā)表于 2019-6-15 13:00 | 只看該作者
謝謝樓主的分享
回復(fù)

使用道具 舉報

5#
ID:150257 發(fā)表于 2019-6-15 20:09 | 只看該作者
感謝大佬分享
回復(fù)

使用道具 舉報

6#
ID:573825 發(fā)表于 2019-6-28 01:23 | 只看該作者
謝謝謝謝
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产成人精品久久二区二区91 | www.99热.com| 国产98色在线 | 日韩 | 中国美女撒尿txxxxx视频 | 狠狠综合网 | 91精品国产美女在线观看 | 国产在线一区二区三区 | 国产精品久久久久久久久动漫 | 狠狠撸在线视频 | 中文字幕99 | av日韩精品 | 午夜天堂精品久久久久 | 91久久国产 | 日韩一区二区成人 | 综合国产 | 午夜天堂精品久久久久 | 国产精品欧美一区二区 | a黄毛片 | 日韩三级电影在线看 | av在线黄 | 九九热精品在线视频 | 一区观看 | 午夜视频一区二区 | 嫩呦国产一区二区三区av | 欧美日韩高清免费 | 国产精品久久影院 | 午夜看电影在线观看 | 性福视频在线观看 | 久久精品欧美一区二区三区不卡 | 久久亚洲国产 | 美女福利网站 | 大象一区 | 女同久久 | 精品一区二区三区在线视频 | 久久精品亚洲国产 | 欧美a级成人淫片免费看 | 久久久久国产一区二区三区 | 欧美一区二区三区国产精品 | 午夜影院污 | 黑人久久| 欧美区日韩区 |