软件设计
将分频的输出端OUT接至单片机的频率输入端,程序开始先延时一段时间,待信号稳定。开捕获中断和定时器A,在定时器A 中断中计数N个脉冲,测量结束后得到N个脉冲的时间,然后除N得到脉冲的频率,乘以分频系数得到实际频率并显示,经过短暂延时后重新测量,如此循环测量并显示。
在测量频率时,为保证精度要关掉LED显示,所以,对于频率较低的信号会发生LED闪烁的情况,解决办法是测量较少个脉冲以减少平均测量时间或减少延时。
采用动态扫描显示,动态扫描显示的原理是:由P4向各个位轮流输出扫描信号,使每一位瞬间只有一个数码管被选通,然后由P3向该位输入显示的字型码,驱动该位字形段显示字形。这样,在P3送出的码段和P4送出的位段的配合下,使各个数码管轮流显示各自的字形,每位的显示时间要超过1ms,这样人眼就感觉不到闪烁了。
测量主程序如下:
void frequency_measure(void)
{
float tmp,tmp1;
key_flag=0; //按键标志清0
P1OUT|=BIT0;
Delay(1000); //延时一段时间等待信号稳定
while(1)
{ IE2&=~0X80; //关BT,关LED
firstflag=1; //开始测量第一个脉冲
TACTL|=TAIE; //开捕获
CCTL1|=CCIE; //开timer a
while (f_ok_flag==0);//等待测量结束
f_ok_flag=0;
if (aa1>aa2)
overflow=overflow-1;
tmp=aa2-aa1;
tmp1=40.0/(overflow*0.008191875+(tmp/8000000.0));
result=tmp1*0.256;
IE2|=0X80; //开BT,开LED
yanshi(2,2); //可以修改这里的参数,越大表示延时越长,太小的话LED就会变暗
CCTL1&=~CCIE; //关捕获
TACTL&=~TAIE; //关timer a
return;
}
}
//--------------------------------------------------------------------------
|