|
/*********************************************************/
/*主要控制程序,length=(tim+time*1000)*100/58.0;乘100是为了将M转为CM*/
float Senor_Using(void)
float length=0,sum=0;
u16 tim;
unsigned int i=0;
/*测5次数据计算一次平均值*/
while(i!=5)
{
printf("111");
GPIO_SetBits(GPIOC,GPIO_Pin_8);
SysTick_Delay_Us(20); //高电平信号超过10us
GPIO_ResetBits(GPIOC,GPIO_Pin_8);
/*等待回响信号*/
while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_9)==0);
TIM_Cmd(GENERAL_TIM,ENABLE);
//回响信号到来,开启定时器计数
while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_9)==1);
//回响信号消失
TIM_Cmd(GENERAL_TIM,DISABLE);
printf("222");
//关闭定时器
tim=TIM_GetCounter(GENERAL_TIM);
//获取计TIM3数寄存器中的计数值,一边计算回响信号时间
length=(tim+time*1000)*100/58.0;
//通过回响信号计算距离
sum=length+sum;
GENERAL_TIM->CNT=0; //将TIM3计数寄存器的计数值清零
time=0; //中断溢出次数清零
SysTick_Delay_Ms(60);
i+=1; //每收到一次回响信号+1,收到5次就计算均值
}
length=sum/5;
return length;
//距离作为函数返回值
}
/****************************************************************************/
另外对一些不了解的朋友说一下请千万注意定时器的值。
|
-
-
超声波显示.7z
232.63 KB, 下载次数: 129, 下载积分: 黑币 -5
源码
评分
-
查看全部评分
|