找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機(jī)測NE555N發(fā)送方波的頻率和周期(即頻率計(jì))

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:233456 發(fā)表于 2017-10-18 20:57 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
本人從51hei論壇找了很久,沒有找到有合適正確的測頻率和周期的程序,特此編寫一份,以供大家學(xué)習(xí),也希望大家有搞懂的程序,不論難易,都發(fā)出來一起學(xué)習(xí)。

所有資料51hei提供下載:
頻率計(jì).zip (58.53 KB, 下載次數(shù): 125)

單片機(jī)源程序如下:
  1. /***********************************************
  2. **注意:頻率測出的單位為Hz,周期單位為us
  3. **初始狀態(tài)為頻率,按下K2進(jìn)入周期,按下K1進(jìn)入頻率
  4. **********************************************/
  5. #include <STC15F2K60S2.H>
  6. #include <intrins.h>
  7. #include "anjian.h"

  8. sbit a=P2^5;
  9. sbit b=P2^6;
  10. sbit c=P2^7;
  11. sbit beep=P0^6;
  12. sbit K1=P3^0;
  13. sbit K2=P3^1;

  14. unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x90,0xbf,0xff};
  15. unsigned int disp[8]={10,10,10,10,10,10,10,10};
  16. unsigned char key_scan();
  17. extern unsigned char key_value;
  18. unsigned int zhuoqi=0;
  19. unsigned int pl1=0;
  20. unsigned char over_flag=0;
  21. unsigned int f,t;


  22. void Timer0init();
  23. void Timer1init();
  24. void Delay300us();
  25. void Delay100ms();
  26. void zhouqidisplay();
  27. void Pldisplay();
  28. void Display();
  29. void zongdisp();
  30.         
  31. void Bee()
  32. {
  33.   a=1;b=0;c=1;
  34.      beep=0;
  35. }

  36. void main()
  37. {
  38.     Bee();
  39.         Delay300us();
  40.         Timer0init();
  41.   Timer1init();
  42.                  EA=1;
  43.            TR0=1;
  44.            TR1=1;
  45.    while(1)
  46.          {        
  47.                  if(over_flag)
  48.                                 {
  49.                                   ET0=1;
  50.                             TR0=1;
  51.                             TR1=1;
  52.                            over_flag=0;
  53.                             f=pl1*10;//每1us,f加10
  54.                             pl1=0;
  55.                                 }
  56.                                 Pldisplay();
  57.                         Display();
  58.                         P2=(P2&0x1f)|0xe0;
  59.       P0=0xff;
  60.                         P2=(P2&0x1f)|0xc0;
  61.       P0=0xff;
  62.                 if(K2==0)
  63.                         Delay100ms();
  64.                 if(K2==0)
  65.                 {               
  66.                         while(1)
  67.                         {
  68.                         t=1000000/f;
  69.                         zhouqidisplay();
  70.                         Display();
  71.                         P2=(P2&0x1f)|0xe0;
  72.       P0=0xff;
  73.                         P2=(P2&0x1f)|0xc0;
  74.       P0=0xff;
  75.                                 if(K1==0)
  76.                                         Delay100ms();
  77.                                 if(K1==0)
  78.                                         break;
  79.                         }
  80.                 }
  81.          }
  82. }

  83. void Timer0init()//計(jì)數(shù)器(16位自動重裝初始值)
  84. {
  85.     AUXR = 0x80;
  86.           TMOD=0x04;
  87.            TL0=0xff;
  88.            TH0=0xff;//1us
  89.            ET0=1;
  90.            TR0=1;
  91. }

  92. void Timer1init()//50ms
  93. {
  94.      AUXR &= 0xBF;                //定時(shí)器時(shí)鐘12T模式
  95.                         TMOD &= 0x0F;                //設(shè)置定時(shí)器模式
  96.                         TL1 = 0x00;                //設(shè)置定時(shí)初值
  97.                         TH1 = 0x4C;                //設(shè)置定時(shí)初值
  98.                         TF1 = 0;                //清除TF1標(biāo)志
  99.                         TR1 = 0;                //定時(shí)器1開始計(jì)時(shí)
  100.                         ET1 = 1;    //打開定時(shí)器1中斷
  101. }

  102. void Timer0_init() interrupt 1
  103. {
  104.       pl1++;
  105. }
  106. bit t1=0;
  107. void Timer1_init() interrupt 3
  108. {
  109.      if(t1==0)     
  110.         t1=1;
  111.              else
  112.                          {
  113.                                  t1=0;
  114.               ET0=0;
  115.                     TR0=0;
  116.                     TR1=0;
  117.                                  //每100ms重新關(guān)閉開啟定時(shí)器0更新數(shù)據(jù)
  118.                    over_flag=1;
  119.      }
  120. }
  121. void Display()
  122. {
  123.     unsigned char i;
  124.    for(i=0;i<8;i++)
  125.           {
  126.                         P2=(P2&0x1f)|0xe0;
  127.       P0=0xff;
  128.       P2&=0x1f;
  129.       _nop_();
  130.       P2=(P2&0x1f)|0xc0;
  131.       P0=0x01<<i;
  132.       P2&=0x1f;
  133.                         _nop_();
  134.                         P2=(P2&0x1f)|0xe0;
  135.       P0=disp[i];
  136.       P2&=0x1f;
  137.                         P0=0Xff;
  138.                         Delay300us();
  139.                 }
  140. }
  141. void Delay300us()
  142. {
  143.      unsigned char i,j;
  144.              _nop_();
  145.        _nop_();        
  146.           i=4;
  147.           j=54;
  148.           do
  149.                 {
  150.                    while(--j);
  151.                 } while(--i);
  152. }
  153. void Delay100ms()                //@11.0592MHz
  154. {
  155.         unsigned char i, j, k;

  156.         _nop_();
  157.         _nop_();
  158.         i = 5;
  159.         j = 52;
  160.         k = 195;
  161.         do
  162.         {
  163.                 do
  164.                 {
  165.                         while (--k);
  166.                 } while (--j);
  167.         } while (--i);
  168. }

  169. ……………………

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




評分

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

查看全部評分

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

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表