#include <REGX52.H>
#include "lcd.h"
unsigned long Tsum;
long double Psum,Fresult,Fage;
unsigned char testcnt,i;
double temp[3];
testinit()
{
TMOD=0X15;
EX1=1;
IT1=1;
ET1=1;
TR0=0;
TR1=0;
EA=1;
}
void int1() interrupt 2
{
if(testcnt)
{
TR0=0;
TR1=0;
Tsum=(TH1<<8)|TH0; //过了一个循环后余下的时间
Tsum=Tsum+65536*testcnt; //时间总长
Psum=(double)(TH0<<8)+(double)TL0; //脉冲数的总和
Fresult=Psum/Tsum*1000000.00; //频率计算结果
temp[i++]=Fresult; //把结果放进数组里
Fresult=0;
if(i>2) //有3个采样数值就进行取平均值计算
{
for(i=0;i<3;i++)
{Fresult=Fresult+temp[i];}
Fage=Fresult/3.0;
i=0;
}
}
testcnt=0;
TH1=0;
TL1=0;
TH0=0;
TL0=0;
TR1=1;
TR0=1;
EX1=0;
}
void t1() interrupt 3 //定时中断1 每65536个机器周期相应一次
{
testcnt++;
EX1=1;
}
main()
{
LCD_Initial();
GotoXY(0,0);
Print("The frequecy is");
GotoXY(0,1);
Print("000000.00HZ");
testinit();
while(1)
{
GotoXY(0,1);
LCD_Write(LCD_DATA,(long)Fage/100000+0x30);
GotoXY(1,1);
LCD_Write(LCD_DATA,(long)Fage/10000%10+0x30);
GotoXY(2,1);
LCD_Write(LCD_DATA,(long)Fage/1000%10+0x30);
GotoXY(3,1);
LCD_Write(LCD_DATA,(long)Fage/100%10+0x30);
GotoXY(4,1);
LCD_Write(LCD_DATA,(long)Fage/10%10+0x30);
GotoXY(5,1);
LCD_Write(LCD_DATA,(long)Fage%10+0x30);
GotoXY(7,1);
LCD_Write(LCD_DATA,(long)(Fage*10)%10+0x30);
GotoXY(8,1);
LCD_Write(LCD_DATA,(long)(Fage*100)%10+0x30);
}
}
- 1
- 2
前往页