專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計實例 >> 瀏覽文章

51單片機(jī)簡易頻率計源代碼

作者:佚名   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2013年10月28日   【字體:
51hei原創(chuàng)文章歡迎轉(zhuǎn)載但是必須保留版權(quán),頻率輸入在定時器1口就行了.
//定時器0 設(shè)置定時時間1秒   定時器1 設(shè)置計數(shù)1秒內(nèi)的脈沖數(shù)量
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uint ff;   //接受頻率值
uchar start=1;   //定時器,計數(shù)模式啟動變量
code uchar seg[]={0x28,0x7e,0xa2,0x62,0x74,0x61,0x21,0x7a,0x20,0x60};
code uchar tab[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
void delay(uint k)  //延時函數(shù)
{
 while(k--);      
}
void show(uint k)  //數(shù)值顯示函數(shù)
{
  static uchar i,j;
  uint ss[5];
  i=0;
  do
  {
   ss[i]=k%10;
   i++;
  }while(k/=10);
  for(j=0;j<i;j++)
  {
   P0=seg[ss[j]];
   P2=tab[j];
   delay(100);
   P0=0xff;
   P2=0xff;
  } 
}

void time0_init()
{
 TMOD|=0x01;  //定時器0 定時模式 計數(shù)范圍65536
 TH0=0x3c;         //定時初值50ms
 TL0=0xb0;
 TR0=0;     //暫停定時器0
}
void time1_init()
{
 TMOD|=0x50;     //定時器1  計數(shù)模式,計數(shù)范圍65536
 TH1=0;      //計數(shù)初值0
 TL1=0;
 TR1=0;    //暫停計數(shù)器
}
void str_init()    //定時器中斷
{
 EA=1;
 ET0=1;
}
void time0_event() interrupt 1
{
  static uchar i;
  i++;
  TH0=0x3c;         //定時初值50ms
  TL0=0xb0;
 if(i==20)
 {
  i=0;
  TR1=0;    //停止計數(shù)
  TR0=0;          //停止定時
  ff=(TH1*256+TL1);   //求出頻率值   就是1秒內(nèi)脈沖次數(shù)
  TH1=0;          //計數(shù)值清零
  TL1=0;
  TH0=0x3c;         //定時初值50ms
  TL0=0xb0;
  start=1;               //啟動定時器開啟變量
 }
}
 
void main()
{
 time0_init();
 time1_init();
 str_init();
 while(1)
 {
  if(start==1)
  {
   TR0=1;  //啟動定時器
   TR1=1;  //啟動計數(shù)器
   start=0;  //關(guān)閉啟動變量位 保證1秒時間
  }
  show(ff);
 }
}
關(guān)閉窗口

相關(guān)文章