代码
以下是主要算法的代码:if(KEY0) //按键按下
{
while(KEY0); //等待按键松开
for(i=0;i<50;i++) //循环50次
{
temp = 1;
while(temp!=0) //等待信号为0,即信号进入负半周期
{
temp = Get_Adc1(ADC_Channel_1);//PA1
}
temp = 0;
while(temp<=0) //等待信号大于0,即信号进入正半周期,此时为第一个过零时刻
{
temp = Get_Adc1(ADC_Channel_1);//PA1
}
TIM_Cmd(TIM4,ENABLE); //开启定时器
temp = 1;
while(temp!=0) //等待信号小于0,即信号进入负半周期,此时为第二个过零时刻
{
temp = Get_Adc1(ADC_Channel_1);//PA1
}
cnt = TIM4->CNT; //读取定时器的值
TIM_Cmd(TIM4, DISABLE); //关闭定时器
TIM4->CNT = 0; //计数器清零
fre[i] = 500000/((cnt*0.125f)+(TIME*7500)); //频率换算
TIME = 0;
}
//信号求平均,去最大、最小值
for(i=0;i<50;i++)
for(k=0;k<50-i;k++)
{
if(fre[k]>fre[k+1])
{
temp2 = fre[k];
fre[k] = fre[k+1];
fre[k+1] = temp2;
}
}
for(i=21;i<=30;i++)
{
FRE += fre[i];
}
//打印频率
printf("%f\r\n",FRE/10);
FRE = 0;
}
|
———————————————— 版权声明:本文为CSDN博主「方恪」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/m0_56041246/article/details/119151173