谁能告诉我,基于51单片机的频率计

2019-07-16 04:03发布

我从网上下载的设计的频率计,但是我不知道频率是怎么存储的,因为我想用单片机判断某一个频率,应该怎么写程序啊



   #include <REG51.h>
#include <1602_Drive.h>

/******************************************************************
* 定义接口:               *
* 液晶显示器的接口“1602_Drive.h”库函数中已经定义     *
* 定义待测方波频率的接口:           *
* P3^5(T0口)做时钟输入接口;           *
******************************************************************/
//==================================================================
//用测量脉冲次数的方法时定义的定时1s的参数
#define THCLK 0x3c
#define TLCLK 0xd2
#define CntNum 20
//==================================================================
//定义中间变量
unsigned int Cnt;
unsigned int tmp;
unsigned char outcnt[8];
sbit p=P1^0;
//==================================================================
//将测量的整数装换为标准有效的字符串
void NumToChar(void)   
{ unsigned char i;
outcnt[0]=tmp/10000+48;tmp%=10000;
outcnt[1]=tmp/1000+48;tmp%=1000;
outcnt[2]=tmp/100+48;tmp%=100;
outcnt[3]=tmp/10+48;tmp%=10;
outcnt[4]=tmp+48;
outcnt[5]='H';
outcnt[6]='z';
outcnt[7]='';
for(i=0;i<4;i++)    //将字符中数字的最高有效位之前的'0'清空为‘ ’。
{ if(outcnt[i]=='0')outcnt[i]=' ';   
  else break;
}
}
//==================================================================
//静态显示文本
void Static_LCD_Print()   
{ GotoXY(0,0);
Print("Freq is:");
GotoXY(0,1);
Print("DigitalCymometer");
}
//==================================================================
//动态显示数据
void Dynamic_LCD_Print()   
{ NumToChar();
GotoXY(9,0);
Print(outcnt);
}
//==================================================================
/******************************************************************
*用定时计数器T0做脉冲计数器(下跳沿有效),开始与暂停由T1控制   *
*定时计数器T1做定时中断,定时1s,定时开启置T0开始计数,定时完毕置 *
*T0为暂停,关闭T1,读取计数数据并清空计数器,将计数数据装换为有效 *
*规范的字符串显示后再开启T0和T1,进入下一轮测量       *
******************************************************************/
void Initial_C51()
{ TH0=TL0=0;
TH1=THCLK;
TL1=TLCLK;
TR0=0;
TMOD=0x15;
IE=0x88;
TR1=0;
Cnt=CntNum;
}
void timer1() interrupt 3    //定时50ms
{ TL1=TLCLK;
TH1=THCLK;
if(--Cnt==0)
{
TR0=0;
TR1=0;
Cnt=CntNum;
tmp=TH0*256+TL0;
TH0=TL0=0;
Dynamic_LCD_Print();
TR0=1;
TR1=1;
}
}
void main(void)
{
Initial_C51();
LCD_Initial();
Static_LCD_Print();
TR0=1;
TR1=1;
do{    //空循环用于执行其他任务  
}while(1);
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。